AirLAB Protokoll Version 0

Aus LaborWiki
Wechseln zu: Navigation, Suche
AirLAB Protokoll Version 0

Release status: unknown [box doku]

Description {{{description}}}




Damit die verschiedenen Devices auch vernünftig miteinander plaudern können, muss ein Protokoll her.

Das Protokoll ist so simpel wie möglich: Zwei Bytes am Anfang eines jeden Datenpaketes stehen für Typ und Länge des Paketes. Der Pakettyp gibt (wer hätte das gedacht?) an, um welche Art von Paket es sich handelt. Das zweite byte gibt die Länge des Payloads an (in Bytes).

Für die Checksummen kann einfach die crc16 funktion der avr libc benutzt werden. manual hierzu

Pakettypen[Bearbeiten | Quelltext bearbeiten]

Es gibt verschiedene Pakettypen, einige davon sind ganze Unterprotokolle, andere sind einfach nur Daten. Folgende Pakettypen sind festgeschrieben:

0x00 - Daten[Bearbeiten | Quelltext bearbeiten]

Ein einfaches Datenbyte ohne Checksumme oder sonstigen Schnickschnack.

0x01 - Daten + CRC16 Checksumme[Bearbeiten | Quelltext bearbeiten]

Ein Datenpaket, dessen letztes Byte eine CRC16 Checksumme der anderen Payload Bytes ist.

0x1* - Adressbasierte Protokolle (8bit)[Bearbeiten | Quelltext bearbeiten]

Die ersten 2 Byte des Payloads sind Quell- und Zieladressen.

 +----+----+----+----+----- ...
 |0x1*|len |src |tgt | payload
 +----+----+----+----+----- ...

Die Adressaushandlung erfolgt via Ping. Ein neu gebooteter client gibt sich zunächst die Adresse 0x00 und sendet min. 10 Pakete an die Wunschadresse. Wenn keine Antwort kommt, nimmt sich der client die Adresse.

Management[Bearbeiten | Quelltext bearbeiten]

0x10, 0x11 Ping & Pong[Bearbeiten | Quelltext bearbeiten]

Das erste Byte des Payloads gibt an, ob es sich um ein Ping oder Pong Paket handelt. 0x00 ist ein Ping, 0x01 ist ein Pong. Der Rest des Payloads wird einfach in das Antwortpaket kopiert.

0x12 Ack[Bearbeiten | Quelltext bearbeiten]

Empfangsbestätigung für ein Paket. Der übrige Payload ist die Sequenznummer.

0x13 Retransmission request[Bearbeiten | Quelltext bearbeiten]

Anfrage, ein korruptes Paket nochmals zu senden.

0x14 Nameservice: Who has ...?[Bearbeiten | Quelltext bearbeiten]

Dieses Paket dient zur Namensauflösung vollständiger ASCII Namen. Das erste Byte des Payloads gibt an, ob es sich um ein Antwort- oder Request Paket handelt: 0x00 == Request, 0x01 == Reply.

Der folgende Payload ist dann die Anfage, bzw. Antwort.

0x18 - Checksumme + Daten[Bearbeiten | Quelltext bearbeiten]

Datenpaket mit Quell- und Zieladresse. Das letzte Byte des Payloads ist die CRC16-Checksumme des gesamten Paketes (inkl. type- und len field.)

0x19 - Checksumme + Daten + Seqnum[Bearbeiten | Quelltext bearbeiten]

Wie 0x18, jedoch mit zusätzlicher 8-Byte Sequenznummer.

0x1A - Checksumme + Daten + Seqnum - must-ACK[Bearbeiten | Quelltext bearbeiten]

Wie 0x19, jedoch muss jedes Paket bestätigt werden.

0xE* - Experimentierecke[Bearbeiten | Quelltext bearbeiten]

Diese Protokolltypen sind zum experimentieren gedacht.

0xF* - Reserviert[Bearbeiten | Quelltext bearbeiten]

Reserviert für Erweiterungen oder für den Tag, an dem uns die Protokolltypen ausgehen.