diff options
| author | Martin Braun <martin.braun@ettus.com> | 2017-11-08 17:34:35 -0800 | 
|---|---|---|
| committer | Martin Braun <martin.braun@ettus.com> | 2017-12-22 15:05:05 -0800 | 
| commit | 34dbd5e60090cf9138ff51988c4460df1888fb2c (patch) | |
| tree | 3357fef4f5e58ba46192289387629fba462483f0 /host/lib/usrp | |
| parent | e88169017333f590ef6980652a8054a41f729568 (diff) | |
| download | uhd-34dbd5e60090cf9138ff51988c4460df1888fb2c.tar.gz uhd-34dbd5e60090cf9138ff51988c4460df1888fb2c.tar.bz2 uhd-34dbd5e60090cf9138ff51988c4460df1888fb2c.zip | |
mg: Enable CAL and LO-CAL "antenna" inputs
For consistency, the LO-CAL antenna name is actually "LOCAL" (without
the dash).
Diffstat (limited to 'host/lib/usrp')
3 files changed, 33 insertions, 15 deletions
| diff --git a/host/lib/usrp/dboard/magnesium/magnesium_constants.hpp b/host/lib/usrp/dboard/magnesium/magnesium_constants.hpp index ec7595d98..886270dc0 100644 --- a/host/lib/usrp/dboard/magnesium/magnesium_constants.hpp +++ b/host/lib/usrp/dboard/magnesium/magnesium_constants.hpp @@ -49,7 +49,7 @@ static const double ALL_TX_MAX_GAIN = 65.0;  static const double ALL_TX_GAIN_STEP = 0.5;  static const double MAGNESIUM_CENTER_FREQ = 2.5e9; // Hz  static const std::vector<std::string> MAGNESIUM_RX_ANTENNAS = { -    "TX/RX", "RX2" +    "TX/RX", "RX2", "CAL", "LOCAL"  };  static const char* MAGNESIUM_DEFAULT_RX_ANTENNA = "RX2";  static const char* MAGNESIUM_DEFAULT_TX_ANTENNA = "TX/RX"; diff --git a/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_cpld.cpp b/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_cpld.cpp index 8ab88a5b2..562fecc30 100644 --- a/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_cpld.cpp +++ b/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_cpld.cpp @@ -46,20 +46,38 @@ void magnesium_radio_ctrl_impl::_update_atr_switches(      const std::string &ant  ){      UHD_ASSERT_THROW(dir == RX_DIRECTION or dir == TX_DIRECTION); -    magnesium_cpld_ctrl::rx_sw1_t rx_sw1 = magnesium_cpld_ctrl::RX_SW1_RX2INPUT; -    magnesium_cpld_ctrl::sw_trx_t sw_trx = _sw_trx[chan]; -    bool trx_led = false, rx2_led = true; -    //bool tx_pa_enb = true, tx_amp_enb = true, tx_myk_en=true; -    if (ant == "TX/RX" and dir == RX_DIRECTION) { -        rx_sw1 = magnesium_cpld_ctrl::RX_SW1_TRXSWITCHOUTPUT; -        sw_trx = magnesium_cpld_ctrl::SW_TRX_RXCHANNELPATH; -        trx_led = true; -        rx2_led = false; -    }      if (dir == RX_DIRECTION) { +        // These default values work for RX2 +        bool trx_led = false; +        bool rx2_led = true; +        auto rx_sw1 = magnesium_cpld_ctrl::RX_SW1_RX2INPUT; +        // The TRX switch in TX-idle mode defaults to TX-on mode. When TX is +        // off, and we're receiving on TX/RX however, we need to point TRX to +        // RX SW1. In all other cases, a TX state toggle (on to idle or  vice +        // versa) won't trigger a change of the TRX switch. +        auto sw_trx = _sw_trx[chan];          UHD_LOG_TRACE(unique_id(),              "Updating all RX-ATR related switches for antenna==" << ant); +        if (ant == "TX/RX") { +            rx_sw1 = magnesium_cpld_ctrl::RX_SW1_TRXSWITCHOUTPUT; +            sw_trx = magnesium_cpld_ctrl::SW_TRX_RXCHANNELPATH; +            trx_led = true; +            rx2_led = false; +        } +        else if (ant == "CAL") { +            // It makes intuitive sense to illuminate the green TX/RX LED when +            // receiving on CAL (because it goes over to the TX/RX port), but +            // the problem is that CAL is only useful when we're both TXing and +            // RXing, and then both green and red would be on the same LED. +            // So, for CAL, we light up the green RX2 LED. +            trx_led = false; +            rx2_led = true; +            rx_sw1 = magnesium_cpld_ctrl::RX_SW1_TXRXINPUT; +        } +        else if (ant == "LOCAL") { +            rx_sw1 = magnesium_cpld_ctrl::RX_SW1_RXLOCALINPUT; +        }          _cpld->set_rx_input_atr_bits(              chan,              magnesium_cpld_ctrl::ON, 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 e2fe1e51b..93f9a25b9 100644 --- a/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_impl.cpp +++ b/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_impl.cpp @@ -143,12 +143,12 @@ void magnesium_radio_ctrl_impl::set_rx_antenna(          const size_t chan  ) {      UHD_ASSERT_THROW(chan <= MAGNESIUM_NUM_CHANS); -    // TODO can we please not hardcode the antenna names here? -    // We need a map somewhere, anyway, to store the available options in the -    // prop tree. -    if (ant != "RX2" and ant != "TX/RX") { +    if (std::find(MAGNESIUM_RX_ANTENNAS.begin(), +                  MAGNESIUM_RX_ANTENNAS.end(), +                  ant) == MAGNESIUM_RX_ANTENNAS.end()) {          throw uhd::value_error(str(              boost::format("[%s] Requesting invalid RX antenna value: %s") +            % unique_id()              % ant          ));      } | 
