diff options
| author | Michael Auchter <michael.auchter@ni.com> | 2019-09-24 09:50:22 -0500 | 
|---|---|---|
| committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2021-02-11 12:26:10 -0600 | 
| commit | 5ef29d93966aecb3c678aa5ee92cf60b0db835e5 (patch) | |
| tree | 29aeb0513c2e7e27e486e092cb48cb85d936566e /mpm/python | |
| parent | 9ffdd46974fa83db7ef4a76202e6708f776a327a (diff) | |
| download | uhd-5ef29d93966aecb3c678aa5ee92cf60b0db835e5.tar.gz uhd-5ef29d93966aecb3c678aa5ee92cf60b0db835e5.tar.bz2 uhd-5ef29d93966aecb3c678aa5ee92cf60b0db835e5.zip | |
mpm: deduplicate dboard eeprom handling
The _get_dboard_eeprom_info implementations are the same with the
exception of how the dboard eeprom is actually read. Break that out into
a _read_dboard_eeprom method to reduce code duplication.
The base class now defines a lambda expression for the eeprom reader
which can be changed in subclasses.
Co-authored-by: Lars Amsel <lars.amsel@ni.com>
Co-authored-by: Michael Auchter <michael.auchter@ni.com>
Diffstat (limited to 'mpm/python')
| -rw-r--r-- | mpm/python/usrp_mpm/periph_manager/base.py | 42 | ||||
| -rw-r--r-- | mpm/python/usrp_mpm/periph_manager/e31x.py | 26 | 
2 files changed, 29 insertions, 39 deletions
| diff --git a/mpm/python/usrp_mpm/periph_manager/base.py b/mpm/python/usrp_mpm/periph_manager/base.py index a6bffafed..c2da31b8f 100644 --- a/mpm/python/usrp_mpm/periph_manager/base.py +++ b/mpm/python/usrp_mpm/periph_manager/base.py @@ -86,6 +86,16 @@ class PeriphManagerBase(object):      # read. It's usually safe to not override this, as EEPROMs typically aren't      # that big.      mboard_eeprom_max_len = None +    # lambda expression for motherboard EEPROM readers. path is the only dynamic +    # parameter that is passed to the reader. Subclasses change the lambda +    # expression to use EEPROM readers with different signatures. +    mboard_eeprom_reader = lambda path: eeprom.read_eeprom( +        path, +        PeriphManagerBase.mboard_eeprom_offset, +        eeprom.MboardEEPROM.eeprom_header_format, +        eeprom.MboardEEPROM.eeprom_header_keys, +        PeriphManagerBase.mboard_eeprom_magic, +        PeriphManagerBase.mboard_eeprom_max_len)      # This is the *default* mboard info. The keys from this dict will be copied      # into the current device info before it actually gets initialized. This      # means that keys from this dict could be overwritten during the @@ -130,6 +140,16 @@ class PeriphManagerBase(object):      # read. It's usually safe to not override this, as EEPROMs typically aren't      # that big.      dboard_eeprom_max_len = None +    # lambda expression for daughterboard EEPROM readers. path is the only +    # dynamic parameter that is passed to the reader. Subclasses change the +    # lambda expression to use EEPROM readers with different signatures. +    dboard_eeprom_reader = lambda path: eeprom.read_eeprom( +        path, +        PeriphManagerBase.dboard_eeprom_offset, +        eeprom.DboardEEPROM.eeprom_header_format, +        eeprom.DboardEEPROM.eeprom_header_keys, +        PeriphManagerBase.dboard_eeprom_magic, +        PeriphManagerBase.dboard_eeprom_max_len)      # If the dboard requires spidev access, the following attribute is a list      # of SPI master addrs (typically something like 'e0006000.spi'). You      # usually want the length of this list to be as long as the number of @@ -285,14 +305,8 @@ class PeriphManagerBase(object):                                 self.mboard_eeprom_addr)                  return {}, b''              self.log.trace("Found mboard EEPROM path: %s", eeprom_paths[0]) -            (eeprom_head, eeprom_rawdata) = eeprom.read_eeprom( -                eeprom_paths[0], -                self.mboard_eeprom_offset, -                eeprom.MboardEEPROM.eeprom_header_format, -                eeprom.MboardEEPROM.eeprom_header_keys, -                self.mboard_eeprom_magic, -                self.mboard_eeprom_max_len, -            ) +            (eeprom_head, eeprom_rawdata) = \ +                self.__class__.mboard_eeprom_reader(eeprom_paths[0])              self.log.trace("Found EEPROM metadata: `{}'"                             .format(str(eeprom_head)))              self.log.trace("Read {} bytes of EEPROM data." @@ -381,13 +395,8 @@ class PeriphManagerBase(object):          dboard_info = []          for dboard_idx, dboard_eeprom_path in enumerate(dboard_eeprom_paths):              self.log.debug("Reading EEPROM info for dboard %d...", dboard_idx) -            dboard_eeprom_md, dboard_eeprom_rawdata = eeprom.read_eeprom( -                dboard_eeprom_path, -                self.dboard_eeprom_offset, -                eeprom.DboardEEPROM.eeprom_header_format, -                eeprom.DboardEEPROM.eeprom_header_keys, -                self.dboard_eeprom_magic, -                self.dboard_eeprom_max_len, +            dboard_eeprom_md, dboard_eeprom_rawdata = self._read_dboard_eeprom( +                dboard_eeprom_path              )              self.log.trace("Found dboard EEPROM metadata: `{}'"                             .format(str(dboard_eeprom_md))) @@ -406,6 +415,9 @@ class PeriphManagerBase(object):              })          return dboard_info +    def _read_dboard_eeprom(self, dboard_eeprom_path): +        return self.__class__.dboard_eeprom_reader(dboard_eeprom_path) +      def _update_default_args(self, default_args):          """          Pipe the default_args (that get passed into us from the RPC server) diff --git a/mpm/python/usrp_mpm/periph_manager/e31x.py b/mpm/python/usrp_mpm/periph_manager/e31x.py index 17cd09c16..94d6f7529 100644 --- a/mpm/python/usrp_mpm/periph_manager/e31x.py +++ b/mpm/python/usrp_mpm/periph_manager/e31x.py @@ -361,18 +361,8 @@ class e31x(ZynqComponents, PeriphManagerBase):          self.log.trace("Read %d bytes of EEPROM data.", len(eeprom_rawdata))          return eeprom_head, eeprom_rawdata -    def _get_dboard_eeprom_info(self): -        """ -        Read back EEPROM info from the daughterboards -        """ -        assert self.dboard_eeprom_addr -        self.log.trace("Identifying dboard EEPROM paths from `{}'..." -                       .format(self.dboard_eeprom_addr)) -        dboard_eeprom_path = \ -            get_eeprom_paths(self.dboard_eeprom_addr)[self.dboard_eeprom_path_index] -        self.log.trace("Using dboard EEPROM paths: {}".format(dboard_eeprom_path)) -        self.log.debug("Reading EEPROM info for dboard...") -        dboard_eeprom_md, dboard_eeprom_rawdata = e31x_legacy_eeprom.read_eeprom( +    def _read_dboard_eeprom(self, dboard_eeprom_path): +        return e31x_legacy_eeprom.read_eeprom(              False, # is not motherboard.              dboard_eeprom_path,              self.dboard_eeprom_offset, @@ -380,18 +370,6 @@ class e31x(ZynqComponents, PeriphManagerBase):              e31x_legacy_eeprom.DboardEEPROM.eeprom_header_keys,              self.dboard_eeprom_max_len          ) -        self.log.trace("Read %d bytes of dboard EEPROM data.", -                       len(dboard_eeprom_rawdata)) -        db_pid = dboard_eeprom_md.get('pid') -        if db_pid is None: -            self.log.warning("No DB PID found in dboard EEPROM!") -        else: -            self.log.debug("Found DB PID in EEPROM: 0x{:04X}".format(db_pid)) -        return [{ -            'eeprom_md': dboard_eeprom_md, -            'eeprom_rawdata': dboard_eeprom_rawdata, -            'pid': db_pid, -        }]      ###########################################################################      # Session init and deinit | 
