aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_impl.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_impl.hpp')
-rw-r--r--host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_impl.hpp126
1 files changed, 50 insertions, 76 deletions
diff --git a/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_impl.hpp b/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_impl.hpp
index e2cfab304..cf9ba765d 100644
--- a/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_impl.hpp
+++ b/host/lib/usrp/dboard/magnesium/magnesium_radio_ctrl_impl.hpp
@@ -22,6 +22,7 @@
#include "rpc_block_ctrl.hpp"
#include "magnesium_cpld_ctrl.hpp"
#include "magnesium_cpld_regs.hpp"
+#include "magnesium_ad9371_iface.hpp"
#include "adf435x.hpp"
#include "gpio_atr_3000.hpp"
#include <uhd/types/serial.hpp>
@@ -47,6 +48,8 @@ public:
/************************************************************************
* API calls
***********************************************************************/
+ // Note: We use the cached values in radio_ctrl_impl, so most getters are
+ // not reimplemented here
double set_rate(double rate);
void set_tx_antenna(const std::string &ant, const size_t chan);
@@ -54,21 +57,12 @@ public:
double set_tx_frequency(const double freq, const size_t chan);
double set_rx_frequency(const double freq, const size_t chan);
+ double set_tx_bandwidth(const double bandwidth, const size_t chan);
double set_rx_bandwidth(const double bandwidth, const size_t chan);
double set_tx_gain(const double gain, const size_t chan);
double set_rx_gain(const double gain, const size_t chan);
- std::string get_tx_antenna(const size_t chan);
- std::string get_rx_antenna(const size_t chan);
-
- double get_tx_frequency(const size_t chan);
- double get_rx_frequency(const size_t chan);
- double get_rx_bandwidth(const size_t chan);
-
- double get_tx_gain(const size_t chan);
- double get_rx_gain(const size_t chan);
-
size_t get_chan_from_dboard_fe(const std::string &fe, const direction_t dir);
std::string get_dboard_fe_from_chan(const size_t chan, const direction_t dir);
@@ -83,70 +77,64 @@ private:
/**************************************************************************
* Helpers
*************************************************************************/
- //! Return the path to the dboards property subtree
- fs_path _get_fe_path(const size_t chan, const direction_t dir);
-
//! Initialize all the peripherals connected to this block
void _init_peripherals();
//! Set state of this class to sensible defaults
void _init_defaults();
- /**************************************************************************
- * AD9371 Controls
- *************************************************************************/
- double _myk_set_frequency(
- const double freq,
- const size_t chan,
- const direction_t dir
+ //! Init a subtree for the RF frontends
+ void _init_frontend_subtree(
+ uhd::property_tree::sptr subtree,
+ const size_t fe_chan_idx,
+ const size_t chan_idx
);
- double _myk_set_gain(
+ //! Initialize property tree
+ void _init_prop_tree();
+
+ /**************************************************************************
+ * Gain Controls (implemented in magnesium_radio_ctrl_gain.cpp)
+ *************************************************************************/
+ double _dsa_set_gain(
const double gain,
const size_t chan,
const direction_t dir
);
- void _myk_set_antenna(
- const std::string &ant,
- const size_t chan,
- const direction_t dir
- );
- double _myk_set_bandwidth(
- const double bandwidth,
+ double _dsa_get_gain(
const size_t chan,
const direction_t dir
);
- double _myk_get_frequency(
- const size_t chan,
- const direction_t dir
+ double _set_all_gain(
+ const double gain,
+ const size_t chan,
+ const direction_t dir
);
- double _myk_get_gain(
- const size_t chan,
- const direction_t dir
+ double _get_all_gain(
+ const size_t chan,
+ const direction_t dir
);
- std::string _myk_get_antenna(
+ void _set_dsa_val(
const size_t chan,
- const direction_t dir
+ const direction_t dir,
+ const uint32_t dsa_val
);
- double _myk_get_bandwidth(
- const size_t chan,
- const direction_t dir
+ /**************************************************************************
+ * CPLD Controls (implemented in magnesium_radio_ctrl_cpld.cpp)
+ *************************************************************************/
+ void _update_rx_freq_switches(
+ const double freq,
+ const size_t chan
);
- double _lo_set_frequency(
- adf435x_iface::sptr lo_iface,
- const double freq,
- const size_t chan
- );
- void _update_freq_switches(
+ void _update_tx_freq_switches(
const double freq,
- const size_t chan,
- const direction_t dir
+ const size_t chan
);
void _update_atr_switches(
@@ -155,34 +143,15 @@ private:
const std::string &ant
);
- double _dsa_set_gain(
- const double gain,
- const size_t chan,
- const direction_t dir
- );
- double _dsa_get_gain(
- const size_t chan,
- const direction_t dir
- );
- double _set_all_gain(
- const double gain,
- const size_t chan,
- const direction_t dir
- );
- double _get_all_gain(
- const size_t chan,
- const direction_t dir
- );
- void _set_dsa_val(
- const size_t chan,
- const direction_t dir,
- const uint32_t dsa_val
- );
+ /**************************************************************************
+ * Private attributes
+ *************************************************************************/
//! Letter representation of the radio we're currently running
std::string _radio_slot;
- //! Stores the prefix to RPC calls
- std::string _rpc_prefix;
+ //! If true, this is a master radio. This attribute will go away when we
+ // move back to 1 radio block per dboard.
+ bool _master;
//! Additional block args; gets set during set_rpc_client()
uhd::device_addr_t _block_args;
@@ -203,6 +172,9 @@ private:
// there's only one CPLD control.
std::shared_ptr<magnesium_cpld_ctrl> _cpld;
+ //! Reference to the AD9371 controls
+ magnesium_ad9371_iface::uptr _ad9371;
+
//! ATR controls. These control the external DSA and the AD9371 gain
// up/down bits. They do *not* control the ATR state of the CPLD, the
// tx/rx run states are hooked up directly to the CPLD.
@@ -222,10 +194,12 @@ private:
//! All gain
double _all_rx_gain = 0.0;
double _all_tx_gain = 0.0;
- //! TRX switch state of 2 channels
- std::map<magnesium_cpld_ctrl::chan_sel_t,magnesium_cpld_ctrl::sw_trx_t> _sw_trx = {
- {magnesium_cpld_ctrl::CHAN1, magnesium_cpld_ctrl::SW_TRX_FROMLOWERFILTERBANKTXSW1},
- {magnesium_cpld_ctrl::CHAN2, magnesium_cpld_ctrl::SW_TRX_FROMLOWERFILTERBANKTXSW1}
+ //! TRX switch state of 2 channels
+ std::map<magnesium_cpld_ctrl::chan_sel_t, magnesium_cpld_ctrl::sw_trx_t> _sw_trx = {
+ {magnesium_cpld_ctrl::CHAN1,
+ magnesium_cpld_ctrl::SW_TRX_FROMLOWERFILTERBANKTXSW1},
+ {magnesium_cpld_ctrl::CHAN2,
+ magnesium_cpld_ctrl::SW_TRX_FROMLOWERFILTERBANKTXSW1}
};
}; /* class radio_ctrl_impl */