You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
3.0 KiB
86 lines
3.0 KiB
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 |