From fb3a1cfb94012ee90104ddcac5f49aac2158c5de Mon Sep 17 00:00:00 2001
From: Godpp <tzj0429@163.com>
Date: Sat, 22 Feb 2020 22:56:23 +0800
Subject: [PATCH] 更新界面

---
 widgets/flash_bootloader_widget.py |  217 ++++++++++++++++++++++++------------------------------
 1 files changed, 97 insertions(+), 120 deletions(-)

diff --git a/widgets/flash_bootloader_widget.py b/widgets/flash_bootloader_widget.py
index ed3c383..05661eb 100644
--- a/widgets/flash_bootloader_widget.py
+++ b/widgets/flash_bootloader_widget.py
@@ -11,7 +11,6 @@
 
 
 class FlashBootloaderWidget(QtWidgets.QWidget):
-
     def __init__(self, parent=None, flags=QtCore.Qt.WindowFlags()):
         super().__init__(parent=parent, flags=flags)
         self.initUI()
@@ -28,151 +27,123 @@
             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')
+                '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('Flash Bootloader')
+        self.setWindowTitle('Bootloader')
         self.setFont(QtGui.QFont('Segoe UI'))
         desktop = QtWidgets.QApplication.desktop()  # 获得屏幕尺寸
-        self.resize(desktop.width()/2, desktop.height()/3)
+        self.resize(desktop.width() / 2, desktop.height() / 2)
+
+        # 设置文本输入框
         le_drv = QtWidgets.QLineEdit(self)
         le_drv.setReadOnly(True)
         le_drv.setObjectName('le_drv')
         btn_drv = QtWidgets.QPushButton(self)
-        btn_drv.setText('driver')
+        btn_drv.setText('驱动程序')
         btn_drv.setObjectName('btn_drv')
 
         le_app = QtWidgets.QLineEdit(self)
         le_app.setReadOnly(True)
         le_app.setObjectName('le_app')
         btn_app = QtWidgets.QPushButton(self)
-        btn_app.setText('app')
+        btn_app.setText('应用程序')
         btn_app.setObjectName('btn_app')
+        # 创建网格布局 2行2列 void addWidget(QWidget *, int row, int column, int rowSpan, int columnSpan, Qt::Alignment = 0);
+        gridlayer_file = QtWidgets.QGridLayout()
+        gridlayer_file.addWidget(le_drv, 0, 0, 1, 1)
+        gridlayer_file.addWidget(btn_drv, 0, 1, 1, 1)
+        gridlayer_file.addWidget(le_app, 1, 0, 1, 1)
+        gridlayer_file.addWidget(btn_app, 1, 1, 1, 1)
 
-        gl0 = QtWidgets.QGridLayout()
-        gl0.addWidget(le_drv, 0, 0, 1, 1)
-        gl0.addWidget(btn_drv, 0, 1, 1, 1)
-        gl0.addWidget(le_app, 1, 0, 1, 1)
-        gl0.addWidget(btn_app, 1, 1, 1, 1)
+        gb_file = QtWidgets.QGroupBox(self)
+        gb_file.setTitle('加载文件')
+        gb_file.setLayout(gridlayer_file)
 
         cb_interface_type = QtWidgets.QComboBox(self)
-        cb_interface_type.addItems(['vector', 'canalystii'])
+        cb_interface_type.addItems(['CANoe', 'USBCAN'])
         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.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.addItems(['通道1', '通道2'])
         cb_can_channel.setObjectName('cb_can_channel')
 
         btn_open = QtWidgets.QPushButton(self)
-        btn_open.setText('open')
+        btn_open.setText('打开')
         btn_open.setObjectName('btn_open')
 
-        hb0 = QtWidgets.QHBoxLayout()
-        hb0.addWidget(cb_interface_type)
-        hb0.addWidget(cb_baudrate)
-        hb0.addWidget(cb_can_channel)
-        hb0.addWidget(btn_open)
-
         cb_only_main = QtWidgets.QCheckBox(self)
-        cb_only_main.setText('only programming step')
+        cb_only_main.setText('仅主编程')
 
         btn_start = QtWidgets.QPushButton(self)
-        btn_start.setText('start programming')
+        btn_start.setText('开始刷写')
         btn_start.setObjectName('btn_start')
         btn_start.setDisabled(True)
-
-        hb1 = QtWidgets.QHBoxLayout()
-        hb1.addWidget(cb_only_main)
-        hb1.addWidget(btn_start)
 
         progress_bar = QtWidgets.QProgressBar()
         progress_bar.setObjectName('progress_bar')
 
-        hb2 = QtWidgets.QHBoxLayout()
-        hb2.addWidget(progress_bar)
+        GL0 = QtWidgets.QGridLayout()
+        GL0.addWidget(cb_interface_type, 0, 0, 1, 1)
+        GL0.addWidget(cb_baudrate, 0, 1, 1, 1)
+        GL0.addWidget(cb_can_channel, 0, 2, 1, 1)
+        GL0.addWidget(btn_open, 0, 3, 1, 1)
 
-        # checkbox1 = QtWidgets.QCheckBox(self)
-        # checkbox2 = QtWidgets.QCheckBox(self)
-        # checkbox3 = QtWidgets.QCheckBox(self)
-        # checkbox4 = QtWidgets.QCheckBox(self)
-        # checkbox5 = QtWidgets.QCheckBox(self)
-        # checkbox6 = QtWidgets.QCheckBox(self)
-        # checkbox7 = QtWidgets.QCheckBox(self)
-        # checkbox8 = QtWidgets.QCheckBox(self)
-        # checkbox9 = QtWidgets.QCheckBox(self)
-        # checkbox10 = QtWidgets.QCheckBox(self)
-        # checkbox11 = QtWidgets.QCheckBox(self)
+        gb_cfg = QtWidgets.QGroupBox(self)
+        gb_cfg.setTitle('配置')
+        gb_cfg.setLayout(GL0)
 
-        # # https://blog.csdn.net/jianfengxia/article/details/86623321
+        GL1 = QtWidgets.QGridLayout()
+        GL1.addWidget(cb_only_main, 0, 0, 1, 1)
+        GL1.addWidget(btn_start, 1, 8, 1, 1)
+        GL1.addWidget(progress_bar, 1, 0, 1, 8)
 
-        # checkbox1.setText('Enter extended session')
-        # checkbox2.setText('Stop setting of DTCs')
-        # checkbox3.setText('Disable non-diagnostic communication')
-        # vb_pre = QtWidgets.QVBoxLayout()
-        # vb_pre.setAlignment(QtCore.Qt.AlignTop)
-        # vb_pre.addWidget(checkbox1)
-        # vb_pre.addWidget(checkbox2)
-        # vb_pre.addWidget(checkbox3)
-        # gb_pre = QtWidgets.QGroupBox(self)
-        # gb_pre.setTitle('pre-programming')
-        # gb_pre.setLayout(vb_pre)
-
-        # checkbox4.setText('Enter programming session')
-        # checkbox5.setText('Request seed')
-        # checkbox6.setText('Send key')
-        # checkbox7.setText('Write Programming Date')
-        # checkbox8.setText('Erase Application Software Memory')
-        # checkbox9.setText('Download Application Software')
-        # checkbox10.setText(
-        #     'Check Programming Application Software Dependencie')
-
-        # vb_main = QtWidgets.QVBoxLayout()
-        # vb_main.setAlignment(QtCore.Qt.AlignTop)
-        # vb_main.addWidget(checkbox4)
-        # vb_main.addWidget(checkbox5)
-        # vb_main.addWidget(checkbox6)
-        # vb_main.addWidget(checkbox7)
-        # vb_main.addWidget(checkbox8)
-        # vb_main.addWidget(checkbox9)
-        # vb_main.addWidget(checkbox10)
-        # gb_main = QtWidgets.QGroupBox(self)
-        # gb_main.setTitle('programming')
-        # gb_main.setLayout(vb_main)
-
-        # checkbox11.setText('ECUReset')
-        # vb_post = QtWidgets.QVBoxLayout()
-        # vb_post.setAlignment(QtCore.Qt.AlignTop)
-        # vb_post.addWidget(checkbox11)
-        # gb_post = QtWidgets.QGroupBox(self)
-        # gb_post.setTitle('post-programming')
-        # gb_post.setLayout(vb_post)
-
-        # hb3 = QtWidgets.QHBoxLayout()
-        # hb3.addWidget(gb_pre)
-        # hb3.addWidget(gb_main)
-        # hb3.addWidget(gb_post)
+        gb_progress = QtWidgets.QGroupBox(self)
+        gb_progress.setTitle('进度控制')
+        gb_progress.setLayout(GL1)
 
         tb_log_display = QtWidgets.QTextBrowser(self)
         tb_log_display.setObjectName('tb_log_display')
 
-        hb4 = QtWidgets.QHBoxLayout()
-        hb4.addWidget(tb_log_display)
+        table_data_display = QtWidgets.QTableWidget(self)
+        table_data_display.setObjectName('table_data_display')
+        table_data_display.setColumnCount(4)
+        table_data_display.setRowCount(8)
 
+        table_data_display.setHorizontalHeaderLabels(
+            ['时间', 'CAN ID', 'DLC', '数据'])
+        table_data_display.verticalHeader().setVisible(False)
+        table_data_display.horizontalHeader().setStretchLastSection(
+            True)  # 设置表格最后一列自适应
+        table_data_display.setColumnWidth(0, 100)
+        table_data_display.setColumnWidth(1, 80)
+        table_data_display.setColumnWidth(2, 80)
+        table_data_display.setShowGrid(False)
+        GL_disp = QtWidgets.QGridLayout()
+        GL_disp.setColumnStretch(0, 1)  # 设置表格列宽
+        GL_disp.setColumnStretch(1, 3)
+        GL_disp.addWidget(table_data_display, 0, 1, 1, 3)
+        GL_disp.addWidget(tb_log_display, 0, 0, 1, 1)
+
+        gb_log = QtWidgets.QGroupBox(self)
+        gb_log.setTitle('数据事件')
+        gb_log.setLayout(GL_disp)
+
+        # 垂直布局
         vb = QtWidgets.QVBoxLayout()
-        vb.addLayout(gl0)
-        vb.addLayout(hb0)
-        vb.addLayout(hb1)
-        vb.addLayout(hb2)
-        # vb.addLayout(hb3)
-        vb.addLayout(hb4)
+        vb.addWidget(gb_file)
+        vb.addWidget(gb_cfg)
+        vb.addWidget(gb_progress)
+        vb.addWidget(gb_log)
 
         self.setLayout(vb)
 
@@ -224,8 +195,10 @@
         # 发送driver文件
         self.append_text_to_log_display('>>> 发送driver文件')
         drv_file = self.drv_data
-        address = drv_file[16] << 24 | drv_file[17] << 16 | drv_file[18] << 8 | drv_file[19] << 0
-        memorysize = drv_file[20] << 24 | drv_file[21] << 16 | drv_file[22] << 8 | drv_file[23] << 0
+        address = drv_file[16] << 24 | drv_file[17] << 16 | drv_file[
+            18] << 8 | drv_file[19] << 0
+        memorysize = drv_file[20] << 24 | drv_file[21] << 16 | drv_file[
+            22] << 8 | drv_file[23] << 0
         memory_location = MemoryLocation(address, memorysize, 32, 32)
         response = await client.request_download(memory_location)
         # print(response)
@@ -241,7 +214,8 @@
         for i in range(count):
             start = i * payload_length
             end = start + payload_length
-            response = await client.transfer_data((i + 1) % 256, drv_file[start:end])
+            response = await client.transfer_data((i + 1) % 256,
+                                                  drv_file[start:end])
             self.set_progressbar_pos(base + end)
             # print(response)
 
@@ -254,8 +228,10 @@
         # print(response)
 
         app_file = self.app_data
-        address = app_file[16] << 24 | app_file[17] << 16 | app_file[18] << 8 | app_file[19] << 0
-        memorysize = app_file[20] << 24 | app_file[21] << 16 | app_file[22] << 8 | app_file[23] << 0
+        address = app_file[16] << 24 | app_file[17] << 16 | app_file[
+            18] << 8 | app_file[19] << 0
+        memorysize = app_file[20] << 24 | app_file[21] << 16 | app_file[
+            22] << 8 | app_file[23] << 0
         memory_location = MemoryLocation(address, memorysize, 32, 32)
 
         # 删除app存储空间
@@ -283,7 +259,8 @@
         for i in range(count):
             start = i * payload_length
             end = start + payload_length
-            response = await client.transfer_data((i + 1) % 256, app_file[start:end])
+            response = await client.transfer_data((i + 1) % 256,
+                                                  app_file[start:end])
             self.set_progressbar_pos(base + end)
             # print(response)
 
@@ -310,7 +287,8 @@
 
         with network.open():
 
-            reader, writer = await network.open_connection(self.rx_id, self.tx_id)
+            reader, writer = await network.open_connection(
+                self.rx_id, self.tx_id)
 
             client = Client(reader, writer)
 
@@ -354,10 +332,8 @@
 
     def set_progressbar_pos(self, pos):
 
-        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
+        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
         if pos > total_len:
             pos = total_len
@@ -452,20 +428,18 @@
         interface_type_index = self.findChild(
             QtWidgets.QComboBox, 'cb_interface_type').currentIndex()
 
-        baudrate_index = self.findChild(
-            QtWidgets.QComboBox, 'cb_baudrate').currentIndex()
+        baudrate_index = self.findChild(QtWidgets.QComboBox,
+                                        'cb_baudrate').currentIndex()
 
-        can_channel_index = self.findChild(
-            QtWidgets.QComboBox, 'cb_can_channel').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}
-        ]
+        can_filters = [{'can_id': self.rx_id, 'can_mask': 0xFFFFFFFF}]
 
         bitrate = list(TIMING_DICT.keys())[baudrate_index]
 
@@ -473,11 +447,13 @@
 
             if interface_type_index == 0:
                 self.bus = VectorBus(channel=can_channel_index,
-                                     bitrate=bitrate, can_filters=can_filters)
+                                     bitrate=bitrate,
+                                     can_filters=can_filters)
 
             elif interface_type_index == 1:
                 self.bus = CANalystIIBus(channel=can_channel_index,
-                                         baud=bitrate, can_filters=can_filters)
+                                         baud=bitrate,
+                                         can_filters=can_filters)
 
             self.append_text_to_log_display('open device success')
             self.findChild(QtWidgets.QPushButton,
@@ -489,17 +465,18 @@
     @QtCore.pyqtSlot(str)
     def on_cb_interface_type_currentIndexChanged(self, text):
 
-        if text == 'vector':
+        if text == 'CANoe':
             self.findChild(QtWidgets.QComboBox,
-                           'cb_can_channel').setItemText(0, 'CH1/3')
+                           'cb_can_channel').setItemText(0, '通道1/3')
             self.findChild(QtWidgets.QComboBox,
-                           'cb_can_channel').setItemText(1, 'CH2/4')
-        elif text == 'canalystii':
+                           'cb_can_channel').setItemText(1, '通道2/4')
+        elif text == 'USBCAN':
             self.findChild(QtWidgets.QComboBox,
                            'cb_can_channel').setItemText(0, 'CAN1')
             self.findChild(QtWidgets.QComboBox,
                            'cb_can_channel').setItemText(1, 'CAN2')
 
+
 # @PyQt5.QtCore.pyqtSlot(参数)
 # def on_发送者对象名称_发射信号名称(self, 参数):
 #     pass

--
Gitblit v1.8.0