From 3c3c3955143ed249bdbff43cb51f8f41d33f8adb Mon Sep 17 00:00:00 2001 From: xz_ocs Date: Wed, 29 Oct 2025 07:20:46 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20'ocs/get=5Fretimer=5Finv'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ocs/get_retimer_inv | 86 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 ocs/get_retimer_inv diff --git a/ocs/get_retimer_inv b/ocs/get_retimer_inv new file mode 100644 index 0000000..654702f --- /dev/null +++ b/ocs/get_retimer_inv @@ -0,0 +1,86 @@ + 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 \ No newline at end of file