From dd84d3ff28816a22a911bb26b435026b728676db Mon Sep 17 00:00:00 2001 From: tao_z <tzj0429@163.com> Date: Sun, 07 Aug 2022 21:42:44 +0800 Subject: [PATCH] 针对B41V修改 --- widgets/ShifterTool.py | 109 ++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 85 insertions(+), 24 deletions(-) diff --git a/widgets/ShifterTool.py b/widgets/ShifterTool.py index e9aa7f1..0fb5bd0 100644 --- a/widgets/ShifterTool.py +++ b/widgets/ShifterTool.py @@ -4,7 +4,7 @@ from logging import exception import threading from typing import List -from can import BusABC, Message +from can import BusABC, Message, Logger, Listener from udsoncan.client import Client from udsoncan.exceptions import TimeoutException import udsoncan @@ -23,6 +23,7 @@ import datetime from ShifterDefine import * from multiprocessing import Process, Queue, Value, Pipe +from hexread import * MAX_RCV_NUM = 20 APP_ADDR_LOCATION_OFFSET = 8 @@ -255,6 +256,8 @@ 0x1c, 0x01, 0x06, 0x80, 0x1f, 0x01, 0x06, 0x80, 0xfb, 0x0a ] self.app_data: bytes = None + self.start_timestamp = time.time() + self.boot_logger = None def DeviceInit(self): self._usbcan = None @@ -343,7 +346,7 @@ output_key_temp & 0xFF) # output_key_temp = ((((temp_key >> 4) ^ temp_key) # << 3) ^ temp_key) & 0xFFFFFFFF - elif level == 0x09: + elif level == 0x11: output_key_temp = 0x70237577 output_key = struct.pack('BBBB', (output_key_temp >> 24) & 0xFF, (output_key_temp >> 16) & 0xFF, @@ -413,7 +416,15 @@ msg.channel = 0 msg.data = isotp_msg.data # bytearray msg.is_extended_id = False + msg.timestamp = time.time() - self.start_timestamp + msg.is_error_frame = False + msg.is_remote_frame = False + self.Tool_send(msg) + + def Tool_send(self, msg: Message): self._usbcan.send(msg) + if self.boot_logger is not None: + self.boot_logger.on_message_received(msg) def WidgetsInit(self): # self.UI.setupUi(self) @@ -476,6 +487,9 @@ self.UI.pushButton_46.clicked.connect(self.loadAppfile) self.UI.radioButton_2.toggled.connect(self.SetFromBootFlag) + self.UI.pushButton_47.clicked.connect(self.SetBootLog) + # self.UI.comboBox_10.activated.connect(self.ReportByMask) + self.UI.comboBox_11.addItems(list(ReportBymask_DTC.keys())) self.UI.comboBox_12.addItems(list(DTC_Dic.keys())) self.UI.comboBox_13.addItems(list(DTC_Control_dic.keys())) @@ -537,7 +551,7 @@ self.needdisconnect.value = 0 self._isOpen.value = 0 else: - msg, num = self._usbcan.Receive(len=1) + msg, num = self._usbcan.Receive(len=10, timeout=10) if not num == 0: for i in range(num): if msg[i].arbitration_id == self.shifter.canid.phy_txId: @@ -546,12 +560,15 @@ msg[i]) # send msg to isotp self.msgQueue.put(msg[i]) + if self.boot_logger is not None: + self.boot_logger.on_message_received(msg[i]) # logger.info('time:'.format(msg[i].timestamp)+'Rx: ID=0x{:0<3x} '.format(msg[i].arbitration_id) + ' '.join(['0x' + # '{:0<2x}'.format(a).upper() for a in list(msg[i].data)])) # send signal to update screen g_signal.sig_MsgReceived.emit(num) + # msgToSendCnt = self.sendQueue.qsize() # if msgToSendCnt > 0: # msg = Message() @@ -560,7 +577,7 @@ # msg = self.sendQueue.get() # # logger.info('Tx: ID=0x{:0<3x} '.format( # # msg.arbitration_id)+'DLC={} '.format(msg.dlc)+'externd flag ={} '.format(msg.is_extended_id)+'remote frame:{} '.format(msg.is_remote_frame)) - # self._usbcan.send(msg) + # self.Tool_send(msg) def send_dump(self): msg = Message() msg.arbitration_id = self.shifter.canid.phy_rxId @@ -569,7 +586,9 @@ msg.data = [0x02, 0x3e, 0x80, 0, 0, 0, 0, 0] msg.is_extended_id = False msg.is_remote_frame = False - self._usbcan.send(msg) + msg.is_error_frame = False + msg.timestamp = time.time() - self.start_timestamp + self.Tool_send(msg) def send_VehiclePosition(self, data=[]): msg = Message() @@ -579,19 +598,21 @@ msg.data = data msg.is_extended_id = False msg.is_remote_frame = False - self._usbcan.send(msg) + msg.is_error_frame = False + msg.timestamp = time.time() - self.start_timestamp + self.Tool_send(msg) def open_close(self): if self._isOpen.value == 0: if self._usbcan is None: self.update_HardwareDevice() - can_filters = [{'can_id': 0x420, 'can_mask': 0xFFFFFFFF}] + can_filters = [{'can_id': 0x5E0, 'can_mask': 0xFFFFFFFF}] bitrate = list( TIMING_DICT.keys())[self.devicedescription.baudrate] self._usbcan = USBCAN(device_type=4, device_index=0, - can_index=0, + can_index=self.devicedescription.channel, bitrate=bitrate, can_filters=can_filters) if not self._usbcan.InitAndStart(): @@ -612,6 +633,9 @@ self.needdisconnect.value = 1 self._deviceOpenUpdate() self.TestPresentTimer.stop() + + def closeEvent(self, e): + self.boot_logger.stop() def update_HardwareDevice(self): @@ -697,14 +721,14 @@ for i in range(_dataSize): receiveNum += 1 msg = self.msgQueue.get() - if msg.arbitration_id == 0x420: - self.shifter.FramUnpack(msg.arbitration_id, msg.data) - resp_data = self.Vehicle.ShiftLogic(self.shifter) - self.send_VehiclePosition(resp_data) + # if msg.arbitration_id == 0x420: + # self.shifter.FramUnpack(msg.arbitration_id, msg.data) + # resp_data = self.Vehicle.ShiftLogic(self.shifter) + # self.send_VehiclePosition(resp_data) formateddata.append(self._formatMsgData( receiveNum, msg, True)) # return a data list self._insertDataSmooth(data=formateddata, datasize=_dataSize) - self.dispShiftstatus() + # self.dispShiftstatus() def _insertDataSmooth(self, data, datasize): # row = 6-datasize @@ -762,7 +786,7 @@ "background-color:rgb(255, 85, 127)") def SecurityUnlockLevel_2(self): - data = self.udsclient.unlock_security_access(9) + data = self.udsclient.unlock_security_access(0x11) if data.positive: self.UI.pushButton_32.setStyleSheet( "background-color:rgb(255, 85, 127)") @@ -982,7 +1006,7 @@ response = self.udsclient.change_session(3) if response.positive: self.disp_string('>>> 解锁安全访问') - response = self.udsclient.unlock_security_access(9) + response = self.udsclient.unlock_security_access(0x11) if response.positive: # 检查编程条件 @@ -1017,7 +1041,7 @@ if response.positive: # 安全访问 self.disp_string('>>> 安全访问') - response = self.udsclient.unlock_security_access(9) + response = self.udsclient.unlock_security_access(0x11) # print(response) if response.positive: self.disp_string('>>> 请求下载驱动文件') @@ -1153,11 +1177,48 @@ if fileName != '': self.UI.comboBox_4.addItem(fileName) self.UI.comboBox_4.setCurrentText(fileName) - with open(fileName, 'rb') as fd: - self.app_data = fd.read() - drv_data_len = len( - self.drv_data) if self.drv_data is not None else 0 - app_data_len = len( - self.app_data) if self.app_data is not None else 0 - total_len = drv_data_len + app_data_len - self.UI.progressBar.setRange(0, total_len) + + # with open(fileName, 'rb') as fd: + # self.app_data = fd.read() + # drv_data_len = len( + # self.drv_data) if self.drv_data is not None else 0 + # app_data_len = len( + # self.app_data) if self.app_data is not None else 0 + # total_len = drv_data_len + app_data_len + # self.UI.progressBar.setRange(0, total_len) + + # print(self.app_data) + # print("===============================================") + hex_read = Hex_read() + hex_read.Open_file(fileName) + self.app_data = hex_read.data + drv_data_len = len( + self.drv_data) if self.drv_data is not None else 0 + app_data_len = len( + self.app_data) if self.app_data is not None else 0 + total_len = drv_data_len + app_data_len + self.UI.progressBar.setRange(0, total_len) + + def SetBootLog(self): + if self.in_programming: + self.disp_string('## 正在编程中') + return + + fileName, _ = QtWidgets.QFileDialog.getSaveFileName( + None, 'comboBox_10', '.', + 'All Files (*);;ASC Files (*.asc);;Blf Files (*.blf)') + + if fileName != '': + self.UI.comboBox_10.addItem(fileName) + self.UI.comboBox_10.setCurrentText(fileName) + print(fileName) + self.boot_logger = Logger(fileName) + # self.listener = [self.boot_logger] + # with open(fileName, 'rb') as fd: + # self.app_data = fd.read() + # drv_data_len = len( + # self.drv_data) if self.drv_data is not None else 0 + # app_data_len = len( + # self.app_data) if self.app_data is not None else 0 + # total_len = drv_data_len + app_data_len + # self.UI.progressBar.setRange(0, total_len) -- Gitblit v1.8.0