diff --git a/src/config.py b/src/config.py index b7166ab..6a89bcf 100644 --- a/src/config.py +++ b/src/config.py @@ -1,5 +1,9 @@ +import dataclasses +import json from pathlib import Path +from PIL.TiffImagePlugin import SOFTWARE + PLAYBACK_SOCKET_PORT = 5003 PLAYBACK_SOCKET = f'127.0.0.1:{PLAYBACK_SOCKET_PORT}' LIVE_SOCKET_IP = '11.6.1.66' @@ -22,5 +26,30 @@ LAST_CONFIG = BASE / 'config' / 'last_imaging_config.json' CONFIG_FOLDER.mkdir(exist_ok=True) +SOFTWARE_CONFIG_PATH = BASE / 'software.json' + + +@dataclasses.dataclass +class SoftwareConfig: + base_dir: Path = DS + + @staticmethod + def read_config(): + j = json.loads(SOFTWARE_CONFIG_PATH.read_text(encoding='utf-8')) + sc = SoftwareConfig() + sc.base_dir = Path(j['base_dir']) + return sc + + def write_config(self): + SOFTWARE_CONFIG_PATH.write_text(json.dumps(dict( + base_dir=self.base_dir.__str__(), + ), indent=4), encoding='utf-8') + + +SOFTWARE_CONFIG = SoftwareConfig() + +if SOFTWARE_CONFIG_PATH.exists(): + SOFTWARE_CONFIG = SoftwareConfig.read_config() + if __name__ == '__main__': - print(BASE) + print(SOFTWARE_CONFIG) diff --git a/src/nodes/Beamformer.py b/src/nodes/Beamformer.py index e24149c..5159ad5 100644 --- a/src/nodes/Beamformer.py +++ b/src/nodes/Beamformer.py @@ -13,6 +13,7 @@ from utils.Msg import BMMsg, ImageArgMsg, KillMsg, SeqMetaMsg, SetPlayMode, SetD RecordFrameMsg from utils.RfFile import RfFrame, RfSequenceMeta from utils.RfMat import RfMat +from utils.RfMeta import RfFrameMeta logger = logging.getLogger(__name__) @@ -20,8 +21,8 @@ logger = logging.getLogger(__name__) class Beamformer(Node): topics = [ImageArgMsg, SeqMetaMsg, SetPlayMode, SetDeviceConfigMsg, SetRecordMsg] - def __init__(self): - super(Beamformer, self).__init__() + def __init__(self, level=logging.INFO): + super(Beamformer, self).__init__(level=level) self.arg = ImageArgMsg('', t_start=0, t_end=1499) self.seq_meta_live = None self.seq_meta_playback = None @@ -63,19 +64,18 @@ class Beamformer(Node): socks = dict(self.c.poller.poll()) if device_socket in socks and socks[device_socket] == zmq.POLLIN: buffer = device_socket.recv() + logger.debug(f'device receive {buffer.__len__()}') _, sequence_id, encoder = struct.unpack_from('=iqi', buffer) s = buffer[4 + 8 + 4:] - seq_meta = None - match self.play_mode: - case 'live': - seq_meta = self.seq_meta_live - case 'playback': - seq_meta = self.seq_meta_playback - + logger.debug(f'live meta {self.seq_meta_live}, playback meta {self.seq_meta_playback}') + seq_meta: RfSequenceMeta | None = { + "live": self.seq_meta_live, + "playback": self.seq_meta_playback, + }.get(self.play_mode, None) if seq_meta is not None: fb1 = cp.frombuffer(s, dtype=cp.int16) if fb1.shape[0] == np.prod(seq_meta.shape): - mat = RfMat(fb1.reshape(seq_meta.shape), RfFrame.RfFrameMeta( + mat = RfMat(fb1.reshape(seq_meta.shape), RfFrameMeta( encoder=encoder, sequence_id=sequence_id, ), seq_meta) @@ -98,6 +98,7 @@ class Beamformer(Node): if isinstance(msg, ImageArgMsg): self.arg = msg if isinstance(msg, SetPlayMode): + logger.debug(f'set playmode {msg}') self.play_mode = msg.value if msg.value == 'live': try: @@ -111,6 +112,7 @@ class Beamformer(Node): except: pass device_socket.connect(f"tcp://{PLAYBACK_SOCKET}") + logger.debug('connect to playback') if isinstance(msg, SetRecordMsg): self.record_enable = msg.enable if msg.enable: diff --git a/src/nodes/Loader.py b/src/nodes/Loader.py index 62a3942..afb3c2e 100644 --- a/src/nodes/Loader.py +++ b/src/nodes/Loader.py @@ -5,9 +5,9 @@ from pathlib import Path import zmq -from config import PLAYBACK_SOCKET_PORT +from config import PLAYBACK_SOCKET_PORT, SOFTWARE_CONFIG from nodes.Node import Node -from utils.Msg import MoveAxisMsg, KillMsg, SelectSeqMsg, SeqMetaMsg, SeqIdMinMax, SetBaseMsg, SeqListMsg +from utils.Msg import MoveAxisMsg, KillMsg, SelectSeqMsg, SeqMetaMsg, SeqIdMinMax, SetBaseMsg, SeqListMsg, SeqIdList from utils.RfFile import RfSequence logger = logging.getLogger(__name__) @@ -17,32 +17,39 @@ class Loader(Node): topics = [MoveAxisMsg, SelectSeqMsg, SetBaseMsg] def loop(self): - s2 = self.context.socket(zmq.PUSH) - s2.bind(f"tcp://*:{PLAYBACK_SOCKET_PORT}") + playback_socket = self.context.socket(zmq.PUSH) + playback_socket.bind(f"tcp://*:{PLAYBACK_SOCKET_PORT}") # base = Path('/mnt/16T/private_dataset/us/') base: Path | None = None rff = None while True: - r = self.recv() - if isinstance(r, MoveAxisMsg) and rff is not None: - logger.debug(f'Move axis: {rff}') - for frame in rff.frames: - if frame.meta.sequence_id == r.value: - buffer = io.BytesIO() - buffer.write(struct.pack('=iqi', 114514, frame.meta.sequence_id, frame.meta.encoder)) - buffer.write(frame.bytes) - s2.send(buffer.getvalue()) - elif isinstance(r, SelectSeqMsg): + msg = self.recv() + if isinstance(msg, MoveAxisMsg) and rff is not None: + logger.debug(f'Move axis: {msg}') + if msg.axis == 'S': + frame = rff.frames[msg.value] + buffer = io.BytesIO() + buffer.write(struct.pack('=iqi', 114514, frame.meta.sequence_id, frame.meta.encoder)) + buffer.write(frame.bytes) + playback_socket.send(buffer.getvalue()) + elif isinstance(msg, SelectSeqMsg): if base is None: continue - rff = RfSequence.from_folder(base / r.value) + rff = RfSequence.from_folder(base / msg.value) self.send(SeqMetaMsg('playback', rff.meta.name)) self.send(SeqIdMinMax(*rff.seq_id_minmax)) - elif isinstance(r, SetBaseMsg): - base = Path(r.value) - self.send(SeqListMsg([f.name for f in base.glob('*')])) - elif isinstance(r, KillMsg): - if r.name == '': + self.send(SeqIdList([f.meta.sequence_id for f in rff.frames])) + elif isinstance(msg, SetBaseMsg): + base = Path(msg.value) + seq_list = [f.name for f in base.glob('*')] + if not seq_list: + logger.warning(f'No sequences found in {base}') + else: + SOFTWARE_CONFIG.base_dir = base + SOFTWARE_CONFIG.write_config() + self.send(SeqListMsg(seq_list)) + elif isinstance(msg, KillMsg): + if msg.name == '': break diff --git a/src/nodes/MainUI.py b/src/nodes/MainUI.py index 615c2b6..73723f2 100644 --- a/src/nodes/MainUI.py +++ b/src/nodes/MainUI.py @@ -6,7 +6,7 @@ from pathlib import Path from PyQt6 import QtCore from PyQt6.QtCore import QByteArray -from PyQt6.QtWidgets import QMainWindow, QApplication, QFrame, QMessageBox +from PyQt6.QtWidgets import QMainWindow, QApplication, QFrame, QMessageBox, QFileDialog from Main import Ui_MainWindow from ZMQReceiver import ZMQReceiver @@ -14,9 +14,12 @@ from config import DS from nodes.Node import Node from utils.Msg import KillMsg, Msg, ImageArgMsg, SelectSeqMsg, SeqIdMinMax, MoveAxisMsg, SeqListMsg, SetBaseMsg, \ SeqMetaMsg, SetPlayMode, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, SetDeviceEnabledMsg, \ - SetDeviceConnectedMsg, DeviceConfigListMsg, SetDeviceConfigMsg, SetRecordMsg, RobotRtsiMsg, RecordFrameMsg + SetDeviceConnectedMsg, DeviceConfigListMsg, SetDeviceConfigMsg, SetRecordMsg, RobotRtsiMsg, RecordFrameMsg, \ + SeqIdList from utils.RfMeta import RfSequenceMeta +logger = logging.getLogger(__name__) + class LinkStatus(Enum): RED = auto() @@ -54,7 +57,7 @@ class Adv(QMainWindow, Ui_MainWindow): zmq_receiver.start() self.s_t_start.valueChanged.connect(self.on_t_start) self.s_t_end.valueChanged.connect(self.on_t_end) - self.c_playback_seq_name.currentIndexChanged.connect(self.cbc) + self.c_playback_seq_name.currentIndexChanged.connect(self.on_select_plyayback_seq_name) self.s_sid.valueChanged.connect(self.c_sid) self.arg = ImageArgMsg('ui', t_start=0, t_end=1499) self.b_base.clicked.connect(self.on_base) @@ -77,6 +80,14 @@ class Adv(QMainWindow, Ui_MainWindow): self.record_frame_cnt = 0 self.update_device_buttons() + self.seq_id_list = [] + + self.b_select_base.clicked.connect(self.on_select_base) + + def on_select_base(self): + base = QFileDialog.getExistingDirectory(self, 'Select Base Folder', DS.__str__()) + self.l_base.setText(Path(base).__str__()) + def update_b_play_live_enabled(self): self.b_play_live.setEnabled(all([self.b1, self.b2])) @@ -136,6 +147,7 @@ class Adv(QMainWindow, Ui_MainWindow): self.l_record_commit.setEnabled(False) self.p.send(SeqMetaMsg('playback', self.c_playback_seq_name.itemText(self.c_playback_seq_name.currentIndex()))) self.p.send(SetPlayMode('playback')) + logger.debug(f'set playmode playback') self.b3 = True self.update_c_playback_seq_name_enable() @@ -235,13 +247,13 @@ class Adv(QMainWindow, Ui_MainWindow): match msg.axis: case 'S': self.s_sid.setValue(msg.value) - elif isinstance(msg, SeqIdMinMax): - self.s_sid.setMinimum(msg.min) - self.s_sid.setMaximum(msg.max) - self.s_sid.setMinimum(msg.min) - self.sp_sid.setMaximum(msg.max) - self.sp_sid.setValue(msg.min) - self.sp_sid.setValue(msg.min) + self.l_seq_current.setText(str(self.seq_id_list[msg.value])) + elif isinstance(msg, SeqIdList): + self.seq_id_list = msg.li + self.s_sid.setMaximum(msg.li.__len__() - 1) + self.sp_sid.setMaximum(msg.li.__len__() - 1) + self.l_seq_min.setText(str(min(msg.li))) + self.l_seq_max.setText(str(max(msg.li))) elif isinstance(msg, SeqListMsg): self.b4 = True self.update_c_playback_seq_name_enable() @@ -306,7 +318,7 @@ class Adv(QMainWindow, Ui_MainWindow): self.p.send(self.arg) @QtCore.pyqtSlot(int) - def cbc(self, v): + def on_select_plyayback_seq_name(self, v): if self.c_playback_seq_name.sender() is None or isinstance(self.c_playback_seq_name.sender(), QFrame): self.p.send(SelectSeqMsg(self.c_playback_seq_name.itemText(v))) @@ -328,7 +340,7 @@ class Adv(QMainWindow, Ui_MainWindow): class MainUI(Node): topics = [ImageArgMsg, SeqIdMinMax, MoveAxisMsg, - SeqListMsg, SeqMetaMsg, + SeqListMsg, SeqMetaMsg, SeqIdList, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, DeviceConfigListMsg, RobotRtsiMsg, RecordFrameMsg] diff --git a/src/ui/Main.py b/src/ui/Main.py index 6b2ee3c..9a662df 100644 --- a/src/ui/Main.py +++ b/src/ui/Main.py @@ -1,4 +1,4 @@ -# Form implementation generated from reading ui file 'Main.ui' +# Form implementation generated from reading ui file '.\Main.ui' # # Created by: PyQt6 UI code generator 6.8.0 # @@ -12,7 +12,7 @@ from PyQt6 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") - MainWindow.resize(1177, 910) + MainWindow.resize(936, 479) self.centralwidget = QtWidgets.QWidget(parent=MainWindow) self.centralwidget.setObjectName("centralwidget") self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) @@ -22,26 +22,50 @@ class Ui_MainWindow(object): self.s_sid = QtWidgets.QSlider(parent=self.centralwidget) self.s_sid.setOrientation(QtCore.Qt.Orientation.Horizontal) self.s_sid.setObjectName("s_sid") - self.gridLayout_7.addWidget(self.s_sid, 2, 1, 1, 1) - self.label_4 = QtWidgets.QLabel(parent=self.centralwidget) - self.label_4.setObjectName("label_4") - self.gridLayout_7.addWidget(self.label_4, 2, 0, 1, 1) + self.gridLayout_7.addWidget(self.s_sid, 3, 1, 1, 1) self.sp_sid = QtWidgets.QSpinBox(parent=self.centralwidget) self.sp_sid.setObjectName("sp_sid") - self.gridLayout_7.addWidget(self.sp_sid, 2, 2, 1, 1) + self.gridLayout_7.addWidget(self.sp_sid, 3, 2, 1, 1) self.b_play_playback = QtWidgets.QPushButton(parent=self.centralwidget) self.b_play_playback.setEnabled(False) self.b_play_playback.setObjectName("b_play_playback") self.gridLayout_7.addWidget(self.b_play_playback, 0, 0, 1, 3) + self.label_16 = QtWidgets.QLabel(parent=self.centralwidget) + self.label_16.setObjectName("label_16") + self.gridLayout_7.addWidget(self.label_16, 1, 0, 1, 1) + self.label_4 = QtWidgets.QLabel(parent=self.centralwidget) + self.label_4.setObjectName("label_4") + self.gridLayout_7.addWidget(self.label_4, 3, 0, 1, 1) self.c_playback_seq_name = QtWidgets.QComboBox(parent=self.centralwidget) self.c_playback_seq_name.setEnabled(False) self.c_playback_seq_name.setEditable(False) self.c_playback_seq_name.setObjectName("c_playback_seq_name") self.c_playback_seq_name.addItem("") self.gridLayout_7.addWidget(self.c_playback_seq_name, 1, 1, 1, 2) - self.label_16 = QtWidgets.QLabel(parent=self.centralwidget) - self.label_16.setObjectName("label_16") - self.gridLayout_7.addWidget(self.label_16, 1, 0, 1, 1) + self.horizontalLayout_5 = QtWidgets.QHBoxLayout() + self.horizontalLayout_5.setObjectName("horizontalLayout_5") + self.label26 = QtWidgets.QLabel(parent=self.centralwidget) + self.label26.setObjectName("label26") + self.horizontalLayout_5.addWidget(self.label26) + self.l_seq_min = QtWidgets.QLabel(parent=self.centralwidget) + self.l_seq_min.setObjectName("l_seq_min") + self.horizontalLayout_5.addWidget(self.l_seq_min) + self.label_28 = QtWidgets.QLabel(parent=self.centralwidget) + self.label_28.setObjectName("label_28") + self.horizontalLayout_5.addWidget(self.label_28) + self.l_seq_current = QtWidgets.QLabel(parent=self.centralwidget) + self.l_seq_current.setObjectName("l_seq_current") + self.horizontalLayout_5.addWidget(self.l_seq_current) + self.label_29 = QtWidgets.QLabel(parent=self.centralwidget) + self.label_29.setObjectName("label_29") + self.horizontalLayout_5.addWidget(self.label_29) + self.l_seq_max = QtWidgets.QLabel(parent=self.centralwidget) + self.l_seq_max.setObjectName("l_seq_max") + self.horizontalLayout_5.addWidget(self.l_seq_max) + self.horizontalLayout_5.setStretch(1, 1) + self.horizontalLayout_5.setStretch(3, 1) + self.horizontalLayout_5.setStretch(5, 1) + self.gridLayout_7.addLayout(self.horizontalLayout_5, 2, 0, 1, 3) self.gridLayout.addLayout(self.gridLayout_7, 1, 1, 1, 1) self.gridLayout_6 = QtWidgets.QGridLayout() self.gridLayout_6.setObjectName("gridLayout_6") @@ -105,7 +129,6 @@ class Ui_MainWindow(object): font = QtGui.QFont() font.setPointSize(20) font.setBold(False) - font.setWeight(50) self.label_3.setFont(font) self.label_3.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) self.label_3.setObjectName("label_3") @@ -190,7 +213,6 @@ class Ui_MainWindow(object): font = QtGui.QFont() font.setPointSize(20) font.setBold(False) - font.setWeight(50) self.label_2.setFont(font) self.label_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) self.label_2.setObjectName("label_2") @@ -282,6 +304,9 @@ class Ui_MainWindow(object): self.l_base.setText("") self.l_base.setObjectName("l_base") self.horizontalLayout_4.addWidget(self.l_base) + self.b_select_base = QtWidgets.QPushButton(parent=self.centralwidget) + self.b_select_base.setObjectName("b_select_base") + self.horizontalLayout_4.addWidget(self.b_select_base) self.b_base = QtWidgets.QPushButton(parent=self.centralwidget) self.b_base.setObjectName("b_base") self.horizontalLayout_4.addWidget(self.b_base) @@ -320,7 +345,7 @@ class Ui_MainWindow(object): self.gridLayout.addLayout(self.gridLayout_2, 0, 1, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(parent=MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 1177, 30)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 936, 18)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(parent=MainWindow) @@ -333,10 +358,16 @@ class Ui_MainWindow(object): def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) - self.label_4.setText(_translate("MainWindow", "Frame ID")) self.b_play_playback.setText(_translate("MainWindow", "Playback")) - self.c_playback_seq_name.setItemText(0, _translate("MainWindow", "Unset")) self.label_16.setText(_translate("MainWindow", "SeqName")) + self.label_4.setText(_translate("MainWindow", "Frame ID")) + self.c_playback_seq_name.setItemText(0, _translate("MainWindow", "Unset")) + self.label26.setText(_translate("MainWindow", "Min:")) + self.l_seq_min.setText(_translate("MainWindow", "0")) + self.label_28.setText(_translate("MainWindow", "Current:")) + self.l_seq_current.setText(_translate("MainWindow", "0")) + self.label_29.setText(_translate("MainWindow", "Max:")) + self.l_seq_max.setText(_translate("MainWindow", "0")) self.label_17.setText(_translate("MainWindow", "RecordName")) self.b_record.setText(_translate("MainWindow", "Record")) self.label_18.setText(_translate("MainWindow", "Record Frames:")) @@ -369,6 +400,7 @@ class Ui_MainWindow(object): self.lb_device_enable.setText(_translate("MainWindow", "Disabled")) self.label_21.setText(_translate("MainWindow", "

Connection

Status

")) self.label.setText(_translate("MainWindow", "Base Path")) + self.b_select_base.setText(_translate("MainWindow", "Select")) self.b_base.setText(_translate("MainWindow", "Open")) self.l_robot_pos.setText(_translate("MainWindow", "0,0,0,0,0,0")) self.l_robot_force.setText(_translate("MainWindow", "0,0,0,0,0,0")) diff --git a/src/ui/Main.ui b/src/ui/Main.ui index 08fe380..1be1c30 100644 --- a/src/ui/Main.ui +++ b/src/ui/Main.ui @@ -6,8 +6,8 @@ 0 0 - 1177 - 910 + 936 + 479 @@ -17,21 +17,14 @@ - + - Qt::Horizontal + Qt::Orientation::Horizontal - - - - Frame ID - - - - + @@ -44,6 +37,20 @@ + + + + SeqName + + + + + + + Frame ID + + + @@ -59,12 +66,51 @@ - - - - SeqName - - + + + + + + Min: + + + + + + + 0 + + + + + + + Current: + + + + + + + 0 + + + + + + + Max: + + + + + + + 0 + + + + @@ -164,7 +210,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -178,7 +224,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -187,7 +233,6 @@ 20 - 50 false @@ -195,7 +240,7 @@ Probe Position - Qt::AlignCenter + Qt::AlignmentFlag::AlignCenter @@ -214,14 +259,14 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - Qt::Horizontal + Qt::Orientation::Horizontal @@ -235,7 +280,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -272,14 +317,14 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - Qt::Vertical + Qt::Orientation::Vertical @@ -299,7 +344,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -333,7 +378,7 @@ 1500 - Qt::Horizontal + Qt::Orientation::Horizontal @@ -342,7 +387,6 @@ 20 - 50 false @@ -350,21 +394,21 @@ Imaging - Qt::AlignCenter + Qt::AlignmentFlag::AlignCenter - Qt::Horizontal + Qt::Orientation::Horizontal - Qt::Vertical + Qt::Orientation::Vertical @@ -387,7 +431,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -400,7 +444,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -461,7 +505,7 @@ <html><head/><body><p style="line-height:0.3" align="center">Beam</p><p align="center">Status</p></body></html> - Qt::AlignCenter + Qt::AlignmentFlag::AlignCenter @@ -471,7 +515,7 @@ Disconnected - Qt::AlignCenter + Qt::AlignmentFlag::AlignCenter @@ -489,7 +533,7 @@ Device Offline - Qt::AlignCenter + Qt::AlignmentFlag::AlignCenter @@ -499,7 +543,7 @@ Disabled - Qt::AlignCenter + Qt::AlignmentFlag::AlignCenter @@ -509,7 +553,7 @@ <html><head/><body><p style="line-height:0.3" align="center">Connection</p><p align="center">Status</p></body></html> - Qt::AlignCenter + Qt::AlignmentFlag::AlignCenter @@ -531,6 +575,13 @@ + + + + Select + + + @@ -553,7 +604,7 @@ 0,0,0,0,0,0 - Qt::AlignCenter + Qt::AlignmentFlag::AlignCenter @@ -568,7 +619,7 @@ 0,0,0,0,0,0 - Qt::AlignCenter + Qt::AlignmentFlag::AlignCenter @@ -600,7 +651,7 @@ Robot Offline - Qt::AlignCenter + Qt::AlignmentFlag::AlignCenter @@ -613,8 +664,8 @@ 0 0 - 1177 - 30 + 936 + 18 diff --git a/src/utils/Msg.py b/src/utils/Msg.py index 4d5e7c7..3859a31 100644 --- a/src/utils/Msg.py +++ b/src/utils/Msg.py @@ -29,6 +29,7 @@ class BG(Enum): SetRecordMsg = auto() RobotRtsiMsg = auto() RecordFrameMsg = auto() + SeqIdList = auto() class Msg: @@ -153,6 +154,11 @@ class SeqIdMinMax(Msg): max: int +@dataclasses.dataclass +class SeqIdList(Msg): + li: list[int] + + @dataclasses.dataclass class MoveAxisMsg(Msg): sender: str diff --git a/test/winmain.py b/test/winmain.py index b4a491e..5737094 100644 --- a/test/winmain.py +++ b/test/winmain.py @@ -26,12 +26,12 @@ def main(): pps = [] ps = [ Broker(), - WebRTC(), - MainUI(), + # WebRTC(), + MainUI(level=logging.DEBUG), Device(level=logging.DEBUG), ImageCV(), - Beamformer(), - Loader(), + Beamformer(level=logging.DEBUG), + Loader(level=logging.DEBUG), Robot(), ] for p in ps: