summaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/usrp2
diff options
context:
space:
mode:
authorBen Hilburn <ben.hilburn@ettus.com>2014-02-04 11:04:07 -0800
committerBen Hilburn <ben.hilburn@ettus.com>2014-02-04 11:04:07 -0800
commit178ac3f1c9950d383c8f64b3df464c0f943c4a23 (patch)
tree318ed621a7b59b7d34d4ce6e4a92f73f0bcef509 /host/lib/usrp/usrp2
parent2718ac110fa931cc29daf7cb3dc5ab6230ee02ab (diff)
downloaduhd-178ac3f1c9950d383c8f64b3df464c0f943c4a23.tar.gz
uhd-178ac3f1c9950d383c8f64b3df464c0f943c4a23.tar.bz2
uhd-178ac3f1c9950d383c8f64b3df464c0f943c4a23.zip
Merging USRP X300 and X310 support!!
Diffstat (limited to 'host/lib/usrp/usrp2')
-rw-r--r--host/lib/usrp/usrp2/usrp2_iface.cpp32
-rw-r--r--host/lib/usrp/usrp2/usrp2_impl.cpp25
-rw-r--r--host/lib/usrp/usrp2/usrp2_impl.hpp6
3 files changed, 24 insertions, 39 deletions
diff --git a/host/lib/usrp/usrp2/usrp2_iface.cpp b/host/lib/usrp/usrp2/usrp2_iface.cpp
index 5f97045e1..7297a30d1 100644
--- a/host/lib/usrp/usrp2/usrp2_iface.cpp
+++ b/host/lib/usrp/usrp2/usrp2_iface.cpp
@@ -36,6 +36,7 @@
#include <boost/filesystem.hpp>
#include <algorithm>
#include <iostream>
+#include <uhd/utils/platform.hpp>
using namespace uhd;
using namespace uhd::usrp;
@@ -62,33 +63,6 @@ static const boost::uint32_t MIN_PROTO_COMPAT_I2C = 7;
static const boost::uint32_t MIN_PROTO_COMPAT_REG = 10;
static const boost::uint32_t MIN_PROTO_COMPAT_UART = 7;
-//Define get_gpid() to get a globally unique identifier for this process.
-//The gpid is implemented as a hash of the pid and a unique machine identifier.
-#ifdef UHD_PLATFORM_WIN32
-#include <Windows.h>
-static inline size_t get_gpid(void){
- //extract volume serial number
- char szVolName[MAX_PATH+1], szFileSysName[MAX_PATH+1];
- DWORD dwSerialNumber, dwMaxComponentLen, dwFileSysFlags;
- GetVolumeInformation("C:\\", szVolName, MAX_PATH,
- &dwSerialNumber, &dwMaxComponentLen,
- &dwFileSysFlags, szFileSysName, sizeof(szFileSysName));
-
- size_t hash = 0;
- boost::hash_combine(hash, GetCurrentProcessId());
- boost::hash_combine(hash, dwSerialNumber);
- return hash;
-}
-#else
-#include <unistd.h>
-static inline size_t get_gpid(void){
- size_t hash = 0;
- boost::hash_combine(hash, getpid());
- boost::hash_combine(hash, gethostid());
- return hash;
-}
-#endif
-
class usrp2_iface_impl : public usrp2_iface{
public:
/***********************************************************************
@@ -122,7 +96,7 @@ public:
void lock_device(bool lock){
if (lock){
- this->pokefw(U2_FW_REG_LOCK_GPID, boost::uint32_t(get_gpid()));
+ this->pokefw(U2_FW_REG_LOCK_GPID, get_process_hash());
_lock_task = task::make(boost::bind(&usrp2_iface_impl::lock_task, this));
}
else{
@@ -147,7 +121,7 @@ public:
if (time_diff >= lock_timeout_time) return false;
//otherwise only lock if the device hash is different that ours
- return lock_gpid != boost::uint32_t(get_gpid());
+ return lock_gpid != get_process_hash();
}
void lock_task(void){
diff --git a/host/lib/usrp/usrp2/usrp2_impl.cpp b/host/lib/usrp/usrp2/usrp2_impl.cpp
index 3afb3aac7..16d9b9a54 100644
--- a/host/lib/usrp/usrp2/usrp2_impl.cpp
+++ b/host/lib/usrp/usrp2/usrp2_impl.cpp
@@ -41,6 +41,9 @@ using namespace uhd::usrp;
using namespace uhd::transport;
namespace asio = boost::asio;
+//A reasonable number of frames for send/recv and async/sync
+static const size_t DEFAULT_NUM_FRAMES = 32;
+
/***********************************************************************
* Discovery over the udp transport
**********************************************************************/
@@ -49,13 +52,16 @@ static device_addrs_t usrp2_find(const device_addr_t &hint_){
device_addrs_t hints = separate_device_addr(hint_);
if (hints.size() > 1){
device_addrs_t found_devices;
+ std::string error_msg;
BOOST_FOREACH(const device_addr_t &hint_i, hints){
device_addrs_t found_devices_i = usrp2_find(hint_i);
- if (found_devices_i.size() != 1) throw uhd::value_error(str(boost::format(
+ if (found_devices_i.size() != 1) error_msg += str(boost::format(
"Could not resolve device hint \"%s\" to a single device."
- ) % hint_i.to_string()));
- found_devices.push_back(found_devices_i[0]);
+ ) % hint_i.to_string());
+ else found_devices.push_back(found_devices_i[0]);
}
+ if (found_devices.empty()) return device_addrs_t();
+ if (not error_msg.empty()) throw uhd::value_error(error_msg);
return device_addrs_t(1, combine_device_addrs(found_devices));
}
@@ -68,6 +74,10 @@ static device_addrs_t usrp2_find(const device_addr_t &hint_){
//return an empty list of addresses when type is set to non-usrp2
if (hint.has_key("type") and hint["type"] != "usrp2") return usrp2_addrs;
+ //Return an empty list of addresses when a resource is specified,
+ //since a resource is intended for a different, non-USB, device.
+ if (hint.has_key("resource")) return usrp2_addrs;
+
//if no address was specified, send a broadcast on each interface
if (not hint.has_key("addr")){
BOOST_FOREACH(const if_addrs_t &if_addrs, get_if_addrs()){
@@ -278,8 +288,15 @@ static zero_copy_if::sptr make_xport(
filtered_hints[key] = hints[key];
}
+ zero_copy_xport_params default_buff_args;
+ default_buff_args.send_frame_size = transport::udp_simple::mtu;
+ default_buff_args.recv_frame_size = transport::udp_simple::mtu;
+ default_buff_args.num_send_frames = DEFAULT_NUM_FRAMES;
+ default_buff_args.num_recv_frames = DEFAULT_NUM_FRAMES;
+
//make the transport object with the filtered hints
- zero_copy_if::sptr xport = udp_zero_copy::make(addr, port, filtered_hints);
+ udp_zero_copy::buff_params ignored_params;
+ zero_copy_if::sptr xport = udp_zero_copy::make(addr, port, default_buff_args, ignored_params, filtered_hints);
//Send a small data packet so the usrp2 knows the udp source port.
//This setup must happen before further initialization occurs
diff --git a/host/lib/usrp/usrp2/usrp2_impl.hpp b/host/lib/usrp/usrp2/usrp2_impl.hpp
index f9988287f..d7b53e56b 100644
--- a/host/lib/usrp/usrp2/usrp2_impl.hpp
+++ b/host/lib/usrp/usrp2/usrp2_impl.hpp
@@ -79,7 +79,6 @@ public:
bool recv_async_msg(uhd::async_metadata_t &, double);
private:
- uhd::property_tree::sptr _tree;
struct mb_container_type{
usrp2_iface::sptr iface;
usrp2_fifo_ctrl::sptr fifo_ctrl;
@@ -115,11 +114,6 @@ private:
void set_rx_fe_corrections(const std::string &mb, const double);
void set_tx_fe_corrections(const std::string &mb, const double);
- //device properties interface
- uhd::property_tree::sptr get_tree(void) const{
- return _tree;
- }
-
//io impl methods and members
UHD_PIMPL_DECL(io_impl) _io_impl;
void io_init(void);