From b9f9ca2d0fd43f2a55e4ed5301070585cbb1be3c Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Thu, 6 Aug 2020 20:55:35 +0200 Subject: uhd: Add APIs for getting the available power range The previously added APIs for getting/setting power reference levels was missing an option to read back the currently available power levels (minimum and maximum power levels). This adds getters for TX and RX power ranges to multi_usrp and radio_control. The power API is thus now more similar to the gain API, which always had getters for gain ranges. --- host/lib/usrp/multi_usrp.cpp | 21 +++++++++++++++++++++ host/lib/usrp/multi_usrp_python.hpp | 2 ++ host/lib/usrp/multi_usrp_rfnoc.cpp | 12 ++++++++++++ 3 files changed, 35 insertions(+) (limited to 'host/lib/usrp') 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(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(power_ref_path).get(); + + } + void set_rx_antenna(const std::string& ant, size_t chan) { _tree->access(rx_rf_fe_root(chan) / "antenna" / "value").set(ant); @@ -2230,6 +2241,16 @@ public: return _tree->access(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(power_ref_path).get(); + } + void set_tx_antenna(const std::string& ant, size_t chan) { _tree->access(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); -- cgit v1.2.3