def query_fast_io_boards(self):

        self.platform.log.debug('Querying FAST IO boards...')

        firmware_ok = True

        for board_id in range(8):
            self.serial_connection.write('NN:{0}\r'.format(board_id))
            msg = self.serial_io.readline()
            if msg.startswith('NN:'):

                node_id, model, fw, sw, dr, _, _, _, _, _, _ = msg.split(',')
                node_id = node_id[3:]
                model = model.strip()

                # I don't know what character it returns for a non-existent
                # board, I just know they're all the same
                if model == len(model) * model[0]:
                    model = False

                if model:
                    self.platform.log.info('Fast IO Board {0}: Model: {1}, '
                                           'Firmware: {2}, Switches: {3}, '
                                           'Drivers: {4}'.format(node_id, model,
                                           fw, int(sw, 16), int(dr, 16)))

                    if StrictVersion(IO_MIN_FW) > str(fw):
                        self.platform.log.critical("Firmware version mismatch. MPF "
                            "requires the IO boards to be firmware {0}, but "
                            "your Board {1} ({2}) is v{3}".format(IO_MIN_FW,
                            node_id, model, fw))
                        firmware_ok = False

        if not firmware_ok:
            self.platform.log.critical("Exiting due to IO board firmware "
                                       "mismatch")
            sys.exit()
Queries the NET processor to see if any FAST IO boards are connected,
dataset/ETHPy150Open missionpinball/mpf/mpf/platform/fast.py/SerialCommunicator.query_fast_io_boards