aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mpm/include/mpm/ad937x/ad937x_ctrl.hpp10
-rw-r--r--mpm/lib/mykonos/ad937x_ctrl.cpp11
2 files changed, 21 insertions, 0 deletions
diff --git a/mpm/include/mpm/ad937x/ad937x_ctrl.hpp b/mpm/include/mpm/ad937x/ad937x_ctrl.hpp
index 4710af445..21a6b2892 100644
--- a/mpm/include/mpm/ad937x/ad937x_ctrl.hpp
+++ b/mpm/include/mpm/ad937x/ad937x_ctrl.hpp
@@ -238,6 +238,15 @@ public:
*/
virtual double get_freq(const std::string &which) = 0;
+ /*! \brief Returns the LO lock status
+ *
+ * Note there's only one LO per direction, so the channel doesn't really
+ * matter here.
+ * This does not check the PLL lock status for the main clock, the sniffer,
+ * or the CAL PLL.
+ */
+ virtual bool get_lo_locked(const std::string &which) = 0;
+
//! set the FIR filter for the frontend which
virtual void set_fir(const std::string &which, int8_t gain, const std::vector<int16_t> & fir) = 0;
@@ -300,6 +309,7 @@ void export_mykonos(){
.def("enable_channel", &ad937x_ctrl::enable_channel)
.def("set_freq", &ad937x_ctrl::set_freq)
.def("get_freq", &ad937x_ctrl::get_freq)
+ .def("get_lo_locked", &ad937x_ctrl::get_lo_locked)
.def("set_fir", &ad937x_ctrl::set_fir)
.def("get_fir", &ad937x_ctrl::get_fir)
.def("get_temperature", &ad937x_ctrl::get_temperature)
diff --git a/mpm/lib/mykonos/ad937x_ctrl.cpp b/mpm/lib/mykonos/ad937x_ctrl.cpp
index 2594ac920..8aeb5b599 100644
--- a/mpm/lib/mykonos/ad937x_ctrl.cpp
+++ b/mpm/lib/mykonos/ad937x_ctrl.cpp
@@ -417,6 +417,17 @@ public:
return device.get_freq(dir);
}
+ virtual bool get_lo_locked(const std::string &which)
+ {
+ const auto dir = _get_direction_from_antenna(which);
+ const uint8_t pll_select = (dir == uhd::RX_DIRECTION) ?
+ ad937x_device::RX_SYNTH :
+ ad937x_device::TX_SYNTH;
+
+ std::lock_guard<std::mutex> lock(*spi_mutex);
+ return device.get_pll_lock_status(pll_select);
+ }
+
virtual void set_fir(const std::string &which, int8_t gain, const std::vector<int16_t> & fir)
{
auto dir = _get_direction_from_antenna(which);