Loading firmware/ui/main.py +40 −5 Original line number Diff line number Diff line # Quentin Rod for PI - MSE Computer Science import sys from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, QHBoxLayout, QVBoxLayout, QPushButton, QSlider, QLineEdit, QGroupBox, QTextEdit, QLabel from PyQt6.QtCore import Qt from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QHBoxLayout, QVBoxLayout, QPushButton, QSlider, QLineEdit, QGroupBox, QTextEdit, QLabel from PySide6.QtCore import Qt import serial import os import threading from PyQt6.QtCore import pyqtSignal from PyQt6.QtGui import QIcon from PySide6.QtCore import Signal as pyqtSignal from PySide6.QtGui import QIcon, QCloseEvent import time DEFAULT_TRIG_OFF_TIME=92000 DEFAULT_MIN_EXP_TIME=19 DEFAULT_FLASH_OFF=15000 DEFAULT_FLASH_ON=1000 DEFAULT_TRIG_SHIFT_TIME=1000 class SerialLogger(QWidget): sig_recv = pyqtSignal(str) def __init__(self, ser): Loading Loading @@ -70,7 +76,6 @@ class Flasher(): def flash_off(self, val): self._send_cmd("flash.off:" + str(val) +";") flasher = None class CommandWidget(QWidget): Loading Loading @@ -140,6 +145,14 @@ class MainWindow(QMainWindow): self.on_button.clicked.connect(self.on_button_clicked) self.on_button.setChecked(False) self.on_button_clicked() self.reset_button = QPushButton("Reset", self) self.reset_button.setGeometry(200, 150, 100, 40) self.reset_button.setCheckable(True) self.reset_button.setMaximumWidth(50) self.reset_button.clicked.connect(self.reset_button_clicked) self.reset_button.setChecked(False) # self.on_button_clicked() #self.on_button.setChecked(False) self.trig_expo_widget = CommandWidget('Minimal exposure time (us)', self.trig_expo_cb, 0, 200, 19) Loading @@ -156,6 +169,7 @@ class MainWindow(QMainWindow): layout_cmd = QVBoxLayout() layout_cmd.addWidget(self.on_button, alignment= Qt.AlignmentFlag.AlignCenter) layout_cmd.addWidget(self.reset_button, alignment=Qt.AlignmentFlag.AlignCenter) layout_cmd.addWidget(self.trig_off_widget) layout_cmd.addWidget(self.flash_off_widget) layout_cmd.addWidget(self.flash_on_widget) Loading @@ -180,6 +194,24 @@ class MainWindow(QMainWindow): else: self.flasher.off() self.on_button.setText("On") def reset_button_clicked(self): self.trig_off_widget_cb(DEFAULT_TRIG_OFF_TIME) self.trig_off_widget.update_val(DEFAULT_TRIG_OFF_TIME) self.flash_off_widget_cb(DEFAULT_FLASH_OFF) self.flash_off_widget.update_val(DEFAULT_FLASH_OFF) self.flash_on_widget_cb(DEFAULT_FLASH_ON) self.flash_on_widget.update_val(DEFAULT_FLASH_ON) self.trig_shift_cb(DEFAULT_TRIG_SHIFT_TIME) self.trig_shift_widget.update_val(DEFAULT_TRIG_SHIFT_TIME) self.trig_expo_cb(DEFAULT_MIN_EXP_TIME) self.trig_expo_widget.update_val(DEFAULT_MIN_EXP_TIME) def trig_off_widget_cb(self, value): self.flasher.trig_off(value) def flash_off_widget_cb(self, value): Loading @@ -191,6 +223,9 @@ class MainWindow(QMainWindow): def trig_expo_cb(self, value): self.flasher.trig_expo(value) def closeEvent(self, ev=None): self.flasher.off() if __name__ == "__main__": if len(sys.argv) != 2: print("Please use : " + sys.argv[0] + " " + "[DEV_UART]") Loading firmware/ui/poetry.lock 0 → 100644 +89 −0 Original line number Diff line number Diff line [[package]] name = "pyserial" version = "3.5" description = "Python Serial Port Extension" category = "main" optional = false python-versions = "*" [package.extras] cp2110 = ["hidapi"] [[package]] name = "PySide6" version = "6.7.2" description = "Python bindings for the Qt cross-platform application and UI framework" category = "main" optional = false python-versions = "<3.13,>=3.9" [package.dependencies] PySide6-Addons = "6.7.2" PySide6-Essentials = "6.7.2" shiboken6 = "6.7.2" [[package]] name = "PySide6-Addons" version = "6.7.2" description = "Python bindings for the Qt cross-platform application and UI framework (Addons)" category = "main" optional = false python-versions = "<3.13,>=3.9" [package.dependencies] PySide6-Essentials = "6.7.2" shiboken6 = "6.7.2" [[package]] name = "PySide6-Essentials" version = "6.7.2" description = "Python bindings for the Qt cross-platform application and UI framework (Essentials)" category = "main" optional = false python-versions = "<3.13,>=3.9" [package.dependencies] shiboken6 = "6.7.2" [[package]] name = "shiboken6" version = "6.7.2" description = "Python/C++ bindings helper module" category = "main" optional = false python-versions = "<3.13,>=3.9" [metadata] lock-version = "1.1" python-versions = ">=3.10,<3.13" content-hash = "0f12e425a2789ff40a16c23f004e133a89e13b2091c2c549decd38f957bf5a65" [metadata.files] pyserial = [ {file = "pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0"}, {file = "pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb"}, ] PySide6 = [ {file = "PySide6-6.7.2-cp39-abi3-macosx_11_0_universal2.whl", hash = "sha256:602debef9ec159b0db48f83b38a0e43e2dad3961f7d99f708d98620f04e9112b"}, {file = "PySide6-6.7.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:15e7696a09072ee977f6e6179ab1e48184953df8417bcaa83cfadf0b79747242"}, {file = "PySide6-6.7.2-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:6e0acb471535de303f56e3077aa86f53496b4de659b99ecce80520bcee508a63"}, {file = "PySide6-6.7.2-cp39-abi3-win_amd64.whl", hash = "sha256:f73ae0de77d67f51ca3ce8207b12d3a5fa0107d3d5b6e4aeb3b53ee842b0927a"}, ] PySide6-Addons = [ {file = "PySide6_Addons-6.7.2-cp39-abi3-macosx_11_0_universal2.whl", hash = "sha256:90b995efce61058d995c603ea480a9a3054fe8206739dcbc273fc3b53d40650f"}, {file = "PySide6_Addons-6.7.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:94b9bf6a2a4a7ac671e1776633e50d51326c86f4184f1c6e556f4dd5498fd52a"}, {file = "PySide6_Addons-6.7.2-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:22979b1aa09d9cf1d7a86c8a9aa0cb4791d6bd1cc94f96c5b6780c5ef8a9e34e"}, {file = "PySide6_Addons-6.7.2-cp39-abi3-win_amd64.whl", hash = "sha256:ebf549eb25998665d8e4ec24014fbbd37bebc5ecdcb050b34db1e1c03e1bf81d"}, ] PySide6-Essentials = [ {file = "PySide6_Essentials-6.7.2-cp39-abi3-macosx_11_0_universal2.whl", hash = "sha256:4d13666e796ec140ecfb432c4f3d7baef6dfafc11929985a83b22c0025532fb7"}, {file = "PySide6_Essentials-6.7.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a1a4c09f1e916b9cfe53151fe4a503a6acb1f6621ba28204d1bfe636f80d6780"}, {file = "PySide6_Essentials-6.7.2-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:9135513e1c4c6e2fbb1e4f9afcb3d42e54708b0d9ed870cb3213ea4874cafa1e"}, {file = "PySide6_Essentials-6.7.2-cp39-abi3-win_amd64.whl", hash = "sha256:0111d5fa8cf826de3ca9d82fed54726cce116d57f454f88a6467578652032d69"}, ] shiboken6 = [ {file = "shiboken6-6.7.2-cp39-abi3-macosx_11_0_universal2.whl", hash = "sha256:50c33ac6317b673a1eb97a9abaafccb162c4ba0c9ca658a8e449c49a8aadc379"}, {file = "shiboken6-6.7.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:70e80737b27cd5d83504b373013b55e70462bd4a27217d919ff9a83958731990"}, {file = "shiboken6-6.7.2-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:98bedf9a15f1d8ba1af3e4d1e7527f7946ce36da541e08074fd9dc9ab5ff1adf"}, {file = "shiboken6-6.7.2-cp39-abi3-win_amd64.whl", hash = "sha256:9024e6afb2af1568ebfc8a5d07e4ff6c8829f40923eeb28901f535463e2b6b65"}, ] firmware/ui/pyproject.toml 0 → 100644 +15 −0 Original line number Diff line number Diff line [tool.poetry] name = "ui" version = "0.1.0" description = "" authors = ["mattia.gallacchi <mattia.gallacchi@he-arc.ch>"] readme = "README.md" [tool.poetry.dependencies] python = ">=3.10,<3.13" PySide6 = "^6.7.2" pyserial = "^3.5" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" Loading
firmware/ui/main.py +40 −5 Original line number Diff line number Diff line # Quentin Rod for PI - MSE Computer Science import sys from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, QHBoxLayout, QVBoxLayout, QPushButton, QSlider, QLineEdit, QGroupBox, QTextEdit, QLabel from PyQt6.QtCore import Qt from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QHBoxLayout, QVBoxLayout, QPushButton, QSlider, QLineEdit, QGroupBox, QTextEdit, QLabel from PySide6.QtCore import Qt import serial import os import threading from PyQt6.QtCore import pyqtSignal from PyQt6.QtGui import QIcon from PySide6.QtCore import Signal as pyqtSignal from PySide6.QtGui import QIcon, QCloseEvent import time DEFAULT_TRIG_OFF_TIME=92000 DEFAULT_MIN_EXP_TIME=19 DEFAULT_FLASH_OFF=15000 DEFAULT_FLASH_ON=1000 DEFAULT_TRIG_SHIFT_TIME=1000 class SerialLogger(QWidget): sig_recv = pyqtSignal(str) def __init__(self, ser): Loading Loading @@ -70,7 +76,6 @@ class Flasher(): def flash_off(self, val): self._send_cmd("flash.off:" + str(val) +";") flasher = None class CommandWidget(QWidget): Loading Loading @@ -140,6 +145,14 @@ class MainWindow(QMainWindow): self.on_button.clicked.connect(self.on_button_clicked) self.on_button.setChecked(False) self.on_button_clicked() self.reset_button = QPushButton("Reset", self) self.reset_button.setGeometry(200, 150, 100, 40) self.reset_button.setCheckable(True) self.reset_button.setMaximumWidth(50) self.reset_button.clicked.connect(self.reset_button_clicked) self.reset_button.setChecked(False) # self.on_button_clicked() #self.on_button.setChecked(False) self.trig_expo_widget = CommandWidget('Minimal exposure time (us)', self.trig_expo_cb, 0, 200, 19) Loading @@ -156,6 +169,7 @@ class MainWindow(QMainWindow): layout_cmd = QVBoxLayout() layout_cmd.addWidget(self.on_button, alignment= Qt.AlignmentFlag.AlignCenter) layout_cmd.addWidget(self.reset_button, alignment=Qt.AlignmentFlag.AlignCenter) layout_cmd.addWidget(self.trig_off_widget) layout_cmd.addWidget(self.flash_off_widget) layout_cmd.addWidget(self.flash_on_widget) Loading @@ -180,6 +194,24 @@ class MainWindow(QMainWindow): else: self.flasher.off() self.on_button.setText("On") def reset_button_clicked(self): self.trig_off_widget_cb(DEFAULT_TRIG_OFF_TIME) self.trig_off_widget.update_val(DEFAULT_TRIG_OFF_TIME) self.flash_off_widget_cb(DEFAULT_FLASH_OFF) self.flash_off_widget.update_val(DEFAULT_FLASH_OFF) self.flash_on_widget_cb(DEFAULT_FLASH_ON) self.flash_on_widget.update_val(DEFAULT_FLASH_ON) self.trig_shift_cb(DEFAULT_TRIG_SHIFT_TIME) self.trig_shift_widget.update_val(DEFAULT_TRIG_SHIFT_TIME) self.trig_expo_cb(DEFAULT_MIN_EXP_TIME) self.trig_expo_widget.update_val(DEFAULT_MIN_EXP_TIME) def trig_off_widget_cb(self, value): self.flasher.trig_off(value) def flash_off_widget_cb(self, value): Loading @@ -191,6 +223,9 @@ class MainWindow(QMainWindow): def trig_expo_cb(self, value): self.flasher.trig_expo(value) def closeEvent(self, ev=None): self.flasher.off() if __name__ == "__main__": if len(sys.argv) != 2: print("Please use : " + sys.argv[0] + " " + "[DEV_UART]") Loading
firmware/ui/poetry.lock 0 → 100644 +89 −0 Original line number Diff line number Diff line [[package]] name = "pyserial" version = "3.5" description = "Python Serial Port Extension" category = "main" optional = false python-versions = "*" [package.extras] cp2110 = ["hidapi"] [[package]] name = "PySide6" version = "6.7.2" description = "Python bindings for the Qt cross-platform application and UI framework" category = "main" optional = false python-versions = "<3.13,>=3.9" [package.dependencies] PySide6-Addons = "6.7.2" PySide6-Essentials = "6.7.2" shiboken6 = "6.7.2" [[package]] name = "PySide6-Addons" version = "6.7.2" description = "Python bindings for the Qt cross-platform application and UI framework (Addons)" category = "main" optional = false python-versions = "<3.13,>=3.9" [package.dependencies] PySide6-Essentials = "6.7.2" shiboken6 = "6.7.2" [[package]] name = "PySide6-Essentials" version = "6.7.2" description = "Python bindings for the Qt cross-platform application and UI framework (Essentials)" category = "main" optional = false python-versions = "<3.13,>=3.9" [package.dependencies] shiboken6 = "6.7.2" [[package]] name = "shiboken6" version = "6.7.2" description = "Python/C++ bindings helper module" category = "main" optional = false python-versions = "<3.13,>=3.9" [metadata] lock-version = "1.1" python-versions = ">=3.10,<3.13" content-hash = "0f12e425a2789ff40a16c23f004e133a89e13b2091c2c549decd38f957bf5a65" [metadata.files] pyserial = [ {file = "pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0"}, {file = "pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb"}, ] PySide6 = [ {file = "PySide6-6.7.2-cp39-abi3-macosx_11_0_universal2.whl", hash = "sha256:602debef9ec159b0db48f83b38a0e43e2dad3961f7d99f708d98620f04e9112b"}, {file = "PySide6-6.7.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:15e7696a09072ee977f6e6179ab1e48184953df8417bcaa83cfadf0b79747242"}, {file = "PySide6-6.7.2-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:6e0acb471535de303f56e3077aa86f53496b4de659b99ecce80520bcee508a63"}, {file = "PySide6-6.7.2-cp39-abi3-win_amd64.whl", hash = "sha256:f73ae0de77d67f51ca3ce8207b12d3a5fa0107d3d5b6e4aeb3b53ee842b0927a"}, ] PySide6-Addons = [ {file = "PySide6_Addons-6.7.2-cp39-abi3-macosx_11_0_universal2.whl", hash = "sha256:90b995efce61058d995c603ea480a9a3054fe8206739dcbc273fc3b53d40650f"}, {file = "PySide6_Addons-6.7.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:94b9bf6a2a4a7ac671e1776633e50d51326c86f4184f1c6e556f4dd5498fd52a"}, {file = "PySide6_Addons-6.7.2-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:22979b1aa09d9cf1d7a86c8a9aa0cb4791d6bd1cc94f96c5b6780c5ef8a9e34e"}, {file = "PySide6_Addons-6.7.2-cp39-abi3-win_amd64.whl", hash = "sha256:ebf549eb25998665d8e4ec24014fbbd37bebc5ecdcb050b34db1e1c03e1bf81d"}, ] PySide6-Essentials = [ {file = "PySide6_Essentials-6.7.2-cp39-abi3-macosx_11_0_universal2.whl", hash = "sha256:4d13666e796ec140ecfb432c4f3d7baef6dfafc11929985a83b22c0025532fb7"}, {file = "PySide6_Essentials-6.7.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a1a4c09f1e916b9cfe53151fe4a503a6acb1f6621ba28204d1bfe636f80d6780"}, {file = "PySide6_Essentials-6.7.2-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:9135513e1c4c6e2fbb1e4f9afcb3d42e54708b0d9ed870cb3213ea4874cafa1e"}, {file = "PySide6_Essentials-6.7.2-cp39-abi3-win_amd64.whl", hash = "sha256:0111d5fa8cf826de3ca9d82fed54726cce116d57f454f88a6467578652032d69"}, ] shiboken6 = [ {file = "shiboken6-6.7.2-cp39-abi3-macosx_11_0_universal2.whl", hash = "sha256:50c33ac6317b673a1eb97a9abaafccb162c4ba0c9ca658a8e449c49a8aadc379"}, {file = "shiboken6-6.7.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:70e80737b27cd5d83504b373013b55e70462bd4a27217d919ff9a83958731990"}, {file = "shiboken6-6.7.2-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:98bedf9a15f1d8ba1af3e4d1e7527f7946ce36da541e08074fd9dc9ab5ff1adf"}, {file = "shiboken6-6.7.2-cp39-abi3-win_amd64.whl", hash = "sha256:9024e6afb2af1568ebfc8a5d07e4ff6c8829f40923eeb28901f535463e2b6b65"}, ]
firmware/ui/pyproject.toml 0 → 100644 +15 −0 Original line number Diff line number Diff line [tool.poetry] name = "ui" version = "0.1.0" description = "" authors = ["mattia.gallacchi <mattia.gallacchi@he-arc.ch>"] readme = "README.md" [tool.poetry.dependencies] python = ">=3.10,<3.13" PySide6 = "^6.7.2" pyserial = "^3.5" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"