aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib')
-rw-r--r--host/lib/include/uhdlib/rfnoc/radio_control_impl.hpp2
-rw-r--r--host/lib/rfnoc/radio_control_impl.cpp18
-rw-r--r--host/lib/usrp/multi_usrp.cpp21
-rw-r--r--host/lib/usrp/multi_usrp_python.hpp2
-rw-r--r--host/lib/usrp/multi_usrp_rfnoc.cpp12
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);