From d4c124ff1ab545d4a05cfdd986e2162f019fe468 Mon Sep 17 00:00:00 2001 From: david rice Date: Wed, 7 Jan 2026 16:01:52 +0000 Subject: [PATCH] Updates --- __pycache__/ui_connerror.cpython-312.pyc | Bin 3891 -> 3892 bytes __pycache__/ui_mainwindow.cpython-312.pyc | Bin 10749 -> 6099 bytes __pycache__/ui_scanning.cpython-312.pyc | Bin 2622 -> 2629 bytes main.py | 149 +++++++--------------- ui_mainwindow.py | 106 +++++++-------- ui_scanning.py | 6 +- 6 files changed, 105 insertions(+), 156 deletions(-) diff --git a/__pycache__/ui_connerror.cpython-312.pyc b/__pycache__/ui_connerror.cpython-312.pyc index ffa66cb8c7aeb2f3bb075faeaeeb0a484d93b1dd..98d6b606529a70a60d9b10f7c62f9aa69e91a667 100644 GIT binary patch delta 38 scmdliw?&TYG%qg~0}xEf*vOU3#p|Y@k)NBYpORRXnWDS7nQH?J0L-roP5=M^ delta 37 rcmdlYw^@$sG%qg~0}#xy-pG~9#p9}M2cjJ#A=qwAK8Q_A7K}nypBs` zvK0ppr&KL_igYbUip*qxA!|na$$_lGljjMUF*;6OC?q^tMwn-E3Y!Rm$LI`JVI$1L z?FzC71hU+qV%&@Ca;44FF^C(DW+nj{KlmEy{aea_u7w75V{*b{qIbN}qk#X{QMybjF6~D0n z{lz-@r>YN=CfnpvHDf7FrXm}lvx-1&D`o-`3JOJ_@F=pH{7OxgDW74opn4wbRgUN) z_sLT2KczG$)vhRX W@*Yh+;czC#7{&>1Um3s*utEUcIgm&I delta 2739 zcmb`IUr1Y59LIB`$vrpTm}(Le6Z79V|HsvTs})ymwCk`@qpfw_EOytfaWSQFottZ$ zhcT$5u(7iTWik^GOxK5H_)^#y7RC?;C6{|gO7=2}FG3kDYzzv6opWzIx!v5u*zUvO zp3nXMe&65k+mRC9gs9x%d8iOFEQL&=mX@^`dO#?IAn4$diO zq-6a!nxmy87#UR1#bC~L9Tbe*aze@I7%_4ewJ3+oWg`nRDwIyiykI0xkdYn~g9|1e zg~ucBws&45fjqqsi{d1aD{2JQ3$Z+XaZ#4h$U3jSxCpoPKU2+Hsq!Gz5XY}J z-iU`LJT#*L=a3@etr!LH&;}nGcGw|BQ>fD>`0!Atx?T&bE6&kT!80#{7<{i{kec4Q zS8g-VcC!aejfOfQ4zF1E~RVOEU^Assj|6~rJLoca-li^ z?^o6(jOm$-F>^ui9T7nfjx1j;&jB9~d>aFsp;QP(6I#oI+N{4*1YIbhg}qsZ@|o=` z9qWCoeS)d+X6Y>kYnf#x2V6XGC20}V6XM{3V{JBhJYAU{&v*qV&hwysU+?6Bb1lAp zWA%mzT1kwQrA!3PyQpr{rZeRfY;7=TtWR7ypkG|yMtE~NH7$Y;oP(@FwysMA-MgsR z;Cg5^B$%5}u{tc#E$ec?%>#GRDuPBrq;jq%$J5^Q>zTuX3x|`3sH%i(LyebF1ObAj zEOrsJ>{=Wv+P&2ZxuK@xk!P{$Y1$ zWQiUMOuEB^XBx`k`{wq6gU+9L5T7`Tvjteco>5dFl+X!6BPX2 z97~Ac9R5zE!vgOW(G|$Kj_|G{cbj(%*{RnA7y6XWV~KPcRP&%(v^C~z9lWh0^Xhij zPKRI{6~P!*NV^p8bkW_GbNBG>p1Zv}*6jGC;65vYDJ+q8sf`CV(cYA^ck&5)XC}Hm zv=bEUVMN=sZr|Vq2E-}jU@aNjF=#l diff --git a/__pycache__/ui_scanning.cpython-312.pyc b/__pycache__/ui_scanning.cpython-312.pyc index b482186189482d3a8520e1935050a725a91f14d8..29a5214947772cdc89ca9c3e0e6f882f22eafecd 100644 GIT binary patch delta 135 zcmdlda#V!(G%qg~0}vQi$7L37_CGm$Z4atG&f{tU($Y+o6a88aA*)PXhw0RJ~8f&c&j delta 128 zcmX>qvQLEfG%qg~0}#xyj?2v6$g9i3=D^6n@N&Uq2NqQ}9T2l;b2iIwMjjXajQreG z{glMA%#_W=YywQ;V!_Uietw>Q?h0=HK?*Lx{uTyC1}09E7jQIlMP7)Gzbu__l_PPo dE@vWR(&T>5<@`yEGuXZ|C^IH87O4ZR1OO6 bytes: + # Setup header + sync_bytes = [0x41, 0x52] + + # Process data + # Mask each input to 8-bits to prevent packing errors + data_bytes = [i & 0xFF for i in integers] + + # Get length + data_length = [len(data_bytes) & 0xFF] + + # Calculate checksum + # Summingall data bytes, then applying bitwise NOT + total_sum = sum(data_bytes) + rx_checksum = ~total_sum + + rx_checksum_h = (rx_checksum >> 8) & 0xFF + rx_checksum_l = rx_checksum & 0xFF + checksum_bytes = [rx_checksum_h,rx_checksum_l] + + # Combine all components + full_packet = sync_bytes + data_length + data_bytes + checksum_bytes + + # Dymanically create format string + # '!' = Network order, 'B' = unsigned char + # 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() - - @Slot() - def start_worker(self): - # Create a QThread - self.worker_thread = QThread() - - #nCreate the worker QObject (Now created directly, no import needed) - self.worker = ScopeWorker() - - # Move the worker object to the thread - self.worker.moveToThread(self.worker_thread) - - # Connect Signals - self.worker_thread.started.connect(self.worker.run) - - self.worker.idn_signal.connect(self.handle_idn) - self.worker.data_ready_signal.connect(self.handle_data_ready) - self.worker.error_signal.connect(self.handle_error) - - # Clean-up connections - self.worker.finished_signal.connect(self.worker_thread.quit) - self.worker.finished_signal.connect(self.worker.deleteLater) - self.worker_thread.finished.connect(self.worker_thread.deleteLater) - - # Start the QThread, which triggers worker.run - self.worker_thread.start() - - @Slot() - def signal_acquisition(self): - """Sends the signal to the worker to start pulling data.""" - if self.worker: - self.log_text.append("Main: Sending START_ACQUISITION signal.") - self.status_label.setText("Status: Acquiring data...") - # This is safe because start_acquisition only sets a flag - self.worker.start_acquisition() - - # --- SLOTS: Receive data safely from the worker thread --- - - @Slot(str) - def handle_idn(self, idn_string): - global IDN_Response_flag - global Error_flag - - # Received the initial IDN from the worker - IDN_Response_flag = True - - # Split the string by the comma delimiter - components = idn_string.strip().split(',') - - # Split the string by the comma delimiter - components = idn_string.strip().split(',') - - if len(components) == 4: - # Assign the components to meaningful keys in a dictionary - parsed_data = { - "manufacturer": components[0], - "model": components[1], - "serial_number": components[2], - "firmware_version": components[3] - } - - self.ui.manu.setText(parsed_data.get("manufacturer")) - self.ui.model.setText(parsed_data.get("model")) - self.ui.sn.setText(parsed_data.get("serial_number")) - self.ui.fw.setText(parsed_data.get("firmware_version")) - - else: - Error_flag = True - - self.ui.manu.setText("---") - self.ui.model.setText("---") - self.ui.sn.setText("---") - self.ui.fw.setText("---") - - @Slot(str) - def handle_data_ready(self, data_snippet): - """Received the acquired data from the worker.""" - self.status_label.setText("Status: Data Ready. Waiting for next command.") - self.log_text.append(f"Main: Received Waveform Data Snippet:\n{data_snippet}") - - @Slot(str) - def handle_error(self, message): - global Error_flag - - Error_flag = True - - def closeEvent(self): - """Handle application close to stop the thread gracefully.""" - if self.worker_thread and self.worker_thread.isRunning(): - self.worker.stop() - # Wait a moment for the thread to clean up - self.worker_thread.wait(500) + # Run main if __name__ == '__main__': diff --git a/ui_mainwindow.py b/ui_mainwindow.py index b46fe29..b4ef0dc 100644 --- a/ui_mainwindow.py +++ b/ui_mainwindow.py @@ -13,7 +13,7 @@ class Ui_MainWindow(object): MainWindow.setToolButtonStyle(Qt.ToolButtonIconOnly) MainWindow.setAnimated(True) MainWindow.setDocumentMode(False) - MainWindow.setWindowIcon(QIcon('/home/davidrice/Python/Automotive-Power-Simulator-App/arriveico.png')) + MainWindow.setWindowIcon(QIcon('/home/david-rice/Python/Automotive-Power-Simulator-App/arriveico.png')) fontmain = QFont() fontmain.setFamilies([u"Optimism Sans"]) fontmain.setPointSize(8) @@ -21,7 +21,7 @@ class Ui_MainWindow(object): MainWindow.setFont(fontmain) # Ensure the path is correct for your system! - image_path = "/home/davidrice/Python/Automotive-Power-Simulator-App/appbackground.jpg" # Example Path + image_path = "/home/david-rice/Python/Automotive-Power-Simulator-App/appbackground.jpg" # Example Path # --- Define and Apply the Style Sheet --- bg_style_sheet = f""" @@ -37,7 +37,7 @@ class Ui_MainWindow(object): self.centralwidget.setStyleSheet(bg_style_sheet) self.header = QLabel(self.centralwidget) self.header.setObjectName(u"header") - self.header.setGeometry(QRect(50, 35, 650, 50)) + self.header.setGeometry(QRect(50, 35, 750, 50)) font = QFont() font.setFamilies([u"Optimism Sans"]) font.setPointSize(24) @@ -49,7 +49,7 @@ class Ui_MainWindow(object): self.test_area = QFrame(self.centralwidget) self.test_area.setObjectName(u"test_area") - self.test_area.setGeometry(QRect(50, 115, 924, 618)) + self.test_area.setGeometry(QRect(50, 115, 900, 440)) self.test_area.setFrameShape(QFrame.StyledPanel) self.test_area.setFrameShadow(QFrame.Raised) @@ -63,7 +63,7 @@ class Ui_MainWindow(object): self.connButton = QPushButton(self.test_area) self.connButton.setObjectName(u"connButton") - self.connButton.setGeometry(QRect(25, 25, 125, 25)) + self.connButton.setGeometry(QRect(350, 25, 200, 25)) self.connButton.setStyleSheet(button_style) text_label_style = """ @@ -75,11 +75,11 @@ 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) + #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 { @@ -90,47 +90,47 @@ 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.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.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.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.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.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(625, 5, 125, 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(625, 25, 125, 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.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.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.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.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) frame_style = """ @@ -157,14 +157,14 @@ 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.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)) # retranslateUi diff --git a/ui_scanning.py b/ui_scanning.py index fa34879..d1473f2 100644 --- a/ui_scanning.py +++ b/ui_scanning.py @@ -6,7 +6,7 @@ class Ui_scanningDialog(object): def setupUi(self, Dialog): if not Dialog.objectName(): Dialog.setObjectName(u"Dialog") - Dialog.resize(320, 160) + Dialog.resize(300, 150) # Set the window flags to remove the title bar Dialog.setWindowFlags(Qt.WindowType.FramelessWindowHint) @@ -19,7 +19,7 @@ class Ui_scanningDialog(object): self.label = QLabel(Dialog) self.label.setObjectName(u"label") self.label.setFont(font) - self.label.setGeometry(QRect(10, 10, 300, 140)) + self.label.setGeometry(QRect(10, 10, 280, 130)) self.label.setAlignment(Qt.AlignCenter) self.label.setWordWrap(True) @@ -37,5 +37,5 @@ class Ui_scanningDialog(object): # setupUi def retranslateUi(self, Dialog): - self.label.setText(QCoreApplication.translate("Dialog", u"SCANNING FOR DSO80204B", None)) + self.label.setText(QCoreApplication.translate("Dialog", u"SCANNING FOR ARRIVE POWERSIM", None)) # retranslateUi \ No newline at end of file