This commit is contained in:
remilia 2025-03-03 22:22:06 +08:00
parent 1738ae5b48
commit e86ef2f8de
17 changed files with 1253 additions and 654 deletions

View File

@ -9,6 +9,13 @@ DisableUSB3=1
AscanBitSize=14Bits
Enable256=0
SWEncoder1Resolution=1
TriggerMode=Internal
Encoder1A=DigitalInput01
Encoder1B=DigitalInput02
Encoder1Type=Quadrature4Edges
RequestIO=OnCycleOnly
[Cycle:0]
GainDigital=0.000000 dB
BeamCorrection=0.0 dB

View File

@ -0,0 +1,138 @@
[Root]
VersionDriverOEMPA=1.3.0.0
CycleCount=1
EnableFMC=1
FMCElementStart=0
FMCElementStop=255
FMCElementStep=1
DisableUSB3=1
AscanBitSize=14Bits
Enable256=0
[Cycle:0]
GainDigital=0.000000 dB
BeamCorrection=0.0 dB
Start=0.000000 us
Range=80.000000 us
TimeSlot=3987.300000 us
PointFactor=2
CompressionType=Decimation
Rectification=Signed
FilterIndex=0
GainAnalog=40.000000 dB
GateCount=0
[Cycle:0\Pulser]
WedgeDelay=0.0 us
Element.count=256
Element_0=0;1;2;3;4;5;6;7
Element_8=8;9;10;11;12;13;14;15
Element_16=16;17;18;19;20;21;22;23
Element_24=24;25;26;27;28;29;30;31
Element_32=32;33;34;35;36;37;38;39
Element_40=40;41;42;43;44;45;46;47
Element_48=48;49;50;51;52;53;54;55
Element_56=56;57;58;59;60;61;62;63
Element_64=64;65;66;67;68;69;70;71
Element_72=72;73;74;75;76;77;78;79
Element_80=80;81;82;83;84;85;86;87
Element_88=88;89;90;91;92;93;94;95
Element_96=96;97;98;99;100;101;102;103
Element_104=104;105;106;107;108;109;110;111
Element_112=112;113;114;115;116;117;118;119
Element_120=120;121;122;123;124;125;126;127
Element_128=128;129;130;131;132;133;134;135
Element_136=136;137;138;139;140;141;142;143
Element_144=144;145;146;147;148;149;150;151
Element_152=152;153;154;155;156;157;158;159
Element_160=160;161;162;163;164;165;166;167
Element_168=168;169;170;171;172;173;174;175
Element_176=176;177;178;179;180;181;182;183
Element_184=184;185;186;187;188;189;190;191
Element_192=192;193;194;195;196;197;198;199
Element_200=200;201;202;203;204;205;206;207
Element_208=208;209;210;211;212;213;214;215
Element_216=216;217;218;219;220;221;222;223
Element_224=224;225;226;227;228;229;230;231
Element_232=232;233;234;235;236;237;238;239
Element_240=240;241;242;243;244;245;246;247
Element_248=248;249;250;251;252;253;254;255
Delay.count=256;1
Delay_0=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_8=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_16=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_24=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_32=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_40=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_48=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_56=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_64=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_72=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_80=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_88=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_96=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_104=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_112=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_120=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_128=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_136=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_144=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_152=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_160=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_168=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_176=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_184=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_192=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_200=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_208=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_216=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_224=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_232=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_240=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_248=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Width.count=256
Width_0=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_8=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_16=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_24=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_32=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_40=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_48=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_56=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_64=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_72=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_80=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_88=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_96=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_104=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_112=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_120=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_128=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_136=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_144=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_152=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_160=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_168=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_176=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_184=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_192=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_200=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_208=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_216=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_224=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_232=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_240=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
Width_248=0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429;0.071429 us
[Cycle:0\Receiver]
WedgeDelay=0.0 us
Element.count=1
Element=0
Focusing=Standard
Delay.count=1;1
Delay=0.0 us
Gain.count=1
Gain=0.0 dB
FocalTimeOfFlight.count=1
FocalTimeOfFlight=0.0 us

View File

@ -16,4 +16,7 @@ dependencies = [
"vtk>=9.4.0",
"jupyter>=1.1.1",
"python-miio>=0.5.12",
"click>=8.1.8",
"mido[ports-rtmidi]>=1.3.3",
"pyjoystick>=1.2.4",
]

View File

@ -24,6 +24,8 @@ class BusClient:
self.sub = self.ctx.socket(zmq.SUB)
for msg in msgs:
self.sub.setsockopt(zmq.SUBSCRIBE, msg.magic() + msg.eid())
if msgs.__len__() == 0:
self.sub.setsockopt(zmq.SUBSCRIBE, b'')
if conflare:
self.sub.setsockopt(zmq.CONFLATE, 1)
self.sub.connect(f'tcp://127.0.0.1:{self.bp}')

View File

@ -37,7 +37,7 @@ class Beamformer(Node):
time.sleep(1)
while True:
self.send(RequestRfFrameMsg())
r = dict(self.c.poller.poll(1000))
r = dict(self.c.poller.poll(10))
if self.c.sub in r:
msg = self.recv()
if isinstance(msg, BeamformerMsg):

View File

@ -2,6 +2,7 @@ import logging
import struct
import subprocess
import time
from threading import Thread
import zmq
@ -9,14 +10,14 @@ 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
RfFrameWithMetaMsg, DeviceZero
from utils.RfMeta import RfFrameMeta
logger = logging.getLogger(__name__)
class Device(Node):
topics = [SetDeviceConnectedMsg, SetDeviceEnabledMsg, SetDeviceConfigMsg, RequestRfFrameMsg]
topics = [SetDeviceConnectedMsg, SetDeviceEnabledMsg, SetDeviceConfigMsg, RequestRfFrameMsg, DeviceZero]
def __init__(self, level=logging.INFO):
super(Device, self).__init__(level=level)
@ -24,6 +25,12 @@ class Device(Node):
self.seq_meta = None
self.device_rep_socket = None
self.ok = b'ok\x00'
self.loop2_t = None
def loop2(self):
while True:
self.online()
time.sleep(1)
def connect(self):
self.device_rep_socket.send(b'connect')
@ -64,7 +71,7 @@ class Device(Node):
def online(self):
code = subprocess.run(['curl', '-m', '1', f'http://{LIVE_REP_SOCKET}'], stderr=subprocess.DEVNULL,
stdout=subprocess.DEVNULL).returncode
logger.info(f'detect curl code: {code}')
logger.debug(f'detect curl code: {code}')
match code:
case 28 | 7:
self.send(DeviceOnlineMsg(False))
@ -122,9 +129,15 @@ class Device(Node):
self.device_rep_socket.send(b'data')
return self.device_rep_socket.recv()
def zero(self):
self.device_rep_socket.send(b'zero')
return self.device_rep_socket.recv()
def custom_setup(self):
self.device_rep_socket = self.context.socket(zmq.REQ)
self.device_rep_socket.connect(f"tcp://{LIVE_REP_SOCKET}")
self.loop2_t = Thread(target=self.loop2)
self.loop2_t.start()
def loop(self):
arr = []
@ -161,6 +174,9 @@ class Device(Node):
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))
elif isinstance(msg, DeviceZero):
self.zero()

123
src/nodes/JoyStick.py Normal file
View File

@ -0,0 +1,123 @@
import logging
from threading import Thread
import mido
import pyjoystick
import zmq
from mido.backends.rtmidi import Input, Output
from pyjoystick.sdl2 import Key, Joystick, run_event_loop
from nodes.Node import Node
from utils.Msg import KillMsg, Msg, ImageArgMsg, JoystickMsg
logger = logging.getLogger(__name__)
def clamp(x, t):
if -t < x < t:
return 0.0
return x
class Joystick(Node):
def __init__(self, level=logging.INFO):
super(Joystick, self).__init__(level=level)
self.m_input: Input = None
self.m_output: Output = None
self.do_loop = True
self.t_joystick_event_loop: Thread = None
self.isa: zmq.Socket = None
def sendj(self, t=0.1):
d2 = self.d.copy()
self.s2.send_json(dict(
x=clamp(d2['x'], t),
y=clamp(d2['y'], t),
z=clamp(d2['z'], t),
rx=clamp(d2['rx'], t),
ry=clamp(d2['ry'], t),
rz=clamp(d2['rz'], t),
))
def custom_setup(self):
self.isa = self.c.ctx.socket(zmq.PUSH)
self.isa.bind("inproc://midi")
self.s2 = self.c.ctx.socket(zmq.PUSH)
self.s2.connect("tcp://11.6.1.63:5555")
self.t_joystick_event_loop = Thread(target=self.joystick_event_loop)
self.t_joystick_event_loop.start()
self.arg = ImageArgMsg('joystick', 0, 0)
self.arg1 = 0
self.d = dict(
x=0.0,
y=0.0,
z=0.0,
rx=0.0,
ry=0.0,
rz=0.0,
)
self.rz1 = 0
self.rz2 = 0
self.z1 = 0
self.z2 = 0
def joystick_event_loop(self):
def key_received(key: pyjoystick.interface.Key):
msg = JoystickMsg(str(key).replace('-', ''), key.value)
# print(msg)
match msg.key:
case 'Axis 0':
self.d['x'] = -msg.value
case 'Axis 1':
self.d['y'] = msg.value
case 'Axis 4':
self.d['rx'] = -msg.value
case 'Axis 3':
self.d['ry'] = -msg.value
case 'Axis 2':
self.z1 = msg.value
case 'Axis 5':
self.z2 = - msg.value
case 'Button 4':
self.rz1 = - msg.value
case 'Button 5':
self.rz2 = msg.value
self.d['rz'] = float(self.rz1 + self.rz2)
self.d['z'] = float(self.z1 + self.z2)
self.sendj()
# if msg.key == 'Axis 0':
# self.arg1 += msg.value
# self.arg.t_end = int(self.arg1 * 2)
# self.send(self.arg)
run_event_loop(None, None, key_received)
def loop(self):
isb = self.c.ctx.socket(zmq.PULL)
isb.connect("inproc://midi")
self.c.poller.register(isb, zmq.POLLIN)
while True:
p = dict(self.c.poller.poll())
if isb in p:
msg = Msg.decode_msg(isb.recv())
match msg.type:
case 'pitchwheel':
match msg.channel:
case 0:
# print(msg.pitch)
self.send(ImageArgMsg('midi', 0, msg.pitch * 3))
if self.c.sub in p:
msg = self.recv()
if isinstance(msg, KillMsg):
if msg.name == '':
self.do_loop = False
return
if __name__ == '__main__':
Joystick()()

View File

@ -1,10 +1,12 @@
import logging
import platform
import sys
import time
import traceback
from enum import Enum, auto
from pathlib import Path
import zmq
from PyQt6 import QtCore, QtWidgets
from PyQt6.QtCore import QByteArray
from PyQt6.QtWidgets import QMainWindow, QApplication, QFrame, QMessageBox, QFileDialog, QLineEdit
@ -16,7 +18,7 @@ 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
SeqIdList, SetWindowVisibleMsg, SetSidMsg, ImagingConfigNameListMsg, DeviceZero
from utils.RfMeta import RfSequenceMeta
logger = logging.getLogger(__name__)
@ -97,6 +99,24 @@ class Adv(QMainWindow, Ui_MainWindow):
self.b_new_imaging_config.clicked.connect(self.on_new_imaging_config)
self.c_imaging_config.currentIndexChanged.connect(self.on_imaging_config)
self.b_probe_single.clicked.connect(self.on_probe('single'))
self.b_probe_orig.clicked.connect(self.on_probe('orig'))
self.b_probe_start.clicked.connect(self.on_probe('start'))
self.b_probe_stop.clicked.connect(self.on_probe('stop'))
self.b_device_zero.clicked.connect(lambda: self.p.send(DeviceZero()))
def on_probe(self, arg):
def f():
ctx = zmq.Context()
p = ctx.socket(zmq.PUSH)
p.connect('tcp://q1hyb.as:23456')
time.sleep(0.1)
p.send_string(arg)
p.disconnect('tcp://q1hyb.as:23456')
return f
def on_imaging_config(self, i):
name = self.c_imaging_config.itemText(i)
self.p.send(ImageArgMsg.from_path(IMAGING_CONFIG / f'{name}.json'))
@ -322,15 +342,29 @@ class Adv(QMainWindow, Ui_MainWindow):
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, DeviceConfigListMsg):
for name, txt in msg.arr:
self.c_live_seq_name.addItem(name, txt)
elif isinstance(msg, RobotRtsiMsg):
self.l_robot_pos.setText(','.join([f'{v}' for v in msg.pos]))
self.l_robot_force.setText(','.join([f'{v}' for v in msg.force]))
self.ln_x.display(f"{msg.pos[0] / 100:.2f}")
self.ln_y.display(f"{msg.pos[1] / 100:.2f}")
self.ln_z.display(f"{msg.pos[2] / 100:.2f}")
self.ln_rx.display(f"{msg.pos[3] / 1000:.3f}")
self.ln_ry.display(f"{msg.pos[4] / 1000:.3f}")
self.ln_rz.display(f"{msg.pos[5] / 1000:.3f}")
self.ln_fx.display(f"{msg.force[0] / 10:.1f}")
self.ln_fy.display(f"{msg.force[1] / 10:.1f}")
self.ln_fz.display(f"{msg.force[2] / 10:.1f}")
self.ln_frx.display(f"{msg.force[3] / 100:.2f}")
self.ln_fry.display(f"{msg.force[4] / 100:.2f}")
self.ln_frz.display(f"{msg.force[5] / 100:.2f}")
elif isinstance(msg, RecordFrameMsg):
self.record_frame_cnt += 1

66
src/nodes/Midi.py Normal file
View File

@ -0,0 +1,66 @@
import logging
from threading import Thread
from unittest import case
import mido
import zmq
from mido import Message
from mido.backends.rtmidi import Input, Output
from nodes.Node import Node
from utils.Msg import KillMsg, MidiMsg, Msg, ImageArgMsg
logger = logging.getLogger(__name__)
class Midi(Node):
def __init__(self, level=logging.INFO):
super(Midi, self).__init__(level=level)
self.m_input: Input = None
self.m_output: Output = None
self.do_loop = True
self.t_midi_event_loop: Thread = None
self.isa: zmq.Socket = None
def custom_setup(self):
self.isa = self.c.ctx.socket(zmq.PUSH)
self.isa.bind("inproc://midi")
self.m_input: Input = mido.open_input('SMC-Mixer:SMC-Mixer Bluetooth 128:0')
self.m_output: Output = mido.open_output('SMC-Mixer:SMC-Mixer Bluetooth 128:0')
self.t_midi_event_loop = Thread(target=self.midi_event_loop)
self.t_midi_event_loop.start()
def midi_event_loop(self):
while self.do_loop:
midi_msg: Message = self.m_input.receive()
# print(midi_msg)
d = midi_msg.dict()
match d['type']:
case 'pitchwheel':
channel = d['channel']
# 0-127
pitch = int(d['pitch'] / 128) + 64
# pitch_p = int(pitch / 127)
self.isa.send(MidiMsg(type='pitchwheel', channel=channel, pitch=pitch).encode_msg())
def loop(self):
isb = self.c.ctx.socket(zmq.PULL)
isb.connect("inproc://midi")
self.c.poller.register(isb, zmq.POLLIN)
while True:
p = dict(self.c.poller.poll())
if isb in p:
msg = Msg.decode_msg(isb.recv())
match msg.type:
case 'pitchwheel':
match msg.channel:
case 0:
# print(msg.pitch)
self.send(ImageArgMsg('midi', 0, msg.pitch * 3))
if self.c.sub in p:
msg = self.recv()
if isinstance(msg, KillMsg):
if msg.name == '':
self.do_loop = False
return

View File

@ -37,8 +37,9 @@ class Node:
def base_setup(self):
FORMAT = '[%(asctime)s] p%(process)s {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s'
FORMAT = '"%(pathname)s:%(lineno)d" %(levelname)s - %(message)s'
logging.basicConfig(level=self.level, format=FORMAT)
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',)
self.context = zmq.Context()
if self.enable_init:
self.c = BusClient(*([KillMsg] + self.topics), poller=True, conflare=self.conflare)

View File

@ -12,91 +12,68 @@ from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1158, 805)
MainWindow.resize(1158, 998)
self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.gridLayout_3 = QtWidgets.QGridLayout()
self.gridLayout_3.setObjectName("gridLayout_3")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.label_20 = QtWidgets.QLabel(parent=self.centralwidget)
self.label_20.setObjectName("label_20")
self.horizontalLayout.addWidget(self.label_20)
self.c_live_seq_name = QtWidgets.QComboBox(parent=self.centralwidget)
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.gridLayout_3.addLayout(self.horizontalLayout, 3, 0, 1, 4)
self.b_device_enable = QtWidgets.QPushButton(parent=self.centralwidget)
self.b_device_enable.setEnabled(False)
self.b_device_enable.setObjectName("b_device_enable")
self.gridLayout_3.addWidget(self.b_device_enable, 2, 3, 1, 1)
self.b_device_connection = QtWidgets.QPushButton(parent=self.centralwidget)
self.b_device_connection.setObjectName("b_device_connection")
self.gridLayout_3.addWidget(self.b_device_connection, 2, 1, 1, 1)
self.label_24 = QtWidgets.QLabel(parent=self.centralwidget)
self.label_24.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.label_24.setObjectName("label_24")
self.gridLayout_3.addWidget(self.label_24, 1, 2, 2, 1)
self.lb_device_connection = QtWidgets.QLabel(parent=self.centralwidget)
self.lb_device_connection.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.lb_device_connection.setObjectName("lb_device_connection")
self.gridLayout_3.addWidget(self.lb_device_connection, 1, 1, 1, 1)
self.l_online = QtWidgets.QLabel(parent=self.centralwidget)
self.g_device = QtWidgets.QGroupBox(parent=self.centralwidget)
self.g_device.setEnabled(True)
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.gridLayout_3.addWidget(self.l_online, 0, 0, 1, 4)
self.lb_device_enable = QtWidgets.QLabel(parent=self.centralwidget)
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)
self.b_device_connection.setObjectName("b_device_connection")
self.gridLayout_8.addWidget(self.b_device_connection, 1, 1, 1, 1)
self.lb_device_connection = QtWidgets.QLabel(parent=self.g_device)
self.lb_device_connection.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.lb_device_connection.setObjectName("lb_device_connection")
self.gridLayout_8.addWidget(self.lb_device_connection, 0, 1, 1, 1)
self.lb_device_enable = QtWidgets.QLabel(parent=self.g_device)
self.lb_device_enable.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.lb_device_enable.setObjectName("lb_device_enable")
self.gridLayout_3.addWidget(self.lb_device_enable, 1, 3, 1, 1)
self.label_21 = QtWidgets.QLabel(parent=self.centralwidget)
self.gridLayout_8.addWidget(self.lb_device_enable, 0, 3, 1, 1)
self.b_device_enable = QtWidgets.QPushButton(parent=self.g_device)
self.b_device_enable.setEnabled(False)
self.b_device_enable.setObjectName("b_device_enable")
self.gridLayout_8.addWidget(self.b_device_enable, 1, 3, 1, 1)
self.label_24 = QtWidgets.QLabel(parent=self.g_device)
self.label_24.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.label_24.setObjectName("label_24")
self.gridLayout_8.addWidget(self.label_24, 0, 2, 2, 1)
self.label_21 = QtWidgets.QLabel(parent=self.g_device)
self.label_21.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.label_21.setObjectName("label_21")
self.gridLayout_3.addWidget(self.label_21, 1, 0, 2, 1)
self.gridLayout_3.setColumnStretch(1, 1)
self.gridLayout_3.setColumnStretch(3, 1)
self.gridLayout.addLayout(self.gridLayout_3, 0, 0, 1, 1)
self.gridLayout_2 = QtWidgets.QGridLayout()
self.gridLayout_2.setObjectName("gridLayout_2")
self.l_robot_pos = QtWidgets.QLabel(parent=self.centralwidget)
font = QtGui.QFont()
font.setPointSize(15)
self.l_robot_pos.setFont(font)
self.l_robot_pos.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.l_robot_pos.setObjectName("l_robot_pos")
self.gridLayout_2.addWidget(self.l_robot_pos, 1, 1, 1, 1)
self.l_robot_force = QtWidgets.QLabel(parent=self.centralwidget)
font = QtGui.QFont()
font.setPointSize(15)
self.l_robot_force.setFont(font)
self.l_robot_force.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.l_robot_force.setObjectName("l_robot_force")
self.gridLayout_2.addWidget(self.l_robot_force, 2, 1, 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.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.label_19 = QtWidgets.QLabel(parent=self.centralwidget)
font = QtGui.QFont()
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, 2)
self.gridLayout_2.setColumnStretch(1, 1)
self.gridLayout.addLayout(self.gridLayout_2, 0, 1, 1, 1)
self.gridLayout_8.addWidget(self.label_21, 0, 0, 2, 1)
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.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.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.gridLayout_4 = QtWidgets.QGridLayout()
self.gridLayout_4.setObjectName("gridLayout_4")
self.label_14 = QtWidgets.QLabel(parent=self.centralwidget)
@ -179,7 +156,23 @@ class Ui_MainWindow(object):
self.horizontalSlider_8.setOrientation(QtCore.Qt.Orientation.Horizontal)
self.horizontalSlider_8.setObjectName("horizontalSlider_8")
self.gridLayout_4.addWidget(self.horizontalSlider_8, 6, 1, 1, 1)
self.gridLayout.addLayout(self.gridLayout_4, 2, 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.gridLayout_5 = QtWidgets.QGridLayout()
self.gridLayout_5.setObjectName("gridLayout_5")
self.spinBox_3 = QtWidgets.QSpinBox(parent=self.centralwidget)
@ -247,7 +240,158 @@ class Ui_MainWindow(object):
self.horizontalLayout_3.addWidget(self.b_new_imaging_config)
self.horizontalLayout_3.setStretch(1, 1)
self.gridLayout_5.addLayout(self.horizontalLayout_3, 2, 0, 1, 3)
self.gridLayout.addLayout(self.gridLayout_5, 2, 0, 1, 1)
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.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)
font = QtGui.QFont()
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)
@ -299,76 +443,6 @@ class Ui_MainWindow(object):
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.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, 3, 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.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, 4, 0, 1, 2)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1158, 30))
@ -384,20 +458,17 @@ 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.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.c_live_seq_name.setItemText(0, _translate("MainWindow", "Empty"))
self.b_device_enable.setText(_translate("MainWindow", "Disconnect"))
self.b_device_connection.setText(_translate("MainWindow", "Connect"))
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.lb_device_connection.setText(_translate("MainWindow", "Disconnected"))
self.l_online.setText(_translate("MainWindow", "Device Offline"))
self.lb_device_enable.setText(_translate("MainWindow", "Disabled"))
self.label_21.setText(_translate("MainWindow", "<html><head/><body><p style=\"line-height:0.3\" align=\"center\">Connection</p><p align=\"center\">Status</p></body></html>"))
self.l_robot_pos.setText(_translate("MainWindow", "0,0,0,0,0,0"))
self.l_robot_force.setText(_translate("MainWindow", "0,0,0,0,0,0"))
self.label_22.setText(_translate("MainWindow", "Position"))
self.label_23.setText(_translate("MainWindow", "Force"))
self.label_19.setText(_translate("MainWindow", "Robot Offline"))
self.b_device_zero.setText(_translate("MainWindow", "Zero"))
self.label_14.setText(_translate("MainWindow", "Yal"))
self.label_13.setText(_translate("MainWindow", "Pitch"))
self.label_3.setText(_translate("MainWindow", "Probe Position"))
@ -406,6 +477,9 @@ 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"))
@ -413,6 +487,25 @@ class Ui_MainWindow(object):
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.label_17.setText(_translate("MainWindow", "RecordName"))
self.b_record.setText(_translate("MainWindow", "Record"))
self.label_18.setText(_translate("MainWindow", "Record Frames:"))
self.l_record_frames.setText(_translate("MainWindow", "0"))
self.label_25.setText(_translate("MainWindow", "Record Size:"))
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.label_4.setText(_translate("MainWindow", "Frame ID"))
@ -423,17 +516,3 @@ 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.setText(_translate("MainWindow", "Base Path"))
self.b_select_base.setText(_translate("MainWindow", "Select"))
self.b_base.setText(_translate("MainWindow", "Open"))
self.label_17.setText(_translate("MainWindow", "RecordName"))
self.b_record.setText(_translate("MainWindow", "Record"))
self.label_18.setText(_translate("MainWindow", "Record Frames:"))
self.l_record_frames.setText(_translate("MainWindow", "0"))
self.label_25.setText(_translate("MainWindow", "Record Size:"))
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.cb_bscan.setText(_translate("MainWindow", "BSCAN"))
self.checkBox.setText(_translate("MainWindow", "FOCUS"))

View File

@ -7,183 +7,136 @@
<x>0</x>
<y>0</y>
<width>1158</width>
<height>805</height>
<height>998</height>
</rect>
</property>
<property name="windowTitle">
<string>Scarlet Flandre Control Panel</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0">
<layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0,0">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout_3" columnstretch="0,1,0,1">
<item row="3" column="0" colspan="4">
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1">
<item>
<widget class="QLabel" name="label_20">
<property name="text">
<string>DeviceConfig</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="c_live_seq_name">
<property name="enabled">
<bool>false</bool>
</property>
<item>
<widget class="QGroupBox" name="g_device">
<property name="enabled">
<bool>true</bool>
</property>
<property name="title">
<string>Device Status</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="l_online">
<property name="font">
<font>
<pointsize>15</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: pink;</string>
</property>
<property name="text">
<string>Device Offline</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
<item>
<layout class="QGridLayout" name="gridLayout_8" columnstretch="0,1,0,1">
<item row="1" column="1">
<widget class="QPushButton" name="b_device_connection">
<property name="text">
<string>Empty</string>
<string>Connect</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item row="2" column="3">
<widget class="QPushButton" name="b_device_enable">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Disconnect</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="b_device_connection">
<property name="text">
<string>Connect</string>
</property>
</widget>
</item>
<item row="1" column="2" rowspan="2">
<widget class="QLabel" name="label_24">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p style=&quot;line-height:0.3&quot; align=&quot;center&quot;&gt;Beam&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Status&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="lb_device_connection">
<property name="text">
<string>Disconnected</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="0" colspan="4">
<widget class="QLabel" name="l_online">
<property name="font">
<font>
<pointsize>15</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: pink;</string>
</property>
<property name="text">
<string>Device Offline</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLabel" name="lb_device_enable">
<property name="text">
<string>Disabled</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="0" rowspan="2">
<widget class="QLabel" name="label_21">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p style=&quot;line-height:0.3&quot; align=&quot;center&quot;&gt;Connection&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Status&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="lb_device_connection">
<property name="text">
<string>Disconnected</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="lb_device_enable">
<property name="text">
<string>Disabled</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QPushButton" name="b_device_enable">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Disconnect</string>
</property>
</widget>
</item>
<item row="0" column="2" rowspan="2">
<widget class="QLabel" name="label_24">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p style=&quot;line-height:0.3&quot; align=&quot;center&quot;&gt;Beam&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Status&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="0" rowspan="2">
<widget class="QLabel" name="label_21">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p style=&quot;line-height:0.3&quot; align=&quot;center&quot;&gt;Connection&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Status&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1">
<item>
<widget class="QLabel" name="label_20">
<property name="text">
<string>DeviceConfig</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="c_live_seq_name">
<property name="enabled">
<bool>false</bool>
</property>
<item>
<property name="text">
<string>Empty</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QPushButton" name="b_device_zero">
<property name="text">
<string>Zero</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="1">
<layout class="QGridLayout" name="gridLayout_2" columnstretch="0,1">
<item row="1" column="1">
<widget class="QLabel" name="l_robot_pos">
<property name="font">
<font>
<pointsize>15</pointsize>
</font>
</property>
<property name="text">
<string>0,0,0,0,0,0</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="l_robot_force">
<property name="font">
<font>
<pointsize>15</pointsize>
</font>
</property>
<property name="text">
<string>0,0,0,0,0,0</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_22">
<property name="text">
<string>Position</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_23">
<property name="text">
<string>Force</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="label_19">
<property name="font">
<font>
<pointsize>15</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: pink;</string>
</property>
<property name="text">
<string>Robot Offline</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="1">
<item row="3" column="1">
<layout class="QGridLayout" name="gridLayout_4">
<item row="6" column="0">
<widget class="QLabel" name="label_14">
@ -335,7 +288,39 @@
</item>
</layout>
</item>
<item row="2" column="0">
<item row="4" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Base Path</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="l_base">
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="b_select_base">
<property name="text">
<string>Select</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="b_base">
<property name="text">
<string>Open</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="3" column="0">
<layout class="QGridLayout" name="gridLayout_5">
<item row="6" column="2">
<widget class="QSpinBox" name="spinBox_3"/>
@ -463,6 +448,307 @@
</item>
</layout>
</item>
<item row="5" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QCheckBox" name="cb_bscan">
<property name="text">
<string>BSCAN</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox">
<property name="text">
<string>FOCUS</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QGridLayout" name="gridLayout_6">
<item row="1" column="1">
<widget class="QLineEdit" name="l_record_commit">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_17">
<property name="text">
<string>RecordName</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="b_record">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Record</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="3">
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,1,0,1,0,1">
<item>
<widget class="QLabel" name="label_18">
<property name="text">
<string>Record Frames:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="l_record_frames">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_25">
<property name="text">
<string>Record Size:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="l_record_size">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_26">
<property name="text">
<string>Max SeqId:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="l_record_max_sid">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="0" colspan="3">
<widget class="QPushButton" name="b_play_live">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Live</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QPushButton" name="b_probe_start">
<property name="text">
<string>Start</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="b_probe_stop">
<property name="text">
<string>Stop</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="l_probe_angle">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="b_probe_single">
<property name="text">
<string>Single</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="b_probe_orig">
<property name="text">
<string>Orig</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="1">
<layout class="QGridLayout" name="gridLayout_2" columnstretch="0,1,1,1,1,1,1">
<item row="1" column="2">
<widget class="QLCDNumber" name="ln_y">
<property name="digitCount">
<number>6</number>
</property>
<property name="segmentStyle">
<enum>QLCDNumber::SegmentStyle::Flat</enum>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLCDNumber" name="ln_z">
<property name="digitCount">
<number>6</number>
</property>
<property name="segmentStyle">
<enum>QLCDNumber::SegmentStyle::Flat</enum>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLCDNumber" name="ln_x">
<property name="digitCount">
<number>6</number>
</property>
<property name="segmentStyle">
<enum>QLCDNumber::SegmentStyle::Flat</enum>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QLCDNumber" name="ln_ry">
<property name="digitCount">
<number>6</number>
</property>
<property name="segmentStyle">
<enum>QLCDNumber::SegmentStyle::Flat</enum>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_22">
<property name="text">
<string>Position</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QLCDNumber" name="ln_rx">
<property name="digitCount">
<number>6</number>
</property>
<property name="segmentStyle">
<enum>QLCDNumber::SegmentStyle::Flat</enum>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_23">
<property name="text">
<string>Force</string>
</property>
</widget>
</item>
<item row="1" column="6">
<widget class="QLCDNumber" name="ln_rz">
<property name="digitCount">
<number>6</number>
</property>
<property name="segmentStyle">
<enum>QLCDNumber::SegmentStyle::Flat</enum>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLCDNumber" name="ln_fx">
<property name="segmentStyle">
<enum>QLCDNumber::SegmentStyle::Flat</enum>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLCDNumber" name="ln_fy">
<property name="segmentStyle">
<enum>QLCDNumber::SegmentStyle::Flat</enum>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QLCDNumber" name="ln_fz">
<property name="smallDecimalPoint">
<bool>false</bool>
</property>
<property name="segmentStyle">
<enum>QLCDNumber::SegmentStyle::Flat</enum>
</property>
<property name="value" stdset="0">
<double>0.010000000000000</double>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QLCDNumber" name="ln_frx">
<property name="segmentStyle">
<enum>QLCDNumber::SegmentStyle::Flat</enum>
</property>
</widget>
</item>
<item row="2" column="5">
<widget class="QLCDNumber" name="ln_fry">
<property name="segmentStyle">
<enum>QLCDNumber::SegmentStyle::Flat</enum>
</property>
</widget>
</item>
<item row="2" column="6">
<widget class="QLCDNumber" name="ln_frz">
<property name="segmentStyle">
<enum>QLCDNumber::SegmentStyle::Flat</enum>
</property>
</widget>
</item>
<item row="0" column="0" colspan="7">
<widget class="QLabel" name="label_19">
<property name="font">
<font>
<pointsize>15</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: pink;</string>
</property>
<property name="text">
<string>Robot Offline</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="1">
<layout class="QGridLayout" name="gridLayout_7">
<item row="3" column="1">
@ -565,156 +851,6 @@
</item>
</layout>
</item>
<item row="3" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Base Path</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="l_base">
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="b_select_base">
<property name="text">
<string>Select</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="b_base">
<property name="text">
<string>Open</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QGridLayout" name="gridLayout_6">
<item row="1" column="1">
<widget class="QLineEdit" name="l_record_commit">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_17">
<property name="text">
<string>RecordName</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="b_record">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Record</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="3">
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,1,0,1,0,1">
<item>
<widget class="QLabel" name="label_18">
<property name="text">
<string>Record Frames:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="l_record_frames">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_25">
<property name="text">
<string>Record Size:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="l_record_size">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_26">
<property name="text">
<string>Max SeqId:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="l_record_max_sid">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="0" colspan="3">
<widget class="QPushButton" name="b_play_live">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Live</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="4" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QCheckBox" name="cb_bscan">
<property name="text">
<string>BSCAN</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox">
<property name="text">
<string>FOCUS</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">

View File

@ -40,6 +40,9 @@ class BG(Enum):
BytesMsg = auto()
BeamformerMsg = auto()
RequestRfFrameMsg = auto()
MidiMsg = auto()
JoystickMsg = auto()
DeviceZero = auto()
class Msg:
@ -308,6 +311,23 @@ class BeamformerMsg(BytesMsg):
pass
class DeviceZero(Msg):
pass
@dataclasses.dataclass
class MidiMsg(Msg):
type: str
channel: int
pitch: int
@dataclasses.dataclass
class JoystickMsg(Msg):
key: str
value: float
@dataclasses.dataclass
class RobotRtsiMsg(Msg):
pos: tuple[int, int, int, int, int, int]

View File

@ -1,3 +1,4 @@
import click
from miio.miioprotocol import MiIOProtocol
from config import SWITCH1_IP, SWITCH1_TOKEN, SWITCH2_IP, SWITCH2_TOKEN
@ -51,5 +52,38 @@ def c2_connected():
return c2().send('get_properties', [{'did': 'MYDID', 'siid': 2, 'piid': 1}])[0]['value']
@click.group()
def cli():
pass
@cli.command()
@click.argument('name')
def on(name):
if name == 'c1':
c1_connect()
if name == 'c2':
c2_connect()
@cli.command()
@click.argument('name')
def off(name):
if name == 'c1':
c1_disconnect()
if name == 'c2':
c2_disconnect()
@cli.command()
@click.argument('name')
def status(name):
if name == 'c1':
print(c1_connected())
print(c1_power())
if name == 'c2':
print(c2_connected())
if __name__ == '__main__':
print(c2_connect())
cli()

View File

@ -7,7 +7,10 @@ from nodes.Broker import Broker
from nodes.Device import Device
from nodes.ImageCV import ImageCV
from nodes.ImageFFMPEG import ImageFFMPEG
from nodes.JoyStick import Joystick
from nodes.Loader import Loader
from nodes.Midi import Midi
from nodes.Monitor import Monitor
from nodes.Muxer import Muxer
from nodes.Recorder import Recorder
from nodes.Robot import Robot
@ -23,13 +26,16 @@ if __name__ == '__main__':
Broker(),
kde_pyqt6_mainui,
Device(level=logging.DEBUG),
ImageFFMPEG(),
# ImageFFMPEG(),
ImageCV(level=logging.DEBUG),
Beamformer(level=logging.DEBUG),
Loader(),
Muxer(level=logging.DEBUG),
Midi(),
# Joystick(),
Robot(),
Recorder(),
# Monitor(),
]
for p in ps:
pps.append(multiprocessing.Process(target=p))

View File

@ -2,12 +2,35 @@ from miio.miioprotocol import MiIOProtocol
from config import SWITCH1_IP, SWITCH1_TOKEN, SWITCH2_IP, SWITCH2_TOKEN
from miio import Device
from utils.mi import c1_disconnect, c1_connect
# from utils.mi import c1_disconnect, c1_connect, c2_connect
#
# if __name__ == '__main__':
# # m = MiIOProtocol(
# # SWITCH1_IP, SWITCH1_TOKEN,
# # )
# # r = m.send('get_properties', [{'did': 'MYDID', 'siid': 2, 'piid': 1}])
# # print(r[0]['value'])
# c1_connect()
# c2_connect()
import click
@click.group()
def cli():
pass
@cli.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
help='The person to greet.')
def con(count, name):
"""Simple program that greets NAME for a total of COUNT times."""
for x in range(count):
click.echo(f"Hello {name}!")
@cli.command()
def disconnect():
click.echo('Dropped the database')
if __name__ == '__main__':
# m = MiIOProtocol(
# SWITCH1_IP, SWITCH1_TOKEN,
# )
# r = m.send('get_properties', [{'did': 'MYDID', 'siid': 2, 'piid': 1}])
# print(r[0]['value'])
c1_connect()
cli()

209
uv.lock
View File

@ -9,13 +9,6 @@ resolution-markers = [
"sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32'",
]
[manifest]
overrides = [
{ name = "av", marker = "sys_platform != 'linux' and sys_platform != 'win32'", specifier = ">=14.0.0" },
{ name = "av", marker = "sys_platform == 'linux'", path = "av-14.2.0rc1-cp312-cp312-linux_x86_64.whl" },
{ name = "av", marker = "sys_platform == 'win32'", path = "av-14.1.0-cp312-cp312-win_amd64.whl" },
]
[[package]]
name = "aiohappyeyeballs"
version = "2.4.4"
@ -69,46 +62,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/13/e7/e436a0c0eb5127d8b491a9b83ecd2391c6ff7dcd5548dfaec2080a2340fd/aiohttp_cors-0.7.0-py3-none-any.whl", hash = "sha256:0451ba59fdf6909d0e2cd21e4c0a43752bc0703d33fc78ae94d9d9321710193e", size = 27564 },
]
[[package]]
name = "aioice"
version = "0.9.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "dnspython" },
{ name = "ifaddr" },
]
sdist = { url = "https://files.pythonhosted.org/packages/33/b6/e2b0e48ccb5b04fe29265e93f14a0915f416e359c897ae87d570566c430b/aioice-0.9.0.tar.gz", hash = "sha256:fc2401b1c4b6e19372eaaeaa28fd1bd9cbf6b0e412e48625297c53b495eebd1e", size = 40324 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b6/35/d21e48d3ba25d32aba5d142d54c4491376c659dd74d052a30dd25198007b/aioice-0.9.0-py3-none-any.whl", hash = "sha256:b609597a3a5a611e0004ff04772e16aceb881d51c25c0afc4ceac05d5e50024e", size = 24177 },
]
[[package]]
name = "aiortc"
version = "1.9.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aioice" },
{ name = "av", version = "14.1.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" },
{ name = "av", version = "14.2.0rc1", source = { path = "av-14.1.0-cp312-cp312-win_amd64.whl" }, marker = "sys_platform == 'win32'" },
{ name = "av", version = "14.2.0rc1", source = { path = "av-14.2.0rc1-cp312-cp312-linux_x86_64.whl" }, marker = "sys_platform == 'linux'" },
{ name = "cffi" },
{ name = "cryptography" },
{ name = "google-crc32c" },
{ name = "pyee" },
{ name = "pylibsrtp" },
{ name = "pyopenssl" },
]
sdist = { url = "https://files.pythonhosted.org/packages/71/32/e9b01e2271124643e5dc15c273f2bb8155efebf5bc2115407441ac62f4c5/aiortc-1.9.0.tar.gz", hash = "sha256:03faa76d76ef0e5989ac10386898b029369756102217230e2fcd4b029c50b303", size = 1168973 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/93/01/db89910fc4dfb72ca25fd9a41326762a490d93d39d2fc4aac3f86c05857d/aiortc-1.9.0-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:e3e67c1970c2cffacac53c8f161df264efc62b22721c64a621940935028ee087", size = 1216069 },
{ url = "https://files.pythonhosted.org/packages/4c/6d/76ed96521080492c7264eacf73a8cba2202f1ff9f59af1776c5a2532f332/aiortc-1.9.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d893cb3d4ffa0ff4f9bb03a88f0a700cdbcd4c0dc060a46c59a27ccd1c890663", size = 896012 },
{ url = "https://files.pythonhosted.org/packages/8c/87/1f666108764fa5b557bed4f0fd5e2acccd739bb2cca2b766dcacb53e5669/aiortc-1.9.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:176b4eb38d833667f87cf719a7a3e105e25a35b138b30893294418c1c96e38db", size = 1779113 },
{ url = "https://files.pythonhosted.org/packages/32/03/f3233e936f7a81549bd95f33f3d304e2a9211cb35d819d74570c0718b1ac/aiortc-1.9.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44b610f36b8d17123855dfbe915fa6874201765b8a2c7fd9cf72d14cf417740", size = 1896322 },
{ url = "https://files.pythonhosted.org/packages/96/99/6672cf57777801c6ddacc13e1ee07f8c2151d0847a4f81455eeec998eaed/aiortc-1.9.0-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:55505adb31d56cba19a1ef8ad6aa9b727ccdba2a83bfbfb4aa79ef3c472026a6", size = 1918600 },
{ url = "https://files.pythonhosted.org/packages/76/e3/bdb76e7e51bc4fc7a5869597de2effad073ccf5ef14de3aed742d7384107/aiortc-1.9.0-cp38-abi3-win32.whl", hash = "sha256:680b703e35870e301535c930bfe32e7d012224a91ce51531aba45a3124ef07cc", size = 923055 },
{ url = "https://files.pythonhosted.org/packages/6a/df/de098b31a3fbf1117f6d4cb84c14518636054e3c95a9d9f693a1123c95b3/aiortc-1.9.0-cp38-abi3-win_amd64.whl", hash = "sha256:de5e7020cfc2d2d9fb95690926ff2e3b3c30cd4f5f5bc68d5b6756a8eebb686e", size = 1009610 },
]
[[package]]
name = "aiosignal"
version = "1.3.2"
@ -232,43 +185,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2", size = 63001 },
]
[[package]]
name = "av"
version = "14.1.0"
source = { registry = "https://pypi.org/simple" }
resolution-markers = [
"sys_platform == 'darwin'",
"sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32'",
]
sdist = { url = "https://files.pythonhosted.org/packages/c1/8c/8551a53c713424aff5ae1600f17f7407e64761d4eca8854013ee15f2c090/av-14.1.0.tar.gz", hash = "sha256:81a0185af0237016049c2b1560d51d5895ef56763ea7ebab939baa7b6b87e6f7", size = 4049387 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/d0/3f/9fb6a691f52a38917330d7025690445db1aff3eff5887852a44a0728511d/av-14.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d2ca492e369b5628c8a1fc6889c1ac1f66ec8e4b99d2cc2633e7eaf4d2c82e66", size = 22093254 },
{ url = "https://files.pythonhosted.org/packages/af/08/b1de0d440e73b3dfd117cedd2dcbb81eabe601da4ea84aa12d66bc9b3716/av-14.1.0-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:8bf8db92bd986e3278b93bd7ca187bf753bb56d63a0015160fe1d3bba69f30e7", size = 27487693 },
]
[[package]]
name = "av"
version = "14.2.0rc1"
source = { path = "av-14.1.0-cp312-cp312-win_amd64.whl" }
resolution-markers = [
"sys_platform == 'win32'",
]
wheels = [
{ filename = "av-14.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:09b2b76869a38b5f1b7a0808f799c60882ff64ec1e66927e319aafc1b3bf55c0" },
]
[[package]]
name = "av"
version = "14.2.0rc1"
source = { path = "av-14.2.0rc1-cp312-cp312-linux_x86_64.whl" }
resolution-markers = [
"platform_machine == 'aarch64' and sys_platform == 'linux'",
"platform_machine != 'aarch64' and sys_platform == 'linux'",
]
wheels = [
{ filename = "av-14.2.0rc1-cp312-cp312-linux_x86_64.whl", hash = "sha256:09b2b76869a38b5f1b7a0808f799c60882ff64ec1e66927e319aafc1b3bf55c0" },
]
[[package]]
name = "babel"
version = "2.16.0"
@ -542,15 +458,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604 },
]
[[package]]
name = "dnspython"
version = "2.7.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/b5/4a/263763cb2ba3816dd94b08ad3a33d5fdae34ecb856678773cc40a3605829/dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1", size = 345197 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86", size = 313632 },
]
[[package]]
name = "executing"
version = "2.1.0"
@ -589,13 +496,12 @@ version = "0.1.0"
source = { virtual = "." }
dependencies = [
{ name = "aiohttp-cors" },
{ name = "aiortc" },
{ name = "av", version = "14.1.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'linux' and sys_platform != 'win32'" },
{ name = "av", version = "14.2.0rc1", source = { path = "av-14.1.0-cp312-cp312-win_amd64.whl" }, marker = "sys_platform == 'win32'" },
{ name = "av", version = "14.2.0rc1", source = { path = "av-14.2.0rc1-cp312-cp312-linux_x86_64.whl" }, marker = "sys_platform == 'linux'" },
{ name = "click" },
{ name = "cupy-cuda12x" },
{ name = "jupyter" },
{ name = "mido", extra = ["ports-rtmidi"] },
{ name = "opencv-python" },
{ name = "pyjoystick" },
{ name = "pyqt6" },
{ name = "pyqt6-fluent-widgets", extra = ["full"] },
{ name = "python-miio" },
@ -608,13 +514,12 @@ dependencies = [
[package.metadata]
requires-dist = [
{ name = "aiohttp-cors", specifier = ">=0.7.0" },
{ name = "aiortc", specifier = ">=1.9.0" },
{ name = "av", marker = "sys_platform != 'linux' and sys_platform != 'win32'" },
{ name = "av", marker = "sys_platform == 'linux'", path = "av-14.2.0rc1-cp312-cp312-linux_x86_64.whl" },
{ name = "av", marker = "sys_platform == 'win32'", path = "av-14.1.0-cp312-cp312-win_amd64.whl" },
{ name = "click", specifier = ">=8.1.8" },
{ name = "cupy-cuda12x", specifier = ">=13.3.0" },
{ name = "jupyter", specifier = ">=1.1.1" },
{ name = "mido", extras = ["ports-rtmidi"], specifier = ">=1.3.3" },
{ name = "opencv-python", specifier = ">=4.10.0.84" },
{ name = "pyjoystick", specifier = ">=1.2.4" },
{ name = "pyqt6", specifier = ">=6.8.0" },
{ name = "pyqt6-fluent-widgets", extras = ["full"], specifier = ">=1.7.4" },
{ name = "python-miio", specifier = ">=0.5.12" },
@ -674,19 +579,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/c6/c8/a5be5b7550c10858fcf9b0ea054baccab474da77d37f1e828ce043a3a5d4/frozenlist-1.5.0-py3-none-any.whl", hash = "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3", size = 11901 },
]
[[package]]
name = "google-crc32c"
version = "1.6.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/67/72/c3298da1a3773102359c5a78f20dae8925f5ea876e37354415f68594a6fb/google_crc32c-1.6.0.tar.gz", hash = "sha256:6eceb6ad197656a1ff49ebfbbfa870678c75be4344feb35ac1edf694309413dc", size = 14472 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/cf/41/65a91657d6a8123c6c12f9aac72127b6ac76dda9e2ba1834026a842eb77c/google_crc32c-1.6.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ed767bf4ba90104c1216b68111613f0d5926fb3780660ea1198fc469af410e9d", size = 30268 },
{ url = "https://files.pythonhosted.org/packages/59/d0/ee743a267c7d5c4bb8bd865f7d4c039505f1c8a4b439df047fdc17be9769/google_crc32c-1.6.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:62f6d4a29fea082ac4a3c9be5e415218255cf11684ac6ef5488eea0c9132689b", size = 30113 },
{ url = "https://files.pythonhosted.org/packages/25/53/e5e449c368dd26ade5fb2bb209e046d4309ed0623be65b13f0ce026cb520/google_crc32c-1.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c87d98c7c4a69066fd31701c4e10d178a648c2cac3452e62c6b24dc51f9fcc00", size = 32995 },
{ url = "https://files.pythonhosted.org/packages/52/12/9bf6042d5b0ac8c25afed562fb78e51b0641474097e4139e858b45de40a5/google_crc32c-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd5e7d2445d1a958c266bfa5d04c39932dc54093fa391736dbfdb0f1929c1fb3", size = 32614 },
{ url = "https://files.pythonhosted.org/packages/76/29/fc20f5ec36eac1eea0d0b2de4118c774c5f59c513f2a8630d4db6991f3e0/google_crc32c-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:7aec8e88a3583515f9e0957fe4f5f6d8d4997e36d0f61624e70469771584c760", size = 33445 },
]
[[package]]
name = "h11"
version = "0.14.0"
@ -1185,6 +1077,23 @@ dependencies = [
]
sdist = { url = "https://files.pythonhosted.org/packages/7b/64/e1327477189913bba3e8392a3518c4fa2db14644ea2d0d5e243a018d7752/micloud-0.6.tar.gz", hash = "sha256:46c9e66741410955a9daf39892a7e6c3e24514a46bb126e872b1ddcf6de85138", size = 9429 }
[[package]]
name = "mido"
version = "1.3.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "packaging" },
]
sdist = { url = "https://files.pythonhosted.org/packages/23/14/cfda3fe61ce4c0f50a9f707ae02b46cb53211732b2cd4522bf06272848f4/mido-1.3.3.tar.gz", hash = "sha256:1aecb30b7f282404f17e43768cbf74a6a31bf22b3b783bdd117a1ce9d22cb74c", size = 124288 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/fd/28/45deb15c11859d2f10702b32e71de9328a9fa494f989626916db39a9617f/mido-1.3.3-py3-none-any.whl", hash = "sha256:01033c9b10b049e4436fca2762194ca839b09a4334091dd3c34e7f4ae674fd8a", size = 54614 },
]
[package.optional-dependencies]
ports-rtmidi = [
{ name = "python-rtmidi" },
]
[[package]]
name = "mistune"
version = "3.1.0"
@ -1542,18 +1451,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/43/1d/81d59d228381576b92ecede5cd7239762c14001a828bdba30d64896e9778/pycryptodome-3.21.0-cp36-abi3-win_amd64.whl", hash = "sha256:b7aa25fc0baa5b1d95b7633af4f5f1838467f1815442b22487426f94e0d66c53", size = 1812863 },
]
[[package]]
name = "pyee"
version = "12.1.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "typing-extensions" },
]
sdist = { url = "https://files.pythonhosted.org/packages/0a/37/8fb6e653597b2b67ef552ed49b438d5398ba3b85a9453f8ada0fd77d455c/pyee-12.1.1.tar.gz", hash = "sha256:bbc33c09e2ff827f74191e3e5bbc6be7da02f627b7ec30d86f5ce1a6fb2424a3", size = 30915 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/25/68/7e150cba9eeffdeb3c5cecdb6896d70c8edd46ce41c0491e12fb2b2256ff/pyee-12.1.1-py3-none-any.whl", hash = "sha256:18a19c650556bb6b32b406d7f017c8f513aceed1ef7ca618fb65de7bd2d347ef", size = 15527 },
]
[[package]]
name = "pygments"
version = "2.19.1"
@ -1564,21 +1461,16 @@ wheels = [
]
[[package]]
name = "pylibsrtp"
version = "0.10.0"
name = "pyjoystick"
version = "1.2.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "cffi" },
{ name = "pysdl2" },
{ name = "resource-man" },
]
sdist = { url = "https://files.pythonhosted.org/packages/6b/ae/c95199144eed954976223bdce3f94564eb6c43567111aff8048a26a429bd/pylibsrtp-0.10.0.tar.gz", hash = "sha256:d8001912d7f51bd05b4ea3551747930631777fd37892cf3bfe0e541a742e699f", size = 10557 }
sdist = { url = "https://files.pythonhosted.org/packages/cb/0c/8cc48bb0f8e9e8b537e53d416de5c55570a63c84d4b5d8e4086391e543fd/pyjoystick-1.2.4.tar.gz", hash = "sha256:d3d676888d743b9e4aa2845f16f55df7fbbfa30db0ff4f033ace0ee33a8f7d29", size = 1084161 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/1c/d2/ffc24f80e83a54d9b309cdae6b31cf9294b4f3a85ab107827fd272d1e687/pylibsrtp-0.10.0-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6a1121ceea3339e0a84842a4a9da0fcf57cc8f99eb60dbf31a46d978b4170e7c", size = 1704188 },
{ url = "https://files.pythonhosted.org/packages/66/3e/db86a09a5cb290a274f76ce25f4fae3a7e3c4a4dbc64baf7e2aaa57a32bb/pylibsrtp-0.10.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ca1994e73c6857b0a695fdde94cc5ac846c1b0d5d8766255a1dc2db40857f667", size = 2028580 },
{ url = "https://files.pythonhosted.org/packages/21/ab/9b2b5ad2ceaa1660de16e0a2e3c54a2043a9c4a3eef7718930c78dc84e77/pylibsrtp-0.10.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb7640b524544603d07bd4373b04c9582c8cfe41d9789d3f492081f053bed9c1", size = 2484470 },
{ url = "https://files.pythonhosted.org/packages/ab/e6/b0a30e79aa2312834b33f5e9c0ad459fc94e195c610634ee9665fafb1fc8/pylibsrtp-0.10.0-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f13aa945e1dcf8c138bf3d4a6e34056c4c2f69bf9934bc53b320ef14c7317ccc", size = 2078367 },
{ url = "https://files.pythonhosted.org/packages/16/78/9ea0c88490ad4fe9683ddf3bbee702c7a2331e83a333bb3aa52e8d7d909b/pylibsrtp-0.10.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b2ef1c32d1145239dd0fe7b7fbe083334d345df6b4597fc66faf914a32682d9", size = 2134898 },
{ url = "https://files.pythonhosted.org/packages/00/f6/c76fa5401f9d95c14db70de0cf4fad922ad61686843bc3e7411178a64bc8/pylibsrtp-0.10.0-cp38-abi3-win32.whl", hash = "sha256:8c6fe2576b2ab13942b47db6c2ffe71f5eb1edc1dc3bdd7283169fecd5249e74", size = 1130881 },
{ url = "https://files.pythonhosted.org/packages/4c/31/85a58625edc0b6967fe0904c9d89d019bcece3f3e3bf775b9151a8cf9d0d/pylibsrtp-0.10.0-cp38-abi3-win_amd64.whl", hash = "sha256:cd965d4b0e9a77b362526cab119f4d9ce39b83f1f20f46c6af8e694b86fa19a7", size = 1448840 },
{ url = "https://files.pythonhosted.org/packages/a5/65/858dc1f7f4c65b9e9c8e769019cb156e6b8b96fd7f2f8f1f6bfef8717d95/pyjoystick-1.2.4-py3-none-any.whl", hash = "sha256:773989a5d796d7f32261d25338d583233ddae9a091c0c13c3fc09d250b0870a9", size = 1185266 },
]
[[package]]
@ -4058,18 +3950,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/68/1a/06e6f8de19505c3807db47962308390e2d15e5729342c8382750a538762c/pyobjc_framework_WebKit-10.3.2-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:efce711d3cbe5ef34620002ae2189b802420e6e2923973ed4c59989443b5499f", size = 44847 },
]
[[package]]
name = "pyopenssl"
version = "24.3.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "cryptography" },
]
sdist = { url = "https://files.pythonhosted.org/packages/c1/d4/1067b82c4fc674d6f6e9e8d26b3dff978da46d351ca3bac171544693e085/pyopenssl-24.3.0.tar.gz", hash = "sha256:49f7a019577d834746bc55c5fce6ecbcec0f2b4ec5ce1cf43a9a173b8138bb36", size = 178944 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/42/22/40f9162e943f86f0fc927ebc648078be87def360d9d8db346619fb97df2b/pyOpenSSL-24.3.0-py3-none-any.whl", hash = "sha256:e474f5a473cd7f92221cc04976e48f4d11502804657a08a989fb3be5514c904a", size = 56111 },
]
[[package]]
name = "pyparsing"
version = "3.2.0"
@ -4161,6 +4041,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/92/af/17a92b67db31a086bd693bf97d98aa2f45427e7982df53f59cdc26899979/PyQt6_sip-13.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:976c7758f668806d4df7a8853f390ac123d5d1f73591ed368bdb8963574ff589", size = 45335 },
]
[[package]]
name = "pysdl2"
version = "0.9.17"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/d7/ff/8704d84ad4d25f0a7bf7912504f64575e432e8d57dfba2fe35f5b2db7e04/pysdl2-0.9.17.tar.gz", hash = "sha256:48c6ef01a4eb123db5f7e46e1a1b565675755b07e615f3fe20a623c94735b52b", size = 775955 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/5d/e2/399ea7900e7510096aeb41439e6f1540bef0bdf7e15cc2d8464e4adb71e8/PySDL2-0.9.17-py3-none-any.whl", hash = "sha256:fe923dbf5c7b27bbc1eb2bf58abfa793f8f13fd7ae8b27b1bc2de49920bcbd41", size = 583137 },
]
[[package]]
name = "python-dateutil"
version = "2.9.0.post0"
@ -4207,6 +4096,19 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/f0/26/3aba8af51a7522ef54b8e0adaa34a8ccf7615e6745aa5ac49dd0e855abbc/python_miio-0.5.12-py3-none-any.whl", hash = "sha256:206ac0d8505aa3c673e101543d0a0e8f0ebe8f19a50ff66edd302c8770813f73", size = 330966 },
]
[[package]]
name = "python-rtmidi"
version = "1.5.8"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/dd/ee/0f91965dcc471714c69df21e5ca3d94dc81411b7dee2d31ff1184bea07c9/python_rtmidi-1.5.8.tar.gz", hash = "sha256:7f9ade68b068ae09000ecb562ae9521da3a234361ad5449e83fc734544d004fa", size = 368130 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/51/27/887b0378e0a907489a07bdeb808fa5ed349675245c6ee14d9f6d00304f96/python_rtmidi-1.5.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5443634597eb340cdec0734f76267a827c2d366f00a6f9195141c78828016ac2", size = 158861 },
{ url = "https://files.pythonhosted.org/packages/4d/ec/57cecde253daab896ce53778520cd41eb062641862ebdb0ee6f97511b1d9/python_rtmidi-1.5.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:29d9c9d9f82ce679fecad7bb4cb79f3a24574ea84600e377194b4cc1baacec0e", size = 153416 },
{ url = "https://files.pythonhosted.org/packages/6f/5b/dc19c53d9d512b74dc2cca3725591cc612b9465645695a0696352a8c8b54/python_rtmidi-1.5.8-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:25f5a5db7be98911c41ca5bebb262fcf9a7c89600b88fd3c207ceafd3101e721", size = 305696 },
{ url = "https://files.pythonhosted.org/packages/f6/92/5a60f56dfb2740e644e932233928947423cd2101895319b331f84527eb31/python_rtmidi-1.5.8-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:cec30924e305f55284594ccf35a71dee7216fd308dfa2dec1b3ed03e6f243803", size = 315579 },
{ url = "https://files.pythonhosted.org/packages/93/46/6af077d262f521ea2bf1ab60b8aad72f34fe6dd55af739176605369d449c/python_rtmidi-1.5.8-cp312-cp312-win_amd64.whl", hash = "sha256:052c89933cae4fca354012d8ca7248f4f9e1e3f062471409d48415a7f7d7e59e", size = 129755 },
]
[[package]]
name = "pytz"
version = "2025.1"
@ -4303,6 +4205,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 },
]
[[package]]
name = "resource-man"
version = "2.2.8"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/1f/ee/8e4c4ae1742c2bf479657dfefb6a481fca23de4ec0b801b291f70317255b/resource_man-2.2.8.tar.gz", hash = "sha256:bf747dd671b7254fd76b7c72aa920942cf9d417eda1ed3ec7baedc075e48e33b", size = 43952 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/f9/78/695d73ac84ac380694a1b8dc5dced7ee0275b27c40676f6b32c052583849/resource_man-2.2.8-py3-none-any.whl", hash = "sha256:93920d33f24eb5158290b183766baef64f334d6d4eacf6a520ac3aef6bfcc23b", size = 44832 },
]
[[package]]
name = "rfc3339-validator"
version = "0.1.4"