From 688247e5451216e82c3817e75d0c2bcfb70488c9 Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Tue, 21 Nov 2017 16:52:20 -0800 Subject: mpm: ad937x: Add LO lock API Reviewed-By: Steven Bingler Reviewed-By: Trung Tran --- mpm/include/mpm/ad937x/ad937x_ctrl.hpp | 10 ++++++++++ mpm/lib/mykonos/ad937x_ctrl.cpp | 11 +++++++++++ 2 files changed, 21 insertions(+) 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 & 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 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 & fir) { auto dir = _get_direction_from_antenna(which); -- cgit v1.2.3