def add_linkLayer(apdu_list, CA_text='00', SA_text='00000001', logic_addr=0, SA_type=0, C_text='43'): """add linklayer""" SA_list = commonfun.text2list(SA_text) SA_list.reverse() # 小端 SA_text = ''.join(SA_list) if len(SA_text) % 2 == 1: SA_text += '0' L_text = '{0:04X}'.format(len(SA_text) // 2 + 9 + len(apdu_list)) L_text = L_text[2:4] + L_text[0:2] SA_param_text = '{0:02X}'.format(((len(SA_text) // 2 - 1) & 0x0f) | ((logic_addr & 0x03) << 4) | ((SA_type & 0x03) << 6)) hcs_clac_aera_text = L_text + C_text + SA_param_text + SA_text + CA_text hcs_calc = commonfun.get_fcs(commonfun.text2list(hcs_clac_aera_text)) hcs_calc = ((hcs_calc << 8) | (hcs_calc >> 8)) & 0xffff # 低位在前 fcs_calc_aera_text = hcs_clac_aera_text + '{0:04X}'.format( hcs_calc) + commonfun.list2text(apdu_list) fcs_calc = commonfun.get_fcs(commonfun.text2list(fcs_calc_aera_text)) fcs_calc = ((fcs_calc << 8) | (fcs_calc >> 8)) & 0xffff # 低位在前 return commonfun.format_text('68' + fcs_calc_aera_text + '{0:04X}'.format(fcs_calc) + '16')
def send_apdu(self, apdu_text, tmn_addr='', logic_addr=-1, chan_index=-1, C_text='43'): """apdu to compelete msg to send""" if self.is_plaintext_rn: # 10 + 00 + len + apdu + 0110 5FE30D32D6A20288F9112B5C6052CFDB(fixme: 先固定一个随机数) apdu_len = len(common.text2list(apdu_text)) apdu_head = '1000' #安全请求+明文应用数据单元 if apdu_len < 128: apdu_head += "%02X"%apdu_len elif apdu_len < 256: apdu_head += "81%02X"%apdu_len else: apdu_head += "82%04X"%apdu_len apdu_text = apdu_head + apdu_text + '0110 5FE30D32D6A20288F9112B5C6052CFDB' # print('读取明文+随机{}:{}'.format(len(common.text2list(apdu_text)), apdu_text)) for row in [x for x in range(self.tmn_table.rowCount())\ if self.tmn_table.cellWidget(x, 0).isChecked()]: if tmn_addr and tmn_addr != self.tmn_table.item(row, 1).text(): continue # if logic_addr != -1 and logic_addr != self.tmn_table.cellWidget(row, 2).value(): # continue if chan_index != -1 and chan_index != self.tmn_table.cellWidget(row, 3).currentIndex(): continue compelete_msg = linklayer.add_linkLayer(common.text2list(apdu_text),\ logic_addr=self.tmn_table.cellWidget(row, 2).value(),\ SA_text=self.tmn_table.item(row, 1).text(),\ CA_text=config.COMMU.master_addr, C_text=C_text) config.COMMU.send_msg(compelete_msg, self.tmn_table.cellWidget(row, 3).currentIndex())
def re_local_net(self, re_text): m_data = common.text2list(re_text) data = common.get_apdu_list(m_data) offset = 7 if data[offset] == '01': self.res_b.setStyleSheet('color: green') self.res_b.setText('成功') offset += 4 self.local_ip_mode_l.setCurrentIndex({ '00': 0, '01': 1, '02': 2 }[data[offset]]) offset += 3 self.local_ip_box.setText(param.get_ip(data[offset:])) offset += 6 self.local_mask_box.setText(param.get_ip(data[offset:])) offset += 6 self.local_gate_addr_box.setText(param.get_ip(data[offset:])) offset += 4 ret = param.get_visible(data[offset:]) self.ppp_usr_box.setText(ret['visible']) offset += ret['offset'] ret = param.get_visible(data[offset:]) self.ppp_pw_box.setText(ret['visible']) offset += ret['offset'] else: self.res_b.setStyleSheet('color: red') self.res_b.setText('失败:' + base_data.get_dar(int(data[offset + 1], 16))) config.MASTER_WINDOW.receive_signal.disconnect(self.re_local_net)
def re_msg_do(self, re_text, chan_index): """recieve text""" self.add_msg_table_row(re_text, chan_index, '←') if self.quick_read_panel.oad_auto_r_cb.isChecked( ) and common.get_msg_service_no(re_text) == self.auto_r_piid: self.receive_cnt += 1 self.quick_read_panel.receive_cnt_l.setText('收%d' % self.receive_cnt) if time.time() - self.timer > self.infol_cycle: print('update info') self.timer = time.time() self.update_infol(tmout=2) apdu_list = common.get_apdu_list(common.text2list(re_text)) if apdu_list and ''.join(apdu_list[0:2]) == '8501' and ''.join( apdu_list[3:7]) == '40000200' and apdu_list[7] == '01': offset = 9 DT_read = QtCore.QDateTime( (int(apdu_list[offset], 16) << 8) | int(apdu_list[offset + 1], 16), int(apdu_list[offset + 2], 16), int(apdu_list[offset + 3], 16), int(apdu_list[offset + 4], 16), int(apdu_list[offset + 5], 16), int(apdu_list[offset + 6], 16), ) self.quick_set_time_panel.dt_box.setDateTime(DT_read)
def send_msg(self, m_text, chan_index): """send message""" m_list = common.text2list(m_text) send_b = b''.join(map(lambda x: struct.pack('B', int(x, 16)), m_list)) if self.is_serial_running and chan_index in [-1, 0]: try: self.serial_handle.write(send_b) config.MASTER_WINDOW.send_signal.emit( common.format_text(m_text), 0) except Exception: print('serial send err') self.serial_disconnect() if self.is_frontend_running and chan_index in [-1, 1]: try: self.frontend_handle.sendall(send_b) config.MASTER_WINDOW.send_signal.emit( common.format_text(m_text), 1) except Exception: print('frontend send err') self.frontend_disconnect() if self.is_server_running and chan_index in [-1, 2]: for client_handle, client_addr in self.client_list: try: client_handle.sendall(send_b) print('send to client', client_addr) except Exception: traceback.print_exc() client_handle.close() self.client_list.remove((client_handle, client_addr)) print('del client', client_addr) config.MASTER_WINDOW.send_signal.emit(common.format_text(m_text), 2)
def server_read_loop(self, client_handle, client_addr): """server loop""" re_msg_buf = [] # client_handle.settimeout(0.001) while True: try: re_byte = client_handle.recv(1) except Exception: print(client_addr, 'client err quit') break if not re_byte: print('clint err quit') break if re_byte in [b'\x68', b'\x98']: re_byte += client_handle.recv(20480) re_msg_buf += common.text2list(''.join( ['%02X ' % x for x in re_byte])) msgs = common.search_msg(re_msg_buf) for msg in msgs: self.receive_msg(msg, 2) re_msg_buf = [] if self.is_server_running is False: print('server_run quit') break client_handle.shutdown(socket.SHUT_RDWR) client_handle.close() self.client_list.remove((client_handle, client_addr))
def re_esam_certi(self, re_text): m_data = common.text2list(re_text) data = common.get_apdu_list(m_data) offset = 4 res_sum = True offset += 4 if data[offset] == '01': offset += 1 ret = param.get_octet(data[offset:]) self.esam_certi_ver_box.setText(ret['octet']) offset += ret['offset'] else: offset += 1 res_sum = False self.esam_certi_ver_box.setText( '失败:' + base_data.get_dar(int(data[offset], 16))) offset += 4 if data[offset] == '01': offset += 1 ret = param.get_octet(data[offset:]) self.esam_certi_box.setText(ret['octet']) self.esam_certi_len_box.setText(str(ret['len']) + '字节') offset += ret['offset'] else: offset += 1 res_sum = False self.esam_certi_box.setText( '失败:' + base_data.get_dar(int(data[offset], 16))) if res_sum is True: self.res_b.setStyleSheet('color: green') self.res_b.setText('成功') config.MASTER_WINDOW.receive_signal.disconnect(self.re_esam_certi)
def re_DT_param(self, re_text): m_data = common.text2list(re_text) data = common.get_apdu_list(m_data) offset = 8 if data[offset] == '01': self.res_b.setStyleSheet('color: green') self.res_b.setText('成功') offset += 2 self.DT_mode_l.setCurrentIndex({ '00': 0, '01': 1, '02': 2, 'FF': 3 }[data[offset]]) offset += 9 self.DT_tot_num_box.setText(str(int(data[offset], 16))) offset += 2 self.DT_biggest_num_box.setText(str(int(data[offset], 16))) offset += 2 self.DT_smallest_num_box.setText(str(int(data[offset], 16))) offset += 2 self.DT_dly_max_box.setText(str(int(data[offset], 16))) offset += 2 self.DT_valid_num_min_box.setText(str(int(data[offset], 16))) offset += 2 else: self.res_b.setStyleSheet('color: red') self.res_b.setText('失败:' + base_data.get_dar(int(data[offset + 1], 16))) config.MASTER_WINDOW.receive_signal.disconnect(self.re_DT_param)
def re_ip(self, re_text): m_data = common.text2list(re_text) data = common.get_apdu_list(m_data) gprs_pos = common.list2text(data).replace(' ', '').find('45000300') // 2 eth_pos = common.list2text(data).replace(' ', '').find('45100300') // 2 if gprs_pos >= 0: offset = gprs_pos + 4 if data[offset] == '01': self.res_b.setStyleSheet('color: green') self.res_b.setText('成功') offset += 7 ip_text = param.get_ip(data[offset:]) self.S_ip_box.setText(ip_text) port_text = str(int(data[offset + 5] + data[offset + 6], 16)) self.S_port_box.setText(port_text) if eth_pos >= 0: offset = eth_pos + 4 if data[offset] == '01': self.res_b.setStyleSheet('color: green') self.res_b.setText('成功') offset += 7 ip_text = param.get_ip(data[offset:]) self.S_ip_box_2.setText(ip_text) port_text = str(int(data[offset + 5] + data[offset + 6], 16)) self.S_port_box_2.setText(port_text) config.MASTER_WINDOW.receive_signal.disconnect(self.re_ip)
def re_msg(self, re_text): """recieve text""" if self.service_no != common.get_msg_service_no(re_text): return if abs(time.time() - self.send_tm) > config.RE_MSG_TIMEOUT: print('re msg timeout!') config.MASTER_WINDOW.receive_signal.disconnect(self.re_msg) self.service_no = 0xff return self.service_no = 0xff re_list = common.text2list(re_text) m_text = common.search_msg(re_list)[0] m_list = common.text2list(m_text) apdu_list = common.get_apdu_list(m_list) print('apdu_list', apdu_list) re_data_list = apdu_list[8:] loadtype.data2table(re_data_list, self.re_table) config.MASTER_WINDOW.receive_signal.disconnect(self.re_msg)
def tmn_scan(self): """scan terminal""" wild_apdu = '0501014000020000' compelete_msg = linklayer.add_linkLayer(common.text2list(wild_apdu),\ SA_text='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',\ SA_type=1,\ CA_text=config.COMMU.master_addr,\ C_text='43') config.COMMU.send_msg(compelete_msg, -1)
def __init__(self, m_text): """init""" self.is_ssal = False self.is_empty_ssal = False self.is_full_msg = True self.is_linklayer_sep = False self.trans_res = commonfun.TransRes() self.source_msg = commonfun.format_text(m_text) m_list = commonfun.text2list(m_text) self.res_list, self.is_success = self.__trans_all(m_list) self.is_access_successed = self.get_access_res()
def frontend_keep_alive(self): """keep frontend server connect""" timer = time.time() while self.is_frontend_running: time.sleep(1) if time.time() - timer > 120: timer = time.time() m_list = common.text2list('FFFFFFFFFF') send_b = b''.join( map(lambda x: struct.pack('B', int(x, 16)), m_list)) self.frontend_handle.sendall(send_b)
def repair_cs(m_text): """repair_cs""" m_list = commonfun.text2list(m_text) offset = 1 link_length = int(m_list[offset + 1] + m_list[offset], 16) if link_length != len(m_list) - 2: right_len = len(m_list) - 2 m_list[offset + 1] = '{0:02X}'.format(right_len >> 8) m_list[offset] = '{0:02X}'.format(right_len & 0xff) offset += 2 # 控制域 ctrol = int(m_list[offset], 16) frame_separation_flag = (ctrol >> 5) & 0x01 # 控制域 offset += 1 # 地址域 server_addr_len = (int(m_list[offset], 16) & 0x0f) + 1 offset += server_addr_len + 1 # 客户机地址 offset += 1 # 帧头校验 hcs_calc = commonfun.get_fcs(m_list[1:offset]) hcs_calc = ((hcs_calc << 8) | (hcs_calc >> 8)) & 0xffff # 低位在前 hcs_now = int(m_list[offset] + m_list[offset + 1], 16) if hcs_now != hcs_calc: m_list[offset] = '{0:02X}'.format(hcs_calc >> 8) m_list[offset + 1] = '{0:02X}'.format(hcs_calc & 0xff) offset += 2 # 分帧 if frame_separation_flag == 1: offset += 2 trans_res = commonfun.TransRes() offset += applayer_do.take_applayer(m_list[offset:], trans_res) fcs_calc = commonfun.get_fcs(m_list[1:offset]) fcs_calc = ((fcs_calc << 8) | (fcs_calc >> 8)) & 0xffff # 低位在前 fcs_now = int(m_list[offset] + m_list[offset + 1], 16) if fcs_now != fcs_calc: m_list[offset] = '{0:02X}'.format(fcs_calc >> 8) m_list[offset + 1] = '{0:02X}'.format(fcs_calc & 0xff) m_text = commonfun.list2text(m_list) return m_text
def re_evt(self, re_text): m_data = common.text2list(re_text) data = common.get_apdu_list(m_data) offset = 7 if data[offset] == '01': self.res_b.setStyleSheet('color: green') self.res_b.setText('成功') offset += 4 bit_string_len = int(data[offset], 16) byte_len = bit_string_len // 8 if bit_string_len % 8 == 0 else bit_string_len // 8 + 1 offset += 1 for byte_index in range(byte_len): byte_int = int(data[offset], 16) offset += 1 for bit_index in range(8): evt_no = byte_index * 8 + bit_index + 1 if evt_no <= 85: if (byte_int >> (7 - bit_index)) & 0x01 == 1: eval('self.valid_c_' + str(evt_no) + '.setChecked(True)') else: eval('self.valid_c_' + str(evt_no) + '.setChecked(False)') offset += 1 bit_string_len = int(data[offset], 16) byte_len = bit_string_len // 8 if bit_string_len % 8 == 0 else bit_string_len // 8 + 1 offset += 1 for byte_index in range(byte_len): byte_int = int(data[offset], 16) offset += 1 for bit_index in range(8): evt_no = byte_index * 8 + bit_index + 1 if evt_no <= 85: if (byte_int >> (7 - bit_index)) & 0x01 == 1: eval('self.rpt_c_' + str(evt_no) + '.setChecked(True)') else: eval('self.rpt_c_' + str(evt_no) + '.setChecked(False)') else: self.res_b.setStyleSheet('color: red') self.res_b.setText('失败:' + base_data.get_dar(int(data[offset + 1], 16))) config.MASTER_WINDOW.receive_signal.disconnect(self.re_evt)
def re_SA(self, re_text): m_data = common.text2list(re_text) data = common.get_apdu_list(m_data) offset = 7 if data[offset] == '01': self.res_b.setStyleSheet('color: green') self.res_b.setText('成功') offset += 2 SA_len = int(data[offset], 16) self.SA_len_box.setText(str(SA_len)) SA_text = '' for d in data[offset + 1:offset + 1 + SA_len]: SA_text += d self.SA_box.setText(SA_text) else: self.res_b.setStyleSheet('color: red') self.res_b.setText('失败:' + base_data.get_dar(int(data[offset + 1], 16))) config.MASTER_WINDOW.receive_signal.disconnect(self.re_SA)
def read_set_dar(re_text): m_data = common.text2list(re_text) data = common.get_apdu_list(m_data) offset = 1 if data[offset] == '01': offset += 6 if data[offset] == '00': return 'ok' else: return base_data.get_dar(int(data[offset], 16)) if data[offset] == '02': offset += 2 dar_sum = int(data[offset], 16) offset += 5 for _ in range(dar_sum): if data[offset] != '00': return base_data.get_dar(int(data[offset], 16)) else: offset += 5 return 'ok'
def re_DT(self, re_text): m_data = common.text2list(re_text) data = common.get_apdu_list(m_data) offset = 7 if data[offset] == '01': self.res_b.setStyleSheet('color: green') self.res_b.setText('成功') offset += 2 DT_read = QtCore.QDateTime( (int(data[offset], 16) << 8) | int(data[offset + 1], 16), int(data[offset + 2], 16), int(data[offset + 3], 16), int(data[offset + 4], 16), int(data[offset + 5], 16), int(data[offset + 6], 16), ) # print('DT_read', DT_read) self.DT_box.setDateTime(DT_read) else: self.res_b.setStyleSheet('color: red') self.res_b.setText('失败:' + base_data.get_dar(int(data[offset + 1], 16))) config.MASTER_WINDOW.receive_signal.disconnect(self.re_DT)
def frontend_read_loop(self): """frontend loop""" re_msg_buf = [] while True: try: re_byte = self.frontend_handle.recv(1) except Exception: print('frontend err quit') break if not re_byte: print('frontend disconnected') break if re_byte in [b'\x68', b'\x98']: re_byte += self.frontend_handle.recv(20480) re_msg_buf += common.text2list(''.join( ['%02X ' % x for x in re_byte])) msgs = common.search_msg(re_msg_buf) for msg in msgs: self.receive_msg(msg, 1) re_msg_buf = [] if self.is_frontend_running is False: print('frontend_run quit') break self.frontend_disconnect()
def serial_read_loop(self): """serial loop""" re_msg_buf = [] while True: try: new_data = self.serial_handle.read(1) except Exception: traceback.print_exc() print('serial_run err quit') break if new_data in [b'\x68', b'\x98']: re_data = b'' while new_data: re_data += new_data new_data = self.serial_handle.read(4096) re_msg_buf += common.text2list(' '.join( ['{0:02X}'.format(x) for x in re_data])) msgs = common.search_msg(re_msg_buf) for msg in msgs: self.receive_msg(msg, 0) re_msg_buf = [] if self.is_serial_running is False: print('serial_run quit') break
def re_get_meter_list(self, re_text): config.MASTER_WINDOW.receive_signal.disconnect(self.re_get_meter_list) m_data = common.text2list(re_text) data = common.get_apdu_list(m_data) print('recv: ', data)
def re_rpt(self, re_text): m_data = common.text2list(re_text) data = common.get_apdu_list(m_data) offset = 4 res_sum = True offset += 4 if data[offset] == '01': offset += 2 self.rpt_follow_cb.setCurrentIndex(1 if data[offset] == '01' else 0) offset += 1 else: offset += 1 res_sum = False self.esam_no_box.setText( '失败:' + base_data.get_dar(int(data[offset + 1], 16))) offset += 4 if data[offset] == '01': offset += 2 self.rpt_cb.setCurrentIndex(1 if data[offset] == '01' else 0) offset += 1 else: offset += 1 res_sum = False self.esam_ver_box.setText( '失败:' + base_data.get_dar(int(data[offset + 1], 16))) offset += 4 if data[offset] == '01': offset += 2 self.conn_sever_cb.setCurrentIndex(1 if data[offset] == '01' else 0) offset += 1 else: offset += 1 res_sum = False self.esam_key_box.setText( '失败:' + base_data.get_dar(int(data[offset + 1], 16))) offset += 4 if data[offset] == '01': offset += 2 array_sum = int(data[offset], 16) offset += 1 channel = '' for array_count in range(array_sum): offset += 1 channel += data[offset] + data[offset + 1] + data[offset + 2] + data[offset + 3] if array_count < array_sum - 1: channel += ',' offset += 4 self.rpt_channel_box.setText(channel) else: offset += 1 res_sum = False self.esam_dialog_tm_box.setText( '失败:' + base_data.get_dar(int(data[offset + 1], 16))) if res_sum is True: self.res_b.setStyleSheet('color: green') self.res_b.setText('成功') config.MASTER_WINDOW.receive_signal.disconnect(self.re_rpt)
def re_esam_info(self, re_text): res_sum = True m_data = common.text2list(re_text) data = common.get_apdu_list(m_data) offset = common.list2text(data).replace(' ', '').find('F1000200') // 2 + 4 if data[offset] == '01': offset += 1 ret = param.get_octet(data[offset:]) self.esam_no_box.setText(ret['octet']) offset += ret['offset'] else: res_sum = False self.esam_no_box.setText( '失败:' + base_data.get_dar(int(data[offset + 1], 16))) offset = common.list2text(data).replace(' ', '').find('F1000300') // 2 + 4 if data[offset] == '01': offset += 1 ret = param.get_octet(data[offset:]) self.esam_ver_box.setText(ret['octet']) offset += ret['offset'] else: res_sum = False self.esam_ver_box.setText( '失败:' + base_data.get_dar(int(data[offset + 1], 16))) offset = common.list2text(data).replace(' ', '').find('F1000400') // 2 + 4 if data[offset] == '01': offset += 1 ret = param.get_octet(data[offset:]) self.esam_key_box.setText(ret['octet']) offset += ret['offset'] else: res_sum = False self.esam_key_box.setText( '失败:' + base_data.get_dar(int(data[offset + 1], 16))) offset = common.list2text(data).replace(' ', '').find('F1000500') // 2 + 4 if data[offset] == '01': offset += 1 self.esam_dialog_tm_box.setText( str(param.get_double_long_unsigned(data[offset:]))) offset += 5 else: res_sum = False self.esam_dialog_tm_box.setText( '失败:' + base_data.get_dar(int(data[offset + 1], 16))) offset = common.list2text(data).replace(' ', '').find('F1000600') // 2 + 4 if data[offset] == '01': offset += 1 self.esam_dialog_remain_box.setText( str(param.get_double_long_unsigned(data[offset:]))) offset += 5 else: res_sum = False self.esam_dialog_remain_box.setText( '失败:' + base_data.get_dar(int(data[offset + 1], 16))) offset = common.list2text(data).replace(' ', '').find('F1000700') // 2 + 4 if data[offset] == '01': offset += 3 self.esam_addr_ctr_box.setText( str(param.get_double_long_unsigned(data[offset:]))) offset += 5 self.esam_rpt_ctr_box.setText( str(param.get_double_long_unsigned(data[offset:]))) offset += 5 self.esam_app_radio_box.setText( str(param.get_double_long_unsigned(data[offset:]))) offset += 5 else: res_sum = False self.esam_addr_ctr_box.setText( '失败:' + base_data.get_dar(int(data[offset + 1], 16))) self.esam_rpt_ctr_box.setText( '失败:' + base_data.get_dar(int(data[offset + 1], 16))) self.esam_app_radio_box.setText( '失败:' + base_data.get_dar(int(data[offset + 1], 16))) offset = common.list2text(data).replace(' ', '').find('F1000800') // 2 + 4 if data[offset] == '01': offset += 3 ret = param.get_octet(data[offset:]) self.esam_terminal_ver_box.setText(ret['octet']) offset += ret['offset'] ret = param.get_octet(data[offset:]) self.esam_host_ver_box.setText(ret['octet']) offset += ret['offset'] else: res_sum = False self.esam_terminal_ver_box.setText( '失败:' + base_data.get_dar(int(data[offset + 1], 16))) self.esam_host_ver_box.setText( '失败:' + base_data.get_dar(int(data[offset + 1], 16))) if res_sum is True: self.res_b.setStyleSheet('color: green') self.res_b.setText('成功') config.MASTER_WINDOW.receive_signal.disconnect(self.re_esam_info)
def re_communication(self, re_text): m_data = common.text2list(re_text) data = common.get_apdu_list(m_data) offset = 7 if data[offset] == '01': self.res_b.setStyleSheet('color: green') self.res_b.setText('成功') offset += 4 self.C_work_mode_l.setCurrentIndex({ '00': 0, '01': 1, '02': 2 }[data[offset]]) offset += 2 self.C_online_mode_l.setCurrentIndex({ '00': 0, '01': 1 }[data[offset]]) offset += 2 self.C_connect_mode_l.setCurrentIndex({ '00': 0, '01': 1 }[data[offset]]) offset += 2 self.C_connect_app_mode_l.setCurrentIndex({ '00': 0, '01': 1 }[data[offset]]) offset += 2 array_num = int(data[offset], 16) offset += 1 listen_port_text = '' for count in range(array_num): listen_port_text += str(param.get_long_unsigned( data[offset:])) + ' ' offset += 3 self.C_listen_port_box.setText(listen_port_text) ret = param.get_visible(data[offset:]) self.C_APN_box.setText(ret['visible']) offset += ret['offset'] ret = param.get_visible(data[offset:]) self.C_usr_box.setText(ret['visible']) offset += ret['offset'] ret = param.get_visible(data[offset:]) self.C_pw_box.setText(ret['visible']) offset += ret['offset'] ret = param.get_octet(data[offset:]) self.C_proxy_addr_box.setText(ret['octet']) offset += ret['offset'] self.C_proxy_prot_box.setText( str(param.get_long_unsigned(data[offset:]))) offset += 3 offset += 1 overtm_retry_num_byte = int(data[offset], 16) self.C_retry_box.setText(str(overtm_retry_num_byte & 0x03)) self.C_over_tm_box.setText(str(overtm_retry_num_byte >> 2)) offset += 1 self.C_heart_tm_box.setText( str(param.get_long_unsigned(data[offset:]))) offset += 3 else: self.res_b.setStyleSheet('color: red') self.res_b.setText('失败:' + base_data.get_dar(int(data[offset + 1], 16))) config.MASTER_WINDOW.receive_signal.disconnect(self.re_communication)