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
|
3 months ago
|
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
|