Adalm1000_Logger/Controll.py
Vincent Hanewinkel 29c41bdfe8 trv fix
2025-08-14 21:42:10 +02:00

99 lines
2.7 KiB
Python

import sys
import pysmu
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import pyqtSignal, QObject
from GUI import MainWindow
from DeviceController import DeviceController
class ControllerSignals(QObject):
started = pyqtSignal(str) # serial
stopped = pyqtSignal(str)
error = pyqtSignal(str, str) # serial, msg
signals = ControllerSignals()
def make_on_start(ctrl, widget):
def _start(_widget=widget, _ctrl=ctrl):
# NICHT blockieren: nur anstoßen
try:
_ctrl.start() # -> startet seine eigenen Threads
_widget.set_running(True)
except Exception as e:
signals.error.emit(_ctrl.dev.serial, str(e))
return _start
def make_on_stop(ctrl, widget):
def _stop(_widget=widget, _ctrl=ctrl):
try:
_ctrl.stop()
_widget.set_running(False)
except Exception as e:
signals.error.emit(_ctrl.dev.serial, str(e))
return _stop
def main():
# 1) Geräte einsammeln (pysmu nur hier benutzen)
sess = pysmu.Session()
sess.add_all()
controllers = {dev.serial: DeviceController(sess, dev) for dev in sess.devices}
serials = list(controllers.keys())
print("Gefundene Geräte:", serials)
# Optional: Modi setzen
for serial in serials:
c = controllers[serial]
c.set_mode("A", pysmu.Mode.SIMV) # CH A z. B.
c.set_mode("B", pysmu.Mode.HI_Z) # CH B z. B.
# 2) GUI erstellen
app = QApplication(sys.argv)
win = MainWindow()
# Kleine Helfer, damit die ListItem-Buttons nur Controller.start/stop aufrufen
def make_on_start(ctrl):
return lambda _idx: ctrl.start()
def make_on_stop(ctrl):
return lambda _idx: ctrl.stop()
# 3) Liste befüllen (auf der INSTANZ, nicht auf der Klasse!)
for i, serial in enumerate(serials):
ctrl = controllers[serial]
widget = win.add_list_item(
text=serial,
index=i,
on_start=lambda w, c=ctrl: make_on_start(c, w)(),
on_stop =lambda w, c=ctrl: make_on_stop(c, w)()
)
# 4) Start
win.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
# # Beispiel: Gerät 1 starten, Gerät 2 später starten/stoppen
# c1 = controllers[serials[0]]
# c1.set_mode(0, MODE.HI_Z) # CH A Hi-Z
# c1.set_mode(1, MODE.HI_Z) # CH B Hi-Z
# c1.start()
# time.sleep(2.0)
# if len(serials) > 1:
# c2 = controllers[serials[1]]
# c2.set_mode(0, MODE.HI_Z)
# c2.set_mode(1, MODE.HI_Z)
# c2.start()
# time.sleep(3.0)
# c2.stop() # nur Gerät 2 stoppen
# # sauber beenden (Strg+C-Handling etc. weglassen der Kürze halber)
# for c in controllers.values():
# c.stop()
# for c in controllers.values():
# c.shutdown()