Updates
This commit is contained in:
Binary file not shown.
Binary file not shown.
96
main.py
96
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__':
|
||||
|
||||
@@ -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
|
||||
105
ui_mainwindow.py
105
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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user