summaryrefslogtreecommitdiff
path: root/gr-uhd/lib/usrp_block_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-uhd/lib/usrp_block_impl.cc')
-rw-r--r--gr-uhd/lib/usrp_block_impl.cc92
1 files changed, 31 insertions, 61 deletions
diff --git a/gr-uhd/lib/usrp_block_impl.cc b/gr-uhd/lib/usrp_block_impl.cc
index 6586a757b6..973aa96c80 100644
--- a/gr-uhd/lib/usrp_block_impl.cc
+++ b/gr-uhd/lib/usrp_block_impl.cc
@@ -298,8 +298,7 @@ void usrp_block_impl::_set_center_freq_from_internals_allchans()
while (_tx_chans_to_tune.any()) {
// This resets() bits, so this loop should not run indefinitely
chan = _tx_chans_to_tune.find_first();
- _set_center_freq_from_internals(_tx_chans_to_tune.find_first(),
- ant_direction_tx());
+ _set_center_freq_from_internals(chan, ant_direction_tx());
_tx_chans_to_tune.reset(chan);
}
}
@@ -528,16 +527,8 @@ void usrp_block_impl::msg_handler_command(pmt::pmt_t msg)
pmt::from_long(-1) // Default to all chans
)));
- /// 3) See if a direction was specified
- pmt::pmt_t direction =
- pmt::dict_ref(msg,
- cmd_direction_key(),
- pmt::PMT_NIL // Anything except "TX" or "RX will default to the
- // messaged block direction"
- );
- // if the a direction symbol was provided, force a tune
- _force_tune = pmt::is_symbol(direction);
-
+ /// 3) If a direction key was specified, force the block to tune - see issue #1814
+ _force_tune = pmt::dict_has_key(msg, cmd_direction_key());
/// 4) Loop through all the values
GR_LOG_DEBUG(d_debug_logger, boost::format("Processing command message %s") % msg);
@@ -618,13 +609,8 @@ void usrp_block_impl::_cmd_handler_freq(const pmt::pmt_t& freq_,
int chan,
const pmt::pmt_t& msg)
{
- // See if a direction was specified
- pmt::pmt_t direction =
- pmt::dict_ref(msg,
- cmd_direction_key(),
- pmt::PMT_NIL // Anything except "TX" or "RX will default to the
- // messaged block direction"
- );
+ // Get the direction key
+ const pmt::pmt_t direction = get_cmd_or_default_direction(msg);
double freq = pmt::to_double(freq_);
::uhd::tune_request_t new_tune_request(freq);
@@ -641,13 +627,8 @@ void usrp_block_impl::_cmd_handler_looffset(const pmt::pmt_t& lo_offset,
int chan,
const pmt::pmt_t& msg)
{
- // See if a direction was specified
- pmt::pmt_t direction =
- pmt::dict_ref(msg,
- cmd_direction_key(),
- pmt::PMT_NIL // Anything except "TX" or "RX" will default to the
- // messaged block direction
- );
+ // Get the direction key
+ const pmt::pmt_t direction = get_cmd_or_default_direction(msg);
if (pmt::dict_has_key(msg, cmd_freq_key())) {
// Then it's already taken care of
@@ -673,13 +654,8 @@ void usrp_block_impl::_cmd_handler_gain(const pmt::pmt_t& gain_,
int chan,
const pmt::pmt_t& msg)
{
- // See if a direction was specified
- pmt::pmt_t direction =
- pmt::dict_ref(msg,
- cmd_direction_key(),
- pmt::PMT_NIL // Anything except "TX" or "RX will default to the
- // messaged block direction"
- );
+ // Get the direction key
+ const pmt::pmt_t direction = get_cmd_or_default_direction(msg);
double gain = pmt::to_double(gain_);
if (chan == -1) {
@@ -780,13 +756,8 @@ void usrp_block_impl::_cmd_handler_tune(const pmt::pmt_t& tune,
int chan,
const pmt::pmt_t& msg)
{
- // See if a direction was specified
- pmt::pmt_t direction =
- pmt::dict_ref(msg,
- cmd_direction_key(),
- pmt::PMT_NIL // Anything except "TX" or "RX" will default to the
- // messaged block direction
- );
+ // Get the direction key
+ const pmt::pmt_t direction = get_cmd_or_default_direction(msg);
double freq = pmt::to_double(pmt::car(tune));
double lo_offset = pmt::to_double(pmt::cdr(tune));
@@ -798,13 +769,8 @@ void usrp_block_impl::_cmd_handler_mtune(const pmt::pmt_t& tune,
int chan,
const pmt::pmt_t& msg)
{
- // See if a direction was specified
- pmt::pmt_t direction =
- pmt::dict_ref(msg,
- cmd_direction_key(),
- pmt::PMT_NIL // Anything except "TX" or "RX" will default to the
- // messaged block direction
- );
+ // Get the direction key
+ const pmt::pmt_t direction = get_cmd_or_default_direction(msg);
::uhd::tune_request_t new_tune_request;
if (pmt::dict_has_key(tune, pmt::mp("dsp_freq"))) {
@@ -868,13 +834,8 @@ void usrp_block_impl::_cmd_handler_lofreq(const pmt::pmt_t& lofreq,
int chan,
const pmt::pmt_t& msg)
{
- // See if a direction was specified
- pmt::pmt_t direction =
- pmt::dict_ref(msg,
- cmd_direction_key(),
- pmt::PMT_NIL // Anything except "TX" or "RX will default to the
- // messaged block direction"
- );
+ // Get the direction key
+ const pmt::pmt_t direction = get_cmd_or_default_direction(msg);
if (chan == -1) {
for (size_t i = 0; i < _nchan; i++) {
@@ -905,13 +866,8 @@ void usrp_block_impl::_cmd_handler_dspfreq(const pmt::pmt_t& dspfreq,
int chan,
const pmt::pmt_t& msg)
{
- // See if a direction was specified
- pmt::pmt_t direction =
- pmt::dict_ref(msg,
- cmd_direction_key(),
- pmt::PMT_NIL // Anything except "TX" or "RX will default to the
- // messaged block direction"
- );
+ // Get the direction key
+ const pmt::pmt_t direction = get_cmd_or_default_direction(msg);
if (pmt::dict_has_key(msg, cmd_lo_freq_key())) {
// Then it's already dealt with
@@ -938,3 +894,17 @@ void usrp_block_impl::_cmd_handler_dspfreq(const pmt::pmt_t& dspfreq,
_update_curr_tune_req(new_tune_request, chan, direction);
}
+
+const pmt::pmt_t
+usrp_block_impl::get_cmd_or_default_direction(const pmt::pmt_t& cmd) const
+{
+ const pmt::pmt_t dir = pmt::dict_ref(cmd, cmd_direction_key(), pmt::PMT_NIL);
+
+ // if the direction key exists and is either "TX" or "RX", return that
+ if (pmt::is_symbol(dir) &&
+ (pmt::eqv(dir, ant_direction_rx()) || pmt::eqv(dir, ant_direction_tx()))) {
+ return dir;
+ }
+ // otherwise return the direction key for the block that received the cmd
+ return _direction();
+}