12 class packedCom(object):
13 def __init__(self, pd, fmt):
14 """ Initialisiert die Klasse zum Erzeugen des packed string
16 pd : packet descriptor. Spezifische Nummer des Datenpakets.
17 fmt : format string. Gibt die Datenart für jedes Datum als Zeichen
18 an (siehe auch https://docs.python.org/2/library/struct.html)
20 b == int8_t (signed char)
21 B == uint8_t (unsigned char)
23 H == uint16_t (unsigned short)
28 def crc16(self, data):
29 """ Berechnen einer Checksumme.
30 Funktion wird eingesetzt, um eine Checksumme über einen Daten-String
31 zu bilden. Diese ist Bestandteil jedes Datenpaketes welches gesendet
32 oder empfangen wird und dient zum ermitteln einer fehlerhaften
36 data: Zu sendender Datenstring (reine Daten)
39 Die Checksumme als zwei Byte langen String.
43 crc = self.crc_update(crc, ord(x))
44 return struct.pack(
'H', crc & 0xffff)
47 """ Hilfsfunktion für crc16.
49 crc: aktuelle Checksumme
50 data: Einzelnes Zeichen, was der Checksumme hinzugefügt wird.
53 Die aktualisierte Checksumme (als short).
59 return (((data << 8) | ((crc >> 8) & 0xff)) ^ (data >> 4) ^ (data << 3))
61 def getAsString(self, data):
62 """ Konvertiert die aktuellen Daten in einen String
64 data: Daten als Liste. Die Reihenfolge muss mit dem format-string
65 bei der Initialisierung übereinstimmen.
68 Den vollständigen string mit Start- und Endzeichen.
72 for i
in range(len(data)):
73 datastr += struct.pack(self.fmt[i], data[i])
76 sendstr += struct.pack(
'H', len(datastr))
77 sendstr += struct.pack(
'c', chr(self.pd))
79 sendstr += self.crc16(datastr)
85 class comPort(serial.Serial):
87 """ Öffnet das entsprechende ComPort mit den richtigen Einstellungen
90 dev =
"/dev/tucbot/all_usb"
96 opts, args = getopt.getopt(sys.argv[1:],
"r:",
"robot=")
98 if opt
in (
"-r",
"--robot"):
99 dev =
"/dev/tucbot/%s_xbee" % arg
100 print(
"packedCom.py: Using device '%s'" % dev)
103 s = serial.Serial(dev, baudrate=57600, parity=
'N', stopbits=2, \
108 serial.Serial.__init__(self, dev, baudrate=57600, parity=
'N', \
109 stopbits=2, timeout=0.01)