diff --git a/__pycache__/ui_connerror.cpython-312.pyc b/__pycache__/ui_connerror.cpython-312.pyc index 98d6b60..3536310 100644 Binary files a/__pycache__/ui_connerror.cpython-312.pyc and b/__pycache__/ui_connerror.cpython-312.pyc differ diff --git a/__pycache__/ui_mainwindow.cpython-312.pyc b/__pycache__/ui_mainwindow.cpython-312.pyc index f7461d5..8c89b6f 100644 Binary files a/__pycache__/ui_mainwindow.cpython-312.pyc and b/__pycache__/ui_mainwindow.cpython-312.pyc differ diff --git a/main.py b/main.py index a5e0d64..6db4737 100644 --- a/main.py +++ b/main.py @@ -12,7 +12,7 @@ AUTHOR: D. RICE 06/01/2026 # Imports import sys from PySide6.QtWidgets import (QApplication, QDialog, QMainWindow) -from PySide6.QtCore import (QIODevice, QByteArray) +from PySide6.QtCore import (QIODevice, QByteArray, QTimer) from PySide6.QtSerialPort import (QSerialPort, QSerialPortInfo) import time @@ -65,14 +65,16 @@ class MainWindow(QMainWindow): # Hold process reference. self.p = None - # Thread and Worker initialisation - self.worker_thread = None - self.worker = None - # Add start button action self.ui.connButton.setCheckable(True) self.ui.connButton.clicked.connect(self.conn_button_press) + # Hide other controls + self.ui.sn.setHidden(True) + self.ui.snLabel.setHidden(True) + self.ui.fw.setHidden(True) + self.ui.fwLabel.setHidden(True) + # Set initial size initial_width = 1000 initial_height = 600 @@ -95,6 +97,20 @@ class MainWindow(QMainWindow): # Create serial rx buffer self.receive_buffer = bytearray() + # Create store buffer + self.store_buffer = bytearray() + + # Create a timeout counter flag + self.timeoutflag = False + + # Create a window response variable + self.windowresponse = False + + # Setup QT timers + self.timeouttimer = QTimer() + self.timeouttimer.setInterval(5000) + self.timeouttimer.timeout.connect(self.time_out_timer) + self.show() def conn_button_press (self): @@ -122,12 +138,40 @@ class MainWindow(QMainWindow): self.serial.write(QByteArray(byte_data)) - while (self.serial_rx_flag == False): - QApplication.processEvents() + self.timeouttimer.start() + + while ((self.serial_rx_flag == False) and (self.timeoutflag == False)): + QApplication.processEvents() + + w.close() + + if self.timeoutflag == True: + self.windowresponse = NoDeviceWindow.get_response(self) + self.serial.close() + self.ui.connButton.setText("CONNECT") + self.ui.sn.setHidden(True) + self.ui.snLabel.setHidden(True) + self.ui.fw.setHidden(True) + self.ui.fwLabel.setHidden(True) + self.ui.sn.setText("---") + self.ui.fw.setText("---") + + else: + self.process_serial_number() + + + self.serial_rx_flag = False + self.timeoutflag = False else: self.serial.close() - self.ui.connButton.setText("CONNECT") + self.ui.connButton.setText("CONNECT") + self.ui.sn.setHidden(True) + self.ui.snLabel.setHidden(True) + self.ui.fw.setHidden(True) + self.ui.fwLabel.setHidden(True) + self.ui.sn.setText("---") + self.ui.fw.setText("---") QApplication.processEvents() @@ -167,21 +211,42 @@ class MainWindow(QMainWindow): def handle_valid_packet(self, packet): # Checksum validity check try: - print (packet) data_bytes = list(packet[3 : -2]) received_checksum = (packet[-2] << 8) | packet[-1] if((~sum(data_bytes)) & 0xFFFF) == received_checksum: - print(f"RX DATA: {data_bytes}") + self.serial_rx_flag = True + self.store_buffer = data_bytes else: pass except Exception as e: - pass + pass + def process_serial_number(self): + # Get and update serial number + sub_sn = self.store_buffer[0:19] + sn_chars = [chr(c) for c in sub_sn if 0 <= c <= 127] + sn_str = "".join(sn_chars) + self.ui.sn.setText(sn_str) + # Get and update FW Rev + sub_fw = self.store_buffer[19:22] + major = sub_fw[1:2] + sep = sub_fw[0:1] + minor = sub_fw[2:3] + full = major + sep + minor + fw_chars = [chr(c) for c in full if 0 <= c <= 127] + fw_str = "".join(fw_chars) + self.ui.fw.setText(fw_str) + + self.ui.sn.setHidden(False) + self.ui.snLabel.setHidden(False) + self.ui.fw.setHidden(False) + self.ui.fwLabel.setHidden(False) + def pack_integers_to_bytes(self, *integers: int) -> bytes: # Setup header @@ -211,11 +276,10 @@ class MainWindow(QMainWindow): # We need as many 'B's as there are elements in the full packet format_string = f"!{len(full_packet)}B" - return struct.pack(format_string, *full_packet) - - def run_scope_setup (self): - self.worker.run_setup() - + return struct.pack(format_string, *full_packet) + + def time_out_timer(self): + self.timeoutflag = True # Run main if __name__ == '__main__': diff --git a/ui_connerror.py b/ui_connerror.py index 4f24d3a..fbb8cd5 100644 --- a/ui_connerror.py +++ b/ui_connerror.py @@ -62,5 +62,5 @@ class Ui_connerrorDialog(object): # setupUi def retranslateUi(self, Dialog): - self.label.setText(QCoreApplication.translate("Dialog", u"COULDN'T CONNECT TO DSO80204B", None)) + self.label.setText(QCoreApplication.translate("Dialog", u"COULDN'T CONNECT TO POWERSIM DEVICE", None)) # retranslateUi \ No newline at end of file diff --git a/ui_mainwindow.py b/ui_mainwindow.py index b4ef0dc..7997ef0 100644 --- a/ui_mainwindow.py +++ b/ui_mainwindow.py @@ -63,7 +63,7 @@ class Ui_MainWindow(object): self.connButton = QPushButton(self.test_area) self.connButton.setObjectName(u"connButton") - self.connButton.setGeometry(QRect(350, 25, 200, 25)) + self.connButton.setGeometry(QRect(25, 25, 200, 25)) self.connButton.setStyleSheet(button_style) text_label_style = """ @@ -75,12 +75,6 @@ class Ui_MainWindow(object): } """ - #self.manuLabel = QLabel(self.test_area) - #self.manuLabel.setObjectName(u"manuLabel") - #self.manuLabel.setGeometry(QRect(200, 5, 250, 15)) - #self.manuLabel.setAlignment(Qt.AlignCenter) - #self.manuLabel.setStyleSheet(text_label_style) - label_style = """ QLabel { background-image: url(""); @@ -90,49 +84,59 @@ class Ui_MainWindow(object): } """ - #self.manu = QLabel(self.test_area) - #self.manu.setObjectName(u"manu") - #self.manu.setGeometry(QRect(200, 25, 250, 25)) - #self.manu.setAlignment(Qt.AlignCenter) - #self.manu.setStyleSheet(label_style) + self.fwLabel = QLabel(self.test_area) + self.fwLabel.setObjectName(u"fwLabel") + self.fwLabel.setGeometry(QRect(675, 5, 200, 15)) + self.fwLabel.setAlignment(Qt.AlignCenter) + self.fwLabel.setStyleSheet(text_label_style) - #self.modelLabel = QLabel(self.test_area) - #self.modelLabel.setObjectName(u"modelLabel") - #self.modelLabel.setGeometry(QRect(475, 5, 125, 15)) - #self.modelLabel.setAlignment(Qt.AlignCenter) - #self.modelLabel.setStyleSheet(text_label_style) + self.fw = QLabel(self.test_area) + self.fw.setObjectName(u"fw") + self.fw.setGeometry(QRect(675, 25, 200, 25)) + self.fw.setAlignment(Qt.AlignCenter) + self.fw.setStyleSheet(label_style) - #self.model = QLabel(self.test_area) - #self.model.setObjectName(u"model") - #self.model.setGeometry(QRect(475, 25, 125, 25)) - #self.model.setAlignment(Qt.AlignCenter) - #self.model.setStyleSheet(label_style) + self.snLabel = QLabel(self.test_area) + self.snLabel.setObjectName(u"snlabel") + self.snLabel.setGeometry(QRect(450, 5, 200, 15)) + self.snLabel.setAlignment(Qt.AlignCenter) + self.snLabel.setStyleSheet(text_label_style) - #self.snLabel = QLabel(self.test_area) - #self.snLabel.setObjectName(u"snlabel") - #self.snLabel.setGeometry(QRect(625, 5, 125, 15)) - #self.snLabel.setAlignment(Qt.AlignCenter) - #self.snLabel.setStyleSheet(text_label_style) + self.sn = QLabel(self.test_area) + self.sn.setObjectName(u"sn") + self.sn.setGeometry(QRect(450, 25, 200, 25)) + self.sn.setAlignment(Qt.AlignCenter) + self.sn.setStyleSheet(label_style) - #self.sn = QLabel(self.test_area) - #self.sn.setObjectName(u"sn") - #self.sn.setGeometry(QRect(625, 25, 125, 25)) - #self.sn.setAlignment(Qt.AlignCenter) - #self.sn.setStyleSheet(label_style) + self.powerButton = QPushButton(self.test_area) + self.powerButton.setObjectName(u"powerButton") + self.powerButton.setGeometry(QRect(25, 75, 200, 25)) + self.powerButton.setStyleSheet(button_style) - #self.fwLabel = QLabel(self.test_area) - #self.fwLabel.setObjectName(u"fwLabel") - #self.fwLabel.setGeometry(QRect(775, 5, 125, 15)) - #self.fwLabel.setAlignment(Qt.AlignCenter) - #self.fwLabel.setStyleSheet(text_label_style) + self.setvLabel = QLabel(self.test_area) + self.setvLabel.setObjectName(u"setvlabel") + self.setvLabel.setGeometry(QRect(450, 55, 200, 15)) + self.setvLabel.setAlignment(Qt.AlignCenter) + self.setvLabel.setStyleSheet(text_label_style) - #self.fw = QLabel(self.test_area) - #self.fw.setObjectName(u"fw") - #self.fw.setGeometry(QRect(775, 25, 125, 25)) - #self.fw.setAlignment(Qt.AlignCenter) - #self.fw.setStyleSheet(label_style) + self.setv = QLabel(self.test_area) + self.setv.setObjectName(u"setv") + self.setv.setGeometry(QRect(450, 75, 200, 25)) + self.setv.setAlignment(Qt.AlignCenter) + self.setv.setStyleSheet(label_style) + self.actvLabel = QLabel(self.test_area) + self.actvLabel.setObjectName(u"actvlabel") + self.actvLabel.setGeometry(QRect(675, 55, 200, 15)) + self.actvLabel.setAlignment(Qt.AlignCenter) + self.actvLabel.setStyleSheet(text_label_style) + self.actv = QLabel(self.test_area) + self.actv.setObjectName(u"actv") + self.actv.setGeometry(QRect(675, 75, 200, 25)) + self.actv.setAlignment(Qt.AlignCenter) + self.actv.setStyleSheet(label_style) + frame_style = """ QFrame { background-image: url(""); @@ -157,14 +161,15 @@ class Ui_MainWindow(object): None)) self.header.setText(QCoreApplication.translate("MainWindow", u"AUTOMOTIVE POWER SIMULATOR", None)) self.connButton.setText(QCoreApplication.translate("MainWindow", u"CONNECT", None)) - #self.manuLabel.setText(QCoreApplication.translate("MainWindow", u"MANUFACTURER", None)) - #self.manu.setText(QCoreApplication.translate("MainWindow", u"---", None)) - #self.modelLabel.setText(QCoreApplication.translate("MainWindow", u"MODEL", None)) - #self.model.setText(QCoreApplication.translate("MainWindow", u"---", None)) - #self.snLabel.setText(QCoreApplication.translate("MainWindow", u"SERIAL NO", None)) - #self.sn.setText(QCoreApplication.translate("MainWindow", u"---", None)) - #self.fwLabel.setText(QCoreApplication.translate("MainWindow", u"F/W REV", None)) - #self.fw.setText(QCoreApplication.translate("MainWindow", u"---", None)) + self.snLabel.setText(QCoreApplication.translate("MainWindow", u"SERIAL NO", None)) + self.sn.setText(QCoreApplication.translate("MainWindow", u"---", None)) + self.fwLabel.setText(QCoreApplication.translate("MainWindow", u"F/W REV", None)) + self.fw.setText(QCoreApplication.translate("MainWindow", u"---", None)) + self.powerButton.setText(QCoreApplication.translate("MainWindow", u"POWER OFF", None)) + self.setvLabel.setText(QCoreApplication.translate("MainWindow", u"VOLTAGE SETPOINT", None)) + self.setv.setText(QCoreApplication.translate("MainWindow", u"00.00V", None)) + self.actvLabel.setText(QCoreApplication.translate("MainWindow", u"VOLTAGE MEASURED", None)) + self.actv.setText(QCoreApplication.translate("MainWindow", u"00.00V", None)) # retranslateUi