summaryrefslogtreecommitdiff
path: root/gr-uhd/lib/gr_uhd_usrp_source.cc
diff options
context:
space:
mode:
authorTom Rondeau2011-09-26 23:23:14 -0400
committerTom Rondeau2011-09-26 23:23:14 -0400
commit4fec8eba2eb3d362319c8e09bf370edaa10cd1b9 (patch)
treee41ff025b20b5c4ad8928fa0651a06dca884dc6f /gr-uhd/lib/gr_uhd_usrp_source.cc
parent79e7183bda0e3850c79dee7f086a8676311607fa (diff)
parente3b56bfd879f16c2fa1f284f330ed3df6a211ec1 (diff)
downloadgnuradio-4fec8eba2eb3d362319c8e09bf370edaa10cd1b9.tar.gz
gnuradio-4fec8eba2eb3d362319c8e09bf370edaa10cd1b9.tar.bz2
gnuradio-4fec8eba2eb3d362319c8e09bf370edaa10cd1b9.zip
Merge branch 'next' into digital
Conflicts: gnuradio-core/src/lib/general/general.i gnuradio-core/src/lib/general/gr_pll_carriertracking_cc.cc gnuradio-core/src/lib/general/gr_pll_freqdet_cf.cc gnuradio-core/src/lib/general/gr_pll_refout_cc.cc gnuradio-core/src/python/gnuradio/gr/qa_pll_carriertracking.py gnuradio-core/src/python/gnuradio/gr/qa_pll_freqdet.py gnuradio-core/src/python/gnuradio/gr/qa_pll_refout.py gr-digital/lib/digital_constellation_receiver_cb.cc gr-digital/python/Makefile.am gr-digital/python/__init__.py gr-digital/python/generic_mod_demod.py gr-digital/python/pkt.py gr-digital/python/psk2.py gr-digital/python/qam.py
Diffstat (limited to 'gr-uhd/lib/gr_uhd_usrp_source.cc')
-rw-r--r--gr-uhd/lib/gr_uhd_usrp_source.cc27
1 files changed, 22 insertions, 5 deletions
diff --git a/gr-uhd/lib/gr_uhd_usrp_source.cc b/gr-uhd/lib/gr_uhd_usrp_source.cc
index 669f890ea..62da83d96 100644
--- a/gr-uhd/lib/gr_uhd_usrp_source.cc
+++ b/gr-uhd/lib/gr_uhd_usrp_source.cc
@@ -25,6 +25,8 @@
#include <iostream>
#include <boost/format.hpp>
+static const pmt::pmt_t TIME_KEY = pmt::pmt_string_to_symbol("rx_time");
+
/***********************************************************************
* UHD Multi USRP Source Impl
**********************************************************************/
@@ -43,8 +45,11 @@ public:
_type(io_type),
_nchan(num_channels),
_stream_now(_nchan == 1),
- _tmp_buffs(_nchan)
+ _tag_now(false)
{
+ std::stringstream str;
+ str << name() << unique_id();
+ _id = pmt::pmt_string_to_symbol(str.str());
_dev = uhd::usrp::multi_usrp::make(device_addr);
}
@@ -202,7 +207,18 @@ public:
//handle possible errors conditions
switch(_metadata.error_code){
case uhd::rx_metadata_t::ERROR_CODE_NONE:
- //TODO insert tag for time stamp
+ if (_tag_now){
+ _tag_now = false;
+ //create a timestamp pmt for the first sample
+ const pmt::pmt_t val = pmt::pmt_make_tuple(
+ pmt::pmt_from_uint64(_metadata.time_spec.get_full_secs()),
+ pmt::pmt_from_double(_metadata.time_spec.get_frac_secs())
+ );
+ //create a timestamp tag for each channel
+ for (size_t i = 0; i < _nchan; i++){
+ this->add_item_tag(i, nitems_written(0), TIME_KEY, val, _id);
+ }
+ }
break;
case uhd::rx_metadata_t::ERROR_CODE_TIMEOUT:
@@ -211,8 +227,8 @@ public:
return WORK_DONE;
case uhd::rx_metadata_t::ERROR_CODE_OVERFLOW:
+ _tag_now = true;
//ignore overflows and try work again
- //TODO insert tag for overflow
return work(noutput_items, input_items, output_items);
default:
@@ -232,6 +248,7 @@ public:
stream_cmd.stream_now = _stream_now;
stream_cmd.time_spec = get_time_now() + uhd::time_spec_t(reasonable_delay);
_dev->issue_stream_cmd(stream_cmd);
+ _tag_now = true;
return true;
}
@@ -244,9 +261,9 @@ private:
uhd::usrp::multi_usrp::sptr _dev;
const uhd::io_type_t _type;
size_t _nchan;
- bool _stream_now;
- gr_vector_void_star _tmp_buffs;
+ bool _stream_now, _tag_now;
uhd::rx_metadata_t _metadata;
+ pmt::pmt_t _id;
};