from PyQt5 import QtWidgets, QtCore, QtGui
|
from can.interfaces.canalystii import CANalystIIBus, TIMING_DICT
|
from can.interfaces.vector import VectorBus
|
from can.bus import BusABC
|
import asyncio
|
import time
|
import aioisotp
|
from uds.client import Client
|
from udsoncan import DidCodec
|
from udsoncan import DataIdentifier
|
from udsoncan.configs import default_client_config
|
import struct
|
import configparser
|
|
|
class AsciiCodec(DidCodec):
|
|
def __init__(self, string_len=None):
|
if string_len is None:
|
raise ValueError(
|
"You must provide a length to the AsciiCodec")
|
self.string_len = string_len
|
|
def encode(self, string_ascii):
|
if len(string_ascii) > self.string_len:
|
string_ascii = string_ascii[0:self.string_len]
|
|
elif len(string_ascii) < self.string_len:
|
for i in range(self.string_len - len(string_ascii)):
|
string_ascii += ' '
|
|
return string_ascii.encode('ascii')
|
|
def decode(self, string_bin):
|
string_ascii = string_bin.decode('ascii')
|
if len(string_ascii) > self.string_len:
|
string_ascii = string_ascii[0:self.string_len]
|
|
return string_ascii.strip()
|
|
def __len__(self):
|
return self.string_len
|
|
|
class PartNumberCodec(DidCodec):
|
def __init__(self, byte_len=None):
|
if byte_len is None:
|
raise ValueError(
|
"You must provide a length to the PartNumberCodec")
|
self.byte_len = byte_len
|
|
def encode(self, string_ascii):
|
if self.byte_len == 1:
|
data = struct.pack('>B', int(string_ascii))
|
elif self.byte_len == 2:
|
data = struct.pack('>H', int(string_ascii))
|
elif self.byte_len == 4:
|
data = struct.pack('>L', int(string_ascii))
|
elif self.byte_len == 8:
|
data = struct.pack('>Q', int(string_ascii))
|
|
if len(data) > self.byte_len:
|
data = data[0:self.byte_len]
|
|
return data
|
|
def decode(self, byte_data):
|
data = 0
|
for i in byte_data:
|
data = data << 8 | i
|
return str(data)
|
|
def __len__(self):
|
return self.byte_len
|
|
|
class PartNumberVersionCodec(DidCodec):
|
def __init__(self, byte_len=None):
|
if byte_len is None:
|
raise ValueError(
|
"You must provide a length to the PartNumberCodec")
|
self.byte_len = byte_len
|
|
def encode(self, string_ascii):
|
if self.byte_len == 1:
|
data = struct.pack('>B', int(string_ascii))
|
elif self.byte_len == 2:
|
data = struct.pack('>H', int(string_ascii))
|
elif self.byte_len == 4:
|
data = struct.pack('>L', int(string_ascii))
|
elif self.byte_len == 8:
|
data = struct.pack('>Q', int(string_ascii))
|
|
if len(data) > self.byte_len:
|
data = data[0:self.byte_len]
|
|
return data
|
|
def decode(self, byte_data):
|
ret = ''
|
for i in byte_data:
|
ret += '%.1x' % i
|
return ret
|
|
def __len__(self):
|
return self.byte_len
|
|
|
class BCDCodec(DidCodec):
|
|
def __init__(self, byte_len=None):
|
self.byte_len = byte_len
|
|
def encode(self, string_ascii):
|
string_ascii = string_ascii.strip()
|
|
if len(string_ascii) > self.byte_len * 2:
|
string_ascii = string_ascii[0:self.byte_len * 2]
|
elif len(string_ascii) < self.byte_len * 2:
|
for i in range(self.byte_len * 2 - len(string_ascii)):
|
string_ascii += '0'
|
|
data = bytearray()
|
for i in range(self.byte_len):
|
part = string_ascii[2 * i: 2 * i + 2]
|
data.append(int(part, 16))
|
|
return data
|
|
def decode(self, byte_data):
|
ret = ''
|
for i in byte_data:
|
ret += '%.2x' % i
|
|
return ret
|
|
def __len__(self):
|
return self.byte_len
|
|
|
class DataIdentifierWidget(QtWidgets.QWidget):
|
|
def __init__(self, parent=None, flags=QtCore.Qt.WindowFlags()):
|
super().__init__(parent=parent, flags=flags)
|
self.initUI()
|
self.client: Client = None
|
self.opened_flag = False
|
self.did_config = {
|
0xF190: AsciiCodec(17),
|
0xF1B1: AsciiCodec(9),
|
0xF1B2: AsciiCodec(16),
|
|
0xF1D0: PartNumberCodec(4),
|
0xF1D1: PartNumberVersionCodec(2),
|
0xF1D2: PartNumberCodec(4),
|
0xF1D3: PartNumberVersionCodec(2),
|
0xF0DF: PartNumberVersionCodec(1),
|
|
0xF187: AsciiCodec(21),
|
0xF195: AsciiCodec(16),
|
0xF198: BCDCodec(8),
|
0xF199: BCDCodec(4),
|
}
|
|
try:
|
config = configparser.ConfigParser()
|
config.read('config.ini')
|
self.tx_id = int(config['CAN_ID']['tx_id'], 16)
|
self.rx_id = int(config['CAN_ID']['rx_id'], 16)
|
self.append_text_to_log_display('read config.ini success')
|
except Exception as e:
|
self.append_text_to_log_display(
|
'read config.ini error, use 0x692 and 0x693 for default tx_id and rx_id', '#ff0000')
|
self.tx_id = 0x692
|
self.rx_id = 0x693
|
|
def initUI(self):
|
|
self.setWindowTitle('Data Identifier')
|
self.setFont(QtGui.QFont('Segoe UI'))
|
|
cb_interface_type = QtWidgets.QComboBox(self)
|
cb_interface_type.addItems(['vector', 'canalystii'])
|
cb_interface_type.setObjectName('cb_interface_type')
|
|
cb_baudrate = QtWidgets.QComboBox(self)
|
cb_baudrate.addItems([('%dK' % (i/1000)) for i in TIMING_DICT.keys()])
|
cb_baudrate.setCurrentIndex(14)
|
cb_baudrate.setObjectName('cb_baudrate')
|
|
cb_can_channel = QtWidgets.QComboBox(self)
|
cb_can_channel.addItems(['CH1/3', 'CH2/4'])
|
cb_can_channel.setObjectName('cb_can_channel')
|
|
btn_open = QtWidgets.QPushButton(self)
|
btn_open.setText('open')
|
btn_open.setObjectName('btn_open')
|
btn_close = QtWidgets.QPushButton(self)
|
btn_close.setText('close')
|
btn_close.setObjectName('btn_close')
|
|
hb0 = QtWidgets.QHBoxLayout()
|
hb0.addWidget(cb_interface_type)
|
hb0.addWidget(cb_baudrate)
|
hb0.addWidget(cb_can_channel)
|
hb0.addWidget(btn_open)
|
hb0.addWidget(btn_close)
|
|
# 0xF190
|
lb_0xf190 = QtWidgets.QLabel(self)
|
lb_0xf190.setText('Vehicle Identification Number')
|
le_0xf190 = QtWidgets.QLineEdit(self)
|
le_0xf190.setObjectName('le_0xf190')
|
btn_read_0xf190 = QtWidgets.QPushButton(self)
|
btn_read_0xf190.setText('read')
|
btn_read_0xf190.setObjectName('btn_read_0xf190')
|
btn_write_0xf190 = QtWidgets.QPushButton(self)
|
btn_write_0xf190.setText('write')
|
btn_write_0xf190.setObjectName('btn_write_0xf190')
|
|
# 0xF1B1
|
lb_0xf1b1 = QtWidgets.QLabel(self)
|
lb_0xf1b1.setText('Data Universal Numbering System')
|
le_0xf1b1 = QtWidgets.QLineEdit(self)
|
le_0xf1b1.setObjectName('le_0xf1b1')
|
btn_read_0xf1b1 = QtWidgets.QPushButton(self)
|
btn_read_0xf1b1.setText('read')
|
btn_read_0xf1b1.setObjectName('btn_read_0xf1b1')
|
|
# 0xF1B2
|
lb_0xf1b2 = QtWidgets.QLabel(self)
|
lb_0xf1b2.setText('Manufacturing Traceability Characters')
|
le_0xf1b2 = QtWidgets.QLineEdit(self)
|
le_0xf1b2.setObjectName('le_0xf1b2')
|
btn_read_0xf1b2 = QtWidgets.QPushButton(self)
|
btn_read_0xf1b2.setText('read')
|
btn_read_0xf1b2.setObjectName('btn_read_0xf1b2')
|
btn_write_0xf1b2 = QtWidgets.QPushButton(self)
|
btn_write_0xf1b2.setText('write')
|
btn_write_0xf1b2.setObjectName('btn_write_0xf1b2')
|
|
# 0xF1D0
|
lb_0xf1d0 = QtWidgets.QLabel(self)
|
lb_0xf1d0.setText('Base Model Part Number')
|
le_0xf1d0 = QtWidgets.QLineEdit(self)
|
le_0xf1d0.setObjectName('le_0xf1d0')
|
btn_read_0xf1d0 = QtWidgets.QPushButton(self)
|
btn_read_0xf1d0.setText('read')
|
btn_read_0xf1d0.setObjectName('btn_read_0xf1d0')
|
|
# 0xF1D1
|
lb_0xf1d1 = QtWidgets.QLabel(self)
|
lb_0xf1d1.setText('Base Model Part Number Version Code')
|
le_0xf1d1 = QtWidgets.QLineEdit(self)
|
le_0xf1d1.setObjectName('le_0xf1d1')
|
btn_read_0xf1d1 = QtWidgets.QPushButton(self)
|
btn_read_0xf1d1.setText('read')
|
btn_read_0xf1d1.setObjectName('btn_read_0xf1d1')
|
|
# 0xF1D2
|
lb_0xf1d2 = QtWidgets.QLabel(self)
|
lb_0xf1d2.setText('End Model Part Number')
|
le_0xf1d2 = QtWidgets.QLineEdit(self)
|
le_0xf1d2.setObjectName('le_0xf1d2')
|
btn_read_0xf1d2 = QtWidgets.QPushButton(self)
|
btn_read_0xf1d2.setText('read')
|
btn_read_0xf1d2.setObjectName('btn_read_0xf1d2')
|
|
# 0xF1D3
|
lb_0xf1d3 = QtWidgets.QLabel(self)
|
lb_0xf1d3.setText('End Model Part Number Version Code')
|
le_0xf1d3 = QtWidgets.QLineEdit(self)
|
le_0xf1d3.setObjectName('le_0xf1d3')
|
btn_read_0xf1d3 = QtWidgets.QPushButton(self)
|
btn_read_0xf1d3.setText('read')
|
btn_read_0xf1d3.setObjectName('btn_read_0xf1d3')
|
|
# 0xF0DF
|
lb_0xf0df = QtWidgets.QLabel(self)
|
lb_0xf0df.setText('Manufacturers Mode Flag')
|
cb_0xf0df = QtWidgets.QComboBox(self)
|
cb_0xf0df.setObjectName('cb_0xf0df')
|
cb_0xf0df.addItem('NonFactoryModel', 0)
|
cb_0xf0df.addItem('FactoryMode', 1)
|
btn_read_0xf0df = QtWidgets.QPushButton(self)
|
btn_read_0xf0df.setText('read')
|
btn_read_0xf0df.setObjectName('btn_read_0xf0df')
|
btn_write_0xf0df = QtWidgets.QPushButton(self)
|
btn_write_0xf0df.setText('write')
|
btn_write_0xf0df.setObjectName('btn_write_0xf0df')
|
|
# 0xF187
|
lb_0xf187 = QtWidgets.QLabel(self)
|
lb_0xf187.setText('ECU Part Number')
|
le_0xf187 = QtWidgets.QLineEdit(self)
|
le_0xf187.setObjectName('le_0xf187')
|
btn_read_0xf187 = QtWidgets.QPushButton(self)
|
btn_read_0xf187.setText('read')
|
btn_read_0xf187.setObjectName('btn_read_0xf187')
|
|
# 0xF195
|
lb_0xf195 = QtWidgets.QLabel(self)
|
lb_0xf195.setText('Supplier ECU Software Version Number')
|
le_0xf195 = QtWidgets.QLineEdit(self)
|
le_0xf195.setObjectName('le_0xf195')
|
btn_read_0xf195 = QtWidgets.QPushButton(self)
|
btn_read_0xf195.setText('read')
|
btn_read_0xf195.setObjectName('btn_read_0xf195')
|
|
# 0xF198
|
lb_0xf198 = QtWidgets.QLabel(self)
|
lb_0xf198.setText('Repair Shop Code')
|
le_0xf198 = QtWidgets.QLineEdit(self)
|
le_0xf198.setObjectName('le_0xf198')
|
btn_read_0xf198 = QtWidgets.QPushButton(self)
|
btn_read_0xf198.setText('read')
|
btn_read_0xf198.setObjectName('btn_read_0xf198')
|
btn_write_0xf198 = QtWidgets.QPushButton(self)
|
btn_write_0xf198.setText('write')
|
btn_write_0xf198.setObjectName('btn_write_0xf198')
|
|
# 0xF199
|
lb_0xf199 = QtWidgets.QLabel(self)
|
lb_0xf199.setText('Programming Date')
|
le_0xf199 = QtWidgets.QLineEdit(self)
|
le_0xf199.setObjectName('le_0xf199')
|
btn_read_0xf199 = QtWidgets.QPushButton(self)
|
btn_read_0xf199.setText('read')
|
btn_read_0xf199.setObjectName('btn_read_0xf199')
|
btn_write_0xf199 = QtWidgets.QPushButton(self)
|
btn_write_0xf199.setText('write')
|
btn_write_0xf199.setObjectName('btn_write_0xf199')
|
|
gl0 = QtWidgets.QGridLayout()
|
|
gl0.addWidget(lb_0xf190, 0, 0, 1, 1)
|
gl0.addWidget(le_0xf190, 0, 1, 1, 1)
|
gl0.addWidget(btn_read_0xf190, 0, 2, 1, 1)
|
gl0.addWidget(btn_write_0xf190, 0, 3, 1, 1)
|
|
gl0.addWidget(lb_0xf1b1, 1, 0, 1, 1)
|
gl0.addWidget(le_0xf1b1, 1, 1, 1, 1)
|
gl0.addWidget(btn_read_0xf1b1, 1, 2, 1, 1)
|
|
gl0.addWidget(lb_0xf1b2, 2, 0, 1, 1)
|
gl0.addWidget(le_0xf1b2, 2, 1, 1, 1)
|
gl0.addWidget(btn_read_0xf1b2, 2, 2, 1, 1)
|
gl0.addWidget(btn_write_0xf1b2, 2, 3, 1, 1)
|
|
gl0.addWidget(lb_0xf1d0, 3, 0, 1, 1)
|
gl0.addWidget(le_0xf1d0, 3, 1, 1, 1)
|
gl0.addWidget(btn_read_0xf1d0, 3, 2, 1, 1)
|
|
gl0.addWidget(lb_0xf1d1, 4, 0, 1, 1)
|
gl0.addWidget(le_0xf1d1, 4, 1, 1, 1)
|
gl0.addWidget(btn_read_0xf1d1, 4, 2, 1, 1)
|
|
gl0.addWidget(lb_0xf1d2, 5, 0, 1, 1)
|
gl0.addWidget(le_0xf1d2, 5, 1, 1, 1)
|
gl0.addWidget(btn_read_0xf1d2, 5, 2, 1, 1)
|
|
gl0.addWidget(lb_0xf1d3, 6, 0, 1, 1)
|
gl0.addWidget(le_0xf1d3, 6, 1, 1, 1)
|
gl0.addWidget(btn_read_0xf1d3, 6, 2, 1, 1)
|
|
gl0.addWidget(lb_0xf0df, 7, 0, 1, 1)
|
gl0.addWidget(cb_0xf0df, 7, 1, 1, 1)
|
gl0.addWidget(btn_read_0xf0df, 7, 2, 1, 1)
|
gl0.addWidget(btn_write_0xf0df, 7, 3, 1, 1)
|
|
gl0.addWidget(lb_0xf187, 8, 0, 1, 1)
|
gl0.addWidget(le_0xf187, 8, 1, 1, 1)
|
gl0.addWidget(btn_read_0xf187, 8, 2, 1, 1)
|
|
gl0.addWidget(lb_0xf195, 9, 0, 1, 1)
|
gl0.addWidget(le_0xf195, 9, 1, 1, 1)
|
gl0.addWidget(btn_read_0xf195, 9, 2, 1, 1)
|
|
gl0.addWidget(lb_0xf198, 10, 0, 1, 1)
|
gl0.addWidget(le_0xf198, 10, 1, 1, 1)
|
gl0.addWidget(btn_read_0xf198, 10, 2, 1, 1)
|
gl0.addWidget(btn_write_0xf198, 10, 3, 1, 1)
|
|
gl0.addWidget(lb_0xf199, 11, 0, 1, 1)
|
gl0.addWidget(le_0xf199, 11, 1, 1, 1)
|
gl0.addWidget(btn_read_0xf199, 11, 2, 1, 1)
|
gl0.addWidget(btn_write_0xf199, 11, 3, 1, 1)
|
|
tb_log_display = QtWidgets.QTextBrowser(self)
|
tb_log_display.setObjectName('tb_log_display')
|
|
hb1 = QtWidgets.QHBoxLayout()
|
hb1.addWidget(tb_log_display)
|
|
vb = QtWidgets.QVBoxLayout()
|
vb.addLayout(hb0)
|
vb.addLayout(gl0)
|
vb.addLayout(hb1)
|
|
self.setLayout(vb)
|
|
QtCore.QMetaObject.connectSlotsByName(self)
|
|
@QtCore.pyqtSlot(str)
|
def on_cb_interface_type_currentIndexChanged(self, text):
|
|
if text == 'vector':
|
self.findChild(QtWidgets.QComboBox,
|
'cb_can_channel').setItemText(0, 'CH1/3')
|
self.findChild(QtWidgets.QComboBox,
|
'cb_can_channel').setItemText(1, 'CH2/4')
|
elif text == 'canalystii':
|
self.findChild(QtWidgets.QComboBox,
|
'cb_can_channel').setItemText(0, 'CAN1')
|
self.findChild(QtWidgets.QComboBox,
|
'cb_can_channel').setItemText(1, 'CAN2')
|
|
@QtCore.pyqtSlot()
|
def on_btn_open_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.open_device_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_close_clicked(self):
|
self.opened_flag = False
|
self.client = None
|
self.append_text_to_log_display('close device success')
|
|
@QtCore.pyqtSlot()
|
def on_btn_read_0xf190_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.read_0xf190_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_write_0xf190_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.write_0xf190_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_read_0xf1b1_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.read_0xf1b1_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_write_0xf1b1_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.write_0xf1b1_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_read_0xf1b2_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.read_0xf1b2_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_write_0xf1b2_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.write_0xf1b2_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_read_0xf1d0_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.read_0xf1d0_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_write_0xf1d0_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.write_0xf1d0_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_read_0xf1d1_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.read_0xf1d1_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_read_0xf1d2_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.read_0xf1d2_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_write_0xf1d2_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.write_0xf1d2_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_read_0xf1d3_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.read_0xf1d3_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_read_0xf0df_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.read_0xf0df_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_write_0xf0df_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.write_0xf0df_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_read_0xf187_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.read_0xf187_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_read_0xf195_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.read_0xf195_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_read_0xf198_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.read_0xf198_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_write_0xf198_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.write_0xf198_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_read_0xf199_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.read_0xf199_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_write_0xf199_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.write_0xf199_task())
|
|
@QtCore.pyqtSlot()
|
def on_btn_write_0xf199_clicked(self):
|
loop = asyncio.get_event_loop()
|
loop.create_task(self.write_0xf199_task())
|
|
def append_text_to_log_display(self, text, color='#000000'):
|
|
text = '<font color="%s">%s</font>' % (color, text)
|
self.findChild(QtWidgets.QTextEdit, 'tb_log_display').append(text)
|
|
def clear_log_display(self):
|
|
self.findChild(QtWidgets.QTextEdit, 'tb_log_display').clear()
|
|
async def open_device_task(self):
|
|
if self.opened_flag is True:
|
self.append_text_to_log_display('already opened', '#ff0000')
|
return
|
|
interface_type_index = self.findChild(
|
QtWidgets.QComboBox, 'cb_interface_type').currentIndex()
|
|
baudrate_index = self.findChild(
|
QtWidgets.QComboBox, 'cb_baudrate').currentIndex()
|
|
can_channel_index = self.findChild(
|
QtWidgets.QComboBox, 'cb_can_channel').currentIndex()
|
|
# bus = VectorBus(channel=1, bitrate=500000, can_filters=can_filters)
|
# bus = CANalystIIBus(channel=0, baud=500000, can_filters=can_filters)
|
|
self.clear_log_display()
|
|
can_filters = [
|
{'can_id': self.rx_id, 'can_mask': 0xFFFFFFFF}
|
]
|
|
bitrate = list(TIMING_DICT.keys())[baudrate_index]
|
|
try:
|
bus: BusABC = None
|
if interface_type_index == 0:
|
bus = VectorBus(channel=can_channel_index,
|
bitrate=bitrate, can_filters=can_filters)
|
|
elif interface_type_index == 1:
|
bus = CANalystIIBus(channel=can_channel_index,
|
baud=bitrate, can_filters=can_filters)
|
|
network = aioisotp.ISOTPNetwork(bus=bus)
|
|
with network.open():
|
reader, writer = await network.open_connection(self.rx_id, self.tx_id)
|
client = Client(reader, writer)
|
client.config['data_identifiers'] = self.did_config
|
|
self.client = client
|
|
try:
|
response = await client.tester_present(timeout=0.3)
|
except asyncio.TimeoutError:
|
pass
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
await client.change_session(3)
|
await client.request_seed(1)
|
await client.send_key(1, bytes([0x6d, 0xfb, 0x53, 0x20]))
|
|
self.append_text_to_log_display('open device success')
|
self.opened_flag = True
|
|
while self.opened_flag:
|
await client.tester_present(True)
|
await asyncio.sleep(1)
|
# print('tester present')
|
except asyncio.TimeoutError:
|
self.append_text_to_log_display('open device failed', '#ff0000')
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def read_0xf190_task(self):
|
try:
|
client = self.client
|
response = await client.read_data_by_identifier_first(0xf190)
|
data = response
|
self.findChild(QtWidgets.QLineEdit,
|
'le_0xf190').setText(data)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def write_0xf190_task(self):
|
try:
|
client = self.client
|
value = self.findChild(QtWidgets.QLineEdit, 'le_0xf190').text()
|
await client.write_data_by_identifier(0xf190, value)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def read_0xf1b1_task(self):
|
try:
|
client = self.client
|
response = await client.read_data_by_identifier_first(0xf1b1)
|
data = response.strip()
|
self.findChild(QtWidgets.QLineEdit,
|
'le_0xf1b1').setText(data)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def write_0xf1b1_task(self):
|
try:
|
client = self.client
|
value = self.findChild(QtWidgets.QLineEdit, 'le_0xf1b1').text()
|
await client.write_data_by_identifier(0xf1b1, value)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def read_0xf1b2_task(self):
|
try:
|
client = self.client
|
response = await client.read_data_by_identifier_first(0xf1b2)
|
data = response
|
self.findChild(QtWidgets.QLineEdit,
|
'le_0xf1b2').setText(data)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def write_0xf1b2_task(self):
|
try:
|
client = self.client
|
value = self.findChild(QtWidgets.QLineEdit, 'le_0xf1b2').text()
|
await client.write_data_by_identifier(0xf1b2, value)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def read_0xf1d0_task(self):
|
try:
|
client = self.client
|
response = await client.read_data_by_identifier_first(0xf1d0)
|
data = response
|
self.findChild(QtWidgets.QLineEdit,
|
'le_0xf1d0').setText(data)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def write_0xf1d0_task(self):
|
try:
|
client = self.client
|
value = self.findChild(QtWidgets.QLineEdit, 'le_0xf1d0').text()
|
await client.write_data_by_identifier(0xf1d0, value)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def read_0xf1d1_task(self):
|
try:
|
client = self.client
|
response = await client.read_data_by_identifier_first(0xf1d1)
|
data = response
|
self.findChild(QtWidgets.QLineEdit,
|
'le_0xf1d1').setText(data)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def read_0xf1d2_task(self):
|
try:
|
client = self.client
|
response = await client.read_data_by_identifier_first(0xf1d2)
|
data = response
|
self.findChild(QtWidgets.QLineEdit,
|
'le_0xf1d2').setText(data)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def write_0xf1d2_task(self):
|
try:
|
client = self.client
|
value = self.findChild(QtWidgets.QLineEdit, 'le_0xf1d2').text()
|
await client.write_data_by_identifier(0xf1d2, value)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def read_0xf1d3_task(self):
|
try:
|
client = self.client
|
response = await client.read_data_by_identifier_first(0xf1d3)
|
data = response
|
self.findChild(QtWidgets.QLineEdit,
|
'le_0xf1d3').setText(data)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def read_0xf0df_task(self):
|
try:
|
client = self.client
|
response = await client.read_data_by_identifier_first(0xf0df)
|
data = response
|
self.findChild(QtWidgets.QComboBox,
|
'cb_0xf0df').setCurrentIndex(int(data))
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def write_0xf0df_task(self):
|
try:
|
client = self.client
|
value = self.findChild(QtWidgets.QComboBox,
|
'cb_0xf0df').currentIndex()
|
await client.write_data_by_identifier(0xf0df, value)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def read_0xf187_task(self):
|
try:
|
client = self.client
|
response = await client.read_data_by_identifier_first(0xf187)
|
data = response
|
self.findChild(QtWidgets.QLineEdit,
|
'le_0xf187').setText(data)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def read_0xf195_task(self):
|
try:
|
client = self.client
|
response = await client.read_data_by_identifier_first(0xf195)
|
data = response
|
self.findChild(QtWidgets.QLineEdit,
|
'le_0xf195').setText(data)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def read_0xf198_task(self):
|
try:
|
client = self.client
|
response = await client.read_data_by_identifier_first(0xf198)
|
data = response
|
self.findChild(QtWidgets.QLineEdit,
|
'le_0xf198').setText(data)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def write_0xf198_task(self):
|
try:
|
client = self.client
|
value = self.findChild(QtWidgets.QLineEdit, 'le_0xf198').text()
|
await client.write_data_by_identifier(0xf198, value)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def read_0xf199_task(self):
|
try:
|
client = self.client
|
response = await client.read_data_by_identifier_first(0xf199)
|
data = response
|
self.findChild(QtWidgets.QLineEdit,
|
'le_0xf199').setText(data)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|
|
async def write_0xf199_task(self):
|
try:
|
client = self.client
|
value = self.findChild(QtWidgets.QLineEdit, 'le_0xf199').text()
|
await client.write_data_by_identifier(0xf199, value)
|
except Exception as e:
|
self.append_text_to_log_display('%s' % e, '#ff0000')
|