aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/b200/b200_impl.cpp
diff options
context:
space:
mode:
authorVidush <vidush.vishwanath@ettus.com>2018-07-03 08:59:05 -0700
committerMartin Braun <martin.braun@ettus.com>2018-07-12 15:47:51 -0700
commitd6f1ff717d702a0a2f7351e61a048c1c2d1ab779 (patch)
treef9313d8c139206a5758870cd6cd086b5bf4bc609 /host/lib/usrp/b200/b200_impl.cpp
parent9df9bea6c1812fdc03ef8ace29859f0c64d382d2 (diff)
downloaduhd-d6f1ff717d702a0a2f7351e61a048c1c2d1ab779.tar.gz
uhd-d6f1ff717d702a0a2f7351e61a048c1c2d1ab779.tar.bz2
uhd-d6f1ff717d702a0a2f7351e61a048c1c2d1ab779.zip
B200: Change Recv Frame Size to 8176
The default frame size is set to 8176. If a frame size entered is a multiple of 512, the actual frame size is set to the next lowest multiple of 24. Both changes are made to ensure no packet gets stuck in the fx3.
Diffstat (limited to 'host/lib/usrp/b200/b200_impl.cpp')
-rw-r--r--host/lib/usrp/b200/b200_impl.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/host/lib/usrp/b200/b200_impl.cpp b/host/lib/usrp/b200/b200_impl.cpp
index 82f9fbff0..e435afaad 100644
--- a/host/lib/usrp/b200/b200_impl.cpp
+++ b/host/lib/usrp/b200/b200_impl.cpp
@@ -518,9 +518,24 @@ b200_impl::b200_impl(const uhd::device_addr_t& device_addr, usb_device_handle::s
// before being cleared.
////////////////////////////////////////////////////////////////////
device_addr_t data_xport_args;
- data_xport_args["recv_frame_size"] = device_addr.get("recv_frame_size", "8192");
+ int recv_frame_size = device_addr.cast<int>(
+ "recv_frame_size",
+ B200_USB_DATA_DEFAULT_FRAME_SIZE
+ );
+ // If the recv_frame_size is divisible by 512, set it to the next lowest
+ // number that is divisible by 24. This is done to avoid bugs in the fx3
+ // when a packet of length divisible by 512 is sent.
+ if (recv_frame_size % 512 == 0) {
+ recv_frame_size = (recv_frame_size - 16) / 24;
+ recv_frame_size *= 24;
+ UHD_LOGGER_WARNING("B200")
+ << "Multiples of 512 not supported for recv_frame_size. "
+ << "Requested recv_frame_size of " << device_addr["recv_frame_size"]
+ << " reduced to " << recv_frame_size << ".";
+ }
+ data_xport_args["recv_frame_size"] = std::to_string(recv_frame_size);
data_xport_args["num_recv_frames"] = device_addr.get("num_recv_frames", "16");
- data_xport_args["send_frame_size"] = device_addr.get("send_frame_size", "8192");
+ data_xport_args["send_frame_size"] = device_addr.get("send_frame_size", std::to_string(B200_USB_DATA_DEFAULT_FRAME_SIZE));
data_xport_args["num_send_frames"] = device_addr.get("num_send_frames", "16");
// This may throw a uhd::usb_error, which will be caught by b200_make().