diff options
Diffstat (limited to 'host/lib/usrp/multi_usrp.cpp')
-rw-r--r-- | host/lib/usrp/multi_usrp.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/host/lib/usrp/multi_usrp.cpp b/host/lib/usrp/multi_usrp.cpp index c91f596cd..0392d4df9 100644 --- a/host/lib/usrp/multi_usrp.cpp +++ b/host/lib/usrp/multi_usrp.cpp @@ -1718,6 +1718,34 @@ public: return rx_gain_group(chan)->get_names(); } + /************************************************************************** + * RX Power control + *************************************************************************/ + bool has_rx_power_reference(const size_t chan) + { + return _tree->exists(rx_rf_fe_root(chan) / "ref_power/value"); + } + + void set_rx_power_reference(const double power_dbm, const size_t chan = 0) + { + const auto power_ref_path = rx_rf_fe_root(chan) / "ref_power/value"; + if (!_tree->exists(power_ref_path)) { + throw uhd::not_implemented_error( + "set_rx_power_reference() not available for this device and channel"); + } + _tree->access<double>(power_ref_path).set(power_dbm); + } + + double get_rx_power_reference(const size_t chan = 0) + { + const auto power_ref_path = rx_rf_fe_root(chan) / "ref_power/value"; + if (!_tree->exists(power_ref_path)) { + throw uhd::not_implemented_error( + "get_rx_power_reference() not available for this device and channel"); + } + return _tree->access<double>(power_ref_path).get(); + } + void set_rx_antenna(const std::string& ant, size_t chan) { _tree->access<std::string>(rx_rf_fe_root(chan) / "antenna" / "value").set(ant); @@ -2194,6 +2222,34 @@ public: return tx_gain_group(chan)->get_names(); } + /************************************************************************** + * TX Power Controls + *************************************************************************/ + bool has_tx_power_reference(const size_t chan) + { + return _tree->exists(tx_rf_fe_root(chan) / "ref_power/value"); + } + + void set_tx_power_reference(const double power_dbm, const size_t chan = 0) + { + const auto power_ref_path = tx_rf_fe_root(chan) / "ref_power/value"; + if (!_tree->exists(power_ref_path)) { + throw uhd::not_implemented_error( + "set_tx_power_reference() not available for this device and channel"); + } + _tree->access<double>(power_ref_path).set(power_dbm); + } + + double get_tx_power_reference(const size_t chan = 0) + { + const auto power_ref_path = tx_rf_fe_root(chan) / "ref_power/value"; + if (!_tree->exists(power_ref_path)) { + throw uhd::not_implemented_error( + "get_tx_power_reference() not available for this device and channel"); + } + return _tree->access<double>(power_ref_path).get(); + } + void set_tx_antenna(const std::string& ant, size_t chan) { _tree->access<std::string>(tx_rf_fe_root(chan) / "antenna" / "value").set(ant); |