diff options
| author | Lane Kolbly <lane.kolbly@ni.com> | 2021-12-08 14:12:28 -0600 | 
|---|---|---|
| committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2022-01-20 08:52:42 -0600 | 
| commit | 4e391500b54a22dbaae8692750ec25ae8a97ee6d (patch) | |
| tree | 12907aaefb68f0d4825a8c9cb9ee2be9825d2542 /host/lib/usrp | |
| parent | 72e9ba55d6b144d456a644cb47f40522022d4fb6 (diff) | |
| download | uhd-4e391500b54a22dbaae8692750ec25ae8a97ee6d.tar.gz uhd-4e391500b54a22dbaae8692750ec25ae8a97ee6d.tar.bz2 uhd-4e391500b54a22dbaae8692750ec25ae8a97ee6d.zip  | |
host: Implement nameless_gain_mixin
Diffstat (limited to 'host/lib/usrp')
| -rw-r--r-- | host/lib/usrp/dboard/zbx/zbx_dboard.cpp | 88 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/zbx/zbx_dboard_init.cpp | 4 | 
2 files changed, 25 insertions, 67 deletions
diff --git a/host/lib/usrp/dboard/zbx/zbx_dboard.cpp b/host/lib/usrp/dboard/zbx/zbx_dboard.cpp index 2a01425b6..9efb7ec20 100644 --- a/host/lib/usrp/dboard/zbx/zbx_dboard.cpp +++ b/host/lib/usrp/dboard/zbx/zbx_dboard.cpp @@ -31,7 +31,22 @@ zbx_dboard_impl::zbx_dboard_impl(register_iface& reg_iface,      uhd::usrp::zbx_rpc_iface::sptr rpcc,      uhd::rfnoc::x400::rfdc_control::sptr rfdcc,      uhd::property_tree::sptr tree) -    : _unique_id(unique_id) +    : nameless_gain_mixin([this](const uhd::direction_t trx, size_t chan) { +        const auto gain_profile = trx == TX_DIRECTION ? +            _tx_gain_profile_api->get_gain_profile(chan) : +            _rx_gain_profile_api->get_gain_profile(chan); +        if (gain_profile == ZBX_GAIN_PROFILE_MANUAL) { +            const std::string err_msg = "When using 'manual' gain mode, a gain name is required!"; +            RFNOC_LOG_ERROR(err_msg); +            throw uhd::runtime_error(err_msg); +        } +        if (gain_profile == ZBX_GAIN_PROFILE_CPLD +            || gain_profile == ZBX_GAIN_PROFILE_CPLD_NOATR) { +            return ZBX_GAIN_STAGE_TABLE; +        } +        return ZBX_GAIN_STAGE_ALL; +    }) +    , _unique_id(unique_id)      , _regs(reg_iface)      , _reg_base_address(reg_base_address)      , _time_accessor(time_accessor) @@ -263,66 +278,6 @@ double zbx_dboard_impl::set_rx_gain(      return _tree->access<double>(gains_path / name / "value").set(gain).get();  } -double zbx_dboard_impl::set_tx_gain(const double gain, const size_t chan) -{ -    const auto gain_profile = _tx_gain_profile_api->get_gain_profile(chan); -    if (gain_profile == ZBX_GAIN_PROFILE_MANUAL) { -        const std::string err_msg = "When using 'manual' gain mode, calling " -                                    "set_tx_gain() without a gain name is not allowed!"; -        RFNOC_LOG_ERROR(err_msg); -        throw uhd::runtime_error(err_msg); -    } -    if (gain_profile == ZBX_GAIN_PROFILE_CPLD -        || gain_profile == ZBX_GAIN_PROFILE_CPLD_NOATR) { -        return set_tx_gain(gain, ZBX_GAIN_STAGE_TABLE, chan); -    } -    return set_tx_gain(gain, ZBX_GAIN_STAGE_ALL, chan); -} - -double zbx_dboard_impl::set_rx_gain(const double gain, const size_t chan) -{ -    const auto gain_profile = _rx_gain_profile_api->get_gain_profile(chan); -    if (gain_profile == ZBX_GAIN_PROFILE_MANUAL) { -        const std::string err_msg = "When using 'manual' gain mode, calling " -                                    "set_rx_gain() without a gain name is not allowed!"; -        RFNOC_LOG_ERROR(err_msg); -        throw uhd::runtime_error(err_msg); -    } -    if (gain_profile == ZBX_GAIN_PROFILE_CPLD -        || gain_profile == ZBX_GAIN_PROFILE_CPLD_NOATR) { -        return set_rx_gain(gain, ZBX_GAIN_STAGE_TABLE, chan); -    } -    return set_rx_gain(gain, ZBX_GAIN_STAGE_ALL, chan); -} - -double zbx_dboard_impl::get_tx_gain(const size_t chan) -{ -    const auto gain_profile = _tx_gain_profile_api->get_gain_profile(chan); -    if (gain_profile == ZBX_GAIN_PROFILE_CPLD -        || gain_profile == ZBX_GAIN_PROFILE_CPLD_NOATR) { -        return get_tx_gain(ZBX_GAIN_STAGE_TABLE, chan); -    } -    if (gain_profile == ZBX_GAIN_PROFILE_DEFAULT) { -        return get_tx_gain(ZBX_GAIN_STAGE_ALL, chan); -    } -    throw uhd::runtime_error( -        "get_tx_gain(): When in 'manual' gain profile, a gain name is required!"); -} - -double zbx_dboard_impl::get_rx_gain(const size_t chan) -{ -    const auto gain_profile = _rx_gain_profile_api->get_gain_profile(chan); -    if (gain_profile == ZBX_GAIN_PROFILE_CPLD -        || gain_profile == ZBX_GAIN_PROFILE_CPLD_NOATR) { -        return get_rx_gain(ZBX_GAIN_STAGE_TABLE, chan); -    } -    if (gain_profile == ZBX_GAIN_PROFILE_DEFAULT) { -        return get_rx_gain(ZBX_GAIN_STAGE_ALL, chan); -    } -    throw uhd::runtime_error( -        "get_rx_gain(): When in 'manual' gain profile, a gain name is required!"); -} -  double zbx_dboard_impl::get_tx_gain(const std::string& name_, const size_t chan)  {      // We have to accept the empty string for "all", because that's widely used @@ -608,7 +563,7 @@ void zbx_dboard_impl::set_rx_agc(const bool, const size_t)  }  uhd::gain_range_t zbx_dboard_impl::get_tx_gain_range( -    const std::string& name, const size_t chan) const +    const std::string& name, const size_t) const  {      // We have to accept the empty string for "all", because that's widely used      // (e.g. by multi_usrp) @@ -616,11 +571,11 @@ uhd::gain_range_t zbx_dboard_impl::get_tx_gain_range(          throw uhd::value_error(              std::string("get_tx_gain_range(): Unknown gain name '") + name + "'!");      } -    return get_tx_gain_range(chan); +    return ZBX_TX_GAIN_RANGE;  }  uhd::gain_range_t zbx_dboard_impl::get_rx_gain_range( -    const std::string& name, const size_t chan) const +    const std::string& name, const size_t) const  {      // We have to accept the empty string for "all", because that's widely used      // (e.g. by multi_usrp) @@ -628,7 +583,10 @@ uhd::gain_range_t zbx_dboard_impl::get_rx_gain_range(          throw uhd::value_error(              std::string("get_rx_gain_range(): Unknown gain name '") + name + "'!");      } -    return get_rx_gain_range(chan); + +    // FIXME This should return a ZBX_RX_LOW_FREQ_GAIN_RANGE when freq is +    // low, but this function is const +    return ZBX_RX_GAIN_RANGE;  }  void zbx_dboard_impl::set_rx_lo_export_enabled(bool, const std::string&, const size_t) diff --git a/host/lib/usrp/dboard/zbx/zbx_dboard_init.cpp b/host/lib/usrp/dboard/zbx/zbx_dboard_init.cpp index f0558f8a4..6871080ff 100644 --- a/host/lib/usrp/dboard/zbx/zbx_dboard_init.cpp +++ b/host/lib/usrp/dboard/zbx/zbx_dboard_init.cpp @@ -245,8 +245,8 @@ uhd::usrp::pwr_cal_mgr::sptr zbx_dboard_impl::_init_power_cal(                                             : get_rx_gain(ZBX_GAIN_STAGE_ALL, chan_idx);              },              [this, trx, chan_idx](const double gain) { -                trx == TX_DIRECTION ? set_tx_gain(gain, chan_idx) -                                    : set_rx_gain(gain, chan_idx); +                trx == TX_DIRECTION ? this->set_tx_gain(gain, chan_idx) +                                    : this->set_rx_gain(gain, chan_idx);              }},          10 /* High priority */);      /* If we had a digital (baseband) gain, we would register it here,*/  | 
