Exemplo n.º 1
0
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')
Exemplo n.º 2
0
    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())
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
 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))
Exemplo n.º 7
0
 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)
Exemplo n.º 8
0
 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)
Exemplo n.º 9
0
 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)
Exemplo n.º 10
0
 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)
Exemplo n.º 11
0
 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)
Exemplo n.º 12
0
 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()
Exemplo n.º 13
0
 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)
Exemplo n.º 14
0
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
Exemplo n.º 15
0
 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)
Exemplo n.º 16
0
 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)
Exemplo n.º 17
0
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'
Exemplo n.º 18
0
 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)
Exemplo n.º 19
0
 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()
Exemplo n.º 20
0
 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
Exemplo n.º 21
0
 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)
Exemplo n.º 22
0
    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)
Exemplo n.º 23
0
    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)
Exemplo n.º 24
0
 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)