diff options
Diffstat (limited to 'host/lib/usrp/dboard/rhodium/rhodium_radio_ctrl_cpld.cpp')
-rw-r--r-- | host/lib/usrp/dboard/rhodium/rhodium_radio_ctrl_cpld.cpp | 298 |
1 files changed, 0 insertions, 298 deletions
diff --git a/host/lib/usrp/dboard/rhodium/rhodium_radio_ctrl_cpld.cpp b/host/lib/usrp/dboard/rhodium/rhodium_radio_ctrl_cpld.cpp deleted file mode 100644 index 846a4eac6..000000000 --- a/host/lib/usrp/dboard/rhodium/rhodium_radio_ctrl_cpld.cpp +++ /dev/null @@ -1,298 +0,0 @@ -// -// Copyright 2018 Ettus Research, a National Instruments Company -// -// SPDX-License-Identifier: GPL-3.0-or-later -// - -#include "rhodium_radio_ctrl_impl.hpp" -#include "rhodium_cpld_ctrl.hpp" -#include "rhodium_constants.hpp" -#include <uhd/utils/log.hpp> - -using namespace uhd; -using namespace uhd::usrp; -using namespace uhd::rfnoc; - -namespace { - const char* rx_band_to_log(rhodium_radio_ctrl_impl::rx_band rx_band) - { - switch (rx_band) - { - case rhodium_radio_ctrl_impl::rx_band::RX_BAND_0: - return "0"; - case rhodium_radio_ctrl_impl::rx_band::RX_BAND_1: - return "1"; - case rhodium_radio_ctrl_impl::rx_band::RX_BAND_2: - return "2"; - case rhodium_radio_ctrl_impl::rx_band::RX_BAND_3: - return "3"; - case rhodium_radio_ctrl_impl::rx_band::RX_BAND_4: - return "4"; - case rhodium_radio_ctrl_impl::rx_band::RX_BAND_5: - return "5"; - case rhodium_radio_ctrl_impl::rx_band::RX_BAND_6: - return "6"; - case rhodium_radio_ctrl_impl::rx_band::RX_BAND_7: - return "7"; - case rhodium_radio_ctrl_impl::rx_band::RX_BAND_INVALID: - return "INVALID"; - default: - UHD_THROW_INVALID_CODE_PATH(); - } - } - - const char* tx_band_to_log(rhodium_radio_ctrl_impl::tx_band tx_band) - { - switch (tx_band) - { - case rhodium_radio_ctrl_impl::tx_band::TX_BAND_0: - return "0"; - case rhodium_radio_ctrl_impl::tx_band::TX_BAND_1: - return "1"; - case rhodium_radio_ctrl_impl::tx_band::TX_BAND_2: - return "2"; - case rhodium_radio_ctrl_impl::tx_band::TX_BAND_3: - return "3"; - case rhodium_radio_ctrl_impl::tx_band::TX_BAND_4: - return "4"; - case rhodium_radio_ctrl_impl::tx_band::TX_BAND_5: - return "5"; - case rhodium_radio_ctrl_impl::tx_band::TX_BAND_6: - return "6"; - case rhodium_radio_ctrl_impl::tx_band::TX_BAND_7: - return "7"; - case rhodium_radio_ctrl_impl::tx_band::TX_BAND_INVALID: - return "INVALID"; - default: - UHD_THROW_INVALID_CODE_PATH(); - } - } -} - -void rhodium_radio_ctrl_impl::_update_rx_freq_switches( - const double freq -) { - UHD_LOG_TRACE(unique_id(), - "Update all RX freq related switches. f=" << freq << " Hz, " - ); - const auto band = _map_freq_to_rx_band(freq); - UHD_LOG_TRACE(unique_id(), - "Selected band " << rx_band_to_log(band)); - - // select values for lowband/highband switches - const bool is_lowband = (band == rx_band::RX_BAND_0); - auto rx_sw2_sw7 = is_lowband ? - rhodium_cpld_ctrl::RX_SW2_SW7_LOWBANDFILTERBANK : - rhodium_cpld_ctrl::RX_SW2_SW7_HIGHBANDFILTERBANK; - auto rx_hb_lb_sel = is_lowband ? - rhodium_cpld_ctrl::RX_HB_LB_SEL_LOWBAND : - rhodium_cpld_ctrl::RX_HB_LB_SEL_HIGHBAND; - - // select values for filter bank switches - rhodium_cpld_ctrl::rx_sw3_t rx_sw3; - rhodium_cpld_ctrl::rx_sw4_sw5_t rx_sw4_sw5; - rhodium_cpld_ctrl::rx_sw6_t rx_sw6; - switch (band) - { - case rx_band::RX_BAND_0: - // Low band doesn't use the filter banks, use configuration for band 1 - case rx_band::RX_BAND_1: - rx_sw3 = rhodium_cpld_ctrl::RX_SW3_TOSWITCH4; - rx_sw4_sw5 = rhodium_cpld_ctrl::RX_SW4_SW5_FILTER0450X0760MHZ; - rx_sw6 = rhodium_cpld_ctrl::RX_SW6_FROMSWITCH5; - break; - case rx_band::RX_BAND_2: - rx_sw3 = rhodium_cpld_ctrl::RX_SW3_TOSWITCH4; - rx_sw4_sw5 = rhodium_cpld_ctrl::RX_SW4_SW5_FILTER0760X1100MHZ; - rx_sw6 = rhodium_cpld_ctrl::RX_SW6_FROMSWITCH5; - break; - case rx_band::RX_BAND_3: - rx_sw3 = rhodium_cpld_ctrl::RX_SW3_TOSWITCH4; - rx_sw4_sw5 = rhodium_cpld_ctrl::RX_SW4_SW5_FILTER1100X1410MHZ; - rx_sw6 = rhodium_cpld_ctrl::RX_SW6_FROMSWITCH5; - break; - case rx_band::RX_BAND_4: - rx_sw3 = rhodium_cpld_ctrl::RX_SW3_TOSWITCH4; - rx_sw4_sw5 = rhodium_cpld_ctrl::RX_SW4_SW5_FILTER1410X2050MHZ; - rx_sw6 = rhodium_cpld_ctrl::RX_SW6_FROMSWITCH5; - break; - case rx_band::RX_BAND_5: - rx_sw3 = rhodium_cpld_ctrl::RX_SW3_TOFILTER2050X3000MHZ; - rx_sw4_sw5 = rhodium_cpld_ctrl::RX_SW4_SW5_FILTER0450X0760MHZ; - rx_sw6 = rhodium_cpld_ctrl::RX_SW6_FROMFILTER2050X3000MHZ; - break; - case rx_band::RX_BAND_6: - rx_sw3 = rhodium_cpld_ctrl::RX_SW3_TOFILTER3000X4500MHZ; - rx_sw4_sw5 = rhodium_cpld_ctrl::RX_SW4_SW5_FILTER0450X0760MHZ; - rx_sw6 = rhodium_cpld_ctrl::RX_SW6_FROMFILTER3000X4500MHZ; - break; - case rx_band::RX_BAND_7: - rx_sw3 = rhodium_cpld_ctrl::RX_SW3_TOFILTER4500X6000MHZ; - rx_sw4_sw5 = rhodium_cpld_ctrl::RX_SW4_SW5_FILTER0450X0760MHZ; - rx_sw6 = rhodium_cpld_ctrl::RX_SW6_FROMFILTER4500X6000MHZ; - break; - case rx_band::RX_BAND_INVALID: - throw uhd::runtime_error(str(boost::format( - "Cannot map RX frequency to band: %f") % freq)); - default: - UHD_THROW_INVALID_CODE_PATH(); - } - - // commit settings to cpld - _cpld->set_rx_switches( - rx_sw2_sw7, - rx_sw3, - rx_sw4_sw5, - rx_sw6, - rx_hb_lb_sel - ); -} - -void rhodium_radio_ctrl_impl::_update_tx_freq_switches( - const double freq -){ - UHD_LOG_TRACE(unique_id(), - "Update all TX freq related switches. f=" << freq << " Hz, " - ); - - const auto band = _map_freq_to_tx_band(freq); - - UHD_LOG_TRACE(unique_id(), - "Selected band " << tx_band_to_log(band)); - - // select values for lowband/highband switches - const bool is_lowband = (band == tx_band::TX_BAND_0); - auto tx_hb_lb_sel = is_lowband ? - rhodium_cpld_ctrl::TX_HB_LB_SEL_LOWBAND : - rhodium_cpld_ctrl::TX_HB_LB_SEL_HIGHBAND; - - // select values for filter bank switches - rhodium_cpld_ctrl::tx_sw2_t tx_sw2; - rhodium_cpld_ctrl::tx_sw3_sw4_t tx_sw3_sw4; - rhodium_cpld_ctrl::tx_sw5_t tx_sw5; - switch (band) - { - case tx_band::TX_BAND_0: - // Low band doesn't use the filter banks, use configuration for band 1 - case tx_band::TX_BAND_1: - tx_sw2 = rhodium_cpld_ctrl::TX_SW2_FROMSWITCH3; - tx_sw3_sw4 = rhodium_cpld_ctrl::TX_SW3_SW4_FROMTXFILTERLP0650MHZ; - tx_sw5 = rhodium_cpld_ctrl::TX_SW5_TOSWITCH4; - break; - case tx_band::TX_BAND_2: - tx_sw2 = rhodium_cpld_ctrl::TX_SW2_FROMSWITCH3; - tx_sw3_sw4 = rhodium_cpld_ctrl::TX_SW3_SW4_FROMTXFILTERLP1000MHZ; - tx_sw5 = rhodium_cpld_ctrl::TX_SW5_TOSWITCH4; - break; - case tx_band::TX_BAND_3: - tx_sw2 = rhodium_cpld_ctrl::TX_SW2_FROMSWITCH3; - tx_sw3_sw4 = rhodium_cpld_ctrl::TX_SW3_SW4_FROMTXFILTERLP1350MHZ; - tx_sw5 = rhodium_cpld_ctrl::TX_SW5_TOSWITCH4; - break; - case tx_band::TX_BAND_4: - tx_sw2 = rhodium_cpld_ctrl::TX_SW2_FROMSWITCH3; - tx_sw3_sw4 = rhodium_cpld_ctrl::TX_SW3_SW4_FROMTXFILTERLP1900MHZ; - tx_sw5 = rhodium_cpld_ctrl::TX_SW5_TOSWITCH4; - break; - case tx_band::TX_BAND_5: - tx_sw2 = rhodium_cpld_ctrl::TX_SW2_FROMTXFILTERLP3000MHZ; - tx_sw3_sw4 = rhodium_cpld_ctrl::TX_SW3_SW4_FROMTXFILTERLP0650MHZ; - tx_sw5 = rhodium_cpld_ctrl::TX_SW5_TOTXFILTERLP3000MHZ; - break; - case tx_band::TX_BAND_6: - tx_sw2 = rhodium_cpld_ctrl::TX_SW2_FROMTXFILTERLP4100MHZ; - tx_sw3_sw4 = rhodium_cpld_ctrl::TX_SW3_SW4_FROMTXFILTERLP0650MHZ; - tx_sw5 = rhodium_cpld_ctrl::TX_SW5_TOTXFILTERLP4100MHZ; - break; - case tx_band::TX_BAND_7: - tx_sw2 = rhodium_cpld_ctrl::TX_SW2_FROMTXFILTERLP6000MHZ; - tx_sw3_sw4 = rhodium_cpld_ctrl::TX_SW3_SW4_FROMTXFILTERLP0650MHZ; - tx_sw5 = rhodium_cpld_ctrl::TX_SW5_TOTXFILTERLP6000MHZ; - break; - case tx_band::TX_BAND_INVALID: - throw uhd::runtime_error(str(boost::format( - "Cannot map TX frequency to band: %f") % freq)); - default: - UHD_THROW_INVALID_CODE_PATH(); - } - - // commit settings to cpld - _cpld->set_tx_switches( - tx_sw2, - tx_sw3_sw4, - tx_sw5, - tx_hb_lb_sel - ); -} - -void rhodium_radio_ctrl_impl::_update_rx_input_switches( - const std::string &input -) { - UHD_LOG_TRACE(unique_id(), - "Update all RX input related switches. input=" << input - ); - const rhodium_cpld_ctrl::cal_iso_sw_t cal_iso = (input == "CAL") ? - rhodium_cpld_ctrl::CAL_ISO_CALLOOPBACK : - rhodium_cpld_ctrl::CAL_ISO_ISOLATION; - const rhodium_cpld_ctrl::rx_sw1_t sw1 = [input]{ - if (input == "TX/RX") - { - return rhodium_cpld_ctrl::RX_SW1_FROMTXRXINPUT; - } - else if (input == "RX2") { - return rhodium_cpld_ctrl::RX_SW1_FROMRX2INPUT; - } - else if (input == "CAL") { - return rhodium_cpld_ctrl::RX_SW1_FROMCALLOOPBACK; - } - else if (input == "TERM") { - return rhodium_cpld_ctrl::RX_SW1_ISOLATION; - } - else { - throw uhd::runtime_error("Invalid antenna in _update_rx_input_switches: " + input); - } - }(); - - UHD_LOG_TRACE(unique_id(), - "Selected switch values:" - " sw1=" << sw1 << - " cal_iso=" << cal_iso - ); - _cpld->set_rx_input_switches(sw1, cal_iso); -} - -void rhodium_radio_ctrl_impl::_update_tx_output_switches( - const std::string &output -) { - UHD_LOG_TRACE(unique_id(), - "Update all TX output related switches. output=" << output - ); - rhodium_cpld_ctrl::tx_sw1_t sw1; - - if (output == "TX/RX") - { - //SW1 needs to select low/high band - if (_is_tx_lowband(get_tx_frequency(0))) - { - sw1 = rhodium_cpld_ctrl::TX_SW1_TOLOWBAND; - } - else { - sw1 = rhodium_cpld_ctrl::TX_SW1_TOSWITCH2; - } - } - else if (output == "CAL") { - sw1 = rhodium_cpld_ctrl::TX_SW1_TOCALLOOPBACK; - } - else if (output == "TERM") { - sw1 = rhodium_cpld_ctrl::TX_SW1_ISOLATION; - } - else { - throw uhd::runtime_error("Invalid antenna in _update_tx_output_switches: " + output); - } - - UHD_LOG_TRACE(unique_id(), - "Selected switch values: sw1=" << sw1 - ); - - _cpld->set_tx_output_switches(sw1); -} |