from msg_container import MsgContainer from msg_sink import MsgSink from msg_source import MsgSource from struct import pack class NmeaPacketizer(MsgSink, MsgSource): def __init__(self): MsgSink.__init__(self) MsgSource.__init__(self) self.packet = b'' self.wait_sync = True def on_recv(self, msg: MsgContainer): name = msg.name data = msg.data for n in range (len(data)): d = data[n] if d == 13 or d == 10: timestamp = msg.timestamp self.wait_sync = False if len(self.packet) > 0: self.call_sinks(MsgContainer(name, timestamp, self.packet)) self.wait_sync = True self.packet = b'' elif not self.wait_sync: self.packet += pack('B', d) def is_msg(self, msg: MsgContainer): return True