Labor-Octet-Protocol: Unterschied zwischen den Versionen
K (→About: Style&Typo-Foo) |
K (→Escape-Schicht: Style&Typo-Foo) |
||
Zeile 13: | Zeile 13: | ||
==Escape-Schicht== | ==Escape-Schicht== | ||
Um (atomare) Kommandos zu ermöglichen werden einigen Bytes spezielle Kommandos zugeordnet. Um jedoch diese Werte auch im normalen Datenstrom zu | Um (atomare) Kommandos zu ermöglichen, werden einigen Bytes spezielle Kommandos zugeordnet. Um jedoch diese Werte auch im normalen Datenstrom zu übermittlen, findet ein so genanntes [http://de.wikipedia.org/wiki/Maskierungszeichen Escaping] statt. | ||
{|border=1 | {|border=1 |
Version vom 7. Oktober 2008, 00:15 Uhr
In diesem Artikel ist ein Byte ein Oktet, also einem Datenwort der Länge 8 Bit.
About
Das Labor-Octet-Protocol (LOP) stellt sowohl eine nachrichten- als auch eine streamorientierte Möglichkeit der Kommunikation zur Verfügung.
Das Protokoll geht dabei von einer byteorientierten, tieferliegenden Kommunikationsschicht aus und nimmt insbesondere Rücksicht darauf, dass die atomare Übertragungsgröße 8 Bit ist.
Aufbau
Überblick
Escape-Schicht
Um (atomare) Kommandos zu ermöglichen, werden einigen Bytes spezielle Kommandos zugeordnet. Um jedoch diese Werte auch im normalen Datenstrom zu übermittlen, findet ein so genanntes Escaping statt.
Kommandozeichen | Bedeutung |
0x42 | Reset |
0x23 | Escape |
Escape-Sequenz | Daten |
0x23 0x01 | 0x42 |
0x23 0x02 | 0x23 |
0x23 0x03 | 0x11 |
0x23 0x04 | 0x13 |
Die zwei zusätzlichen Escape-Sequenzen ermöglichen ein normales Software-Flowcontrol (XON/XOFF), wie es bei seriellen Leitungen häufig gewünscht ist.
Kommandos
0x42 Reset
0x23 0x14 Message
Die Sequenz 0x23 0x14 leitet eine Message ein. Es folgen zwei Bytes die zusammen die Länge der Nachricht in Bytes angeben, wobei hier die Network-Byteorder zum tragen kommt, d.h. dass erste Längenbyte ist das MSB und wird vom LSB gefolgt. Anschließend werden die Datenbytes der Nachricht übertragen.
0x23 0x15 Stream Sync
Die Sequenz 0x23 0x15 stellt eine besondere Markierung im Datenstrom da, und ist für Synchonisierungszwecke geeignet.
Implementierung
AVR-Mikrocontroller
Eine Implementierung des LOP für AVR-Mikrocontroller ist unter [1] zu finden. Auf Diese Implementierung bezihen sich auch die folgenden Aussagen.
Konzept
Die Nutzung basiert auf dem Umgang mit einem sogenannten LOP-Kontextes, welcher alle Informationen zum Status und zur Verwaltung des Protokolls enthält. Auch sind in diesem Kontext die Adressen jener Funktionen gespeichert, welche bei bestimmten Ereignissen (z.B. eingehende Message, empfangen einer Sync-Sequenz) aufgerufen werden sollen.
Durch die Hinterlegung entsprechender Funktionszeiger wird auch eine gewisse Ereignisorientiertheit implementiert, welche es erlaubt Teile der Anwendung nebenläufig zu implementieren.
Code: LOP-Kontext |
typedef struct lop_ctx { lopstates_t rxstate, txstate, msgretstate; uint32_t msgidx; uint16_t msglength; uint8_t* msgbuffer; uint8_t escaped; void (*sendrawbyte)(uint8_t); /* pointer to the writing function */ void (*on_msgrx)(uint16_t, uint8_t*); /* function called on message recieve */ void (*on_streamrx)(uint8_t); /* function called on recieve of a stream byte*/ void (*on_streamsync)(void); /* function called on recieve of streamsync */ } lop_ctx_t; |