First commit
This commit is contained in:
61
receiver.py
Normal file
61
receiver.py
Normal file
@@ -0,0 +1,61 @@
|
||||
'''
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user