This commit is contained in:
remilia 2025-03-23 22:33:55 +08:00
parent 97e6eab5df
commit 253516bb5b
14 changed files with 1475 additions and 863 deletions

View File

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

View File

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

View File

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

View File

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

131
src/nodes/Mi.py Normal file
View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -1,4 +1,6 @@
import socket
import subprocess
def check_port(host, port):
try:
@ -13,3 +15,15 @@ def check_port(host, port):
except socket.error as e:
print(f"连接过程中发生错误: {e}")
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

View File

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

View File

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

View File

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