From 5c489c2597948b131aaddb516fe6af40e438b251 Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Fri, 6 Oct 2017 16:58:52 -0700 Subject: mpm/n310: Moved the mboard ref_locked sensor into MPM An N310 device will query all its dboards for ref lock status and return a Boolean combination as a motherboard sensors (note: the N310 does not actually have a ref_locked sensor on the motherboard, this is mostly for backwards-compat with UHD applications that expect a motherboard ref lock sensor). --- host/lib/usrp/mpmd/mpmd_impl.cpp | 8 -------- mpm/python/usrp_mpm/periph_manager/n310.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/host/lib/usrp/mpmd/mpmd_impl.cpp b/host/lib/usrp/mpmd/mpmd_impl.cpp index 93e777af2..1b22ed294 100644 --- a/host/lib/usrp/mpmd/mpmd_impl.cpp +++ b/host/lib/usrp/mpmd/mpmd_impl.cpp @@ -98,14 +98,6 @@ namespace { ); }) ; - tree->create( - mb_path / "sensors/ref_locked") - .set_publisher([](){ - return sensor_value_t ( - "Ref", true, "locked", "unlocked" // FIXME: Remove hardcoded "true" - ); - }) - ; /*** Sensors ********************************************************/ auto sensor_list = diff --git a/mpm/python/usrp_mpm/periph_manager/n310.py b/mpm/python/usrp_mpm/periph_manager/n310.py index c6ae10241..a920fd35b 100644 --- a/mpm/python/usrp_mpm/periph_manager/n310.py +++ b/mpm/python/usrp_mpm/periph_manager/n310.py @@ -214,6 +214,9 @@ class n310(PeriphManagerBase): mboard_eeprom_max_len = 256 mboard_info = {"type": "n3xx"} mboard_max_rev = 3 # 3 == RevD + mboard_sensor_callback_map = { + 'ref_locked': 'get_ref_lock_sensor', + } dboard_eeprom_addr = "e0004000.i2c" dboard_eeprom_max_len = 64 # We're on a Zynq target, so the following two come from the Zynq standard @@ -483,3 +486,28 @@ class n310(PeriphManagerBase): )) self._gpios.set("PWREN-CLK-MAINREF", int(bool(enable))) + ########################################################################### + # Sensors + ########################################################################### + def get_ref_lock_sensor(self): + """ + The N310 has no ref lock sensor, but because the ref lock is + historically considered a motherboard-level sensor, we will return the + combined lock status of all daughterboards. If no dboard is connected, + or none has a ref lock sensor, we simply return True. + """ + self.log.trace( + "Querying ref lock status from %d dboards.", + len(self.dboards) + ) + lock_status = all([ + not hasattr(db, 'get_ref_lock') or db.get_ref_lock() + for db in self.dboards + ]) + return { + 'name': 'ref_locked', + 'type': 'BOOLEAN', + 'unit': 'locked' if lock_status else 'unlocked', + 'value': str(lock_status).lower(), + } + -- cgit v1.2.3