add direct path

This commit is contained in:
remilia 2025-04-16 21:31:44 +08:00
parent 0010fe0cd6
commit bc776418a1

View File

@ -2,10 +2,12 @@ import logging
import struct
import time
from pathlib import Path
from threading import Thread
import zmq
from flandre.config import C
from flandre.nodes.Device import Device, DeviceCmd
from flandre.nodes.Node import Node
from flandre.utils.Msg import ImageArgMsg, KillMsg, SetSeqMetaMsg, SetPlayMode, SetDeviceConfigMsg, \
ImagingConfigNameListMsg, BeamformerMsg, RobotRtsiMsg, SeqMetaMsg, DeviceEnabledMsg, RfFrameMsg
@ -24,20 +26,28 @@ class Muxer(Node):
self.seq_meta = None
self.seq_meta_live: RfSequenceMeta = None
self.seq_meta_playback = None
self.play_mode = None
self.play_mode: str | None = None
self.rep_socket: zmq.Socket = None
self.req_driver_socket: zmq.Socket = None
self.playback_rf_msg: RfFrameMsg | None = None
self.device_enabled = False
self.driver_data_raw = b''
self.run_p_thread = True
def custom_setup(self):
self.rep_socket: zmq.Socket = self.c.ctx.socket(zmq.REP)
self.rep_socket.bind(f'tcp://localhost:{C.muxer_rep_port}')
self.req_driver_socket: zmq.Socket = self.c.ctx.socket(zmq.REQ)
self.req_driver_socket.connect(C.driver_rep_socket)
# self.req_driver_socket.connect(C.driver_rep_socket)
self.req_driver_socket.connect(C.live_rep_socket)
self.c.poller.register(self.rep_socket, zmq.POLLIN)
def p_thread(self):
while self.run_p_thread:
if self.play_mode == 'live':
self.req_driver_socket.send(struct.pack('i', Device.magic) + struct.pack('i', DeviceCmd.GetData.value))
self.driver_data_raw = self.req_driver_socket.recv()
def handle_rep_socket(self):
self.rep_socket.recv()
if self.play_mode is None:
@ -55,8 +65,8 @@ class Muxer(Node):
self.rep_socket.send(BeamformerMsg(b'init').encode_msg())
logger.warning('Device not enabled')
return
self.req_driver_socket.send(b'')
self.driver_data_raw = self.req_driver_socket.recv()
# self.req_driver_socket.send(b'')
# self.driver_data_raw = self.req_driver_socket.recv()
if self.driver_data_raw == b'':
# todo fixit driver no empty
self.rep_socket.send(BeamformerMsg(b'nop').encode_msg())
@ -94,6 +104,7 @@ class Muxer(Node):
).encode_msg())
def loop(self):
t = Thread(target=self.p_thread).start()
self.rtsi = RobotRtsiMsg(
pos=(0, 0, 0, 0, 0, 0),
force=(0, 0, 0, 0, 0, 0),
@ -113,6 +124,7 @@ class Muxer(Node):
if k == self.c.sub:
msg = self.recv()
if isinstance(msg, KillMsg):
self.run_p_thread = False
if msg.name == '':
return
elif isinstance(msg, RfFrameMsg):