def check_set_multi_node_index(self, interface): # check if need to set different node index on multi-node processor and set if needed if self.multi_node_index == self.multi_curnode_index_holder[0]: return True success = False chk_retry_count = 0 out_value = None while success is False: if self.write_block(interface, WRITE_CURNODE_INDEX, pack_8(self.multi_node_index), False): data = self.read_block(interface, READ_CURNODE_INDEX, 1, 0, False) out_value = unpack_8(data) if data != None else None if out_value == self.multi_node_index: success = True else: chk_retry_count = chk_retry_count + 1 self.inc_read_error_count(interface) if chk_retry_count <= MAX_RETRY_COUNT * 5: self.node_log(interface, 'Error setting WRITE_CURNODE_INDEX, old={0}, new={1}, idx={2}, retry={3}'.\ format(self.multi_curnode_index_holder[0], self.multi_node_index, self.index, chk_retry_count)) gevent.sleep(0.025) else: self.node_log(interface, 'Error setting WRITE_CURNODE_INDEX, retry limit reached, old={0}, new={1}, idx={2}, retry={3}'.\ format(self.multi_curnode_index_holder[0], self.multi_node_index, self.index, chk_retry_count)) break if success: self.multi_curnode_index_holder[0] = self.multi_node_index return success
def jump_to_bootloader(self, interface): try: if self.api_level >= 32: self.node_log(interface, 'Sending JUMP_TO_BOOTLOADER message to serial node {0}'.format(self.index+1)) self.write_block(interface, JUMP_TO_BOOTLOADER, pack_8(0), False) self.serial.flushInput() time.sleep(0.1) self.serial.flushInput() self.serial.flushOutput() self.serial.close() except Exception as ex: self.node_log(interface, 'Error sending JUMP_TO_BOOTLOADER message to serial node {0}: {1}'.format(self.index+1, ex))