fix many add windows

This commit is contained in:
gti 2025-02-14 11:29:55 +08:00
parent 6b93db3442
commit daa30c0818
8 changed files with 246 additions and 107 deletions

View File

@ -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)

View File

@ -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:

View File

@ -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

View File

@ -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]

View File

@ -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", "<html><head/><body><p style=\"line-height:0.3\" align=\"center\">Connection</p><p align=\"center\">Status</p></body></html>"))
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"))

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>1177</width>
<height>910</height>
<width>936</width>
<height>479</height>
</rect>
</property>
<property name="windowTitle">
@ -17,21 +17,14 @@
<layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0">
<item row="1" column="1">
<layout class="QGridLayout" name="gridLayout_7">
<item row="2" column="1">
<item row="3" column="1">
<widget class="QSlider" name="s_sid">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Frame ID</string>
</property>
</widget>
</item>
<item row="2" column="2">
<item row="3" column="2">
<widget class="QSpinBox" name="sp_sid"/>
</item>
<item row="0" column="0" colspan="3">
@ -44,6 +37,20 @@
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>SeqName</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Frame ID</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<widget class="QComboBox" name="c_playback_seq_name">
<property name="enabled">
@ -59,12 +66,51 @@
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>SeqName</string>
</property>
</widget>
<item row="2" column="0" colspan="3">
<layout class="QHBoxLayout" name="horizontalLayout_5" stretch="0,1,0,1,0,1">
<item>
<widget class="QLabel" name="label26">
<property name="text">
<string>Min:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="l_seq_min">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_28">
<property name="text">
<string>Current:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="l_seq_current">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_29">
<property name="text">
<string>Max:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="l_seq_max">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
@ -164,7 +210,7 @@
<item row="2" column="1">
<widget class="QSlider" name="horizontalSlider_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
@ -178,7 +224,7 @@
<item row="3" column="1">
<widget class="QSlider" name="horizontalSlider_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
@ -187,7 +233,6 @@
<property name="font">
<font>
<pointsize>20</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
@ -195,7 +240,7 @@
<string>Probe Position</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
@ -214,14 +259,14 @@
<item row="7" column="1">
<widget class="QSlider" name="horizontalSlider_7">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QSlider" name="horizontalSlider_10">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
@ -235,7 +280,7 @@
<item row="5" column="1">
<widget class="QSlider" name="horizontalSlider_9">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
@ -272,14 +317,14 @@
<item row="1" column="1">
<widget class="QSlider" name="horizontalSlider_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
<item row="8" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -299,7 +344,7 @@
<item row="6" column="1">
<widget class="QSlider" name="horizontalSlider_8">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
@ -333,7 +378,7 @@
<number>1500</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
@ -342,7 +387,6 @@
<property name="font">
<font>
<pointsize>20</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
@ -350,21 +394,21 @@
<string>Imaging</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QSlider" name="horizontalSlider_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
<item row="5" column="1">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -387,7 +431,7 @@
<item row="3" column="1">
<widget class="QSlider" name="horizontalSlider_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
@ -400,7 +444,7 @@
<item row="1" column="1">
<widget class="QSlider" name="s_t_start">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
@ -461,7 +505,7 @@
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p style=&quot;line-height:0.3&quot; align=&quot;center&quot;&gt;Beam&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Status&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
@ -471,7 +515,7 @@
<string>Disconnected</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
@ -489,7 +533,7 @@
<string>Device Offline</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
@ -499,7 +543,7 @@
<string>Disabled</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
@ -509,7 +553,7 @@
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p style=&quot;line-height:0.3&quot; align=&quot;center&quot;&gt;Connection&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Status&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
@ -531,6 +575,13 @@
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="b_select_base">
<property name="text">
<string>Select</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="b_base">
<property name="text">
@ -553,7 +604,7 @@
<string>0,0,0,0,0,0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
@ -568,7 +619,7 @@
<string>0,0,0,0,0,0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
@ -600,7 +651,7 @@
<string>Robot Offline</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
@ -613,8 +664,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>1177</width>
<height>30</height>
<width>936</width>
<height>18</height>
</rect>
</property>
</widget>

View File

@ -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

View File

@ -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: