diff options
author | Johnathan Corgan | 2011-07-01 11:35:37 -0700 |
---|---|---|
committer | Johnathan Corgan | 2011-07-01 11:35:37 -0700 |
commit | 0a24c0b23396c6adefcc61b2d16658ab2b56974c (patch) | |
tree | 31827489b4fadcbdc32a655482bb75438c29374a /gr-uhd | |
parent | b9d297910b0a04fc567e929cf4d80d0c61a8f885 (diff) | |
parent | 2cdc48643f354589acfcc6bd65f65dd5792ff508 (diff) | |
download | gnuradio-0a24c0b23396c6adefcc61b2d16658ab2b56974c.tar.gz gnuradio-0a24c0b23396c6adefcc61b2d16658ab2b56974c.tar.bz2 gnuradio-0a24c0b23396c6adefcc61b2d16658ab2b56974c.zip |
Merge branch 'master' into next
Diffstat (limited to 'gr-uhd')
-rw-r--r-- | gr-uhd/lib/gr_uhd_usrp_source.cc | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/gr-uhd/lib/gr_uhd_usrp_source.cc b/gr-uhd/lib/gr_uhd_usrp_source.cc index 9983489c3..669f890ea 100644 --- a/gr-uhd/lib/gr_uhd_usrp_source.cc +++ b/gr-uhd/lib/gr_uhd_usrp_source.cc @@ -182,19 +182,37 @@ public: gr_vector_const_void_star &input_items, gr_vector_void_star &output_items ){ - //wait for a packet to become available + //In order to allow for low-latency: + //We receive all available packets without timeout. + //This call can timeout under regular operation... size_t num_samps = _dev->get_device()->recv( output_items, noutput_items, _metadata, - _type, uhd::device::RECV_MODE_ONE_PACKET, 1.0 + _type, uhd::device::RECV_MODE_FULL_BUFF, 0.0 ); + //If receive resulted in a timeout condition: + //We now receive a single packet with a large timeout. + if (_metadata.error_code == uhd::rx_metadata_t::ERROR_CODE_TIMEOUT){ + num_samps = _dev->get_device()->recv( + output_items, noutput_items, _metadata, + _type, uhd::device::RECV_MODE_ONE_PACKET, 1.0 + ); + } + //handle possible errors conditions switch(_metadata.error_code){ case uhd::rx_metadata_t::ERROR_CODE_NONE: + //TODO insert tag for time stamp break; + case uhd::rx_metadata_t::ERROR_CODE_TIMEOUT: + //Assume that the user called stop() on the flow graph. + //However, a timeout can occur under error conditions. + return WORK_DONE; + case uhd::rx_metadata_t::ERROR_CODE_OVERFLOW: //ignore overflows and try work again + //TODO insert tag for overflow return work(noutput_items, input_items, output_items); default: @@ -204,18 +222,6 @@ public: return num_samps; } - //advance the pointers and count by num_samps - noutput_items -= num_samps; - for (size_t i = 0; i < _nchan; i++){ - _tmp_buffs[i] = static_cast<char *>(output_items[i]) + num_samps*_type.size; - } - - //receive all available packets without timeout - num_samps += _dev->get_device()->recv( - _tmp_buffs, noutput_items, _metadata, - _type, uhd::device::RECV_MODE_FULL_BUFF, 0.0 - ); - return num_samps; } |