98 lines
2.9 KiB
Python
98 lines
2.9 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 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, widget):
|
|
def _start(checked=False):
|
|
try:
|
|
ctrl.start() # startet Worker-Threads, blockiert nicht
|
|
widget.set_running(True)
|
|
except Exception as e:
|
|
print(f"Fehler beim Start {ctrl.dev.serial}: {e}")
|
|
return _start
|
|
|
|
def make_on_stop(ctrl, widget):
|
|
def _stop(checked=False):
|
|
try:
|
|
ctrl.stop()
|
|
widget.set_running(False)
|
|
except Exception as e:
|
|
print(f"Fehler beim Stop {ctrl.dev.serial}: {e}")
|
|
return _stop
|
|
|
|
# 3) Liste befüllen (auf der INSTANZ, nicht auf der Klasse!)
|
|
for i, serial in enumerate(serials):
|
|
ctrl = controllers[serial]
|
|
placeholder = lambda checked=False: None
|
|
widget = win.add_list_item(
|
|
text=serial,
|
|
index=i,
|
|
on_start = make_on_start(ctrl, placeholder), # placeholder siehe unten
|
|
on_stop = make_on_stop(ctrl, placeholder),
|
|
)
|
|
|
|
widget.btn_start.clicked.disconnect()
|
|
widget.btn_stop.clicked.disconnect()
|
|
widget.btn_start.clicked.connect(make_on_start(ctrl, widget))
|
|
widget.btn_stop.clicked.connect(make_on_stop(ctrl, widget))
|
|
|
|
# 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() |