change RfFrameWithMetaMsg

This commit is contained in:
flandre 2025-04-12 21:25:45 +08:00
parent b96ef921f3
commit 7c0623ef43
4 changed files with 63 additions and 22 deletions

View File

@ -1 +1,3 @@
recursive-include flandre *.ui
recursive-include flandre/assets *.png
recursive-include flandre/assets *.svg

View File

@ -26,7 +26,7 @@ class Muxer(Node):
self.play_mode = None
self.rep_socket: zmq.Socket = None
self.req_driver_socket: zmq.Socket = None
self.record_rf_msg: RfFrameWithMetaMsg | None = None
self.playback_rf_msg: RfFrameWithMetaMsg | None = None
self.device_enabled = False
def custom_setup(self):
@ -51,10 +51,10 @@ class Muxer(Node):
return
match self.play_mode:
case 'playback':
if self.record_rf_msg is None:
if self.playback_rf_msg is None:
self.rep_socket.send(BeamformerMsg(b'nop').encode_msg())
return
data_msg = self.record_rf_msg
data_msg = self.playback_rf_msg
case 'live':
if not self.device_enabled:
self.rep_socket.send(BeamformerMsg(b'init').encode_msg())
@ -122,7 +122,7 @@ class Muxer(Node):
msg.encode_msg()
))
elif msg.sender == 1:
self.record_rf_msg = msg
self.playback_rf_msg = msg
elif isinstance(msg, KillMsg):
if msg.name == '':

View File

@ -47,6 +47,7 @@ class BG(Enum):
DeviceZero = auto()
SetDeviceSwitchMsg = auto()
DeviceSwitchMsg = auto()
HeaderByteMsg = auto()
class Msg:
@ -82,14 +83,36 @@ class Msg:
return self.magic() + self.eid() + self.encode()
class HeaderByteMsg(Msg):
header: dict
data: bytes
def __init__(self, header: dict, data: bytes):
self.header = header
self.data = data
def encode(self) -> bytes:
e = json.dumps(self.header).encode()
return struct.pack('I', e.__len__()) + e + self.data
@classmethod
def decode(cls, data: bytes) -> 'HeaderByteMsg':
header_len = struct.unpack('I', data[:4])[0]
header = json.loads(data[4:4 + header_len])
data = data[4 + header_len:]
return HeaderByteMsg(header, data)
@dataclasses.dataclass
class Msg1(Msg):
a: int = 0
b: int = 1
class RefreshDeviceMsg(Msg):
pass
@dataclasses.dataclass
class KillMsg(Msg):
name: str = ''
@ -149,6 +172,7 @@ class SetRecordMsg(Msg):
commit: str = ''
base: str = ''
@dataclasses.dataclass
class SetDeviceConfigMsg(Msg):
name: str
@ -178,11 +202,13 @@ class SetSeqMetaMsg(Msg):
target: str
name: str
@dataclasses.dataclass
class SeqMetaMsg(Msg):
target: str
name: str
@dataclasses.dataclass
class SeqIdMinMax(Msg):
min: int
@ -276,25 +302,29 @@ class RfFrameMsg(Msg):
)
class RfFrameWithMetaMsg(Msg):
SPLIT = struct.pack('I', 114514)
class RfFrameWithMetaMsg(HeaderByteMsg):
@dataclasses.dataclass
class Header:
sender: int
meta: str
def __init__(self, sender: int, meta: RfFrameMeta, data: bytes):
self.sender = sender
self.meta = meta
self.data = data
self._header = self.Header(sender, meta.name)
super().__init__(self._header.__dict__, data)
def encode(self) -> bytes:
return struct.pack('I', self.sender) + self.meta.name.encode() + self.SPLIT + self.data
@property
def sender(self) -> int:
return self._header.sender
@property
def meta(self) -> RfFrameMeta:
return RfFrameMeta.from_name(self._header.meta)
@classmethod
def decode(cls, data: bytes) -> 'RfFrameWithMetaMsg':
id2 = data.index(cls.SPLIT)
return cls(
sender=struct.unpack('I', data[:4])[0],
meta=RfFrameMeta.from_name(data[4:id2].decode()),
data=data[id2 + 4:],
)
def decode(cls, data) -> 'RfFrameWithMetaMsg':
msg = super(RfFrameWithMetaMsg, cls).decode(data)
header = cls.Header(**msg.header)
return RfFrameWithMetaMsg(header.sender, RfFrameMeta.from_name(header.meta), msg.data)
@dataclasses.dataclass
@ -366,3 +396,12 @@ def test():
test()
if __name__ == '__main__':
c = HeaderByteMsg(dict(a=1, b='s'), b'asdasd')
c2 = c.decode(c.encode())
print(c2.header, c2.data)
c = RfFrameWithMetaMsg(1, RfFrameMeta(1, 11, 111), b'asdasdasdads')
c2 = c.decode(c.encode())
print(c2.sender, c2.meta, c2.data)

View File

@ -29,7 +29,7 @@ class RfFrame:
return self.data.read_bytes()
def mat(self, device='gpu'):
from utils.RfMat import RfMat
from flandre.utils.RfMat import RfMat
if device == 'gpu':
arr = cp.frombuffer(self.bytes, dtype=cp.int16)