summaryrefslogtreecommitdiff
path: root/gr-uhd/lib/usrp_source_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-uhd/lib/usrp_source_impl.cc')
-rw-r--r--gr-uhd/lib/usrp_source_impl.cc91
1 files changed, 14 insertions, 77 deletions
diff --git a/gr-uhd/lib/usrp_source_impl.cc b/gr-uhd/lib/usrp_source_impl.cc
index 23b94c684f..52e67baccf 100644
--- a/gr-uhd/lib/usrp_source_impl.cc
+++ b/gr-uhd/lib/usrp_source_impl.cc
@@ -35,26 +35,6 @@ namespace gr {
usrp_source::sptr
usrp_source::make(const ::uhd::device_addr_t &device_addr,
- const ::uhd::io_type_t &io_type,
- size_t num_channels)
- {
- //fill in the streamer args
- ::uhd::stream_args_t stream_args;
- switch(io_type.tid) {
- case ::uhd::io_type_t::COMPLEX_FLOAT32: stream_args.cpu_format = "fc32"; break;
- case ::uhd::io_type_t::COMPLEX_INT16: stream_args.cpu_format = "sc16"; break;
- default: throw std::runtime_error("only complex float and shorts known to work");
- }
-
- stream_args.otw_format = "sc16"; //only sc16 known to work
- for(size_t chan = 0; chan < num_channels; chan++)
- stream_args.channels.push_back(chan); //linear mapping
-
- return usrp_source::make(device_addr, stream_args);
- }
-
- usrp_source::sptr
- usrp_source::make(const ::uhd::device_addr_t &device_addr,
const ::uhd::stream_args_t &stream_args,
const bool issue_stream_cmd_on_start)
{
@@ -66,9 +46,9 @@ namespace gr {
usrp_source_impl::usrp_source_impl(const ::uhd::device_addr_t &device_addr,
const ::uhd::stream_args_t &stream_args,
const bool issue_stream_cmd_on_start):
- usrp_block("gr uhd usrp source",
- io_signature::make(0, 0, 0),
- args_to_io_sig(stream_args)),
+ usrp_block("usrp_source",
+ io_signature::make(0, 0, 0),
+ args_to_io_sig(stream_args)),
usrp_block_impl(device_addr, stream_args, ""),
_recv_timeout(0.1), // seconds
_tag_now(false),
@@ -79,9 +59,7 @@ namespace gr {
_id = pmt::string_to_symbol(str.str());
_samp_rate = this->get_samp_rate();
-#ifdef GR_UHD_USE_STREAM_API
_samps_per_packet = 1;
-#endif
register_msg_cmd_handler(CMD_TAG_KEY, boost::bind(&usrp_source_impl::_cmd_handler_tag, this, _1));
}
@@ -93,11 +71,7 @@ namespace gr {
usrp_source_impl::get_usrp_info(size_t chan)
{
chan = _stream_args.channels[chan];
-#ifdef UHD_USRP_MULTI_USRP_GET_USRP_INFO_API
return _dev->get_usrp_rx_info(chan);
-#else
- throw std::runtime_error("not implemented in this version");
-#endif
}
void
@@ -132,11 +106,7 @@ namespace gr {
::uhd::meta_range_t
usrp_source_impl::get_samp_rates(void)
{
-#ifdef UHD_USRP_MULTI_USRP_GET_RATES_API
return _dev->get_rx_rates(_stream_args.channels[0]);
-#else
- throw std::runtime_error("not implemented in this version");
-#endif
}
::uhd::tune_result_t
@@ -389,11 +359,7 @@ namespace gr {
usrp_source_impl::set_auto_dc_offset(const bool enable, size_t chan)
{
chan = _stream_args.channels[chan];
-#ifdef UHD_USRP_MULTI_USRP_FRONTEND_CAL_API
return _dev->set_rx_dc_offset(enable, chan);
-#else
- throw std::runtime_error("not implemented in this version");
-#endif
}
void
@@ -401,11 +367,7 @@ namespace gr {
size_t chan)
{
chan = _stream_args.channels[chan];
-#ifdef UHD_USRP_MULTI_USRP_FRONTEND_CAL_API
return _dev->set_rx_dc_offset(offset, chan);
-#else
- throw std::runtime_error("not implemented in this version");
-#endif
}
void
@@ -425,11 +387,7 @@ namespace gr {
size_t chan)
{
chan = _stream_args.channels[chan];
-#ifdef UHD_USRP_MULTI_USRP_FRONTEND_CAL_API
return _dev->set_rx_iq_balance(correction, chan);
-#else
- throw std::runtime_error("not implemented in this version");
-#endif
}
::uhd::sensor_value_t
@@ -457,12 +415,9 @@ namespace gr {
usrp_source_impl::set_stream_args(const ::uhd::stream_args_t &stream_args)
{
_update_stream_args(stream_args);
-#ifdef GR_UHD_USE_STREAM_API
- if(_rx_stream)
+ if (_rx_stream) {
_rx_stream.reset();
-#else
- throw std::runtime_error("not implemented in this version");
-#endif
+ }
}
void
@@ -482,10 +437,15 @@ namespace gr {
void
usrp_source_impl::issue_stream_cmd(const ::uhd::stream_cmd_t &cmd)
{
+// This is a new define in UHD 3.6 which is used to separate 3.6 and pre 3.6
+#ifdef INCLUDED_UHD_UTILS_MSG_TASK_HPP
+ _rx_stream->issue_stream_cmd(cmd);
+#else
for (size_t i = 0; i < _stream_args.channels.size(); i++)
{
_dev->issue_stream_cmd(cmd, _stream_args.channels[i]);
}
+#endif
_tag_now = true;
}
@@ -493,12 +453,10 @@ namespace gr {
usrp_source_impl::start(void)
{
boost::recursive_mutex::scoped_lock lock(d_mutex);
-#ifdef GR_UHD_USE_STREAM_API
- if(not _rx_stream){
+ if (not _rx_stream) {
_rx_stream = _dev->get_rx_stream(_stream_args);
_samps_per_packet = _rx_stream->get_max_num_samps();
}
-#endif
if(_issue_stream_cmd_on_start){
//setup a stream command that starts streaming slightly in the future
static const double reasonable_delay = 0.1; //order of magnitude over RTT
@@ -527,19 +485,13 @@ namespace gr {
outputs.push_back(&buffs[i].front());
}
while(true) {
-#ifdef GR_UHD_USE_STREAM_API
const size_t bpi = ::uhd::convert::get_bytes_per_item(_stream_args.cpu_format);
if(_rx_stream)
// get the remaining samples out of the buffers
_rx_stream->recv(outputs, nbytes/bpi, _metadata, 0.0);
else
// no rx streamer -- nothing to flush
- break;
-#else
- _dev->get_device()->recv
- (outputs, nbytes/_type->size, _metadata, *_type,
- ::uhd::device::RECV_MODE_FULL_BUFF, 0.0);
-#endif
+ break;
if(_metadata.error_code == ::uhd::rx_metadata_t::ERROR_CODE_TIMEOUT)
break;
}
@@ -566,7 +518,6 @@ namespace gr {
std::vector<std::vector<std::complex<float> > >
usrp_source_impl::finite_acquisition_v(const size_t nsamps)
{
-#ifdef GR_UHD_USE_STREAM_API
//kludgy way to ensure rx streamer exsists
if(!_rx_stream) {
this->start();
@@ -604,9 +555,6 @@ namespace gr {
}
return samps;
-#else
- throw std::runtime_error("not implemented in this version");
-#endif
}
int
@@ -616,7 +564,6 @@ namespace gr {
{
boost::recursive_mutex::scoped_lock lock(d_mutex);
boost::this_thread::disable_interruption disable_interrupt;
-#ifdef GR_UHD_USE_STREAM_API
//In order to allow for low-latency:
//We receive all available packets without timeout.
//This call can timeout under regular operation...
@@ -627,19 +574,9 @@ namespace gr {
_recv_timeout,
true /* one packet -> minimize latency */
);
-#else
- size_t num_samps = _dev->get_device()->recv
- (output_items, noutput_items, _metadata,
- *_type, ::uhd::device::RECV_MODE_FULL_BUFF, 0.0);
-
- 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);
- }
-#endif
boost::this_thread::restore_interruption restore_interrupt(disable_interrupt);
- // handle possible errors conditions
+
+ //handle possible errors conditions
switch(_metadata.error_code) {
case ::uhd::rx_metadata_t::ERROR_CODE_NONE:
if(_tag_now) {