from msg.container import MsgContainer from msg.talker import MsgTalker from stream.listener import StreamListener from struct import pack import time class NmeaPacketizer(StreamListener, MsgTalker): def __init__(self, name: str): StreamListener.__init__(self) MsgTalker.__init__(self) self.name = name self.packet = b'' self.wait_sync = True def on_recv(self, rx_data: bytes): for d in rx_data: if d == 13 or d == 10: self.wait_sync = False if len(self.packet) > 0: self.call_listener(MsgContainer(self.name, time.time(), self.packet)) self.wait_sync = True self.packet = b'' elif not self.wait_sync: self.packet += pack('B', d)