From 1c3c7bddff19e0e575b9f411fa73bb2429e4fc66 Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Thu, 21 Nov 2019 16:25:07 -0800 Subject: mpm: mg: Make set_master_clock_rate() an async call The ad9371 call set_master_clock_rate() can take a while depending on the rate change, so make it asynchronous in order not to lock out the reclaimer loop. --- mpm/include/mpm/ad937x/ad937x_ctrl.hpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'mpm/include') diff --git a/mpm/include/mpm/ad937x/ad937x_ctrl.hpp b/mpm/include/mpm/ad937x/ad937x_ctrl.hpp index cb4d0e060..44e814e60 100644 --- a/mpm/include/mpm/ad937x/ad937x_ctrl.hpp +++ b/mpm/include/mpm/ad937x/ad937x_ctrl.hpp @@ -86,6 +86,7 @@ public: std::future handle_finish_initialization; std::future handle_setup_cal; std::future handle_set_freq; + std::future handle_set_master_clock_rate; /*! \brief make a new AD9371 ctrl object using the specified SPI iface * @@ -283,6 +284,20 @@ void export_mykonos(py::module& top_module) py::class_>(m, "ad937x_ctrl") .def("set_master_clock_rate", &ad937x_ctrl::set_master_clock_rate) + .def("async__set_master_clock_rate", + +[](ad937x_ctrl& self, const double rate) { + self.handle_set_master_clock_rate = std::async(std::launch::async, + [&self, rate]() { self.set_master_clock_rate(rate); }); + }) + .def("await__set_master_clock_rate", + +[](ad937x_ctrl& self) -> bool { + if (self.handle_set_master_clock_rate.wait_for(std::chrono::seconds(0)) + == std::future_status::ready) { + self.handle_set_master_clock_rate.get(); + return true; + } + return false; + }) .def("begin_initialization", &ad937x_ctrl::begin_initialization) .def("async__finish_initialization", +[](ad937x_ctrl& self) { -- cgit v1.2.3