This commit is contained in:
David Rice
2026-01-19 20:38:59 +00:00
parent 4490dd803a
commit 95332f3788
5 changed files with 146 additions and 24 deletions

78
main.py
View File

@@ -69,11 +69,24 @@ class MainWindow(QMainWindow):
self.ui.connButton.setCheckable(True) self.ui.connButton.setCheckable(True)
self.ui.connButton.clicked.connect(self.conn_button_press) self.ui.connButton.clicked.connect(self.conn_button_press)
# Add radio button actions
self.ui.radiolocal.toggled.connect(self.handle_all_radios)
self.ui.radioscript.toggled.connect(self.handle_all_radios)
self.ui.radiopulse.toggled.connect(self.handle_all_radios)
# Hide other controls # Hide other controls
self.ui.sn.setHidden(True) self.ui.sn.setHidden(True)
self.ui.snLabel.setHidden(True) self.ui.snLabel.setHidden(True)
self.ui.fw.setHidden(True) self.ui.fw.setHidden(True)
self.ui.fwLabel.setHidden(True) self.ui.fwLabel.setHidden(True)
self.ui.radiolocal.setHidden(True)
self.ui.radioscript.setHidden(True)
self.ui.radiopulse.setHidden(True)
self.ui.powerButton.setHidden(True)
self.ui.setvLabel.setHidden(True)
self.ui.setv.setHidden(True)
self.ui.actvLabel.setHidden(True)
self.ui.actv.setHidden(True)
# Set initial size # Set initial size
initial_width = 1000 initial_width = 1000
@@ -88,8 +101,8 @@ class MainWindow(QMainWindow):
self.setFixedSize(1000, 600) self.setFixedSize(1000, 600)
# Setup serial port # Setup serial port
self.serial = QSerialPort(self) #self.serial = QSerialPort(self)
self.serial.readyRead.connect(self.on_data_received) #self.serial.readyRead.connect(self.on_data_received)
# Create serial rx flag # Create serial rx flag
self.serial_rx_flag = False self.serial_rx_flag = False
@@ -113,6 +126,39 @@ class MainWindow(QMainWindow):
self.show() self.show()
def handle_all_radios(self):
# sender() returns the widget that sent the signal
button = self.sender()
if button.isChecked():
if button.text() == "LOCAL CONTROL":
self.ui.powerButton.setHidden(False)
self.ui.setvLabel.setHidden(False)
self.ui.setv.setHidden(False)
self.ui.actvLabel.setHidden(False)
self.ui.actv.setHidden(False)
elif button.text() == "SCRIPT CONTROL":
self.ui.powerButton.setHidden(True)
self.ui.setvLabel.setHidden(True)
self.ui.setv.setHidden(True)
self.ui.actvLabel.setHidden(True)
self.ui.actv.setHidden(True)
elif button.text() == "PULSE TRIGGERED":
self.ui.powerButton.setHidden(True)
self.ui.setvLabel.setHidden(True)
self.ui.setv.setHidden(True)
self.ui.actvLabel.setHidden(True)
self.ui.actv.setHidden(True)
else:
self.ui.powerButton.setHidden(True)
self.ui.setvLabel.setHidden(True)
self.ui.setv.setHidden(True)
self.ui.actvLabel.setHidden(True)
self.ui.actv.setHidden(True)
def conn_button_press (self): def conn_button_press (self):
text_conn = self.ui.connButton.text() text_conn = self.ui.connButton.text()
@@ -125,21 +171,23 @@ class MainWindow(QMainWindow):
QApplication.processEvents() QApplication.processEvents()
# Specify serial port and baud # Specify serial port and baud
self.serial.setPortName("/dev/ttyACM0") #self.serial.setPortName("/dev/ttyACM0")
self.serial.setBaudRate(115200) #self.serial.setBaudRate(115200)
if not self.serial.open(QIODevice.ReadWrite): #if not self.serial.open(QIODevice.ReadWrite):
print(f"Failed to open port: {self.serial.errorString()}") #print(f"Failed to open port: {self.serial.errorString()}")
command = 73 #0x49 'I' ASCII command = 73 #0x49 'I' ASCII
state = 0 state = 0
data = (command, state) data = (command, state)
byte_data = self.pack_integers_to_bytes(*data) byte_data = self.pack_integers_to_bytes(*data)
self.serial.write(QByteArray(byte_data)) #self.serial.write(QByteArray(byte_data))
self.timeouttimer.start() self.timeouttimer.start()
self.serial_rx_flag = True
while ((self.serial_rx_flag == False) and (self.timeoutflag == False)): while ((self.serial_rx_flag == False) and (self.timeoutflag == False)):
QApplication.processEvents() QApplication.processEvents()
@@ -147,7 +195,7 @@ class MainWindow(QMainWindow):
if self.timeoutflag == True: if self.timeoutflag == True:
self.windowresponse = NoDeviceWindow.get_response(self) self.windowresponse = NoDeviceWindow.get_response(self)
self.serial.close() #self.serial.close()
self.ui.connButton.setText("CONNECT") self.ui.connButton.setText("CONNECT")
self.ui.sn.setHidden(True) self.ui.sn.setHidden(True)
self.ui.snLabel.setHidden(True) self.ui.snLabel.setHidden(True)
@@ -155,6 +203,9 @@ class MainWindow(QMainWindow):
self.ui.fwLabel.setHidden(True) self.ui.fwLabel.setHidden(True)
self.ui.sn.setText("---") self.ui.sn.setText("---")
self.ui.fw.setText("---") self.ui.fw.setText("---")
self.ui.radiolocal.setHidden(True)
self.ui.radioscript.setHidden(True)
self.ui.radiopulse.setHidden(True)
else: else:
self.process_serial_number() self.process_serial_number()
@@ -164,7 +215,7 @@ class MainWindow(QMainWindow):
self.timeoutflag = False self.timeoutflag = False
else: else:
self.serial.close() #self.serial.close()
self.ui.connButton.setText("CONNECT") self.ui.connButton.setText("CONNECT")
self.ui.sn.setHidden(True) self.ui.sn.setHidden(True)
self.ui.snLabel.setHidden(True) self.ui.snLabel.setHidden(True)
@@ -172,6 +223,9 @@ class MainWindow(QMainWindow):
self.ui.fwLabel.setHidden(True) self.ui.fwLabel.setHidden(True)
self.ui.sn.setText("---") self.ui.sn.setText("---")
self.ui.fw.setText("---") self.ui.fw.setText("---")
self.ui.radiolocal.setHidden(True)
self.ui.radioscript.setHidden(True)
self.ui.radiopulse.setHidden(True)
QApplication.processEvents() QApplication.processEvents()
@@ -229,6 +283,7 @@ class MainWindow(QMainWindow):
sub_sn = self.store_buffer[0:19] sub_sn = self.store_buffer[0:19]
sn_chars = [chr(c) for c in sub_sn if 0 <= c <= 127] sn_chars = [chr(c) for c in sub_sn if 0 <= c <= 127]
sn_str = "".join(sn_chars) sn_str = "".join(sn_chars)
sn_str = "ARRIVE-POWERSIM-001"
self.ui.sn.setText(sn_str) self.ui.sn.setText(sn_str)
# Get and update FW Rev # Get and update FW Rev
@@ -240,12 +295,17 @@ class MainWindow(QMainWindow):
full = major + sep + minor full = major + sep + minor
fw_chars = [chr(c) for c in full if 0 <= c <= 127] fw_chars = [chr(c) for c in full if 0 <= c <= 127]
fw_str = "".join(fw_chars) fw_str = "".join(fw_chars)
fw_str = "0:1"
self.ui.fw.setText(fw_str) self.ui.fw.setText(fw_str)
self.ui.sn.setHidden(False) self.ui.sn.setHidden(False)
self.ui.snLabel.setHidden(False) self.ui.snLabel.setHidden(False)
self.ui.fw.setHidden(False) self.ui.fw.setHidden(False)
self.ui.fwLabel.setHidden(False) self.ui.fwLabel.setHidden(False)
self.ui.radiolocal.setHidden(False)
self.ui.radioscript.setHidden(False)
self.ui.radiopulse.setHidden(False)
self.ui.radiolocal.setChecked(True)
def pack_integers_to_bytes(self, *integers: int) -> bytes: def pack_integers_to_bytes(self, *integers: int) -> bytes:

View File

@@ -2,7 +2,7 @@
from PySide6.QtCore import (QCoreApplication, QMetaObject, QRect, Qt) from PySide6.QtCore import (QCoreApplication, QMetaObject, QRect, Qt)
from PySide6.QtGui import (QBrush, QColor, QFont, QIcon, QPalette, QPixmap, QFontDatabase) from PySide6.QtGui import (QBrush, QColor, QFont, QIcon, QPalette, QPixmap, QFontDatabase)
from PySide6.QtWidgets import (QCheckBox, QFrame, QLabel, QProgressBar, QSlider, QPushButton, QWidget, QVBoxLayout) from PySide6.QtWidgets import (QRadioButton, QFrame, QLabel, QFileDialog, QPushButton, QWidget)
class Ui_MainWindow(object): class Ui_MainWindow(object):
@@ -13,7 +13,8 @@ class Ui_MainWindow(object):
MainWindow.setToolButtonStyle(Qt.ToolButtonIconOnly) MainWindow.setToolButtonStyle(Qt.ToolButtonIconOnly)
MainWindow.setAnimated(True) MainWindow.setAnimated(True)
MainWindow.setDocumentMode(False) MainWindow.setDocumentMode(False)
MainWindow.setWindowIcon(QIcon('/home/david-rice/Python/Automotive-Power-Simulator-App/arriveico.png')) #MainWindow.setWindowIcon(QIcon('/home/david-rice/Python/Automotive-Power-Simulator-App/arriveico.png'))
MainWindow.setWindowIcon(QIcon('/home/dfr84/Python/Automotive-Power-Simulator-App/arriveico.png'))
fontmain = QFont() fontmain = QFont()
fontmain.setFamilies([u"Optimism Sans"]) fontmain.setFamilies([u"Optimism Sans"])
fontmain.setPointSize(8) fontmain.setPointSize(8)
@@ -21,7 +22,8 @@ class Ui_MainWindow(object):
MainWindow.setFont(fontmain) MainWindow.setFont(fontmain)
# Ensure the path is correct for your system! # Ensure the path is correct for your system!
image_path = "/home/david-rice/Python/Automotive-Power-Simulator-App/appbackground.jpg" # Example Path #image_path = "/home/david-rice/Python/Automotive-Power-Simulator-App/appbackground.jpg"
image_path = "/home/dfr84/Python/Automotive-Power-Simulator-App/appbackground.jpg"
# --- Define and Apply the Style Sheet --- # --- Define and Apply the Style Sheet ---
bg_style_sheet = f""" bg_style_sheet = f"""
@@ -98,45 +100,105 @@ class Ui_MainWindow(object):
self.snLabel = QLabel(self.test_area) self.snLabel = QLabel(self.test_area)
self.snLabel.setObjectName(u"snlabel") self.snLabel.setObjectName(u"snlabel")
self.snLabel.setGeometry(QRect(450, 5, 200, 15)) self.snLabel.setGeometry(QRect(350, 5, 200, 15))
self.snLabel.setAlignment(Qt.AlignCenter) self.snLabel.setAlignment(Qt.AlignCenter)
self.snLabel.setStyleSheet(text_label_style) self.snLabel.setStyleSheet(text_label_style)
self.sn = QLabel(self.test_area) self.sn = QLabel(self.test_area)
self.sn.setObjectName(u"sn") self.sn.setObjectName(u"sn")
self.sn.setGeometry(QRect(450, 25, 200, 25)) self.sn.setGeometry(QRect(350, 25, 200, 25))
self.sn.setAlignment(Qt.AlignCenter) self.sn.setAlignment(Qt.AlignCenter)
self.sn.setStyleSheet(label_style) self.sn.setStyleSheet(label_style)
self.powerButton = QPushButton(self.test_area) self.powerButton = QPushButton(self.test_area)
self.powerButton.setObjectName(u"powerButton") self.powerButton.setObjectName(u"powerButton")
self.powerButton.setGeometry(QRect(25, 75, 200, 25)) self.powerButton.setGeometry(QRect(25, 150, 200, 25))
self.powerButton.setStyleSheet(button_style) self.powerButton.setStyleSheet(button_style)
self.setvLabel = QLabel(self.test_area) self.setvLabel = QLabel(self.test_area)
self.setvLabel.setObjectName(u"setvlabel") self.setvLabel.setObjectName(u"setvlabel")
self.setvLabel.setGeometry(QRect(450, 55, 200, 15)) self.setvLabel.setGeometry(QRect(350, 130, 200, 15))
self.setvLabel.setAlignment(Qt.AlignCenter) self.setvLabel.setAlignment(Qt.AlignCenter)
self.setvLabel.setStyleSheet(text_label_style) self.setvLabel.setStyleSheet(text_label_style)
self.setv = QLabel(self.test_area) self.setv = QLabel(self.test_area)
self.setv.setObjectName(u"setv") self.setv.setObjectName(u"setv")
self.setv.setGeometry(QRect(450, 75, 200, 25)) self.setv.setGeometry(QRect(350, 150, 200, 25))
self.setv.setAlignment(Qt.AlignCenter) self.setv.setAlignment(Qt.AlignCenter)
self.setv.setStyleSheet(label_style) self.setv.setStyleSheet(label_style)
self.actvLabel = QLabel(self.test_area) self.actvLabel = QLabel(self.test_area)
self.actvLabel.setObjectName(u"actvlabel") self.actvLabel.setObjectName(u"actvlabel")
self.actvLabel.setGeometry(QRect(675, 55, 200, 15)) self.actvLabel.setGeometry(QRect(675, 130, 200, 15))
self.actvLabel.setAlignment(Qt.AlignCenter) self.actvLabel.setAlignment(Qt.AlignCenter)
self.actvLabel.setStyleSheet(text_label_style) self.actvLabel.setStyleSheet(text_label_style)
self.actv = QLabel(self.test_area) self.actv = QLabel(self.test_area)
self.actv.setObjectName(u"actv") self.actv.setObjectName(u"actv")
self.actv.setGeometry(QRect(675, 75, 200, 25)) self.actv.setGeometry(QRect(675, 150, 200, 25))
self.actv.setAlignment(Qt.AlignCenter) self.actv.setAlignment(Qt.AlignCenter)
self.actv.setStyleSheet(label_style) self.actv.setStyleSheet(label_style)
self.radiolocal = QRadioButton("LOCAL CONTROL", self.test_area)
self.radiolocal.setObjectName(u"radiolocal")
self.radiolocal.setGeometry(QRect(25, 75, 200, 25))
self.radioscript = QRadioButton("SCRIPT CONTROL", self.test_area)
self.radioscript.setObjectName(u"radioscript")
self.radioscript.setGeometry(QRect(350, 75, 200, 25))
self.radiopulse = QRadioButton("PULSE TRIGGERED", self.test_area)
self.radiopulse.setObjectName(u"radiopulse")
self.radiopulse.setGeometry(QRect(675, 75, 200, 25))
radiostyle = ("""
QRadioButton {
font-size: 14px;
background-color: #FF80D4;
border: 1px solid #FF33BB;
border-radius: 1px;
spacing: 10px;
padding-left: 30px;
}
QRadioButton::indicator {
subcontrol-origin: content;
subcontrol-position: center left;
width: 15px;
height: 15px;
}
""")
self.radiolocal.setStyleSheet(radiostyle)
self.radioscript.setStyleSheet(radiostyle)
self.radiopulse.setStyleSheet(radiostyle)
self.fileexplorer = QFileDialog (self.test_area)
self.fileexplorer.setOption(QFileDialog.Option.DontUseNativeDialog, True)
self.fileexplorer.setObjectName(u"fileexplorer")
self.fileexplorer.setGeometry(QRect(25, 150, 200, 25))
filedialogstyle = ("""
QFileDialog {
background-color: #FF80D4;
border: 4px solid #FF33BB;
}
/* Style the file list/tree area */
QTreeView, QListView {
background-color: white;
border: 1px solid #FF33BB;
selection-background-color: #FF33BB;
}
/* Style the bottom buttons */
QPushButton {
background-color: #FF33BB;
color: white;
border-radius: 4px;
min-width: 80px;
padding: 5px;
}
""")
self.fileexplorer.setStyleSheet(filedialogstyle)
frame_style = """ frame_style = """
QFrame { QFrame {
background-image: url(""); background-image: url("");