diff options
| author | Trung Tran <trung.tran@ettus.com> | 2018-01-12 05:31:47 -0800 | 
|---|---|---|
| committer | Martin Braun <martin.braun@ettus.com> | 2018-01-12 16:26:03 -0800 | 
| commit | efc0b22f7ea9b808512cb59a5a52202adf84b6e1 (patch) | |
| tree | ad4a6a58db17e0898bef3165c1b549e1a0b2e836 /host/lib/usrp | |
| parent | 5e265ad175658ab6ac784aa298d0e760d8380b68 (diff) | |
| download | uhd-efc0b22f7ea9b808512cb59a5a52202adf84b6e1.tar.gz uhd-efc0b22f7ea9b808512cb59a5a52202adf84b6e1.tar.bz2 uhd-efc0b22f7ea9b808512cb59a5a52202adf84b6e1.zip | |
mg: add clip function on setting individual gain.
Reviewed-by: Martin Braun <martin.braun@ettus.com>
Diffstat (limited to 'host/lib/usrp')
| -rw-r--r-- | host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_impl.cpp | 27 | 
1 files changed, 19 insertions, 8 deletions
| diff --git a/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_impl.cpp b/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_impl.cpp index eb4894e19..2d61ef1ff 100644 --- a/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_impl.cpp +++ b/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_impl.cpp @@ -10,6 +10,7 @@  #include <uhd/utils/log.hpp>  #include <uhd/rfnoc/node_ctrl_base.hpp>  #include <uhd/transport/chdr.hpp> +#include <uhd/utils/algorithm.hpp>  #include <uhd/utils/math.hpp>  #include <uhd/types/direction.hpp>  #include <uhd/types/eeprom.hpp> @@ -420,12 +421,18 @@ double magnesium_radio_ctrl_impl::_set_tx_gain(      std::lock_guard<std::mutex> l(_set_lock);      UHD_LOG_TRACE(unique_id(),          "_set_tx_gain(name=" << name << ", gain=" << gain << ", chan=" << chan << ")"); +      UHD_LOG_TRACE(unique_id(), +        "_set_tx_gain(name=" << name << ", gain=" << gain << ", chan=" << chan << ")"); +    double clip_gain = 0;      if (name == MAGNESIUM_GAIN1){ -        _ad9371_att[TX_DIRECTION] = gain; +        clip_gain = uhd::clip(gain, AD9371_MIN_TX_GAIN, AD9371_MAX_TX_GAIN); +        _ad9371_att[TX_DIRECTION] = clip_gain;      }else if (name == MAGNESIUM_GAIN2){ -        _dsa_att[TX_DIRECTION] = gain; +        clip_gain = uhd::clip(gain, DSA_MIN_GAIN, DSA_MAX_GAIN); +        _dsa_att[TX_DIRECTION] = clip_gain;      }else if (name == MAGNESIUM_AMP){ -        _amp_bypass[TX_DIRECTION] =  gain == 0.0; +        clip_gain = gain > 0.0 ? AMP_MAX_GAIN: AMP_MIN_GAIN; +        _amp_bypass[TX_DIRECTION] = clip_gain == 0.0;      }else {          throw uhd::value_error("Could not find gain element " + name);      } @@ -437,7 +444,7 @@ double magnesium_radio_ctrl_impl::_set_tx_gain(          chan,          TX_DIRECTION      ); -    return gain; // not really any coreced here for individual gain +    return clip_gain; // not really any coreced here (only clip) for individual gain  }  double magnesium_radio_ctrl_impl::_get_tx_gain( @@ -481,12 +488,16 @@ double magnesium_radio_ctrl_impl::_set_rx_gain(      std::lock_guard<std::mutex> l(_set_lock);      UHD_LOG_TRACE(unique_id(),          "_set_rx_gain(name=" << name << ", gain=" << gain << ", chan=" << chan << ")"); +    double clip_gain = 0;      if (name == MAGNESIUM_GAIN1){ -        _ad9371_att[RX_DIRECTION] = gain; +        clip_gain = uhd::clip(gain, AD9371_MIN_RX_GAIN, AD9371_MAX_RX_GAIN); +        _ad9371_att[RX_DIRECTION] = clip_gain;      }else if (name == MAGNESIUM_GAIN2){ -        _dsa_att[RX_DIRECTION] = gain; +        clip_gain = uhd::clip(gain, DSA_MIN_GAIN, DSA_MAX_GAIN); +        _dsa_att[RX_DIRECTION] = clip_gain;      }else if (name == MAGNESIUM_AMP){ -        _amp_bypass[RX_DIRECTION] = gain == 0.0; +        clip_gain = gain > 0.0 ? AMP_MAX_GAIN: AMP_MIN_GAIN; +        _amp_bypass[RX_DIRECTION] = clip_gain == 0.0;      }else {          throw uhd::value_error("Could not find gain element " + name);      } @@ -498,7 +509,7 @@ double magnesium_radio_ctrl_impl::_set_rx_gain(          chan,          RX_DIRECTION      ); -    return gain; // not really any coreced here for individual gain +    return clip_gain; // not really any coreced here (only clip) for individual gain  }  double magnesium_radio_ctrl_impl::_get_rx_gain( | 
