From 96710c8077e5822aff1ec3db890bde781ccb9402 Mon Sep 17 00:00:00 2001 From: Thomas Tsou Date: Thu, 9 Jun 2011 11:50:39 -0700 Subject: [PATCH] uhd: flush receive buffer should return true on timeout Receive buffer flush should continue to read until either the desired number of packets has been read or timeout, which means that the buffer has been emptied. These are expected behaviours and should return true. Ignore errors at this stage as the data and associated metadata can be considered garbage and not worth reporting. Actual error conditions will be caught further downstream when useful data comes in. Signed-off-by: Thomas Tsou --- public-trunk/Transceiver/UHDDevice.cpp | 14 ++++++++++---- public-trunk/Transceiver52M/UHDDevice.cpp | 14 ++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/public-trunk/Transceiver/UHDDevice.cpp b/public-trunk/Transceiver/UHDDevice.cpp index 5e1d29b..d8fa49e 100644 --- a/public-trunk/Transceiver/UHDDevice.cpp +++ b/public-trunk/Transceiver/UHDDevice.cpp @@ -378,7 +378,7 @@ bool uhd_device::open() bool uhd_device::flush_recv(size_t num_pkts) { - uhd::rx_metadata_t metadata; + uhd::rx_metadata_t md; size_t num_smpls; uint32_t buff[rx_spp]; float timeout; @@ -390,13 +390,19 @@ bool uhd_device::flush_recv(size_t num_pkts) num_smpls = usrp_dev->get_device()->recv( buff, rx_spp, - metadata, + md, uhd::io_type_t::COMPLEX_INT16, uhd::device::RECV_MODE_ONE_PACKET, timeout); - if (!num_smpls) - return false; + if (!num_smpls) { + switch (md.error_code) { + case uhd::rx_metadata_t::ERROR_CODE_TIMEOUT: + return true; + default: + continue; + } + } } return true; diff --git a/public-trunk/Transceiver52M/UHDDevice.cpp b/public-trunk/Transceiver52M/UHDDevice.cpp index 3d731a3..88e9814 100644 --- a/public-trunk/Transceiver52M/UHDDevice.cpp +++ b/public-trunk/Transceiver52M/UHDDevice.cpp @@ -378,7 +378,7 @@ bool uhd_device::open() bool uhd_device::flush_recv(size_t num_pkts) { - uhd::rx_metadata_t metadata; + uhd::rx_metadata_t md; size_t num_smpls; uint32_t buff[rx_spp]; float timeout; @@ -390,13 +390,19 @@ bool uhd_device::flush_recv(size_t num_pkts) num_smpls = usrp_dev->get_device()->recv( buff, rx_spp, - metadata, + md, uhd::io_type_t::COMPLEX_INT16, uhd::device::RECV_MODE_ONE_PACKET, timeout); - if (!num_smpls) - return false; + if (!num_smpls) { + switch (md.error_code) { + case uhd::rx_metadata_t::ERROR_CODE_TIMEOUT: + return true; + default: + continue; + } + } } return true;