From 253516bb5bf112408f942deaedb75a453b886806 Mon Sep 17 00:00:00 2001
From: remilia
Date: Sun, 23 Mar 2025 22:33:55 +0800
Subject: [PATCH] big fix #1
---
src/config.py | 3 +
src/nodes/Device.py | 154 +++--
src/nodes/ImageFFMPEG.py | 2 +-
src/nodes/MainUI.py | 187 ++++--
src/nodes/Mi.py | 131 ++++
src/nodes/Muxer.py | 11 +-
src/nodes/Node.py | 11 +
src/ui/Main.py | 618 +++++++++--------
src/ui/Main.ui | 1144 ++++++++++++++++++--------------
src/utils/Msg.py | 25 +-
src/utils/network.py | 16 +-
test/kdemain.py | 8 +-
test/testDevice.py | 5 +-
test/testrobotremotecontrol.py | 23 +
14 files changed, 1475 insertions(+), 863 deletions(-)
create mode 100644 src/nodes/Mi.py
create mode 100644 test/testrobotremotecontrol.py
diff --git a/src/config.py b/src/config.py
index 2ada8fa..f6839a3 100644
--- a/src/config.py
+++ b/src/config.py
@@ -10,6 +10,8 @@ LIVE_SOCKET_IP = '11.6.1.71'
LIVE_REP_SOCKET_PORT = 5556
LIVE_SOCKET = f'{LIVE_SOCKET_IP}:5555'
LIVE_REP_SOCKET = f'{LIVE_SOCKET_IP}:{LIVE_REP_SOCKET_PORT}'
+MI_REP_SOCKET_PORT = 5557
+DEVICE_PY_REP_SOCKET_PORT = 5558
VIDEO_HEIGHT = 1920
VIDEO_WIDTH = 1080
@@ -22,6 +24,7 @@ BASE = Path(__file__).parent.parent
DS = BASE / '@DS'
DOC = BASE / 'doc'
CONFIG = BASE / 'config'
+ASSETS = BASE / 'assets'
DS.mkdir(exist_ok=True, parents=True)
DOC.mkdir(exist_ok=True, parents=True)
DEVICE_CONFIG = CONFIG / 'device'
diff --git a/src/nodes/Device.py b/src/nodes/Device.py
index 8ea31bd..e0ee51b 100644
--- a/src/nodes/Device.py
+++ b/src/nodes/Device.py
@@ -2,46 +2,95 @@ import logging
import struct
import subprocess
import time
+from enum import Enum, auto
from threading import Thread
import zmq
+from BusClient import BusClient
from config import LIVE_REP_SOCKET, CONFIG, DEVICE_CONFIG
from nodes.Node import Node
from utils.Msg import ImageArgMsg, KillMsg, SetDeviceConnectedMsg, SetDeviceEnabledMsg, DeviceEnabledMsg, \
DeviceConnectedMsg, SetDeviceConfigMsg, DeviceOnlineMsg, DeviceConfigListMsg, RequestRfFrameMsg, RfFrameMsg, \
- RfFrameWithMetaMsg, DeviceZero
+ RfFrameWithMetaMsg, DeviceZero, SetDeviceSwitchMsg, DeviceSwitchMsg, SeqMetaMsg, RefreshDeviceMsg
from utils.RfMeta import RfFrameMeta
logger = logging.getLogger(__name__)
+class DeviceCmd(Enum):
+ Exit = 0
+
+ GetName = auto()
+ GetData = auto()
+ GetConnection = auto()
+ GetEnable = auto()
+
+ SetNameAndFileOnly = auto()
+ SetConnectionOn = auto()
+ SetConnectionOff = auto()
+ SetEnableOn = auto()
+ SetEnableOff = auto()
+ SetZero = auto()
+
class Device(Node):
- topics = [SetDeviceConnectedMsg, SetDeviceEnabledMsg, SetDeviceConfigMsg, RequestRfFrameMsg, DeviceZero]
+ magic = 7355608
+ topics = [SetDeviceConnectedMsg, SetDeviceEnabledMsg, SetDeviceConfigMsg, RequestRfFrameMsg, DeviceZero,
+ DeviceSwitchMsg
+ ]
def __init__(self, level=logging.INFO):
super(Device, self).__init__(level=level)
self.arg = ImageArgMsg('', t_start=0, t_end=1499)
self.seq_meta = None
- self.device_rep_socket = None
+ self.device_rep_socket: zmq.Socket = None
self.ok = b'ok\x00'
self.loop2_t = None
+ self.switch = False
def loop2(self):
while True:
self.online()
time.sleep(1)
+ def device_cmd(self, cmd: DeviceCmd, v: bytes = b''):
+ self.device_rep_socket.send(struct.pack('i', self.magic) + struct.pack('i', cmd.value) + v)
+
def connect(self):
- self.device_rep_socket.send(b'connect')
- rb = self.device_rep_socket.recv()
- if rb == self.ok:
- self.send(DeviceConnectedMsg(True))
- else:
- logger.error(f"Device msg: {rb}")
+ temp_client = BusClient(SetDeviceSwitchMsg,RefreshDeviceMsg, poller=True)
+ temp_client.poller.register(self.device_rep_socket, zmq.POLLIN)
+ self.device_cmd(DeviceCmd.SetConnectionOn)
+ logger.warning('onn')
+ d = dict(temp_client.poller.poll())
+
+ if self.device_rep_socket in d:
+ rb = self.device_rep_socket.recv()
+ if rb == self.ok:
+ self.send(DeviceConnectedMsg(True))
+ else:
+ logger.error(f"Device msg: {rb}")
+ if temp_client.sub in d:
+ msg = temp_client.recv()
+ if isinstance(msg, SetDeviceSwitchMsg):
+ if not msg.value:
+ self.switch = False
+ logger.warning(f"interrupt connecting")
+ self.device_rep_socket.close()
+ self.context.term()
+ self.context = zmq.Context()
+ self.device_rep_socket = self.context.socket(zmq.REQ)
+ self.device_rep_socket.connect(f"tcp://{LIVE_REP_SOCKET}")
+ if isinstance(msg,RefreshDeviceMsg):
+ self.switch = False
+ logger.warning(f"interrupt connecting")
+ self.device_rep_socket.close()
+ self.context.term()
+ self.context = zmq.Context()
+ self.device_rep_socket = self.context.socket(zmq.REQ)
+ self.device_rep_socket.connect(f"tcp://{LIVE_REP_SOCKET}")
def disconnect(self):
- self.device_rep_socket.send(b'disconnect')
+ self.device_cmd(DeviceCmd.SetConnectionOff)
rb = self.device_rep_socket.recv()
if rb == self.ok:
self.send(DeviceConnectedMsg(False))
@@ -49,7 +98,7 @@ class Device(Node):
logger.error(f"Device msg: {rb}")
def enable(self):
- self.device_rep_socket.send(b'enable')
+ self.device_cmd(DeviceCmd.SetEnableOn)
rb = self.device_rep_socket.recv()
if rb == self.ok:
self.send(DeviceEnabledMsg(True))
@@ -59,7 +108,7 @@ class Device(Node):
return False
def disable(self):
- self.device_rep_socket.send(b'disable')
+ self.device_cmd(DeviceCmd.SetEnableOff)
rb = self.device_rep_socket.recv()
if rb == self.ok:
self.send(DeviceEnabledMsg(False))
@@ -80,8 +129,8 @@ class Device(Node):
self.send(DeviceOnlineMsg(True))
return True
- def enabled(self):
- self.device_rep_socket.send(b'enabled')
+ def get_enable(self):
+ self.device_cmd(DeviceCmd.GetEnable)
rb = self.device_rep_socket.recv()
match rb:
case b'true':
@@ -93,8 +142,14 @@ class Device(Node):
case _:
logger.error(f"Device msg: {rb}")
- def connected(self):
- self.device_rep_socket.send(b'connected')
+ def get_seq_meta_name(self):
+ self.device_cmd(DeviceCmd.GetName)
+ rb = self.device_rep_socket.recv()
+ if rb != b'':
+ self.send(SeqMetaMsg('live', rb.decode()))
+
+ def get_connection(self):
+ self.device_cmd(DeviceCmd.GetConnection)
rb = self.device_rep_socket.recv()
match rb:
case b'true':
@@ -106,18 +161,20 @@ class Device(Node):
case _:
logger.error(f"Device msg: {rb}")
- def setfile(self, config_str: str):
- if self.enabled():
+ def set_name_and_file(self, name: str, config_str: str):
+ if self.get_enable():
self.disable()
- self.setfileonly(config_str)
+ self.set_name_and_file_only(name, config_str)
self.enable()
- elif self.connected():
- self.setfileonly(config_str)
+ elif self.get_connection():
+ self.set_name_and_file_only(name, config_str)
else:
logger.warning(f"Device not connect, cannot set config")
- def setfileonly(self, s: str):
- self.device_rep_socket.send(b'fileonly' + s.encode())
+ def set_name_and_file_only(self, name: str, txt: str):
+ name_encoded = name.encode()
+ self.device_cmd(DeviceCmd.SetNameAndFileOnly,
+ struct.pack('I', name_encoded.__len__()) + name.encode() + txt.encode())
rb = self.device_rep_socket.recv()
if rb == self.ok:
return True
@@ -125,12 +182,12 @@ class Device(Node):
logger.error(f"Device msg: {rb}")
return False
- def data(self):
- self.device_rep_socket.send(b'data')
+ def get_data(self):
+ self.device_cmd(DeviceCmd.GetData)
return self.device_rep_socket.recv()
- def zero(self):
- self.device_rep_socket.send(b'zero')
+ def set_zero(self):
+ self.device_cmd(DeviceCmd.SetZero)
return self.device_rep_socket.recv()
def custom_setup(self):
@@ -141,10 +198,11 @@ class Device(Node):
def loop(self):
arr = []
- time.sleep(1)
+ time.sleep(3)
if self.online():
- self.connected()
- self.enabled()
+ self.get_connection()
+ self.get_enable()
+ self.get_seq_meta_name()
for f in DEVICE_CONFIG.glob('*.txt'):
arr.append((f.stem, f.read_text()))
self.send(DeviceConfigListMsg(arr))
@@ -162,21 +220,35 @@ class Device(Node):
else:
self.disable()
elif isinstance(msg, SetDeviceConnectedMsg):
+ logger.info('connecting to device')
if msg.value:
self.connect()
else:
self.disconnect()
elif isinstance(msg, SetDeviceConfigMsg):
- self.setfile(msg.value)
+ self.set_name_and_file(msg.name, msg.txt)
+ self.send(SeqMetaMsg('live', msg.name))
elif isinstance(msg, RequestRfFrameMsg):
- braw = self.data()
- if braw == b'':
- continue
- _, sequence_id, encoder = struct.unpack_from('=iqi', braw)
- buffer = braw[4 + 8 + 4:]
- # logger.debug('send')
- self.send(RfFrameWithMetaMsg(0, RfFrameMeta(
- encoder=encoder, sequence_id=sequence_id
- ), buffer))
+ if self.switch:
+ braw = self.get_data()
+ if braw == b'':
+ logger.warning('empty msg!')
+ continue
+ _, sequence_id, encoder = struct.unpack_from('=iqi', braw)
+ buffer = braw[4 + 8 + 4:]
+ # logger.debug('send')
+ self.send(RfFrameWithMetaMsg(0, RfFrameMeta(
+ encoder=encoder, sequence_id=sequence_id
+ ), buffer))
+ else:
+ logger.warning('device not online')
elif isinstance(msg, DeviceZero):
- self.zero()
+ self.set_zero()
+ elif isinstance(msg, DeviceSwitchMsg):
+ self.switch = msg.value == 'GREEN'
+ # elif isinstance(msg, SetDeviceSwitchMsg):
+ # logger.info(f'{msg.value}')
+ # if msg.value:
+ # self.device_rep_socket.connect(f"tcp://{LIVE_REP_SOCKET}")
+ # else:
+ # self.device_rep_socket.close()
diff --git a/src/nodes/ImageFFMPEG.py b/src/nodes/ImageFFMPEG.py
index 3be7012..596ecf6 100644
--- a/src/nodes/ImageFFMPEG.py
+++ b/src/nodes/ImageFFMPEG.py
@@ -14,7 +14,7 @@ logger = logging.getLogger(__name__)
class ImageFFMPEG(Node):
- topics = [BMMsg, SetWindowVisibleMsg]
+ topics = [BMMsg]
def __init__(self, level=logging.INFO):
super().__init__(level=level)
diff --git a/src/nodes/MainUI.py b/src/nodes/MainUI.py
index d39c1d8..017351b 100644
--- a/src/nodes/MainUI.py
+++ b/src/nodes/MainUI.py
@@ -7,18 +7,19 @@ from enum import Enum, auto
from pathlib import Path
import zmq
-from PyQt6 import QtCore, QtWidgets
+from PyQt6 import QtCore, QtWidgets, QtGui
from PyQt6.QtCore import QByteArray
from PyQt6.QtWidgets import QMainWindow, QApplication, QFrame, QMessageBox, QFileDialog, QLineEdit
from Main import Ui_MainWindow
from ZMQReceiver import ZMQReceiver
-from config import DS, SOFTWARE_CONFIG, IMAGING_CONFIG
+from config import DS, SOFTWARE_CONFIG, IMAGING_CONFIG, ASSETS, MI_REP_SOCKET_PORT
from nodes.Node import Node
from utils.Msg import KillMsg, Msg, ImageArgMsg, SeqIdMinMax, MoveAxisMsg, SeqListMsg, SetBaseMsg, \
SetSeqMetaMsg, SetPlayMode, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, SetDeviceEnabledMsg, \
SetDeviceConnectedMsg, DeviceConfigListMsg, SetDeviceConfigMsg, SetRecordMsg, RobotRtsiMsg, RecordFrameMsg, \
- SeqIdList, SetWindowVisibleMsg, SetSidMsg, ImagingConfigNameListMsg, DeviceZero
+ SeqIdList, SetWindowVisibleMsg, SetSidMsg, ImagingConfigNameListMsg, DeviceZero, DeviceSwitchMsg, \
+ SetDeviceSwitchMsg, SeqMetaMsg, RefreshDeviceMsg
from utils.RfMeta import RfSequenceMeta
logger = logging.getLogger(__name__)
@@ -28,6 +29,16 @@ class LinkStatus(Enum):
RED = auto()
YELLOW = auto()
GREEN = auto()
+ ORANGE = auto()
+
+
+def get_style_sheet(name, color):
+ return f"""
+#{name}{{
+ background: {color};
+ border-radius: 7px;
+}}
+""".strip()
def humanbytes(B):
@@ -55,6 +66,15 @@ class Adv(QMainWindow, Ui_MainWindow):
super(Adv, self).__init__(parent)
self.p = p
self.setupUi(self)
+ self.device_switch_state: LinkStatus = LinkStatus.RED
+ icon = QtGui.QIcon()
+ icon.addPixmap(QtGui.QPixmap(str(ASSETS / 'switch_button.png')))
+ self.b_probe_head_switch.setIcon(icon)
+ self.b_us_switch.setIcon(icon)
+ self.b_cobot_switch.setIcon(icon)
+ icon = QtGui.QIcon()
+ icon.addPixmap(QtGui.QPixmap(str(ASSETS / 'refresh_button.png')))
+ self.b_us_refresh.setIcon(icon)
zmq_receiver = ZMQReceiver(self)
zmq_receiver.zmq_event.connect(self.on_zmq_event)
zmq_receiver.start()
@@ -66,15 +86,19 @@ class Adv(QMainWindow, Ui_MainWindow):
self.arg = ImageArgMsg('ui', t_start=0, t_end=1499)
self.b_base.clicked.connect(self.on_base_open)
self.seq_meta: RfSequenceMeta | None = None
- self.b_play_live.clicked.connect(self.on_play_live)
- self.b_play_playback.clicked.connect(self.on_play_playback)
+ # self.b_play_live.clicked.connect(self.on_play_live)
+ # self.b_play_playback.clicked.connect(self.on_play_playback)
+ self.g_playback.clicked.connect(self.on_play_playback)
+ self.g_live.clicked.connect(self.on_play_live)
+
self.b_record.clicked.connect(self.on_record)
self.record = False
self.device_connected = False
self.device_enabled = False
# self.b_device_enabled.clicked.connect(lambda: self.p.send(SetDeviceEnabledMsg(not self.device_enabled)))
# self.b_device_connected.clicked.connect(lambda: self.p.send(SetDeviceConnectedMsg(not self.device_connected)))
- self.c_live_seq_name.currentIndexChanged.connect(self.on_seq_meta)
+ # self.c_live_seq_name.currentIndexChanged.connect(self.on_seq_meta)
+ self.b_live_seq_apply.clicked.connect(self.on_seq_meta)
self.l_base.setText(SOFTWARE_CONFIG.base_dir.__str__())
self.l_base.textChanged.connect(lambda e:
self.l_base.setStyleSheet("")
@@ -105,6 +129,45 @@ class Adv(QMainWindow, Ui_MainWindow):
self.b_probe_stop.clicked.connect(self.on_probe('stop'))
self.b_device_zero.clicked.connect(lambda: self.p.send(DeviceZero()))
+ self.b_us_switch.clicked.connect(self.on_deivce_switch)
+ self.b_us_refresh.clicked.connect(self.on_deivce_refresh)
+
+ self.mi_req_socket = zmq.Context().socket(zmq.REQ)
+ self.mi_req_socket.connect(f"tcp://127.0.0.1:{MI_REP_SOCKET_PORT}")
+
+ def on_deivce_switch(self):
+ match self.device_switch_state:
+ case LinkStatus.RED:
+ self.p.send(SetDeviceSwitchMsg(True))
+ self.p.send(DeviceSwitchMsg('YELLOW'))
+ case LinkStatus.GREEN | LinkStatus.YELLOW | LinkStatus.ORANGE:
+ self.p.send(SetDeviceSwitchMsg(False))
+
+ def on_deivce_refresh(self):
+ match self.device_switch_state:
+ case LinkStatus.GREEN | LinkStatus.YELLOW | LinkStatus.ORANGE:
+ self.p.send(RefreshDeviceMsg())
+ self.set_device_enable(LinkStatus.RED)
+ self.set_device_connection(LinkStatus.RED)
+ self.update_device_buttons()
+
+ def on_device_switch_state(self):
+ match self.device_switch_state:
+ case LinkStatus.RED:
+ self.g_device.setEnabled(False)
+ self.g_us.setStyleSheet(get_style_sheet('g_us', 'pink'))
+ self.set_device_enable(LinkStatus.RED)
+ self.set_device_connection(LinkStatus.RED)
+ self.update_device_buttons()
+ case LinkStatus.YELLOW:
+ self.g_device.setEnabled(False)
+ self.g_us.setStyleSheet(get_style_sheet('g_us', 'yellow'))
+ case LinkStatus.GREEN:
+ self.g_device.setEnabled(True)
+ self.g_us.setStyleSheet(get_style_sheet('g_us', 'LightGreen'))
+ case LinkStatus.ORANGE:
+ self.g_device.setEnabled(False)
+ self.g_us.setStyleSheet(get_style_sheet('g_us', 'orange'))
def on_probe(self, arg):
def f():
@@ -134,14 +197,15 @@ class Adv(QMainWindow, Ui_MainWindow):
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]))
+ # def update_b_play_live_enabled(self):
+ # self.b_play_live.setEnabled(all([self.b1, self.b2]))
def on_base_open(self):
if Path(self.l_base.text()):
self.p.send(SetBaseMsg(self.l_base.text()))
- self.b1 = True
- self.update_b_play_live_enabled()
+ self.g_cap.setEnabled(True)
+ # self.b1 = True
+ # self.update_b_play_live_enabled()
def set_device_connection(self, status: LinkStatus):
match status:
@@ -176,29 +240,33 @@ class Adv(QMainWindow, Ui_MainWindow):
def update_c_playback_seq_name_enable(self):
self.c_playback_seq_name.setEnabled(all([self.b3, self.b4]))
- def on_play_live(self):
- self.s_sid.setEnabled(False)
- self.b_play_live.setStyleSheet('background-color: red;')
- self.b_play_playback.setStyleSheet('')
- self.b_record.setEnabled(True)
- self.l_record_commit.setEnabled(True)
- self.p.send(SetSeqMetaMsg('live', self.c_live_seq_name.itemText(self.c_live_seq_name.currentIndex())))
- self.p.send(SetPlayMode('live'))
- self.b3 = False
- self.update_c_playback_seq_name_enable()
+ def on_play_live(self, b):
+ if b:
+ self.g_playback.setChecked(False)
+ # self.s_sid.setEnabled(False)
+ # self.b_play_live.setStyleSheet('background-color: red;')
+ # self.b_play_playback.setStyleSheet('')
+ # self.b_record.setEnabled(True)
+ # self.l_record_commit.setEnabled(True)
+ # self.p.send(SetSeqMetaMsg('live', self.c_live_seq_name.itemText(self.c_live_seq_name.currentIndex())))
+ self.p.send(SetPlayMode('live'))
+ self.b3 = False
+ self.update_c_playback_seq_name_enable()
- def on_play_playback(self):
- self.s_sid.setEnabled(True)
- self.b_play_live.setStyleSheet('')
- self.b_play_playback.setStyleSheet('background-color: red;')
- self.b_record.setEnabled(False)
- self.l_record_commit.setEnabled(False)
- self.p.send(
- SetSeqMetaMsg('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()
+ def on_play_playback(self, b):
+ if b:
+ self.g_live.setChecked(False)
+ # self.s_sid.setEnabled(True)
+ # self.b_play_live.setStyleSheet('')
+ # self.b_play_playback.setStyleSheet('background-color: red;')
+ # self.b_record.setEnabled(False)
+ # self.l_record_commit.setEnabled(False)
+ self.p.send(
+ SetSeqMetaMsg('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()
def on_device_disable(self):
self.p.send(SetDeviceEnabledMsg(False))
@@ -216,6 +284,7 @@ class Adv(QMainWindow, Ui_MainWindow):
self.set_device_connection(LinkStatus.YELLOW)
def on_device_connect(self):
+ logger.info('btn pre')
self.p.send(SetDeviceConnectedMsg(True))
self.b_device_connection.setEnabled(False)
self.set_device_connection(LinkStatus.YELLOW)
@@ -320,7 +389,7 @@ class Adv(QMainWindow, Ui_MainWindow):
if msg.value.__len__() > 0:
self.p.send(SetSeqMetaMsg('playback', self.c_playback_seq_name.itemText(
self.c_playback_seq_name.currentIndex())))
- self.b_play_playback.setEnabled(True)
+ # self.b_play_playback.setEnabled(True)
elif isinstance(msg, SetSeqMetaMsg):
self.seq_meta = RfSequenceMeta.from_name(msg.name)
mmax_shape0 = max(self.seq_meta.shape)
@@ -338,15 +407,19 @@ class Adv(QMainWindow, Ui_MainWindow):
else:
self.set_device_enable(LinkStatus.RED)
self.update_device_buttons()
- elif isinstance(msg, DeviceOnlineMsg):
- if msg.value:
- self.l_online.setStyleSheet("")
- self.l_online.setText("Device Online")
- self.g_device.setDisabled(False)
- else:
- self.l_online.setStyleSheet("background-color: pink;")
- self.l_online.setText("Device Offline")
- self.g_device.setDisabled(True)
+ elif isinstance(msg, SeqMetaMsg):
+ if msg.target == 'live':
+ self.l_live_seq_name.setText(msg.name)
+ self.b_live_seq_apply.setEnabled(True)
+ # elif isinstance(msg, DeviceOnlineMsg):
+ # if msg.value:
+ # # self.l_online.setStyleSheet("")
+ # # self.l_online.setText("Device Online")
+ # self.g_device.setEnabled(True)
+ # else:
+ # # self.l_online.setStyleSheet("background-color: pink;")
+ # # self.l_online.setText("Device Offline")
+ # self.g_device.setEnabled(False)
elif isinstance(msg, DeviceConfigListMsg):
for name, txt in msg.arr:
self.c_live_seq_name.addItem(name, txt)
@@ -380,6 +453,9 @@ class Adv(QMainWindow, Ui_MainWindow):
self.c_imaging_config.clear()
for name in msg.value:
self.c_imaging_config.addItem(name)
+ elif isinstance(msg, DeviceSwitchMsg):
+ self.device_switch_state = LinkStatus[msg.value]
+ self.on_device_switch_state()
except Exception as e:
logger.error(e)
traceback.print_exception(e)
@@ -421,14 +497,21 @@ class Adv(QMainWindow, Ui_MainWindow):
if self.sp_sid.sender() is None:
self.p.send(SetSidMsg(v))
- @QtCore.pyqtSlot(int)
- def on_seq_meta(self, v):
- if self.c_live_seq_name.sender() is None or isinstance(self.c_live_seq_name.sender(), QFrame):
- if self.c_live_seq_name.itemText(v) != 'Empty':
- self.b2 = True
- self.update_b_play_live_enabled()
- self.p.send(SetDeviceConfigMsg(self.c_live_seq_name.itemData(v)))
- self.p.send(SetSeqMetaMsg('live', self.c_live_seq_name.itemText(v)))
+ # @QtCore.pyqtSlot(int)
+ def on_seq_meta(self):
+ v = self.c_live_seq_name.currentIndex()
+ name = self.c_live_seq_name.currentText()
+ if name != 'Empty':
+ self.b_live_seq_apply.setEnabled(False)
+ self.p.send(SetDeviceConfigMsg(name, self.c_live_seq_name.itemData(v)))
+ # self.p.send(SetSeqMetaMsg('live', self.c_live_seq_name.itemText(v)))
+
+ # if self.c_live_seq_name.sender() is None or isinstance(self.c_live_seq_name.sender(), QFrame):
+ # if self.c_live_seq_name.itemText(v) != 'Empty':
+ # self.b2 = True
+ # # self.update_b_play_live_enabled()
+ # self.p.send(SetDeviceConfigMsg(self.c_live_seq_name.itemData(v)))
+ # self.p.send(SetSeqMetaMsg('live', self.c_live_seq_name.itemText(v)))
class MainUI(Node):
@@ -436,8 +519,8 @@ class MainUI(Node):
ImagingConfigNameListMsg,
SeqListMsg, SetSeqMetaMsg, SeqIdList, SetWindowVisibleMsg, SetSidMsg,
DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, DeviceConfigListMsg,
- RobotRtsiMsg,
- RecordFrameMsg]
+ RobotRtsiMsg, DeviceSwitchMsg,
+ RecordFrameMsg, SeqMetaMsg]
def __init__(self, level=logging.INFO):
super().__init__(level=level)
diff --git a/src/nodes/Mi.py b/src/nodes/Mi.py
new file mode 100644
index 0000000..802e9bf
--- /dev/null
+++ b/src/nodes/Mi.py
@@ -0,0 +1,131 @@
+import logging
+import struct
+import subprocess
+import time
+from threading import Thread
+
+import zmq
+
+from config import LIVE_REP_SOCKET, CONFIG, DEVICE_CONFIG, MI_REP_SOCKET_PORT, DEVICE_PY_REP_SOCKET_PORT, LIVE_SOCKET_IP
+from nodes.Node import Node
+from utils.Msg import ImageArgMsg, KillMsg, SetDeviceConnectedMsg, SetDeviceEnabledMsg, DeviceEnabledMsg, \
+ DeviceConnectedMsg, SetDeviceConfigMsg, DeviceOnlineMsg, DeviceConfigListMsg, RequestRfFrameMsg, RfFrameMsg, \
+ RfFrameWithMetaMsg, DeviceZero, SetDeviceSwitchMsg, DeviceSwitchMsg, RefreshDeviceMsg
+from utils.RfMeta import RfFrameMeta
+from utils.mi import c1_connect, c1_connected, c1_disconnect
+from utils.network import check_port
+
+logger = logging.getLogger(__name__)
+
+
+class Mi(Node):
+ topics = [SetDeviceSwitchMsg,RefreshDeviceMsg]
+
+ def __init__(self, level=logging.INFO):
+ super(Mi, self).__init__(level=level)
+ self.ping1enable = False
+ self.ping60enable = False
+
+ def custom_setup(self):
+ self.mi_rep_socket = self.context.socket(zmq.REP)
+ self.mi_rep_socket.bind(f"tcp://*:{MI_REP_SOCKET_PORT}")
+
+ self.device_py_req_socket = self.context.socket(zmq.REQ)
+ self.device_py_req_socket.connect(f"tcp://{LIVE_SOCKET_IP}:{DEVICE_PY_REP_SOCKET_PORT}")
+
+ self.device_py_req_socket1s = self.context.socket(zmq.REQ)
+ self.device_py_req_socket1s.connect(f"tcp://{LIVE_SOCKET_IP}:{DEVICE_PY_REP_SOCKET_PORT}")
+
+ self.device_py_req_socket60s = self.context.socket(zmq.REQ)
+ self.device_py_req_socket60s.connect(f"tcp://{LIVE_SOCKET_IP}:{DEVICE_PY_REP_SOCKET_PORT}")
+
+ self.ping1s_thread = Thread(target=self.ping1s)
+ self.ping1s_thread.start()
+ self.ping60s_thread = Thread(target=self.ping60s)
+ self.ping60s_thread.start()
+
+ self.c.poller.register(self.mi_rep_socket, zmq.POLLIN)
+
+ def ping1s(self):
+ while True:
+ if self.ping1enable:
+ self.device_py_req_socket1s.send(b'get_device_status')
+ match self.device_py_req_socket1s.recv():
+ case b'on':
+ self.send(DeviceSwitchMsg('GREEN'))
+ self.ping1enable = False
+ self.ping60enable = True
+ self.device_py_req_socket1s.send(b'start')
+ self.device_py_req_socket1s.recv()
+ case b'off':
+ pass
+ case b'err':
+ self.send(DeviceSwitchMsg('ORANGE'))
+ self.ping1enable = False
+ time.sleep(1)
+
+ def ping60s(self):
+ while True:
+ if self.ping60enable:
+ self.device_py_req_socket60s.send(b'get_device_status')
+ match self.device_py_req_socket60s.recv():
+ case b'off' | b'err':
+ self.send(DeviceSwitchMsg('ORANGE'))
+ self.ping60enable = False
+ self.device_py_req_socket60s.send(b'get_driver_status')
+ match self.device_py_req_socket60s.recv():
+ case b'off' | b'err':
+ self.send(DeviceSwitchMsg('ORANGE'))
+ self.ping60enable = False
+ time.sleep(10)
+
+ def loop(self):
+ if c1_connected() and check_port(LIVE_SOCKET_IP, DEVICE_PY_REP_SOCKET_PORT):
+ self.device_py_req_socket.send(b'get_device_status')
+ r = self.device_py_req_socket.recv()
+ if r == b'on':
+ self.device_py_req_socket.send(b'get_driver_status')
+ r = self.device_py_req_socket.recv()
+ if r == b'on':
+ self.send(DeviceSwitchMsg('GREEN'))
+ else:
+ self.send(DeviceSwitchMsg('ORANGE'))
+ else:
+ self.send(DeviceSwitchMsg('YELLOW'))
+ self.ping1enable = True
+ while True:
+ r = dict(self.c.poller.poll())
+ # if self.mi_rep_socket in r:
+ # msg = self.mi_rep_socket.recv()
+ # if msg == b'c1_connected':
+ # c1_connected()
+ #
+ # if msg == b'c1_connect':
+ # c1_connect()
+ # if msg == b'c1_disconnect':
+ # c1_disconnect()
+ # self.mi_rep_socket.send(b'ok')
+ if self.c.sub in r:
+ msg = self.recv()
+ logger.info(f'{msg}')
+ if isinstance(msg, KillMsg):
+ if msg.name == '':
+ return
+ if isinstance(msg, SetDeviceSwitchMsg):
+ if msg.value:
+ c1_connect()
+ self.ping1enable = True
+ else:
+ self.ping60enable = False
+ c1_disconnect()
+ self.device_py_req_socket.send(b'kill')
+ self.device_py_req_socket.recv()
+ self.send(DeviceSwitchMsg('RED'))
+ elif isinstance(msg,RefreshDeviceMsg):
+ self.device_py_req_socket.send(b'kill')
+ self.device_py_req_socket.recv()
+ self.device_py_req_socket.send(b'start')
+ self.device_py_req_socket.recv()
+ self.send(DeviceSwitchMsg('GREEN'))
+ self.ping60enable = True
+
diff --git a/src/nodes/Muxer.py b/src/nodes/Muxer.py
index cdb9876..2d087e6 100644
--- a/src/nodes/Muxer.py
+++ b/src/nodes/Muxer.py
@@ -8,7 +8,7 @@ import zmq
from config import IMAGING_CONFIG
from nodes.Node import Node
from utils.Msg import ImageArgMsg, KillMsg, SetSeqMetaMsg, SetPlayMode, SetDeviceConfigMsg, \
- ImagingConfigNameListMsg, RfFrameWithMetaMsg, BeamformerMsg, RequestRfFrameMsg, RobotRtsiMsg
+ ImagingConfigNameListMsg, RfFrameWithMetaMsg, BeamformerMsg, RequestRfFrameMsg, RobotRtsiMsg, SeqMetaMsg
from utils.RfFile import RfSequenceMeta
logger = logging.getLogger(__name__)
@@ -16,7 +16,7 @@ logger = logging.getLogger(__name__)
class Muxer(Node):
topics = [SetSeqMetaMsg, SetPlayMode, SetDeviceConfigMsg, RfFrameWithMetaMsg, RequestRfFrameMsg,
- ImageArgMsg, RobotRtsiMsg]
+ ImageArgMsg, RobotRtsiMsg, SeqMetaMsg]
def __init__(self, level=logging.INFO):
super(Muxer, self).__init__(level=level)
@@ -93,10 +93,13 @@ class Muxer(Node):
self.arg = msg
elif isinstance(msg, SetSeqMetaMsg):
match msg.target:
- case 'live':
- self.seq_meta_live = RfSequenceMeta.from_name(msg.name)
case 'playback':
self.seq_meta_playback = RfSequenceMeta.from_name(msg.name)
+ elif isinstance(msg, SeqMetaMsg):
+ logger.info(f'use live {msg}')
+ match msg.target:
+ case 'live':
+ self.seq_meta_live = RfSequenceMeta.from_name(msg.name)
elif isinstance(msg, SetPlayMode):
logger.debug(f'set playmode {msg}')
self.play_mode = msg.value
diff --git a/src/nodes/Node.py b/src/nodes/Node.py
index 039b201..4b6c865 100644
--- a/src/nodes/Node.py
+++ b/src/nodes/Node.py
@@ -39,6 +39,17 @@ class Node:
FORMAT = '[%(asctime)s] p%(process)s {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s'
FORMAT = '"%(pathname)s:%(lineno)d" [%(asctime)s.%(msecs)03d] %(levelname)s - %(message)s'
logging.basicConfig(level=self.level, format=FORMAT,datefmt = '%Y-%m-%d %H:%M:%S',)
+ rootLogger = logging.getLogger()
+
+ logFormatter = logging.Formatter(FORMAT,datefmt = '%Y-%m-%d %H:%M:%S',)
+
+ fileHandler = logging.FileHandler("log.log")
+ fileHandler.setFormatter(logFormatter)
+ rootLogger.addHandler(fileHandler)
+
+ # consoleHandler = logging.StreamHandler()
+ # consoleHandler.setFormatter(logFormatter)
+ # rootLogger.addHandler(consoleHandler)
self.context = zmq.Context()
if self.enable_init:
diff --git a/src/ui/Main.py b/src/ui/Main.py
index 73111eb..5d024a0 100644
--- a/src/ui/Main.py
+++ b/src/ui/Main.py
@@ -12,24 +12,44 @@ from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
- MainWindow.resize(1158, 998)
+ MainWindow.resize(1238, 999)
self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
- self.g_device = QtWidgets.QGroupBox(parent=self.centralwidget)
+ self.g_us = QtWidgets.QGroupBox(parent=self.centralwidget)
+ self.g_us.setStyleSheet("#g_us{\n"
+" background: pink;\n"
+"border-radius: 7px;\n"
+"}")
+ self.g_us.setObjectName("g_us")
+ self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.g_us)
+ self.verticalLayout_2.setObjectName("verticalLayout_2")
+ self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_9.setObjectName("horizontalLayout_9")
+ self.label_30 = QtWidgets.QLabel(parent=self.g_us)
+ font = QtGui.QFont()
+ font.setPointSize(15)
+ self.label_30.setFont(font)
+ self.label_30.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.label_30.setObjectName("label_30")
+ self.horizontalLayout_9.addWidget(self.label_30)
+ self.b_us_refresh = QtWidgets.QPushButton(parent=self.g_us)
+ self.b_us_refresh.setText("")
+ self.b_us_refresh.setObjectName("b_us_refresh")
+ self.horizontalLayout_9.addWidget(self.b_us_refresh)
+ self.b_us_switch = QtWidgets.QPushButton(parent=self.g_us)
+ self.b_us_switch.setText("")
+ self.b_us_switch.setObjectName("b_us_switch")
+ self.horizontalLayout_9.addWidget(self.b_us_switch)
+ self.horizontalLayout_9.setStretch(0, 1)
+ self.verticalLayout_2.addLayout(self.horizontalLayout_9)
+ self.g_device = QtWidgets.QGroupBox(parent=self.g_us)
self.g_device.setEnabled(True)
+ self.g_device.setTitle("")
self.g_device.setObjectName("g_device")
self.verticalLayout = QtWidgets.QVBoxLayout(self.g_device)
self.verticalLayout.setObjectName("verticalLayout")
- self.l_online = QtWidgets.QLabel(parent=self.g_device)
- font = QtGui.QFont()
- font.setPointSize(15)
- self.l_online.setFont(font)
- self.l_online.setStyleSheet("background-color: pink;")
- self.l_online.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
- self.l_online.setObjectName("l_online")
- self.verticalLayout.addWidget(self.l_online)
self.gridLayout_8 = QtWidgets.QGridLayout()
self.gridLayout_8.setObjectName("gridLayout_8")
self.b_device_connection = QtWidgets.QPushButton(parent=self.g_device)
@@ -58,22 +78,34 @@ class Ui_MainWindow(object):
self.gridLayout_8.setColumnStretch(1, 1)
self.gridLayout_8.setColumnStretch(3, 1)
self.verticalLayout.addLayout(self.gridLayout_8)
- self.horizontalLayout = QtWidgets.QHBoxLayout()
- self.horizontalLayout.setObjectName("horizontalLayout")
- self.label_20 = QtWidgets.QLabel(parent=self.g_device)
- self.label_20.setObjectName("label_20")
- self.horizontalLayout.addWidget(self.label_20)
+ self.gridLayout_7 = QtWidgets.QGridLayout()
+ self.gridLayout_7.setObjectName("gridLayout_7")
+ self.label_32 = QtWidgets.QLabel(parent=self.g_device)
+ self.label_32.setObjectName("label_32")
+ self.gridLayout_7.addWidget(self.label_32, 1, 0, 1, 1)
self.c_live_seq_name = QtWidgets.QComboBox(parent=self.g_device)
self.c_live_seq_name.setEnabled(False)
self.c_live_seq_name.setObjectName("c_live_seq_name")
self.c_live_seq_name.addItem("")
- self.horizontalLayout.addWidget(self.c_live_seq_name)
- self.horizontalLayout.setStretch(1, 1)
- self.verticalLayout.addLayout(self.horizontalLayout)
+ self.gridLayout_7.addWidget(self.c_live_seq_name, 0, 1, 1, 1)
+ self.label_20 = QtWidgets.QLabel(parent=self.g_device)
+ self.label_20.setObjectName("label_20")
+ self.gridLayout_7.addWidget(self.label_20, 0, 0, 1, 1)
+ self.b_live_seq_apply = QtWidgets.QPushButton(parent=self.g_device)
+ self.b_live_seq_apply.setObjectName("b_live_seq_apply")
+ self.gridLayout_7.addWidget(self.b_live_seq_apply, 0, 2, 1, 1)
+ self.l_live_seq_name = QtWidgets.QLabel(parent=self.g_device)
+ self.l_live_seq_name.setObjectName("l_live_seq_name")
+ self.gridLayout_7.addWidget(self.l_live_seq_name, 1, 1, 1, 2)
+ self.gridLayout_7.setColumnStretch(1, 1)
+ self.verticalLayout.addLayout(self.gridLayout_7)
self.b_device_zero = QtWidgets.QPushButton(parent=self.g_device)
self.b_device_zero.setObjectName("b_device_zero")
self.verticalLayout.addWidget(self.b_device_zero)
- self.gridLayout.addWidget(self.g_device, 0, 0, 1, 1)
+ self.verticalLayout.setStretch(1, 1)
+ self.verticalLayout_2.addWidget(self.g_device)
+ self.verticalLayout_2.setStretch(1, 1)
+ self.gridLayout.addWidget(self.g_us, 0, 0, 1, 1)
self.gridLayout_4 = QtWidgets.QGridLayout()
self.gridLayout_4.setObjectName("gridLayout_4")
self.label_14 = QtWidgets.QLabel(parent=self.centralwidget)
@@ -157,22 +189,220 @@ class Ui_MainWindow(object):
self.horizontalSlider_8.setObjectName("horizontalSlider_8")
self.gridLayout_4.addWidget(self.horizontalSlider_8, 6, 1, 1, 1)
self.gridLayout.addLayout(self.gridLayout_4, 3, 1, 1, 1)
- self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
- self.horizontalLayout_4.setObjectName("horizontalLayout_4")
- self.label = QtWidgets.QLabel(parent=self.centralwidget)
- self.label.setObjectName("label")
- self.horizontalLayout_4.addWidget(self.label)
- self.l_base = QtWidgets.QLineEdit(parent=self.centralwidget)
- 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)
- self.gridLayout.addLayout(self.horizontalLayout_4, 4, 0, 1, 2)
+ self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_6.setObjectName("horizontalLayout_6")
+ self.cb_bscan = QtWidgets.QCheckBox(parent=self.centralwidget)
+ self.cb_bscan.setChecked(True)
+ self.cb_bscan.setObjectName("cb_bscan")
+ self.horizontalLayout_6.addWidget(self.cb_bscan)
+ self.checkBox = QtWidgets.QCheckBox(parent=self.centralwidget)
+ self.checkBox.setObjectName("checkBox")
+ self.horizontalLayout_6.addWidget(self.checkBox)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.horizontalLayout_6.addItem(spacerItem1)
+ self.gridLayout.addLayout(self.horizontalLayout_6, 5, 0, 1, 2)
+ self.g_cap = QtWidgets.QGroupBox(parent=self.centralwidget)
+ self.g_cap.setEnabled(False)
+ self.g_cap.setObjectName("g_cap")
+ self.horizontalLayout_8 = QtWidgets.QHBoxLayout(self.g_cap)
+ self.horizontalLayout_8.setObjectName("horizontalLayout_8")
+ self.g_live = QtWidgets.QGroupBox(parent=self.g_cap)
+ self.g_live.setCheckable(True)
+ self.g_live.setChecked(False)
+ self.g_live.setObjectName("g_live")
+ self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.g_live)
+ self.verticalLayout_6.setObjectName("verticalLayout_6")
+ self.horizontalLayout_12 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_12.setObjectName("horizontalLayout_12")
+ self.label_17 = QtWidgets.QLabel(parent=self.g_live)
+ self.label_17.setObjectName("label_17")
+ self.horizontalLayout_12.addWidget(self.label_17)
+ self.l_record_commit = QtWidgets.QLineEdit(parent=self.g_live)
+ self.l_record_commit.setEnabled(False)
+ self.l_record_commit.setObjectName("l_record_commit")
+ self.horizontalLayout_12.addWidget(self.l_record_commit)
+ self.b_record = QtWidgets.QPushButton(parent=self.g_live)
+ self.b_record.setEnabled(False)
+ self.b_record.setObjectName("b_record")
+ self.horizontalLayout_12.addWidget(self.b_record)
+ self.verticalLayout_6.addLayout(self.horizontalLayout_12)
+ self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+ self.label_18 = QtWidgets.QLabel(parent=self.g_live)
+ self.label_18.setObjectName("label_18")
+ self.horizontalLayout_2.addWidget(self.label_18)
+ self.l_record_frames = QtWidgets.QLabel(parent=self.g_live)
+ self.l_record_frames.setObjectName("l_record_frames")
+ self.horizontalLayout_2.addWidget(self.l_record_frames)
+ self.label_25 = QtWidgets.QLabel(parent=self.g_live)
+ self.label_25.setObjectName("label_25")
+ self.horizontalLayout_2.addWidget(self.label_25)
+ self.l_record_size = QtWidgets.QLabel(parent=self.g_live)
+ self.l_record_size.setObjectName("l_record_size")
+ self.horizontalLayout_2.addWidget(self.l_record_size)
+ self.label_26 = QtWidgets.QLabel(parent=self.g_live)
+ self.label_26.setObjectName("label_26")
+ self.horizontalLayout_2.addWidget(self.label_26)
+ self.l_record_max_sid = QtWidgets.QLabel(parent=self.g_live)
+ self.l_record_max_sid.setObjectName("l_record_max_sid")
+ self.horizontalLayout_2.addWidget(self.l_record_max_sid)
+ self.horizontalLayout_2.setStretch(1, 1)
+ self.horizontalLayout_2.setStretch(3, 1)
+ self.horizontalLayout_2.setStretch(5, 1)
+ self.verticalLayout_6.addLayout(self.horizontalLayout_2)
+ self.verticalLayout_6.setStretch(0, 1)
+ self.horizontalLayout_8.addWidget(self.g_live)
+ self.g_playback = QtWidgets.QGroupBox(parent=self.g_cap)
+ self.g_playback.setCheckable(True)
+ self.g_playback.setChecked(False)
+ self.g_playback.setObjectName("g_playback")
+ self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.g_playback)
+ self.verticalLayout_3.setObjectName("verticalLayout_3")
+ self.gridLayout_6 = QtWidgets.QGridLayout()
+ self.gridLayout_6.setObjectName("gridLayout_6")
+ self.sp_sid = QtWidgets.QSpinBox(parent=self.g_playback)
+ self.sp_sid.setObjectName("sp_sid")
+ self.gridLayout_6.addWidget(self.sp_sid, 1, 2, 1, 1)
+ self.label_4 = QtWidgets.QLabel(parent=self.g_playback)
+ self.label_4.setObjectName("label_4")
+ self.gridLayout_6.addWidget(self.label_4, 1, 0, 1, 1)
+ self.label_16 = QtWidgets.QLabel(parent=self.g_playback)
+ self.label_16.setObjectName("label_16")
+ self.gridLayout_6.addWidget(self.label_16, 0, 0, 1, 1)
+ self.c_playback_seq_name = QtWidgets.QComboBox(parent=self.g_playback)
+ 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_6.addWidget(self.c_playback_seq_name, 0, 1, 1, 2)
+ self.s_sid = QtWidgets.QSlider(parent=self.g_playback)
+ self.s_sid.setOrientation(QtCore.Qt.Orientation.Horizontal)
+ self.s_sid.setObjectName("s_sid")
+ self.gridLayout_6.addWidget(self.s_sid, 1, 1, 1, 1)
+ self.verticalLayout_3.addLayout(self.gridLayout_6)
+ self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_5.setObjectName("horizontalLayout_5")
+ self.label26 = QtWidgets.QLabel(parent=self.g_playback)
+ self.label26.setObjectName("label26")
+ self.horizontalLayout_5.addWidget(self.label26)
+ self.l_seq_min = QtWidgets.QLabel(parent=self.g_playback)
+ self.l_seq_min.setObjectName("l_seq_min")
+ self.horizontalLayout_5.addWidget(self.l_seq_min)
+ self.label_28 = QtWidgets.QLabel(parent=self.g_playback)
+ self.label_28.setObjectName("label_28")
+ self.horizontalLayout_5.addWidget(self.label_28)
+ self.l_seq_current = QtWidgets.QLabel(parent=self.g_playback)
+ self.l_seq_current.setObjectName("l_seq_current")
+ self.horizontalLayout_5.addWidget(self.l_seq_current)
+ self.label_29 = QtWidgets.QLabel(parent=self.g_playback)
+ self.label_29.setObjectName("label_29")
+ self.horizontalLayout_5.addWidget(self.label_29)
+ self.l_seq_max = QtWidgets.QLabel(parent=self.g_playback)
+ 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.verticalLayout_3.addLayout(self.horizontalLayout_5)
+ self.horizontalLayout_8.addWidget(self.g_playback)
+ self.gridLayout.addWidget(self.g_cap, 2, 0, 1, 2)
+ self.g_cobot = QtWidgets.QGroupBox(parent=self.centralwidget)
+ self.g_cobot.setStyleSheet("#g_cobot {\n"
+" background: pink;\n"
+"border-radius: 7px;\n"
+"}")
+ self.g_cobot.setTitle("")
+ self.g_cobot.setObjectName("g_cobot")
+ self.gridLayout_3 = QtWidgets.QGridLayout(self.g_cobot)
+ self.gridLayout_3.setObjectName("gridLayout_3")
+ self.groupBox_2 = QtWidgets.QGroupBox(parent=self.g_cobot)
+ self.groupBox_2.setTitle("")
+ self.groupBox_2.setObjectName("groupBox_2")
+ self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox_2)
+ self.verticalLayout_4.setObjectName("verticalLayout_4")
+ self.gridLayout_2 = QtWidgets.QGridLayout()
+ self.gridLayout_2.setObjectName("gridLayout_2")
+ self.ln_rz = QtWidgets.QLCDNumber(parent=self.groupBox_2)
+ self.ln_rz.setDigitCount(6)
+ self.ln_rz.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
+ self.ln_rz.setObjectName("ln_rz")
+ self.gridLayout_2.addWidget(self.ln_rz, 0, 6, 1, 1)
+ self.ln_frx = QtWidgets.QLCDNumber(parent=self.groupBox_2)
+ self.ln_frx.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
+ self.ln_frx.setObjectName("ln_frx")
+ self.gridLayout_2.addWidget(self.ln_frx, 1, 4, 1, 1)
+ self.ln_frz = QtWidgets.QLCDNumber(parent=self.groupBox_2)
+ self.ln_frz.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
+ self.ln_frz.setObjectName("ln_frz")
+ self.gridLayout_2.addWidget(self.ln_frz, 1, 6, 1, 1)
+ self.ln_fx = QtWidgets.QLCDNumber(parent=self.groupBox_2)
+ self.ln_fx.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
+ self.ln_fx.setObjectName("ln_fx")
+ self.gridLayout_2.addWidget(self.ln_fx, 1, 1, 1, 1)
+ self.ln_rx = QtWidgets.QLCDNumber(parent=self.groupBox_2)
+ self.ln_rx.setDigitCount(6)
+ self.ln_rx.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
+ self.ln_rx.setObjectName("ln_rx")
+ self.gridLayout_2.addWidget(self.ln_rx, 0, 4, 1, 1)
+ self.ln_z = QtWidgets.QLCDNumber(parent=self.groupBox_2)
+ self.ln_z.setDigitCount(6)
+ self.ln_z.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
+ self.ln_z.setObjectName("ln_z")
+ self.gridLayout_2.addWidget(self.ln_z, 0, 3, 1, 1)
+ self.ln_fry = QtWidgets.QLCDNumber(parent=self.groupBox_2)
+ self.ln_fry.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
+ self.ln_fry.setObjectName("ln_fry")
+ self.gridLayout_2.addWidget(self.ln_fry, 1, 5, 1, 1)
+ self.ln_y = QtWidgets.QLCDNumber(parent=self.groupBox_2)
+ self.ln_y.setDigitCount(6)
+ self.ln_y.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
+ self.ln_y.setObjectName("ln_y")
+ self.gridLayout_2.addWidget(self.ln_y, 0, 2, 1, 1)
+ self.label_23 = QtWidgets.QLabel(parent=self.groupBox_2)
+ self.label_23.setObjectName("label_23")
+ self.gridLayout_2.addWidget(self.label_23, 1, 0, 1, 1)
+ self.ln_fz = QtWidgets.QLCDNumber(parent=self.groupBox_2)
+ self.ln_fz.setSmallDecimalPoint(False)
+ self.ln_fz.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
+ self.ln_fz.setProperty("value", 0.01)
+ self.ln_fz.setObjectName("ln_fz")
+ self.gridLayout_2.addWidget(self.ln_fz, 1, 3, 1, 1)
+ self.ln_fy = QtWidgets.QLCDNumber(parent=self.groupBox_2)
+ self.ln_fy.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
+ self.ln_fy.setObjectName("ln_fy")
+ self.gridLayout_2.addWidget(self.ln_fy, 1, 2, 1, 1)
+ self.ln_x = QtWidgets.QLCDNumber(parent=self.groupBox_2)
+ self.ln_x.setDigitCount(6)
+ self.ln_x.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
+ self.ln_x.setObjectName("ln_x")
+ self.gridLayout_2.addWidget(self.ln_x, 0, 1, 1, 1)
+ self.ln_ry = QtWidgets.QLCDNumber(parent=self.groupBox_2)
+ self.ln_ry.setDigitCount(6)
+ self.ln_ry.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
+ self.ln_ry.setObjectName("ln_ry")
+ self.gridLayout_2.addWidget(self.ln_ry, 0, 5, 1, 1)
+ self.label_22 = QtWidgets.QLabel(parent=self.groupBox_2)
+ self.label_22.setObjectName("label_22")
+ self.gridLayout_2.addWidget(self.label_22, 0, 0, 1, 1)
+ self.verticalLayout_4.addLayout(self.gridLayout_2)
+ self.gridLayout_3.addWidget(self.groupBox_2, 1, 0, 1, 1)
+ self.horizontalLayout_10 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_10.setObjectName("horizontalLayout_10")
+ self.label_19 = QtWidgets.QLabel(parent=self.g_cobot)
+ font = QtGui.QFont()
+ font.setPointSize(15)
+ self.label_19.setFont(font)
+ self.label_19.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.label_19.setObjectName("label_19")
+ self.horizontalLayout_10.addWidget(self.label_19)
+ self.b_cobot_switch = QtWidgets.QPushButton(parent=self.g_cobot)
+ self.b_cobot_switch.setText("")
+ self.b_cobot_switch.setObjectName("b_cobot_switch")
+ self.horizontalLayout_10.addWidget(self.b_cobot_switch)
+ self.horizontalLayout_10.setStretch(0, 1)
+ self.gridLayout_3.addLayout(self.horizontalLayout_10, 0, 0, 1, 1)
+ self.gridLayout_3.setRowStretch(1, 1)
+ self.gridLayout.addWidget(self.g_cobot, 0, 1, 2, 1)
self.gridLayout_5 = QtWidgets.QGridLayout()
self.gridLayout_5.setObjectName("gridLayout_5")
self.spinBox_3 = QtWidgets.QSpinBox(parent=self.centralwidget)
@@ -191,8 +421,8 @@ class Ui_MainWindow(object):
self.horizontalSlider_2.setOrientation(QtCore.Qt.Orientation.Horizontal)
self.horizontalSlider_2.setObjectName("horizontalSlider_2")
self.gridLayout_5.addWidget(self.horizontalSlider_2, 5, 1, 1, 1)
- spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
- self.gridLayout_5.addItem(spacerItem1, 7, 1, 1, 1)
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.gridLayout_5.addItem(spacerItem2, 7, 1, 1, 1)
self.label_2 = QtWidgets.QLabel(parent=self.centralwidget)
font = QtGui.QFont()
font.setPointSize(20)
@@ -241,211 +471,75 @@ class Ui_MainWindow(object):
self.horizontalLayout_3.setStretch(1, 1)
self.gridLayout_5.addLayout(self.horizontalLayout_3, 2, 0, 1, 3)
self.gridLayout.addLayout(self.gridLayout_5, 3, 0, 1, 1)
- self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
- self.horizontalLayout_6.setObjectName("horizontalLayout_6")
- self.cb_bscan = QtWidgets.QCheckBox(parent=self.centralwidget)
- self.cb_bscan.setChecked(True)
- self.cb_bscan.setObjectName("cb_bscan")
- self.horizontalLayout_6.addWidget(self.cb_bscan)
- self.checkBox = QtWidgets.QCheckBox(parent=self.centralwidget)
- self.checkBox.setObjectName("checkBox")
- self.horizontalLayout_6.addWidget(self.checkBox)
- spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
- self.horizontalLayout_6.addItem(spacerItem2)
- self.gridLayout.addLayout(self.horizontalLayout_6, 5, 0, 1, 2)
- self.gridLayout_6 = QtWidgets.QGridLayout()
- self.gridLayout_6.setObjectName("gridLayout_6")
- self.l_record_commit = QtWidgets.QLineEdit(parent=self.centralwidget)
- self.l_record_commit.setEnabled(False)
- self.l_record_commit.setObjectName("l_record_commit")
- self.gridLayout_6.addWidget(self.l_record_commit, 1, 1, 1, 1)
- self.label_17 = QtWidgets.QLabel(parent=self.centralwidget)
- self.label_17.setObjectName("label_17")
- self.gridLayout_6.addWidget(self.label_17, 1, 0, 1, 1)
- self.b_record = QtWidgets.QPushButton(parent=self.centralwidget)
- self.b_record.setEnabled(False)
- self.b_record.setObjectName("b_record")
- self.gridLayout_6.addWidget(self.b_record, 1, 2, 1, 1)
- self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
- self.horizontalLayout_2.setObjectName("horizontalLayout_2")
- self.label_18 = QtWidgets.QLabel(parent=self.centralwidget)
- self.label_18.setObjectName("label_18")
- self.horizontalLayout_2.addWidget(self.label_18)
- self.l_record_frames = QtWidgets.QLabel(parent=self.centralwidget)
- self.l_record_frames.setObjectName("l_record_frames")
- self.horizontalLayout_2.addWidget(self.l_record_frames)
- self.label_25 = QtWidgets.QLabel(parent=self.centralwidget)
- self.label_25.setObjectName("label_25")
- self.horizontalLayout_2.addWidget(self.label_25)
- self.l_record_size = QtWidgets.QLabel(parent=self.centralwidget)
- self.l_record_size.setObjectName("l_record_size")
- self.horizontalLayout_2.addWidget(self.l_record_size)
- self.label_26 = QtWidgets.QLabel(parent=self.centralwidget)
- self.label_26.setObjectName("label_26")
- self.horizontalLayout_2.addWidget(self.label_26)
- self.l_record_max_sid = QtWidgets.QLabel(parent=self.centralwidget)
- self.l_record_max_sid.setObjectName("l_record_max_sid")
- self.horizontalLayout_2.addWidget(self.l_record_max_sid)
- self.horizontalLayout_2.setStretch(1, 1)
- self.horizontalLayout_2.setStretch(3, 1)
- self.horizontalLayout_2.setStretch(5, 1)
- self.gridLayout_6.addLayout(self.horizontalLayout_2, 2, 0, 1, 3)
- self.b_play_live = QtWidgets.QPushButton(parent=self.centralwidget)
- self.b_play_live.setEnabled(False)
- self.b_play_live.setObjectName("b_play_live")
- self.gridLayout_6.addWidget(self.b_play_live, 0, 0, 1, 3)
- self.gridLayout.addLayout(self.gridLayout_6, 1, 0, 1, 1)
+ self.g_probe_head = QtWidgets.QGroupBox(parent=self.centralwidget)
+ self.g_probe_head.setStyleSheet("#g_probe_head {\n"
+" background: pink;\n"
+"border-radius: 7px;\n"
+"}")
+ self.g_probe_head.setTitle("")
+ self.g_probe_head.setObjectName("g_probe_head")
+ self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.g_probe_head)
+ self.verticalLayout_5.setObjectName("verticalLayout_5")
self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
- self.b_probe_start = QtWidgets.QPushButton(parent=self.centralwidget)
- self.b_probe_start.setObjectName("b_probe_start")
- self.horizontalLayout_7.addWidget(self.b_probe_start)
- self.b_probe_stop = QtWidgets.QPushButton(parent=self.centralwidget)
- self.b_probe_stop.setObjectName("b_probe_stop")
- self.horizontalLayout_7.addWidget(self.b_probe_stop)
- self.l_probe_angle = QtWidgets.QLabel(parent=self.centralwidget)
- self.l_probe_angle.setObjectName("l_probe_angle")
- self.horizontalLayout_7.addWidget(self.l_probe_angle)
- self.b_probe_single = QtWidgets.QPushButton(parent=self.centralwidget)
- self.b_probe_single.setObjectName("b_probe_single")
- self.horizontalLayout_7.addWidget(self.b_probe_single)
- self.b_probe_orig = QtWidgets.QPushButton(parent=self.centralwidget)
- self.b_probe_orig.setObjectName("b_probe_orig")
- self.horizontalLayout_7.addWidget(self.b_probe_orig)
- self.gridLayout.addLayout(self.horizontalLayout_7, 2, 0, 1, 2)
- self.gridLayout_2 = QtWidgets.QGridLayout()
- self.gridLayout_2.setObjectName("gridLayout_2")
- self.ln_y = QtWidgets.QLCDNumber(parent=self.centralwidget)
- self.ln_y.setDigitCount(6)
- self.ln_y.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
- self.ln_y.setObjectName("ln_y")
- self.gridLayout_2.addWidget(self.ln_y, 1, 2, 1, 1)
- self.ln_z = QtWidgets.QLCDNumber(parent=self.centralwidget)
- self.ln_z.setDigitCount(6)
- self.ln_z.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
- self.ln_z.setObjectName("ln_z")
- self.gridLayout_2.addWidget(self.ln_z, 1, 3, 1, 1)
- self.ln_x = QtWidgets.QLCDNumber(parent=self.centralwidget)
- self.ln_x.setDigitCount(6)
- self.ln_x.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
- self.ln_x.setObjectName("ln_x")
- self.gridLayout_2.addWidget(self.ln_x, 1, 1, 1, 1)
- self.ln_ry = QtWidgets.QLCDNumber(parent=self.centralwidget)
- self.ln_ry.setDigitCount(6)
- self.ln_ry.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
- self.ln_ry.setObjectName("ln_ry")
- self.gridLayout_2.addWidget(self.ln_ry, 1, 5, 1, 1)
- self.label_22 = QtWidgets.QLabel(parent=self.centralwidget)
- self.label_22.setObjectName("label_22")
- self.gridLayout_2.addWidget(self.label_22, 1, 0, 1, 1)
- self.ln_rx = QtWidgets.QLCDNumber(parent=self.centralwidget)
- self.ln_rx.setDigitCount(6)
- self.ln_rx.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
- self.ln_rx.setObjectName("ln_rx")
- self.gridLayout_2.addWidget(self.ln_rx, 1, 4, 1, 1)
- self.label_23 = QtWidgets.QLabel(parent=self.centralwidget)
- self.label_23.setObjectName("label_23")
- self.gridLayout_2.addWidget(self.label_23, 2, 0, 1, 1)
- self.ln_rz = QtWidgets.QLCDNumber(parent=self.centralwidget)
- self.ln_rz.setDigitCount(6)
- self.ln_rz.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
- self.ln_rz.setObjectName("ln_rz")
- self.gridLayout_2.addWidget(self.ln_rz, 1, 6, 1, 1)
- self.ln_fx = QtWidgets.QLCDNumber(parent=self.centralwidget)
- self.ln_fx.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
- self.ln_fx.setObjectName("ln_fx")
- self.gridLayout_2.addWidget(self.ln_fx, 2, 1, 1, 1)
- self.ln_fy = QtWidgets.QLCDNumber(parent=self.centralwidget)
- self.ln_fy.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
- self.ln_fy.setObjectName("ln_fy")
- self.gridLayout_2.addWidget(self.ln_fy, 2, 2, 1, 1)
- self.ln_fz = QtWidgets.QLCDNumber(parent=self.centralwidget)
- self.ln_fz.setSmallDecimalPoint(False)
- self.ln_fz.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
- self.ln_fz.setProperty("value", 0.01)
- self.ln_fz.setObjectName("ln_fz")
- self.gridLayout_2.addWidget(self.ln_fz, 2, 3, 1, 1)
- self.ln_frx = QtWidgets.QLCDNumber(parent=self.centralwidget)
- self.ln_frx.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
- self.ln_frx.setObjectName("ln_frx")
- self.gridLayout_2.addWidget(self.ln_frx, 2, 4, 1, 1)
- self.ln_fry = QtWidgets.QLCDNumber(parent=self.centralwidget)
- self.ln_fry.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
- self.ln_fry.setObjectName("ln_fry")
- self.gridLayout_2.addWidget(self.ln_fry, 2, 5, 1, 1)
- self.ln_frz = QtWidgets.QLCDNumber(parent=self.centralwidget)
- self.ln_frz.setSegmentStyle(QtWidgets.QLCDNumber.SegmentStyle.Flat)
- self.ln_frz.setObjectName("ln_frz")
- self.gridLayout_2.addWidget(self.ln_frz, 2, 6, 1, 1)
- self.label_19 = QtWidgets.QLabel(parent=self.centralwidget)
+ self.label_31 = QtWidgets.QLabel(parent=self.g_probe_head)
font = QtGui.QFont()
+ font.setFamily("Noto Sans")
font.setPointSize(15)
- self.label_19.setFont(font)
- self.label_19.setStyleSheet("background-color: pink;")
- self.label_19.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
- self.label_19.setObjectName("label_19")
- self.gridLayout_2.addWidget(self.label_19, 0, 0, 1, 7)
- self.gridLayout_2.setColumnStretch(1, 1)
- self.gridLayout_2.setColumnStretch(2, 1)
- self.gridLayout_2.setColumnStretch(3, 1)
- self.gridLayout_2.setColumnStretch(4, 1)
- self.gridLayout_2.setColumnStretch(5, 1)
- self.gridLayout_2.setColumnStretch(6, 1)
- self.gridLayout.addLayout(self.gridLayout_2, 0, 1, 1, 1)
- self.gridLayout_7 = QtWidgets.QGridLayout()
- self.gridLayout_7.setObjectName("gridLayout_7")
- self.s_sid = QtWidgets.QSlider(parent=self.centralwidget)
- self.s_sid.setEnabled(False)
- self.s_sid.setOrientation(QtCore.Qt.Orientation.Horizontal)
- self.s_sid.setObjectName("s_sid")
- 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, 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.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.label_31.setFont(font)
+ self.label_31.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.label_31.setObjectName("label_31")
+ self.horizontalLayout_7.addWidget(self.label_31)
+ self.b_probe_head_switch = QtWidgets.QPushButton(parent=self.g_probe_head)
+ self.b_probe_head_switch.setText("")
+ self.b_probe_head_switch.setObjectName("b_probe_head_switch")
+ self.horizontalLayout_7.addWidget(self.b_probe_head_switch)
+ self.horizontalLayout_7.setStretch(0, 1)
+ self.verticalLayout_5.addLayout(self.horizontalLayout_7)
+ self.groupBox_3 = QtWidgets.QGroupBox(parent=self.g_probe_head)
+ self.groupBox_3.setTitle("")
+ self.groupBox_3.setObjectName("groupBox_3")
+ self.horizontalLayout_11 = QtWidgets.QHBoxLayout(self.groupBox_3)
+ self.horizontalLayout_11.setObjectName("horizontalLayout_11")
+ self.b_probe_start = QtWidgets.QPushButton(parent=self.groupBox_3)
+ self.b_probe_start.setObjectName("b_probe_start")
+ self.horizontalLayout_11.addWidget(self.b_probe_start)
+ self.b_probe_stop = QtWidgets.QPushButton(parent=self.groupBox_3)
+ self.b_probe_stop.setObjectName("b_probe_stop")
+ self.horizontalLayout_11.addWidget(self.b_probe_stop)
+ self.b_probe_single = QtWidgets.QPushButton(parent=self.groupBox_3)
+ self.b_probe_single.setObjectName("b_probe_single")
+ self.horizontalLayout_11.addWidget(self.b_probe_single)
+ self.b_probe_orig = QtWidgets.QPushButton(parent=self.groupBox_3)
+ self.b_probe_orig.setObjectName("b_probe_orig")
+ self.horizontalLayout_11.addWidget(self.b_probe_orig)
+ self.l_probe_angle = QtWidgets.QLabel(parent=self.groupBox_3)
+ self.l_probe_angle.setObjectName("l_probe_angle")
+ self.horizontalLayout_11.addWidget(self.l_probe_angle)
+ self.verticalLayout_5.addWidget(self.groupBox_3)
+ self.verticalLayout_5.setStretch(1, 1)
+ self.gridLayout.addWidget(self.g_probe_head, 1, 0, 1, 1)
+ self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_4.setObjectName("horizontalLayout_4")
+ self.label = QtWidgets.QLabel(parent=self.centralwidget)
+ self.label.setObjectName("label")
+ self.horizontalLayout_4.addWidget(self.label)
+ self.l_base = QtWidgets.QLineEdit(parent=self.centralwidget)
+ 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.setIconSize(QtCore.QSize(16, 16))
+ self.b_base.setObjectName("b_base")
+ self.horizontalLayout_4.addWidget(self.b_base)
+ self.gridLayout.addLayout(self.horizontalLayout_4, 4, 0, 1, 2)
+ self.gridLayout.setRowStretch(0, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 1158, 30))
+ self.menubar.setGeometry(QtCore.QRect(0, 0, 1238, 30))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
@@ -458,16 +552,18 @@ class Ui_MainWindow(object):
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Scarlet Flandre Control Panel"))
- self.g_device.setTitle(_translate("MainWindow", "Device Status"))
- self.l_online.setText(_translate("MainWindow", "Device Offline"))
+ self.label_30.setText(_translate("MainWindow", "Ultrasound T/R Device Driver"))
self.b_device_connection.setText(_translate("MainWindow", "Connect"))
self.lb_device_connection.setText(_translate("MainWindow", "Disconnected"))
self.lb_device_enable.setText(_translate("MainWindow", "Disabled"))
self.b_device_enable.setText(_translate("MainWindow", "Disconnect"))
self.label_24.setText(_translate("MainWindow", "
Beam
Status
"))
self.label_21.setText(_translate("MainWindow", "Connection
Status
"))
- self.label_20.setText(_translate("MainWindow", "DeviceConfig"))
+ self.label_32.setText(_translate("MainWindow", "current"))
self.c_live_seq_name.setItemText(0, _translate("MainWindow", "Empty"))
+ self.label_20.setText(_translate("MainWindow", "DeviceConfig"))
+ self.b_live_seq_apply.setText(_translate("MainWindow", "Apply"))
+ self.l_live_seq_name.setText(_translate("MainWindow", "Empty"))
self.b_device_zero.setText(_translate("MainWindow", "Zero"))
self.label_14.setText(_translate("MainWindow", "Yal"))
self.label_13.setText(_translate("MainWindow", "Pitch"))
@@ -477,18 +573,10 @@ class Ui_MainWindow(object):
self.label_12.setText(_translate("MainWindow", "Roll"))
self.label_11.setText(_translate("MainWindow", "E"))
self.label_8.setText(_translate("MainWindow", "X"))
- self.label.setText(_translate("MainWindow", "Base Path"))
- self.b_select_base.setText(_translate("MainWindow", "Select"))
- self.b_base.setText(_translate("MainWindow", "Open"))
- self.label_7.setText(_translate("MainWindow", "TextLabel"))
- self.label_2.setText(_translate("MainWindow", "Imaging"))
- self.label_6.setText(_translate("MainWindow", "TextLabel"))
- self.label_15.setText(_translate("MainWindow", "t_start"))
- self.label_5.setText(_translate("MainWindow", "t_end"))
- self.label_27.setText(_translate("MainWindow", "Profile"))
- self.b_new_imaging_config.setText(_translate("MainWindow", "New"))
self.cb_bscan.setText(_translate("MainWindow", "BSCAN"))
self.checkBox.setText(_translate("MainWindow", "FOCUS"))
+ self.g_cap.setTitle(_translate("MainWindow", "Capture Source"))
+ self.g_live.setTitle(_translate("MainWindow", "Live"))
self.label_17.setText(_translate("MainWindow", "RecordName"))
self.b_record.setText(_translate("MainWindow", "Record"))
self.label_18.setText(_translate("MainWindow", "Record Frames:"))
@@ -497,18 +585,9 @@ class Ui_MainWindow(object):
self.l_record_size.setText(_translate("MainWindow", "0"))
self.label_26.setText(_translate("MainWindow", "Max SeqId:"))
self.l_record_max_sid.setText(_translate("MainWindow", "0"))
- self.b_play_live.setText(_translate("MainWindow", "Live"))
- self.b_probe_start.setText(_translate("MainWindow", "Start"))
- self.b_probe_stop.setText(_translate("MainWindow", "Stop"))
- self.l_probe_angle.setText(_translate("MainWindow", "TextLabel"))
- self.b_probe_single.setText(_translate("MainWindow", "Single"))
- self.b_probe_orig.setText(_translate("MainWindow", "Orig"))
- self.label_22.setText(_translate("MainWindow", "Position"))
- self.label_23.setText(_translate("MainWindow", "Force"))
- self.label_19.setText(_translate("MainWindow", "Robot Offline"))
- self.b_play_playback.setText(_translate("MainWindow", "Playback"))
- self.label_16.setText(_translate("MainWindow", "SeqName"))
+ self.g_playback.setTitle(_translate("MainWindow", "Playback"))
self.label_4.setText(_translate("MainWindow", "Frame ID"))
+ self.label_16.setText(_translate("MainWindow", "SeqName"))
self.c_playback_seq_name.setItemText(0, _translate("MainWindow", "Unset"))
self.label26.setText(_translate("MainWindow", "Min:"))
self.l_seq_min.setText(_translate("MainWindow", "0"))
@@ -516,3 +595,22 @@ class Ui_MainWindow(object):
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_23.setText(_translate("MainWindow", "Force"))
+ self.label_22.setText(_translate("MainWindow", "Position"))
+ self.label_19.setText(_translate("MainWindow", "6DOF Cobot"))
+ self.label_7.setText(_translate("MainWindow", "TextLabel"))
+ self.label_2.setText(_translate("MainWindow", "Imaging"))
+ self.label_6.setText(_translate("MainWindow", "TextLabel"))
+ self.label_15.setText(_translate("MainWindow", "t_start"))
+ self.label_5.setText(_translate("MainWindow", "t_end"))
+ self.label_27.setText(_translate("MainWindow", "Profile"))
+ self.b_new_imaging_config.setText(_translate("MainWindow", "New"))
+ self.label_31.setText(_translate("MainWindow", "Probe Head Control"))
+ self.b_probe_start.setText(_translate("MainWindow", "Start"))
+ self.b_probe_stop.setText(_translate("MainWindow", "Stop"))
+ self.b_probe_single.setText(_translate("MainWindow", "Single"))
+ self.b_probe_orig.setText(_translate("MainWindow", "Orig"))
+ self.l_probe_angle.setText(_translate("MainWindow", "TextLabel"))
+ self.label.setText(_translate("MainWindow", "Base Path"))
+ self.b_select_base.setText(_translate("MainWindow", "Select"))
+ self.b_base.setText(_translate("MainWindow", "Open"))
diff --git a/src/ui/Main.ui b/src/ui/Main.ui
index 41561b7..3db0642 100644
--- a/src/ui/Main.ui
+++ b/src/ui/Main.ui
@@ -6,131 +6,179 @@
0
0
- 1158
- 998
+ 1238
+ 999
Scarlet Flandre Control Panel
-
+
-
-
-
- true
+
+
+ #g_us{
+ background: pink;
+border-radius: 7px;
+}
-
- Device Status
-
-
+
-
-
-
-
- 15
-
-
-
- background-color: pink;
-
-
- Device Offline
-
-
- Qt::AlignmentFlag::AlignCenter
-
-
-
- -
-
-
-
-
-
- Connect
+
+
-
+
+
+
+ 15
+
-
-
- -
-
- Disconnected
+ Ultrasound T/R Device Driver
Qt::AlignmentFlag::AlignCenter
- -
-
+
-
+
- Disabled
-
-
- Qt::AlignmentFlag::AlignCenter
+
- -
-
-
- false
-
+
-
+
- Disconnect
-
-
-
- -
-
-
- <html><head/><body><p style="line-height:0.3" align="center">Beam</p><p align="center">Status</p></body></html>
-
-
- Qt::AlignmentFlag::AlignCenter
-
-
-
- -
-
-
- <html><head/><body><p style="line-height:0.3" align="center">Connection</p><p align="center">Status</p></body></html>
-
-
- Qt::AlignmentFlag::AlignCenter
+
-
-
-
-
-
-
- DeviceConfig
-
-
-
- -
-
-
- false
-
-
-
+
+
+ true
+
+
+
+
+
+
-
+
+
-
+
+
+ Connect
+
+
+
+ -
+
+
+ Disconnected
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+
+ -
+
+
+ Disabled
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+
+ -
+
+
+ false
+
+
+ Disconnect
+
+
+
+ -
+
+
+ <html><head/><body><p style="line-height:0.3" align="center">Beam</p><p align="center">Status</p></body></html>
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+
+ -
+
+
+ <html><head/><body><p style="line-height:0.3" align="center">Connection</p><p align="center">Status</p></body></html>
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+
+
+
+ -
+
+
-
+
+
+ current
+
+
+
+ -
+
+
+ false
+
+
-
+
+ Empty
+
+
+
+
+ -
+
+
+ DeviceConfig
+
+
+
+ -
+
+
+ Apply
+
+
+
+ -
+
+
+ Empty
+
+
+
+
+
+ -
+
- Empty
+ Zero
-
-
-
-
-
- -
-
-
- Zero
-
+
+
+
@@ -288,38 +336,421 @@
- -
-
+
-
+
-
-
+
- Base Path
+ BSCAN
+
+
+ true
-
-
+
-
+ FOCUS
-
-
-
- Select
+
+
+ Qt::Orientation::Horizontal
-
-
- -
-
-
- Open
+
+
+ 40
+ 20
+
-
+
+ -
+
+
+ false
+
+
+ Capture Source
+
+
+
-
+
+
+ Live
+
+
+ true
+
+
+ false
+
+
+
-
+
+
-
+
+
+ RecordName
+
+
+
+ -
+
+
+ false
+
+
+
+ -
+
+
+ false
+
+
+ Record
+
+
+
+
+
+ -
+
+
-
+
+
+ Record Frames:
+
+
+
+ -
+
+
+ 0
+
+
+
+ -
+
+
+ Record Size:
+
+
+
+ -
+
+
+ 0
+
+
+
+ -
+
+
+ Max SeqId:
+
+
+
+ -
+
+
+ 0
+
+
+
+
+
+
+
+
+ -
+
+
+ Playback
+
+
+ true
+
+
+ false
+
+
+
-
+
+
-
+
+
+ -
+
+
+ Frame ID
+
+
+
+ -
+
+
+ SeqName
+
+
+
+ -
+
+
+ false
+
+
+ false
+
+
-
+
+ Unset
+
+
+
+
+ -
+
+
+ Qt::Orientation::Horizontal
+
+
+
+
+
+ -
+
+
-
+
+
+ Min:
+
+
+
+ -
+
+
+ 0
+
+
+
+ -
+
+
+ Current:
+
+
+
+ -
+
+
+ 0
+
+
+
+ -
+
+
+ Max:
+
+
+
+ -
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ #g_cobot {
+ background: pink;
+border-radius: 7px;
+}
+
+
+
+
+
+
-
+
+
+
+
+
+
-
+
+
-
+
+
+ 6
+
+
+ QLCDNumber::SegmentStyle::Flat
+
+
+
+ -
+
+
+ QLCDNumber::SegmentStyle::Flat
+
+
+
+ -
+
+
+ QLCDNumber::SegmentStyle::Flat
+
+
+
+ -
+
+
+ QLCDNumber::SegmentStyle::Flat
+
+
+
+ -
+
+
+ 6
+
+
+ QLCDNumber::SegmentStyle::Flat
+
+
+
+ -
+
+
+ 6
+
+
+ QLCDNumber::SegmentStyle::Flat
+
+
+
+ -
+
+
+ QLCDNumber::SegmentStyle::Flat
+
+
+
+ -
+
+
+ 6
+
+
+ QLCDNumber::SegmentStyle::Flat
+
+
+
+ -
+
+
+ Force
+
+
+
+ -
+
+
+ false
+
+
+ QLCDNumber::SegmentStyle::Flat
+
+
+ 0.010000000000000
+
+
+
+ -
+
+
+ QLCDNumber::SegmentStyle::Flat
+
+
+
+ -
+
+
+ 6
+
+
+ QLCDNumber::SegmentStyle::Flat
+
+
+
+ -
+
+
+ 6
+
+
+ QLCDNumber::SegmentStyle::Flat
+
+
+
+ -
+
+
+ Position
+
+
+
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 15
+
+
+
+ 6DOF Cobot
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
-
-
@@ -448,407 +879,128 @@
- -
-
+
-
+
+
+ #g_probe_head {
+ background: pink;
+border-radius: 7px;
+}
+
+
+
+
+
+
-
+
+
-
+
+
+
+ Noto Sans
+ 15
+
+
+
+ Probe Head Control
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+
+ -
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
-
+
+
+ Start
+
+
+
+ -
+
+
+ Stop
+
+
+
+ -
+
+
+ Single
+
+
+
+ -
+
+
+ Orig
+
+
+
+ -
+
+
+ TextLabel
+
+
+
+
+
+
+
+
+
+ -
+
-
-
+
- BSCAN
-
-
- true
+ Base Path
-
-
+
- FOCUS
+
-
-
-
- Qt::Orientation::Horizontal
+
+
+ Select
-
+
+
+ -
+
+
+ Open
+
+
- 40
- 20
+ 16
+ 16
-
-
-
-
- -
-
-
-
-
-
- false
-
- -
-
-
- RecordName
-
-
-
- -
-
-
- false
-
-
- Record
-
-
-
- -
-
-
-
-
-
- Record Frames:
-
-
-
- -
-
-
- 0
-
-
-
- -
-
-
- Record Size:
-
-
-
- -
-
-
- 0
-
-
-
- -
-
-
- Max SeqId:
-
-
-
- -
-
-
- 0
-
-
-
-
-
- -
-
-
- false
-
-
- Live
-
-
-
-
-
- -
-
-
-
-
-
- Start
-
-
-
- -
-
-
- Stop
-
-
-
- -
-
-
- TextLabel
-
-
-
- -
-
-
- Single
-
-
-
- -
-
-
- Orig
-
-
-
-
-
- -
-
-
-
-
-
- 6
-
-
- QLCDNumber::SegmentStyle::Flat
-
-
-
- -
-
-
- 6
-
-
- QLCDNumber::SegmentStyle::Flat
-
-
-
- -
-
-
- 6
-
-
- QLCDNumber::SegmentStyle::Flat
-
-
-
- -
-
-
- 6
-
-
- QLCDNumber::SegmentStyle::Flat
-
-
-
- -
-
-
- Position
-
-
-
- -
-
-
- 6
-
-
- QLCDNumber::SegmentStyle::Flat
-
-
-
- -
-
-
- Force
-
-
-
- -
-
-
- 6
-
-
- QLCDNumber::SegmentStyle::Flat
-
-
-
- -
-
-
- QLCDNumber::SegmentStyle::Flat
-
-
-
- -
-
-
- QLCDNumber::SegmentStyle::Flat
-
-
-
- -
-
-
- false
-
-
- QLCDNumber::SegmentStyle::Flat
-
-
- 0.010000000000000
-
-
-
- -
-
-
- QLCDNumber::SegmentStyle::Flat
-
-
-
- -
-
-
- QLCDNumber::SegmentStyle::Flat
-
-
-
- -
-
-
- QLCDNumber::SegmentStyle::Flat
-
-
-
- -
-
-
-
- 15
-
-
-
- background-color: pink;
-
-
- Robot Offline
-
-
- Qt::AlignmentFlag::AlignCenter
-
-
-
-
-
- -
-
-
-
-
-
- false
-
-
- Qt::Orientation::Horizontal
-
-
-
- -
-
-
- -
-
-
- false
-
-
- Playback
-
-
-
- -
-
-
- SeqName
-
-
-
- -
-
-
- Frame ID
-
-
-
- -
-
-
- false
-
-
- false
-
-
-
-
- Unset
-
-
-
-
- -
-
-
-
-
-
- Min:
-
-
-
- -
-
-
- 0
-
-
-
- -
-
-
- Current:
-
-
-
- -
-
-
- 0
-
-
-
- -
-
-
- Max:
-
-
-
- -
-
-
- 0
-
-
-
-
-
@@ -858,7 +1010,7 @@
0
0
- 1158
+ 1238
30
diff --git a/src/utils/Msg.py b/src/utils/Msg.py
index 7cd52dc..dd203ea 100644
--- a/src/utils/Msg.py
+++ b/src/utils/Msg.py
@@ -10,6 +10,7 @@ from utils.RfMeta import RfFrameMeta
class BG(Enum):
Msg1 = auto()
Msg2 = auto()
+ RefreshDeviceMsg = auto()
BMMsg = auto()
TickMsg = auto()
KillMsg = auto()
@@ -17,6 +18,7 @@ class BG(Enum):
MoveAxisMsg = auto()
ImageArgMsg = auto()
SetSeqMetaMsg = auto()
+ SeqMetaMsg = auto()
SeqIdMinMax = auto()
SetBaseMsg = auto()
SeqListMsg = auto()
@@ -43,6 +45,8 @@ class BG(Enum):
MidiMsg = auto()
JoystickMsg = auto()
DeviceZero = auto()
+ SetDeviceSwitchMsg = auto()
+ DeviceSwitchMsg = auto()
class Msg:
@@ -83,6 +87,8 @@ class Msg1(Msg):
a: int = 0
b: int = 1
+class RefreshDeviceMsg(Msg):
+ pass
@dataclasses.dataclass
class KillMsg(Msg):
@@ -143,9 +149,10 @@ class SetRecordMsg(Msg):
commit: str = ''
base: str = ''
-
-class SetDeviceConfigMsg(StrMsg):
- pass
+@dataclasses.dataclass
+class SetDeviceConfigMsg(Msg):
+ name:str
+ txt:str
class SetBaseMsg(StrMsg):
@@ -171,6 +178,10 @@ class SetSeqMetaMsg(Msg):
target: str
name: str
+@dataclasses.dataclass
+class SeqMetaMsg(Msg):
+ target: str
+ name: str
@dataclasses.dataclass
class SeqIdMinMax(Msg):
@@ -328,6 +339,14 @@ class JoystickMsg(Msg):
value: float
+class DeviceSwitchMsg(StrMsg):
+ pass
+
+
+class SetDeviceSwitchMsg(BoolMsg):
+ pass
+
+
@dataclasses.dataclass
class RobotRtsiMsg(Msg):
pos: tuple[int, int, int, int, int, int]
diff --git a/src/utils/network.py b/src/utils/network.py
index 6c8a27f..1173a79 100644
--- a/src/utils/network.py
+++ b/src/utils/network.py
@@ -1,4 +1,6 @@
import socket
+import subprocess
+
def check_port(host, port):
try:
@@ -12,4 +14,16 @@ def check_port(host, port):
return False
except socket.error as e:
print(f"连接过程中发生错误: {e}")
- return False
\ No newline at end of file
+ return False
+
+# def c2():
+# code = subprocess.run(['curl', '-m', '1', f'http://{LIVE_REP_SOCKET}'], stderr=subprocess.DEVNULL,
+# stdout=subprocess.DEVNULL).returncode
+# logger.debug(f'detect curl code: {code}')
+# match code:
+# case 28 | 7:
+# self.send(DeviceOnlineMsg(False))
+# return False
+# case _:
+# self.send(DeviceOnlineMsg(True))
+# return True
\ No newline at end of file
diff --git a/test/kdemain.py b/test/kdemain.py
index dc58c80..d1b02da 100644
--- a/test/kdemain.py
+++ b/test/kdemain.py
@@ -9,6 +9,7 @@ from nodes.ImageCV import ImageCV
from nodes.ImageFFMPEG import ImageFFMPEG
from nodes.JoyStick import Joystick
from nodes.Loader import Loader
+from nodes.Mi import Mi
from nodes.Midi import Midi
from nodes.Monitor import Monitor
from nodes.Muxer import Muxer
@@ -25,17 +26,18 @@ if __name__ == '__main__':
ps = [
Broker(),
kde_pyqt6_mainui,
- Device(level=logging.DEBUG),
- # ImageFFMPEG(),
+ Device(),
+ ImageFFMPEG(),
ImageCV(level=logging.DEBUG),
Beamformer(level=logging.DEBUG),
Loader(),
Muxer(level=logging.DEBUG),
- Midi(),
+ # Midi(),
# Joystick(),
Robot(),
Recorder(),
# Monitor(),
+ Mi(),
]
for p in ps:
pps.append(multiprocessing.Process(target=p))
diff --git a/test/testDevice.py b/test/testDevice.py
index a0d4515..70ef186 100644
--- a/test/testDevice.py
+++ b/test/testDevice.py
@@ -23,8 +23,9 @@ def test2():
# d.setfile(Path('/home/lambda/source/scarlet/flandre/config/device/AA256,U=30,M=PWI,S=(256 1502).txt').read_text())
# time.sleep(2)
while True:
- d.data()
- print(1)
+ r = d.get_data()
+ print(r.__len__())
+ break
# d.disable()
# d.disconnect()
diff --git a/test/testrobotremotecontrol.py b/test/testrobotremotecontrol.py
new file mode 100644
index 0000000..573bb9a
--- /dev/null
+++ b/test/testrobotremotecontrol.py
@@ -0,0 +1,23 @@
+import socket
+from time import sleep
+
+
+def send_message(message: str, host='11.6.1.53', port=29999):
+ # Create a TCP/IP socket
+ client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+
+ # Connect to the server
+ client_socket.connect((host, port))
+
+ try:
+ # Send the message
+ client_socket.sendall(message.encode())
+ print(f"Sent: {message}")
+ finally:
+ # Close the socket
+ client_socket.close()
+
+
+if __name__ == "__main__":
+ # send_message('remoteControl -on\nplay\nremoteControl -off\n')
+ send_message('remoteControl -on\nstop\nremoteControl -off\n')