aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/usrp2/usrp2_iface.cpp
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-07-19 10:57:39 -0700
committerJosh Blum <josh@joshknows.com>2010-07-19 10:57:39 -0700
commitef9a395414acc203cc02e551e1790277cd0ef1f9 (patch)
tree1a6cc02ca18cb30bf1f4f253f3550743d7d43ea9 /host/lib/usrp/usrp2/usrp2_iface.cpp
parent8a7a824848f0a6276c0dc209bbd3ceeeb1eb7bd5 (diff)
downloaduhd-ef9a395414acc203cc02e551e1790277cd0ef1f9.tar.gz
uhd-ef9a395414acc203cc02e551e1790277cd0ef1f9.tar.bz2
uhd-ef9a395414acc203cc02e551e1790277cd0ef1f9.zip
usrp2: add a timeout to udp control and make it large for usrp2 control transactions
Diffstat (limited to 'host/lib/usrp/usrp2/usrp2_iface.cpp')
-rw-r--r--host/lib/usrp/usrp2/usrp2_iface.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/host/lib/usrp/usrp2/usrp2_iface.cpp b/host/lib/usrp/usrp2/usrp2_iface.cpp
index eaaa722ac..a21157d76 100644
--- a/host/lib/usrp/usrp2/usrp2_iface.cpp
+++ b/host/lib/usrp/usrp2/usrp2_iface.cpp
@@ -28,6 +28,18 @@
using namespace uhd;
using namespace uhd::transport;
+/*!
+ * FIXME: large timeout, ethernet pause frames...
+ *
+ * Use a large timeout to work-around the fact that
+ * flow-control may throttle outgoing control packets
+ * due to its use of ethernet pause frames.
+ *
+ * This will be fixed when host-based flow control is implemented,
+ * along with larger incoming send buffers using the on-board SRAM.
+ */
+static const size_t CONTROL_TIMEOUT_MS = 3000; //3 seconds
+
class usrp2_iface_impl : public usrp2_iface{
public:
/***********************************************************************
@@ -164,7 +176,7 @@ public:
boost::uint8_t usrp2_ctrl_data_in_mem[udp_simple::mtu]; //allocate max bytes for recv
const usrp2_ctrl_data_t *ctrl_data_in = reinterpret_cast<const usrp2_ctrl_data_t *>(usrp2_ctrl_data_in_mem);
while(true){
- size_t len = _ctrl_transport->recv(boost::asio::buffer(usrp2_ctrl_data_in_mem));
+ size_t len = _ctrl_transport->recv(boost::asio::buffer(usrp2_ctrl_data_in_mem), CONTROL_TIMEOUT_MS);
if(len >= sizeof(boost::uint32_t) and ntohl(ctrl_data_in->proto_ver) != USRP2_PROTO_VERSION){
throw std::runtime_error(str(
boost::format("Expected protocol version %d, but got %d\n"