''' Momentan nur Idee Verarbeiten von Frames Nur Empfang von Paketen / Frames - single - fast - transport fast packets können parallel von mehreren Quellen verarbeitet werden ''' import math class FpReceiver(): def __init__(self): self.sc0 = {} self.nf = {} self.frame = {} self.wip = [] def receive(self, data, source) ''' Liefert True wenn Paket komplett empfangen wurde ''' sc = (data[0] & 0xf0) >> 5 fc = data[0] & 0x1f if not source in self.wip: # Erster Frame if fc != 0: # unbekannte Herkunft und kein Startframe continue self.sc0[source] = sc datalen = data[1] self.nf[source] = math.ceil((datalen - 6) / 7) + 1 # Anzahl Frames self.frame[source] = {fc : data[2:]} # Ersten Frame merken else: # Folgeframes if (sc == self.sc0[source]): # TODO prüfe ob der Framecounter fc schon vorgekommen ist if not fc in self.frame[source]: self.frame[source][fc] = data[1:8] else: # TODO Fehler im Fast-Packet: doppelter fc! raise('Frame error: duplicate fc') if len(self.frame[source]) == self.nf[source]: self.wip.remove(source) return True return False def getPacket(self, source) # TODO Frames in der richtigen reihenfolge zusammensetzen packet = bytearray() for frame in sorted(self.frame.items()): print(frame) #packet.extend() return packet