diff options
| -rw-r--r-- | mpm/include/mpm/ad937x/ad937x_ctrl.hpp | 10 | ||||
| -rw-r--r-- | mpm/lib/mykonos/ad937x_ctrl.cpp | 11 | 
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); | 
