def get_retimer_inv(self, route): ocs_list = self.get_cmis() assert len(ocs_list) == 8 retimer_inv_table = { 'oneta' : [ 0b0010000000000000, 0b0000000000010000, 0b0101000011110000, 0b1010000011110000], 'onetb' : [ 0b0010000000000000, 0b0000000000010000, 0b0101000011110000, 0b1010000011110000], 'onoc1' : [ 0b1000000010000000, 0b1110000000100000, 0b1111000001110000, 0b0100000011000000], 'onoc2' : [ 0b0000000000100000, 0b0000000000010000, 0b0101000011110000, 0b0111000000100000], 'onoc3' : [ 0b0000000000000000, 0b0000000000110000, 0b1110000010010000, 0b1100000001000000], 'onoc4' : [ 0b1000000010000000, 0b0011000011110000, 0b1101000001010000, 0b0100000011000000], 'onoc5' : [ 0b1110000000110000, 0b1000000010010000, 0b1101000001110000, 0b0110000011000000], 'onoc6' : [ 0b0011000011100000, 0b1000000010010000, 0b1101000001110000, 0b0100000011100000], 'onoc7' : [ 0b0000000000000000, 0b0010000000010000, 0b0011000001000000, 0b1100000001000000] } retimer_inv = retimer_inv_table[route] route_list = abc_ocs.ROUTE_TABLE[route] if 'onoc' in route else list(range(1, 9)) for ocs in ocs_list: ocs_inv_flag = bin(ocs.read_mzm_direction())[2:].zfill(8) inv_flag = '' for i in range(0, 8): inv_flag += ocs_inv_flag[route_list[i] - 1] log.inf(f'inv: {ocs}: {ocs_inv_flag}, -> rtm: {inv_flag}') if inv_flag[7] == '1': mask_ = 1 << (ocs.index_) retimer_inv[1] ^= mask_ if inv_flag[6] == '1': mask_ = 1 << (ocs.index_) retimer_inv[3] ^= mask_ if inv_flag[5] == '1': mask_ = 1 << (ocs.index_ + 8) retimer_inv[3] ^= mask_ if inv_flag[4] == '1': mask_ = 1 << (ocs.index_ + 8) retimer_inv[1] ^= mask_ if inv_flag[3] == '1': mask_ = 1 << (ocs.index_) retimer_inv[0] ^= mask_ if inv_flag[2] == '1': mask_ = 1 << (ocs.index_) retimer_inv[2] ^= mask_ if inv_flag[1] == '1': mask_ = 1 << (ocs.index_ + 8) retimer_inv[2] ^= mask_ if inv_flag[0] == '1': mask_ = 1 << (ocs.index_ + 8) retimer_inv[0] ^= mask_ return retimer_inv