This commit is contained in:
david rice
2026-01-19 16:00:19 +00:00
parent e1423fc4c3
commit 4490dd803a
5 changed files with 136 additions and 67 deletions

96
main.py
View File

@@ -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__':

View File

@@ -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

View File

@@ -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