from msg.container import MsgContainer from msg.talker import MsgTalker from msg.listener import MsgListener from struct import pack class NmeaPacketizer(MsgListener, MsgTalker): def __init__(self): MsgListener.__init__(self) MsgTalker.__init__(self) self.packet = b'' self.wait_sync = True def is_msg(self, msg: MsgContainer): return True def on_recv(self, msg: MsgContainer): for d in msg.data: if d == 13 or d == 10: self.wait_sync = False if len(self.packet) > 0: self.call_listener(MsgContainer(self.packet, msg.source)) self.wait_sync = True self.packet = b'' elif not self.wait_sync: self.packet += pack('B', d)