diff --git a/config/device/AA256,U=30,M=PWI,S=(256 1502).txt b/config/device/AA256,U=30,M=PWI,S=(256 1502).txt index 2e9e02a..a59b332 100644 --- a/config/device/AA256,U=30,M=PWI,S=(256 1502).txt +++ b/config/device/AA256,U=30,M=PWI,S=(256 1502).txt @@ -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 diff --git a/config/device/AAA256,U=80,M=PWI,S=(256 4002).txt b/config/device/AAA256,U=80,M=PWI,S=(256 4002).txt new file mode 100644 index 0000000..e051dc5 --- /dev/null +++ b/config/device/AAA256,U=80,M=PWI,S=(256 4002).txt @@ -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 + diff --git a/pyproject.toml b/pyproject.toml index 0142715..868628d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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", ] diff --git a/src/BusClient.py b/src/BusClient.py index 342fbc4..6adb4f9 100644 --- a/src/BusClient.py +++ b/src/BusClient.py @@ -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}') diff --git a/src/nodes/Beamformer.py b/src/nodes/Beamformer.py index 8607ab8..08f29fd 100644 --- a/src/nodes/Beamformer.py +++ b/src/nodes/Beamformer.py @@ -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): diff --git a/src/nodes/Device.py b/src/nodes/Device.py index 746ea21..8ea31bd 100644 --- a/src/nodes/Device.py +++ b/src/nodes/Device.py @@ -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() diff --git a/src/nodes/JoyStick.py b/src/nodes/JoyStick.py new file mode 100644 index 0000000..16cf783 --- /dev/null +++ b/src/nodes/JoyStick.py @@ -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()() diff --git a/src/nodes/MainUI.py b/src/nodes/MainUI.py index 160719d..d39c1d8 100644 --- a/src/nodes/MainUI.py +++ b/src/nodes/MainUI.py @@ -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 diff --git a/src/nodes/Midi.py b/src/nodes/Midi.py new file mode 100644 index 0000000..7cda2e5 --- /dev/null +++ b/src/nodes/Midi.py @@ -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 diff --git a/src/nodes/Node.py b/src/nodes/Node.py index d7665c9..039b201 100644 --- a/src/nodes/Node.py +++ b/src/nodes/Node.py @@ -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) diff --git a/src/ui/Main.py b/src/ui/Main.py index 23acc0a..73111eb 100644 --- a/src/ui/Main.py +++ b/src/ui/Main.py @@ -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", "
Beam
Status
")) + self.label_21.setText(_translate("MainWindow", "Connection
Status
")) 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", "Beam
Status
")) - 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", "Connection
Status
")) - 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")) diff --git a/src/ui/Main.ui b/src/ui/Main.ui index 4eaf95e..41561b7 100644 --- a/src/ui/Main.ui +++ b/src/ui/Main.ui @@ -7,183 +7,136 @@