change RfFrameWithMetaMsg
This commit is contained in:
parent
b96ef921f3
commit
7c0623ef43
@ -1 +1,3 @@
|
||||
recursive-include flandre *.ui
|
||||
recursive-include flandre/assets *.png
|
||||
recursive-include flandre/assets *.svg
|
||||
|
||||
@ -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 == '':
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user