Ejemplo n.º 1
0
    def _init_dboards(self, dboard_infos, override_dboard_pids, default_args):
        """
        Initialize all the daughterboards

        dboard_infos -- List of dictionaries as returned from
                       PeriphManagerBase._get_dboard_eeprom_info()
        override_dboard_pids -- List of dboard PIDs to force
        default_args -- Default args
        """
        # Overriding DB PIDs doesn't work here, the DB is coupled to the MB
        if override_dboard_pids:
            raise NotImplementedError("Can't override dboard pids")
        # We have only one dboard
        dboard_info = dboard_infos[0]
        # Set up the SPI nodes
        assert len(self.dboard_spimaster_addrs) == 1
        spi_nodes = get_spidev_nodes(self.dboard_spimaster_addrs[0])
        assert spi_nodes
        self.log.trace("Found spidev nodes: {0}".format(str(spi_nodes)))
        dboard_info.update({
            'spi_nodes': spi_nodes,
            'default_args': default_args,
        })
        self.dboards.append(E31x_db(E310_DBOARD_SLOT_IDX, **dboard_info))
        self.log.info("Found %d daughterboard(s).", len(self.dboards))
Ejemplo n.º 2
0
    def _init_dboards(self, dboard_infos, override_dboard_pids, default_args):
        """
        Initialize all the daughterboards

        dboard_infos -- List of dictionaries as returned from
                       _get_dboard_eeprom_info()
        override_dboard_pids -- List of dboard PIDs to force
        default_args -- Default args
        """
        if override_dboard_pids:
            self.log.warning("Overriding daughterboard PIDs with: {}".format(
                ",".join(override_dboard_pids)))
        assert len(dboard_infos) <= self.max_num_dboards
        if override_dboard_pids and \
                len(override_dboard_pids) < len(dboard_infos):
            self.log.warning("--override-db-pids is going to skip dboards.")
            dboard_infos = dboard_infos[:len(override_dboard_pids)]
        for dboard_idx, dboard_info in enumerate(dboard_infos):
            self.log.debug("Initializing dboard %d...", dboard_idx)
            db_pid = dboard_info.get('pid')
            db_class = get_dboard_class_from_pid(db_pid)
            if db_class is None:
                self.log.warning("Could not identify daughterboard class "
                                 "for PID {:04X}! Skipping.".format(db_pid))
                continue
            if len(self.dboard_spimaster_addrs) > dboard_idx:
                spi_nodes = sorted(
                    get_spidev_nodes(self.dboard_spimaster_addrs[dboard_idx]))
                self.log.trace("Found spidev nodes: {0}".format(spi_nodes))
            else:
                spi_nodes = []
                self.log.warning("No SPI nodes for dboard %d.", dboard_idx)
            dboard_info.update({
                'spi_nodes': spi_nodes,
                'default_args': default_args,
            })
            # If the MB supports the DB Iface architecture, pass
            # the corresponding DB Iface to the dboard class
            if self.db_iface is not None:
                dboard_info['db_iface'] = self.db_iface(dboard_idx, self)
            # This will actually instantiate the dboard class:
            self.dboards.append(db_class(dboard_idx, **dboard_info))
        self.log.info("Initialized %d daughterboard(s).", len(self.dboards))
Ejemplo n.º 3
0
Archivo: base.py Proyecto: dkozel/uhd
    def _init_dboards(self, dboard_infos, override_dboard_pids, default_args):
        """
        Initialize all the daughterboards

        dboard_infos -- List of dictionaries as returned from
                       _get_dboard_eeprom_info()
        override_dboard_pids -- List of dboard PIDs to force
        default_args -- Default args
        """
        if override_dboard_pids:
            self.log.warning("Overriding daughterboard PIDs with: {}"
                             .format(",".join(override_dboard_pids)))
        assert len(dboard_infos) <= self.max_num_dboards
        if len(override_dboard_pids) and \
                len(override_dboard_pids) < len(dboard_infos):
            self.log.warning("--override-db-pids is going to skip dboards.")
            dboard_infos = dboard_infos[:len(override_dboard_pids)]
        for dboard_idx, dboard_info in enumerate(dboard_infos):
            self.log.debug("Initializing dboard %d...", dboard_idx)
            db_pid = dboard_info.get('pid')
            db_class = get_dboard_class_from_pid(db_pid)
            if db_class is None:
                self.log.warning("Could not identify daughterboard class "
                                 "for PID {:04X}! Skipping.".format(db_pid))
                continue
            if len(self.dboard_spimaster_addrs) > dboard_idx:
                spi_nodes = sorted(get_spidev_nodes(
                    self.dboard_spimaster_addrs[dboard_idx]))
                self.log.trace("Found spidev nodes: {0}".format(spi_nodes))
            else:
                spi_nodes = []
                self.log.warning("No SPI nodes for dboard %d.", dboard_idx)
            dboard_info.update({
                'spi_nodes': spi_nodes,
                'default_args': default_args,
            })
            # This will actually instantiate the dboard class:
            self.dboards.append(db_class(dboard_idx, **dboard_info))
        self.log.info("Initialized %d daughterboard(s).", len(self.dboards))
Ejemplo n.º 4
0
Archivo: e320.py Proyecto: zwm152/uhd
    def _init_dboards(self, _, override_dboard_pids, default_args):
        """
        Initialize all the daughterboards

        (dboard_infos) -- N/A
        override_dboard_pids -- List of dboard PIDs to force
        default_args -- Default args
        """
        # Override the base class's implementation in order to avoid initializing our one "dboard"
        # in the same way that, for example, N310's dboards are initialized. Specifically,
        # - skip dboard EEPROM setup (we don't have one)
        # - change the way we handle SPI devices
        if override_dboard_pids:
            self.log.warning("Overriding daughterboard PIDs with: {}".format(
                override_dboard_pids))
            raise NotImplementedError("Can't override dboard pids")
        # The DBoard PID is the same as the MBoard PID
        db_pid = list(self.pids.keys())[0]
        # Set up the SPI nodes
        spi_nodes = []
        for spi_addr in self.dboard_spimaster_addrs:
            for spi_node in get_spidev_nodes(spi_addr):
                bisect.insort(spi_nodes, spi_node)
        self.log.trace("Found spidev nodes: {0}".format(spi_nodes))

        if not spi_nodes:
            self.log.warning("No SPI nodes for dboard %d.",
                             E320_DBOARD_SLOT_IDX)
        dboard_info = {
            'eeprom_md': self.mboard_info,
            'eeprom_rawdata': self._eeprom_rawdata,
            'pid': db_pid,
            'spi_nodes': spi_nodes,
            'default_args': default_args,
        }
        # This will actually instantiate the dboard class:
        self.dboards.append(Neon(E320_DBOARD_SLOT_IDX, **dboard_info))
        self.log.info("Found %d daughterboard(s).", len(self.dboards))
Ejemplo n.º 5
0
Archivo: e320.py Proyecto: bpkempke/uhd
    def _init_dboards(self, _, override_dboard_pids, default_args):
        """
        Initialize all the daughterboards

        (dboard_infos) -- N/A
        override_dboard_pids -- List of dboard PIDs to force
        default_args -- Default args
        """
        # Override the base class's implementation in order to avoid initializing our one "dboard"
        # in the same way that, for example, N310's dboards are initialized. Specifically,
        # - skip dboard EEPROM setup (we don't have one)
        # - change the way we handle SPI devices
        if override_dboard_pids:
            self.log.warning("Overriding daughterboard PIDs with: {}"
                             .format(override_dboard_pids))
            raise NotImplementedError("Can't override dboard pids")
        # The DBoard PID is the same as the MBoard PID
        db_pid = list(self.pids.keys())[0]
        # Set up the SPI nodes
        spi_nodes = []
        for spi_addr in self.dboard_spimaster_addrs:
            for spi_node in get_spidev_nodes(spi_addr):
                bisect.insort(spi_nodes, spi_node)
        self.log.trace("Found spidev nodes: {0}".format(spi_nodes))

        if not spi_nodes:
            self.log.warning("No SPI nodes for dboard %d.", E320_DBOARD_SLOT_IDX)
        dboard_info = {
            'eeprom_md': self.mboard_info,
            'eeprom_rawdata': self._eeprom_rawdata,
            'pid': db_pid,
            'spi_nodes': spi_nodes,
            'default_args': default_args,
        }
        # This will actually instantiate the dboard class:
        self.dboards.append(Neon(E320_DBOARD_SLOT_IDX, **dboard_info))
        self.log.info("Found %d daughterboard(s).", len(self.dboards))
Ejemplo n.º 6
0
    def _init_dboards(self, dboard_infos, override_dboard_pids, default_args):
        """
        Initialize all the daughterboards

        dboard_infos -- List of dictionaries as returned from
                       PeriphManagerBase._get_dboard_eeprom_info()
        override_dboard_pids -- List of dboard PIDs to force
        default_args -- Default args
        """
        # Override the base class's implementation in order to avoid initializing our one "dboard"
        # in the same way that, for example, N310's dboards are initialized. Specifically,
        # - skip dboard EEPROM setup (we don't have one)
        # - change the way we handle SPI devices
        if override_dboard_pids:
            self.log.warning("Overriding daughterboard PIDs with: {}"
                             .format(override_dboard_pids))
            raise NotImplementedError("Can't override dboard pids")
        # We have only one dboard
        dboard_info = dboard_infos[0]
        # Set up the SPI nodes
        spi_nodes = []
        for spi_addr in self.dboard_spimaster_addrs:
            for spi_node in get_spidev_nodes(spi_addr):
                bisect.insort(spi_nodes, spi_node)

        self.log.trace("Found spidev nodes: {0}".format(spi_nodes))

        if not spi_nodes:
            self.log.warning("No SPI nodes for dboard %d.", E310_DBOARD_SLOT_IDX)
        else:
            dboard_info.update({
                    'spi_nodes': spi_nodes,
                    'default_args': default_args,
                })

        self.dboards.append(E31x_db(E310_DBOARD_SLOT_IDX, **dboard_info))
        self.log.info("Found %d daughterboard(s).", len(self.dboards))
Ejemplo n.º 7
0
 def _init_dboards(self, override_dboard_pids, default_args):
     """
     Initialize all the daughterboards
     """
     # Go, go, go!
     override_dboard_pids = override_dboard_pids or []
     if override_dboard_pids:
         self.log.warning("Overriding daughterboard PIDs with: {}".format(
             override_dboard_pids))
     dboard_eeprom_addrs = self.dboard_eeprom_addr \
                           if isinstance(self.dboard_eeprom_addr, list) \
                           else [self.dboard_eeprom_addr]
     dboard_eeprom_paths = []
     self.log.trace(
         "Identifying dboard EEPROM paths from addrs `{}'...".format(
             ",".join(dboard_eeprom_addrs)))
     for dboard_eeprom_addr in dboard_eeprom_addrs:
         self.log.trace("Resolving %s...", dboard_eeprom_addr)
         dboard_eeprom_paths += get_eeprom_paths(dboard_eeprom_addr)
     self.log.trace("Found dboard EEPROM paths: {}".format(
         ",".join(dboard_eeprom_paths)))
     if len(dboard_eeprom_paths) > self.max_num_dboards:
         self.log.warning("Found more EEPROM paths than daughterboards. "
                          "Ignoring some of them.")
         dboard_eeprom_paths = dboard_eeprom_paths[:self.max_num_dboards]
     if len(override_dboard_pids) and \
             len(override_dboard_pids) < len(dboard_eeprom_paths):
         self.log.warning("--override-db-pids is going to skip dboards.")
         dboard_eeprom_paths = \
                 dboard_eeprom_paths[:len(override_dboard_pids)]
     for dboard_idx, dboard_eeprom_path in enumerate(dboard_eeprom_paths):
         self.log.debug("Initializing dboard %d...", dboard_idx)
         dboard_eeprom_md, dboard_eeprom_rawdata = eeprom.read_eeprom(
             dboard_eeprom_path,
             eeprom.DboardEEPROM.eeprom_header_format,
             eeprom.DboardEEPROM.eeprom_header_keys,
             self.dboard_eeprom_magic,
             self.dboard_eeprom_max_len,
         )
         self.log.trace("Found dboard EEPROM metadata: `{}'".format(
             str(dboard_eeprom_md)))
         self.log.trace("Read %d bytes of dboard EEPROM data.",
                        len(dboard_eeprom_rawdata))
         if len(override_dboard_pids) > dboard_idx:
             db_pid = override_dboard_pids[dboard_idx]
             self.log.warning("Overriding dboard PID for dboard {} "
                              "with 0x{:04X}.".format(dboard_idx, db_pid))
         else:
             db_pid = dboard_eeprom_md.get('pid')
             if db_pid is None:
                 self.log.warning("No dboard PID found in dboard EEPROM!")
             else:
                 self.log.debug(
                     "Found dboard PID in EEPROM: 0x{:04X}".format(db_pid))
         db_class = get_dboard_class_from_pid(db_pid)
         if db_class is None:
             self.log.warning("Could not identify daughterboard class "
                              "for PID {:04X}!".format(db_pid))
             continue
         if len(self.dboard_spimaster_addrs) > dboard_idx:
             spi_nodes = sorted(
                 get_spidev_nodes(self.dboard_spimaster_addrs[dboard_idx]))
             self.log.trace("Found spidev nodes: {0}".format(spi_nodes))
         else:
             spi_nodes = []
             self.log.warning("No SPI nodes for dboard %d.", dboard_idx)
         dboard_info = {
             'eeprom_md': dboard_eeprom_md,
             'eeprom_rawdata': dboard_eeprom_rawdata,
             'pid': db_pid,
             'spi_nodes': spi_nodes,
             'default_args': default_args,
         }
         # This will actually instantiate the dboard class:
         self.dboards.append(db_class(dboard_idx, **dboard_info))
     self.log.info("Found %d daughterboard(s).", len(self.dboards))