diff --git a/config/device/max-256-100,U=100,M=PWI,S=(256 5002).txt b/config/device/max-256-100,U=100,M=PWI,S=(256 5002).txt
new file mode 100644
index 0000000..46c286d
--- /dev/null
+++ b/config/device/max-256-100,U=100,M=PWI,S=(256 5002).txt
@@ -0,0 +1,145 @@
+[Root]
+VersionDriverOEMPA=1.3.0.1
+CycleCount=1
+EnableFMC=1
+FMCElementStart=0
+FMCElementStop=255
+FMCElementStep=1
+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
+Start=0.000000 us
+Range=100.000000 us
+TimeSlot=4169.900000 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.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_8=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_16=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_24=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_32=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_40=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_48=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_56=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_64=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_72=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_80=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_88=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_96=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_104=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_112=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_120=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_128=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_136=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_144=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_152=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_160=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_168=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_176=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_184=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_192=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_200=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_208=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_216=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_224=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_232=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_240=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
+Width_248=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 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/config/device/AA256,U=30,M=PWI,S=(256 1502).txt b/config/device/max-256-30,U=30,M=PWI,S=(256 1502).txt
similarity index 100%
rename from config/device/AA256,U=30,M=PWI,S=(256 1502).txt
rename to config/device/max-256-30,U=30,M=PWI,S=(256 1502).txt
diff --git a/config/device/AAA256,U=80,M=PWI,S=(256 4002).txt b/config/device/max-256-80,U=80,M=PWI,S=(256 4002).txt
similarity index 98%
rename from config/device/AAA256,U=80,M=PWI,S=(256 4002).txt
rename to config/device/max-256-80,U=80,M=PWI,S=(256 4002).txt
index e051dc5..0c0ffe5 100644
--- a/config/device/AAA256,U=80,M=PWI,S=(256 4002).txt
+++ b/config/device/max-256-80,U=80,M=PWI,S=(256 4002).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/ARIA64,U=30,M=PWI,S=(64 1501).txt b/config/device/mini-64-30,U=30,M=PWI,S=(64 1501).txt
similarity index 100%
rename from config/device/ARIA64,U=30,M=PWI,S=(64 1501).txt
rename to config/device/mini-64-30,U=30,M=PWI,S=(64 1501).txt
diff --git a/config/device/ARIA641,U=30,M=PWI,S=(64 1501).txt b/config/device/mini-64-30-1,U=30,M=PWI,S=(64 1501).txt
similarity index 100%
rename from config/device/ARIA641,U=30,M=PWI,S=(64 1501).txt
rename to config/device/mini-64-30-1,U=30,M=PWI,S=(64 1501).txt
diff --git a/config/device/A60,U=60,M=PWI,S=(64 3001).txt b/config/device/mini-64-60,U=60,M=PWI,S=(64 3001).txt
similarity index 100%
rename from config/device/A60,U=60,M=PWI,S=(64 3001).txt
rename to config/device/mini-64-60,U=60,M=PWI,S=(64 3001).txt
diff --git a/config/device/A80,U=80,M=PWI,S=(64 4001).txt b/config/device/mini-64-80,U=80,M=PWI,S=(64 4001).txt
similarity index 100%
rename from config/device/A80,U=80,M=PWI,S=(64 4001).txt
rename to config/device/mini-64-80,U=80,M=PWI,S=(64 4001).txt
diff --git a/config/imaging/baby.json b/config/imaging/baby.json
new file mode 100644
index 0000000..169ddb5
--- /dev/null
+++ b/config/imaging/baby.json
@@ -0,0 +1 @@
+{"t_end": 2068, "t_start": 1439, "v2": 1524, "dct_center": 1086, "dct_bandwidth": 915, "f_rows": 3944, "beta": 30}
\ No newline at end of file
diff --git a/config/imaging/baby2.json b/config/imaging/baby2.json
new file mode 100644
index 0000000..d32df6f
--- /dev/null
+++ b/config/imaging/baby2.json
@@ -0,0 +1 @@
+{"t_end": 5002, "t_start": 3239, "v2": 1524, "dct_center": 798, "dct_bandwidth": 857, "f_rows": 4939, "beta": 30}
\ No newline at end of file
diff --git a/flandre/launcher.py b/flandre/launcher.py
index 42928b3..ce7afc9 100644
--- a/flandre/launcher.py
+++ b/flandre/launcher.py
@@ -18,6 +18,7 @@ from flandre.nodes.Robot import Robot
from flandre.nodes.ImageFFMPEG import ImageFFMPEG
from flandre.nodes.ImageQt import ImageQt
from flandre.nodes.Midi import Midi
+from flandre.nodes.Mi import Mi
from flandre.utils.Msg import KillMsg
from flandre.config import CONFIG_FOLDER
@@ -33,6 +34,7 @@ class LaunchComponent(Enum):
ImageFFMPEG = ImageFFMPEG
ImageQt = ImageQt
Midi = Midi
+ Mi = Mi
def launch(arg: dict[LaunchComponent, dict]):
diff --git a/flandre/nodes/Beamformer.py b/flandre/nodes/Beamformer.py
index e2783ba..2becf11 100644
--- a/flandre/nodes/Beamformer.py
+++ b/flandre/nodes/Beamformer.py
@@ -2,6 +2,7 @@ import logging
import time
import cupy as cp
+import cv2
import zmq
from flandre.beamformer.das import gen_pwi
@@ -10,7 +11,7 @@ from flandre.config import C
from flandre.nodes.Node import Node
from flandre.utils.Config import DeviceConfig
from flandre.utils.Msg import ImageArgMsg, Msg, RfFrameWithMetaMsg, BeamformerMsg, \
- SeqMetaMsg, RfMatMsg
+ SeqMetaMsg, RfMatMsg, RGB888Msg
from flandre.utils.RfFile import RfSequenceMeta
from flandre.utils.RfMat import RfMat
@@ -34,17 +35,22 @@ class Beamformer(Node):
return
d2 = (data
# .dct(80, 1500)
- .dct_center(arg.dct_center, arg.dct_bandwidth)
- .call(lambda m: m.astype(cp.int16))
- .call(pwi)
- .call(cp.asarray, order='C')
- .argrelextrema()
- .conv_guass(b=arg.beta * 0.01)
- .crop_center(arg.t_start, arg.t_end)
+ # .dct_center(arg.dct_center, arg.dct_bandwidth)
+ # .call(lambda m: m.astype(cp.int16))
+ # .call(pwi)
+ # .call(cp.asarray, order='C')
+ # .argrelextrema()
+ # .conv_guass(b=arg.beta * 0.01)
+ # .crop_center(arg.t_start, arg.t_end)
.rotate90()
.cpu()
+ .grey()
+ .call(cv2.cvtColor, cv2.COLOR_GRAY2RGB)
+ # .pseudo_color()
)
+ # time.sleep(0.01)
self.send(RfMatMsg(d2))
+ # self.send(RGB888Msg(d2.__bytes__(), d2.w, d2.h))
def loop(self):
time.sleep(1)
@@ -79,5 +85,8 @@ class Beamformer(Node):
last_f_rows = arg_msg.f_rows
dc = DeviceConfig(v2=arg_msg.v2, rows=arg_msg.f_rows)
pwi, _ = gen_pwi(direct_dist(dc), dc)
- if seq_meta.mode == RfSequenceMeta.RfSequenceMode.PWI:
- self.process_pwi(mat, arg_msg, pwi)
+ try:
+ if seq_meta.mode == RfSequenceMeta.RfSequenceMode.PWI:
+ self.process_pwi(mat, arg_msg, pwi)
+ except Exception as e:
+ logger.warning(e)
diff --git a/flandre/nodes/ImageCV.py b/flandre/nodes/ImageCV.py
index 6b42d8a..7343b7a 100644
--- a/flandre/nodes/ImageCV.py
+++ b/flandre/nodes/ImageCV.py
@@ -6,13 +6,14 @@ import zmq
from flandre.config import C
from flandre.nodes.Node import Node
-from flandre.utils.Msg import BMMsg, SetWindowVisibleMsg
+from flandre.utils.Msg import BMMsg, SetWindowVisibleMsg, RfMatMsg
+from flandre.utils.RfMat import RfMat
logger = logging.getLogger(__name__)
class ImageCV(Node):
- topics = [BMMsg, SetWindowVisibleMsg]
+ topics = [BMMsg, SetWindowVisibleMsg, RfMatMsg]
def __init__(self, level=logging.INFO):
super().__init__(level=level)
@@ -29,6 +30,10 @@ class ImageCV(Node):
b = np.frombuffer(msg.data, dtype=np.uint8)
b = np.reshape(b, (C.video_height, C.video_width, 4))
self.buffer = b
+ elif isinstance(msg, RfMatMsg):
+ rfmat: RfMat = msg.rfmat
+ b = rfmat.pseudo_color().m
+ self.buffer = b
elif isinstance(msg, SetWindowVisibleMsg):
if msg.name == 'bscan' and msg.sender != 'cv':
self.show = msg.value
diff --git a/flandre/nodes/ImageQt.py b/flandre/nodes/ImageQt.py
index 7e5a0c4..b7e9d82 100644
--- a/flandre/nodes/ImageQt.py
+++ b/flandre/nodes/ImageQt.py
@@ -11,7 +11,7 @@ from flandre.config import C
from flandre.nodes.Node import Node
from flandre.pyqt.Image import Ui_MainWindow
from flandre.pyqt.ZMQReceiver import ZMQReceiver
-from flandre.utils.Msg import KillMsg, Msg, BMMsg, RfMatMsg, KeyPressMsg
+from flandre.utils.Msg import KillMsg, Msg, BMMsg, RfMatMsg, KeyPressMsg, RGB888Msg
from flandre.utils.RfMat import RfMat
@@ -61,25 +61,16 @@ class Adv(QMainWindow, Ui_MainWindow):
h = msg.rfmat.h
d: RfMat = msg.rfmat
d2 = (d
- .pseudo_color(cond=not self.grey)
- .grey(cond=self.grey)
.resize((int(w * self.zoom), int(h * self.zoom)))
.watermark(cond=self.watermark)
)
w = d2.w
h = d2.h
- if self.grey:
- qImg = QImage(
- d2.__bytes__(),
- w, h, w,
- QImage.Format.Format_Grayscale8
- )
- else:
- qImg = QImage(
- d2.__bytes__(),
- w, h, 3 * w,
- QImage.Format.Format_BGR888
- )
+ qImg = QImage(
+ d2.__bytes__(),
+ w, h, 3 * w,
+ QImage.Format.Format_BGR888
+ )
self.g.setPixmap(QPixmap(qImg))
self.s.setSceneRect(0.0, 0.0, w, h)
if self.scale:
@@ -88,6 +79,38 @@ class Adv(QMainWindow, Ui_MainWindow):
if self.need_fit:
self.graphicsView.fitInView(self.s.sceneRect(), Qt.AspectRatioMode.KeepAspectRatio)
self.need_fit = False
+ # elif isinstance(msg, RGB888Msg):
+ # w = msg.w
+ # h = msg.h
+ # d: RfMat = msg.rfmat
+ # d2 = (d
+ # .resize((int(w * self.zoom), int(h * self.zoom)))
+ # .watermark(cond=self.watermark)
+ # )
+ # w = d2.w
+ # h = d2.h
+ # if self.grey:
+ # qImg = QImage(
+ # d2.__bytes__(),
+ # w, h, w,
+ # QImage.Format.Format_Grayscale8
+ # )
+ # else:
+ # qImg = QImage(
+ # d2.__bytes__(),
+ # w, h, 3 * w,
+ # QImage.Format.Format_BGR888
+ # )
+ # self.g.setPixmap(QPixmap(qImg))
+ # self.s.setSceneRect(0.0, 0.0, w, h)
+ # if self.scale:
+ # self.graphicsView.fitInView(self.s.sceneRect())
+ # else:
+ # if self.need_fit:
+ # self.graphicsView.fitInView(self.s.sceneRect(), Qt.AspectRatioMode.KeepAspectRatio)
+ # self.need_fit = False
+ #
+ # RGB888Msg
class ImageQt(Node):
diff --git a/flandre/nodes/Loader.py b/flandre/nodes/Loader.py
index dc5177d..eeab2ac 100644
--- a/flandre/nodes/Loader.py
+++ b/flandre/nodes/Loader.py
@@ -1,4 +1,5 @@
import logging
+import time
from pathlib import Path
import zmq
diff --git a/flandre/nodes/MainUI.py b/flandre/nodes/MainUI.py
index 83a3158..50e8ea8 100644
--- a/flandre/nodes/MainUI.py
+++ b/flandre/nodes/MainUI.py
@@ -89,7 +89,8 @@ class Adv(QMainWindow, Ui_MainWindow):
self.s_sid.valueChanged.connect(self.on_s_sid)
self.sp_sid.valueChanged.connect(self.on_sp_sid)
self.arg = ImageArgMsg('ui', t_start=0, t_end=1499)
- self.seq_meta: RfSequenceMeta | None = None
+ self.playback_seq_meta: RfSequenceMeta | None = None
+ self.live_seq_meta: RfSequenceMeta | None = None
# self.b_play_live.clicked.connect(self.on_play_live)
# self.b_play_playback.clicked.connect(self.on_play_playback)
@@ -97,10 +98,6 @@ class Adv(QMainWindow, Ui_MainWindow):
self.record = False
self.device_connected = False
self.device_enabled = False
- # self.b_device_enabled.clicked.connect(lambda: self.p.send(SetDeviceEnabledMsg(not self.device_enabled)))
- # self.b_device_connected.clicked.connect(lambda: self.p.send(SetDeviceConnectedMsg(not self.device_connected)))
- # self.c_live_seq_name.currentIndexChanged.connect(self.on_seq_meta)
- self.b_live_seq_apply.clicked.connect(self.on_seq_meta)
self.l_base.textChanged.connect(lambda e:
self.l_base.setStyleSheet("")
if Path(e).exists() else
@@ -201,6 +198,10 @@ class Adv(QMainWindow, Ui_MainWindow):
base = QFileDialog.getExistingDirectory(self, 'Select Base Folder', DS.__str__())
self.l_base.setText(Path(base).__str__())
+ @pyqtSlot()
+ def on_b_test1_clicked(self):
+ logger.info(f'test1 {self.arg}')
+
@pyqtSlot()
def on_b_base_clicked(self):
if Path(self.l_base.text()):
@@ -242,6 +243,8 @@ class Adv(QMainWindow, Ui_MainWindow):
if b:
self.g_playback.setChecked(False)
self.p.send(SetPlayMode('live'))
+ if self.live_seq_meta is not None:
+ self.update_max(max(self.live_seq_meta.shape))
logger.info(f'set playmode live')
@pyqtSlot(bool)
@@ -249,6 +252,8 @@ class Adv(QMainWindow, Ui_MainWindow):
if b:
self.g_live.setChecked(False)
self.p.send(SetPlayMode('playback'))
+ if self.playback_seq_meta is not None:
+ self.update_max(max(self.playback_seq_meta.shape))
logger.info(f'set playmode playback')
def on_device_disable(self):
@@ -336,6 +341,19 @@ class Adv(QMainWindow, Ui_MainWindow):
else:
QMessageBox.warning(None, 'hint', 'Commit is empty!!')
+ def update_max(self, m):
+ self.s_t_start.setMaximum(m)
+ self.s_t_end.setMaximum(m)
+ self.s_dct_center.setMaximum(m)
+ self.s_dct_bandwidth.setMaximum(m)
+ self.s_f_rows.setMaximum(m)
+
+ self.sp_crop_center.setMaximum(m)
+ self.sp_crop_width.setMaximum(m)
+ self.sp_dct_center.setMaximum(m)
+ self.sp_dct_bandwidth.setMaximum(m)
+ self.sp_f_rows.setMaximum(m)
+
def on_zmq_event(self, msg: QByteArray):
try:
msg = Msg.decode_msg(msg.data())
@@ -357,6 +375,7 @@ class Adv(QMainWindow, Ui_MainWindow):
self.sp_crop_center.setValue(msg.t_start)
self.sp_crop_width.setValue(msg.t_end)
self.sp_f_rows.setValue(msg.f_rows)
+
self.sp_v2.setValue(msg.v2)
self.sp_dct_center.setValue(msg.dct_center)
self.sp_dct_bandwidth.setValue(msg.dct_bandwidth)
@@ -387,21 +406,15 @@ class Adv(QMainWindow, Ui_MainWindow):
if msg.value.__len__() > 0:
self.p.send(SetSeqMetaMsg('playback', self.c_playback_seq_name.currentText()))
elif isinstance(msg, SetSeqMetaMsg):
- self.seq_meta = RfSequenceMeta.from_name(msg.name)
- mmax_shape0 = max(self.seq_meta.shape)
-
- self.s_t_start.setMaximum(mmax_shape0)
- self.s_t_end.setMaximum(mmax_shape0)
- self.s_dct_center.setMaximum(mmax_shape0)
- self.s_dct_bandwidth.setMaximum(mmax_shape0)
- self.s_f_rows.setMaximum(mmax_shape0)
-
- self.sp_crop_center.setMaximum(mmax_shape0)
- self.sp_crop_width.setMaximum(mmax_shape0)
- self.sp_dct_center.setMaximum(mmax_shape0)
- self.sp_dct_bandwidth.setMaximum(mmax_shape0)
- self.sp_f_rows.setMaximum(mmax_shape0)
-
+ if msg.target == 'playback':
+ self.playback_seq_meta = RfSequenceMeta.from_name(msg.name)
+ self.update_max(max(self.playback_seq_meta.shape))
+ elif isinstance(msg, SeqMetaMsg):
+ if msg.target == 'live':
+ self.l_live_seq_name.setText(msg.name)
+ self.b_live_seq_apply.setEnabled(True)
+ self.live_seq_meta = RfSequenceMeta.from_name(msg.name)
+ self.update_max(max(self.live_seq_meta.shape))
elif isinstance(msg, DeviceConnectedMsg):
if msg.value:
self.set_device_connection(LinkStatus.GREEN)
@@ -414,19 +427,7 @@ class Adv(QMainWindow, Ui_MainWindow):
else:
self.set_device_enable(LinkStatus.RED)
self.update_device_buttons()
- elif isinstance(msg, SeqMetaMsg):
- if msg.target == 'live':
- self.l_live_seq_name.setText(msg.name)
- self.b_live_seq_apply.setEnabled(True)
- # elif isinstance(msg, DeviceOnlineMsg):
- # if msg.value:
- # # self.l_online.setStyleSheet("")
- # # self.l_online.setText("Device Online")
- # self.g_device.setEnabled(True)
- # else:
- # # self.l_online.setStyleSheet("background-color: pink;")
- # # self.l_online.setText("Device Offline")
- # self.g_device.setEnabled(False)
+
elif isinstance(msg, DeviceConfigListMsg):
for name, txt in msg.arr:
self.c_live_seq_name.addItem(name, txt)
@@ -553,7 +554,8 @@ class Adv(QMainWindow, Ui_MainWindow):
self.p.send(SetSidMsg(v))
# @pyqtSlot(int)
- def on_seq_meta(self):
+ @pyqtSlot()
+ def on_b_live_seq_apply_clicked(self):
v = self.c_live_seq_name.currentIndex()
name = self.c_live_seq_name.currentText()
if name != 'Empty':
diff --git a/flandre/nodes/Mi.py b/flandre/nodes/Mi.py
index 75e4a8c..4aab5e2 100644
--- a/flandre/nodes/Mi.py
+++ b/flandre/nodes/Mi.py
@@ -74,6 +74,10 @@ class Mi(Node):
self.ping60enable = False
time.sleep(10)
+ def start(self):
+ self.device_py_req_socket.send(b'start')
+ self.device_py_req_socket.recv()
+
def loop(self):
if c1_connected() and check_socket(C.device_py_rep_socket):
self.device_py_req_socket.send(b'get_device_status')
diff --git a/flandre/pyqt/Main.py b/flandre/pyqt/Main.py
index 4c28324..1822709 100644
--- a/flandre/pyqt/Main.py
+++ b/flandre/pyqt/Main.py
@@ -12,7 +12,7 @@ from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
- MainWindow.resize(1238, 1017)
+ MainWindow.resize(1238, 1044)
self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
@@ -367,6 +367,9 @@ class Ui_MainWindow(object):
self.checkBox = QtWidgets.QCheckBox(parent=self.centralwidget)
self.checkBox.setObjectName("checkBox")
self.horizontalLayout_6.addWidget(self.checkBox)
+ self.b_test1 = QtWidgets.QPushButton(parent=self.centralwidget)
+ self.b_test1.setObjectName("b_test1")
+ self.horizontalLayout_6.addWidget(self.b_test1)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.horizontalLayout_6.addItem(spacerItem1)
self.gridLayout.addLayout(self.horizontalLayout_6, 5, 0, 1, 2)
@@ -486,6 +489,7 @@ class Ui_MainWindow(object):
self.label_7.setObjectName("label_7")
self.gridLayout_5.addWidget(self.label_7, 6, 0, 1, 1)
self.sp_crop_width = QtWidgets.QSpinBox(parent=self.centralwidget)
+ self.sp_crop_width.setMaximum(9999)
self.sp_crop_width.setObjectName("sp_crop_width")
self.gridLayout_5.addWidget(self.sp_crop_width, 4, 2, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
@@ -497,6 +501,7 @@ class Ui_MainWindow(object):
self.s_t_end.setObjectName("s_t_end")
self.gridLayout_5.addWidget(self.s_t_end, 4, 1, 1, 1)
self.sp_dct_bandwidth = QtWidgets.QSpinBox(parent=self.centralwidget)
+ self.sp_dct_bandwidth.setMaximum(9999)
self.sp_dct_bandwidth.setObjectName("sp_dct_bandwidth")
self.gridLayout_5.addWidget(self.sp_dct_bandwidth, 7, 2, 1, 1)
self.label_5 = QtWidgets.QLabel(parent=self.centralwidget)
@@ -524,9 +529,11 @@ class Ui_MainWindow(object):
self.sp_v2.setObjectName("sp_v2")
self.gridLayout_5.addWidget(self.sp_v2, 5, 2, 1, 1)
self.sp_dct_center = QtWidgets.QSpinBox(parent=self.centralwidget)
+ self.sp_dct_center.setMaximum(9999)
self.sp_dct_center.setObjectName("sp_dct_center")
self.gridLayout_5.addWidget(self.sp_dct_center, 6, 2, 1, 1)
self.sp_f_rows = QtWidgets.QSpinBox(parent=self.centralwidget)
+ self.sp_f_rows.setMaximum(7000)
self.sp_f_rows.setObjectName("sp_f_rows")
self.gridLayout_5.addWidget(self.sp_f_rows, 8, 2, 1, 1)
self.s_f_rows = QtWidgets.QSlider(parent=self.centralwidget)
@@ -559,6 +566,7 @@ class Ui_MainWindow(object):
self.label_2.setObjectName("label_2")
self.gridLayout_5.addWidget(self.label_2, 0, 0, 1, 3)
self.sp_crop_center = QtWidgets.QSpinBox(parent=self.centralwidget)
+ self.sp_crop_center.setMaximum(9999)
self.sp_crop_center.setObjectName("sp_crop_center")
self.gridLayout_5.addWidget(self.sp_crop_center, 3, 2, 1, 1)
self.s_beta = QtWidgets.QSlider(parent=self.centralwidget)
@@ -572,6 +580,7 @@ class Ui_MainWindow(object):
self.label_35.setObjectName("label_35")
self.gridLayout_5.addWidget(self.label_35, 9, 0, 1, 1)
self.sp_beta = QtWidgets.QSpinBox(parent=self.centralwidget)
+ self.sp_beta.setMaximum(9999)
self.sp_beta.setObjectName("sp_beta")
self.gridLayout_5.addWidget(self.sp_beta, 9, 2, 1, 1)
self.gridLayout.addLayout(self.gridLayout_5, 3, 0, 1, 1)
@@ -643,6 +652,7 @@ class Ui_MainWindow(object):
self.l_probe_angle.setText(_translate("MainWindow", "TextLabel"))
self.cb_bscan.setText(_translate("MainWindow", "BSCAN"))
self.checkBox.setText(_translate("MainWindow", "FOCUS"))
+ self.b_test1.setText(_translate("MainWindow", "test1"))
self.label_23.setText(_translate("MainWindow", "Force"))
self.label_22.setText(_translate("MainWindow", "Position"))
self.label_19.setText(_translate("MainWindow", "6DOF Cobot"))
diff --git a/flandre/pyqt/Main.ui b/flandre/pyqt/Main.ui
index a9aca95..75fc892 100644
--- a/flandre/pyqt/Main.ui
+++ b/flandre/pyqt/Main.ui
@@ -7,7 +7,7 @@
0
0
1238
- 1017
+ 1044
@@ -681,6 +681,13 @@ border-radius: 7px;
+ -
+
+
+ test1
+
+
+
-
@@ -910,7 +917,11 @@ border-radius: 7px;
-
-
+
+
+ 9999
+
+
-
@@ -939,7 +950,11 @@ border-radius: 7px;
-
-
+
+
+ 9999
+
+
-
@@ -987,10 +1002,18 @@ border-radius: 7px;
-
-
+
+
+ 9999
+
+
-
-
+
+
+ 7000
+
+
-
@@ -1052,7 +1075,11 @@ border-radius: 7px;
-
-
+
+
+ 9999
+
+
-
@@ -1078,7 +1105,11 @@ border-radius: 7px;
-
-
+
+
+ 9999
+
+
diff --git a/flandre/utils/Msg.py b/flandre/utils/Msg.py
index 5f76240..842fb62 100644
--- a/flandre/utils/Msg.py
+++ b/flandre/utils/Msg.py
@@ -53,6 +53,7 @@ class BG(Enum):
HeaderByteMsg = auto()
RfMatMsg = auto()
KeyPressMsg = auto()
+ RGB888Msg = auto()
class Msg:
@@ -319,6 +320,19 @@ class RfFrameMsg(Msg):
)
+class RGB888Msg(HeaderByteMsg):
+
+ def __init__(self, b: bytes, w: int, h: int):
+ self.w = w
+ self.h = h
+ super().__init__(dict(h=h, w=w), b)
+
+ @classmethod
+ def decode(cls, data) -> 'RGB888Msg':
+ msg = super(RGB888Msg, cls).decode(data)
+ return RGB888Msg(msg.data, msg.header['w'], msg.header['h'])
+
+
class RfMatMsg(HeaderByteMsg):
def __init__(self, rfmat: 'RfMat'):
diff --git a/flandre/utils/RfMat.py b/flandre/utils/RfMat.py
index 5b7ea4c..45cd1c1 100644
--- a/flandre/utils/RfMat.py
+++ b/flandre/utils/RfMat.py
@@ -237,11 +237,12 @@ class RfMat:
color2 = (128, 128, 128)
else:
raise NotImplementedError()
- cv2.putText(canvas, line1, (0, 60), cv2.FONT_HERSHEY_PLAIN, 4, color1, 8)
- cv2.putText(canvas, line1, (0, 60), cv2.FONT_HERSHEY_PLAIN, 4, color2, 4)
+ fontsize = 2
+ cv2.putText(canvas, line1, (0, 60), cv2.FONT_HERSHEY_PLAIN, fontsize, color1, 8)
+ cv2.putText(canvas, line1, (0, 60), cv2.FONT_HERSHEY_PLAIN, fontsize, color2, 4)
- cv2.putText(canvas, line2, (0, 120), cv2.FONT_HERSHEY_PLAIN, 4, color1, 8)
- cv2.putText(canvas, line2, (0, 120), cv2.FONT_HERSHEY_PLAIN, 4, color2, 4)
+ cv2.putText(canvas, line2, (0, 120), cv2.FONT_HERSHEY_PLAIN, fontsize, color1, 8)
+ cv2.putText(canvas, line2, (0, 120), cv2.FONT_HERSHEY_PLAIN, fontsize, color2, 4)
if canvas.shape.__len__() == 2:
ccp.m[canvas == 255] = 255
diff --git a/software.json b/software.json
new file mode 100644
index 0000000..01e8865
--- /dev/null
+++ b/software.json
@@ -0,0 +1,3 @@
+{
+ "base_dir": "/home/lambda/source/scarlet/flandre/@DS"
+}
\ No newline at end of file
diff --git a/test/testdevicegui.py b/test/testdevicegui.py
new file mode 100644
index 0000000..a653084
--- /dev/null
+++ b/test/testdevicegui.py
@@ -0,0 +1,25 @@
+import struct
+import time
+
+import cv2
+import numpy as np
+import zmq
+
+from flandre.config import C
+from flandre.nodes.Device import Device, DeviceCmd
+from flandre.nodes.Mi import Mi
+
+if __name__ == '__main__':
+ context = zmq.Context()
+ req_driver_socket = context.socket(zmq.REQ)
+ req_driver_socket.connect(C.live_rep_socket)
+ magic = 7355608
+ cmd = DeviceCmd.GetData
+ cv2.namedWindow("test", cv2.WINDOW_AUTOSIZE)
+ while True:
+ req_driver_socket.send(struct.pack('i', magic) + struct.pack('i', cmd.value))
+ b = req_driver_socket.recv()
+ arr = np.frombuffer(b, dtype=np.int16, offset=4 + 8 + 4).reshape((256, 5002))
+ cv2.imshow('test', arr)
+ cv2.waitKey(0)
+ # print(b.__len__())