diff options
Diffstat (limited to 'host/lib')
-rw-r--r-- | host/lib/include/uhdlib/rfnoc/radio_control_impl.hpp | 2 | ||||
-rw-r--r-- | host/lib/rfnoc/radio_control_impl.cpp | 18 | ||||
-rw-r--r-- | host/lib/usrp/multi_usrp.cpp | 21 | ||||
-rw-r--r-- | host/lib/usrp/multi_usrp_python.hpp | 2 | ||||
-rw-r--r-- | host/lib/usrp/multi_usrp_rfnoc.cpp | 12 |
5 files changed, 55 insertions, 0 deletions
diff --git a/host/lib/include/uhdlib/rfnoc/radio_control_impl.hpp b/host/lib/include/uhdlib/rfnoc/radio_control_impl.hpp index 5ea1e57f0..f60319d32 100644 --- a/host/lib/include/uhdlib/rfnoc/radio_control_impl.hpp +++ b/host/lib/include/uhdlib/rfnoc/radio_control_impl.hpp @@ -111,6 +111,8 @@ public: virtual double get_tx_power_reference(const size_t chan); virtual std::vector<std::string> get_rx_power_ref_keys(const size_t); virtual std::vector<std::string> get_tx_power_ref_keys(const size_t); + virtual meta_range_t get_rx_power_range(const size_t chan); + virtual meta_range_t get_tx_power_range(const size_t chan); /************************************************************************** * LO Controls diff --git a/host/lib/rfnoc/radio_control_impl.cpp b/host/lib/rfnoc/radio_control_impl.cpp index 23a885a83..61937e080 100644 --- a/host/lib/rfnoc/radio_control_impl.cpp +++ b/host/lib/rfnoc/radio_control_impl.cpp @@ -636,6 +636,24 @@ std::vector<std::string> radio_control_impl::get_tx_power_ref_keys(const size_t return {_tx_pwr_mgr.at(chan)->get_key(), _tx_pwr_mgr.at(chan)->get_serial()}; } +uhd::meta_range_t radio_control_impl::get_rx_power_range(const size_t chan) +{ + if (_rx_pwr_mgr.empty()) { + throw uhd::not_implemented_error( + "get_rx_power_range() is not supported on this radio!"); + } + return _rx_pwr_mgr.at(chan)->get_power_range(); +} + +uhd::meta_range_t radio_control_impl::get_tx_power_range(const size_t chan) +{ + if (_tx_pwr_mgr.empty()) { + throw uhd::not_implemented_error( + "get_tx_power_range() is not supported on this radio!"); + } + return _tx_pwr_mgr.at(chan)->get_power_range(); +} + /****************************************************************************** * LO Default API diff --git a/host/lib/usrp/multi_usrp.cpp b/host/lib/usrp/multi_usrp.cpp index 03a2a169c..e3424d748 100644 --- a/host/lib/usrp/multi_usrp.cpp +++ b/host/lib/usrp/multi_usrp.cpp @@ -1730,6 +1730,17 @@ public: return _tree->access<double>(power_ref_path).get(); } + meta_range_t get_rx_power_range(const size_t chan) + { + const auto power_ref_path = rx_rf_fe_root(chan) / "ref_power/range"; + if (!_tree->exists(power_ref_path)) { + throw uhd::not_implemented_error( + "get_rx_power_range() not available for this device and channel"); + } + return _tree->access<meta_range_t>(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); @@ -2230,6 +2241,16 @@ public: return _tree->access<double>(power_ref_path).get(); } + meta_range_t get_tx_power_range(const size_t chan) + { + const auto power_ref_path = tx_rf_fe_root(chan) / "ref_power/range"; + if (!_tree->exists(power_ref_path)) { + throw uhd::not_implemented_error( + "get_tx_power_range() not available for this device and channel"); + } + return _tree->access<meta_range_t>(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); diff --git a/host/lib/usrp/multi_usrp_python.hpp b/host/lib/usrp/multi_usrp_python.hpp index 6c2fd2ccf..cec901315 100644 --- a/host/lib/usrp/multi_usrp_python.hpp +++ b/host/lib/usrp/multi_usrp_python.hpp @@ -130,6 +130,7 @@ void export_multi_usrp(py::module& m) .def("has_rx_power_reference" , &multi_usrp::has_rx_power_reference, py::arg("chan") = 0) .def("set_rx_power_reference" , &multi_usrp::set_rx_power_reference, py::arg("power_dbm"), py::arg("chan") = 0) .def("get_rx_power_reference" , &multi_usrp::get_rx_power_reference, py::arg("chan") = 0) + .def("get_rx_power_range" , &multi_usrp::get_rx_power_range, py::arg("chan") = 0) // TX methods .def("set_tx_subdev_spec" , &multi_usrp::set_tx_subdev_spec, py::arg("spec"), py::arg("mboard") = ALL_MBOARDS) @@ -171,6 +172,7 @@ void export_multi_usrp(py::module& m) .def("has_tx_power_reference" , &multi_usrp::has_tx_power_reference, py::arg("chan") = 0) .def("set_tx_power_reference" , &multi_usrp::set_tx_power_reference, py::arg("power_dbm"), py::arg("chan") = 0) .def("get_tx_power_reference" , &multi_usrp::get_tx_power_reference, py::arg("chan") = 0) + .def("get_tx_power_range" , &multi_usrp::get_tx_power_range, py::arg("chan") = 0) // GPIO methods .def("get_gpio_banks" , &multi_usrp::get_gpio_banks) diff --git a/host/lib/usrp/multi_usrp_rfnoc.cpp b/host/lib/usrp/multi_usrp_rfnoc.cpp index 26932ef30..659d879e8 100644 --- a/host/lib/usrp/multi_usrp_rfnoc.cpp +++ b/host/lib/usrp/multi_usrp_rfnoc.cpp @@ -1484,6 +1484,12 @@ public: return rx_chain.radio->get_rx_power_reference(rx_chain.block_chan); } + meta_range_t get_rx_power_range(const size_t chan) + { + auto& rx_chain = _get_rx_chan(chan); + return rx_chain.radio->get_rx_power_range(rx_chain.block_chan); + } + void set_rx_antenna(const std::string& ant, size_t chan = 0) { MUX_RX_API_CALL(set_rx_antenna, ant); @@ -1955,6 +1961,12 @@ public: return tx_chain.radio->get_tx_power_reference(tx_chain.block_chan); } + meta_range_t get_tx_power_range(const size_t chan) + { + auto& tx_chain = _get_tx_chan(chan); + return tx_chain.radio->get_tx_power_range(tx_chain.block_chan); + } + void set_tx_antenna(const std::string& ant, size_t chan = 0) { MUX_TX_API_CALL(set_tx_antenna, ant); |