Labor-Octet-Protocol: Unterschied zwischen den Versionen
Bg (Diskussion | Beiträge) (+Anpassung an die Realität +more doku) |
D2ns (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(10 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
In diesem Artikel ist ein Byte ein Oktet, also | {{ProjektInfoBox | ||
|name=Labor Octet Protocol | |||
|status=unknown | |||
|image=LOP-Logo.png | |||
|description=Nachrichten und Stream-Daten über einen seriellen Bytestream übertragen | |||
|tags=Sicherheit und Kryptologie, Protokoll, | |||
}} | |||
In diesem Artikel ist ein Byte ein Oktet, also ein Datenwort der Länge 8 Bit. | |||
=About= | =About= | ||
Das Labor-Octet-Protocol (LOP) stellt sowohl | 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 | 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= | =Aufbau= | ||
Zeile 11: | Zeile 18: | ||
==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 | ||
Zeile 42: | Zeile 49: | ||
=== 0x23 0x14 Message === | === 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 | 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 === | === 0x23 0x15 Stream Sync === | ||
Zeile 49: | Zeile 56: | ||
=Implementierung= | =Implementierung= | ||
==AVR-Mikrocontroller== | ==AVR-Mikrocontroller== | ||
Eine Implementierung des LOP für AVR-Mikrocontroller ist unter [https:// | Eine Implementierung des LOP für AVR-Mikrocontroller ist unter [https://das-labor.org/trac/browser/microcontroller-2/lib/lop] zu finden. | ||
Auf | Auf diese Implementierung beziehen sich auch die folgenden Aussagen. | ||
===Konzept=== | ===Konzept=== | ||
Die Nutzung basiert auf dem Umgang mit einem sogenannten LOP- | Die Nutzung basiert auf dem Umgang mit einem sogenannten LOP-Kontext, 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. | Durch die Hinterlegung entsprechender Funktionszeiger wird auch eine gewisse Ereignisorientiertheit implementiert, welche es erlaubt, Teile der Anwendung nebenläufig zu implementieren. | ||
{{Box Code| LOP-Kontext|<pre> | |||
typedef struct lop_ctx { | typedef struct lop_ctx { | ||
lopstates_t rxstate, txstate, msgretstate; | lopstates_t rxstate, txstate, msgretstate; | ||
Zeile 69: | Zeile 75: | ||
void (*on_streamsync)(void); /* function called on recieve of streamsync */ | void (*on_streamsync)(void); /* function called on recieve of streamsync */ | ||
} lop_ctx_t; | } lop_ctx_t; | ||
</pre>}} |
Aktuelle Version vom 9. April 2017, 16:42 Uhr
Labor Octet Protocol Release status: unknown [box doku] | |
---|---|
Description | Nachrichten und Stream-Daten über einen seriellen Bytestream übertragen |
In diesem Artikel ist ein Byte ein Oktet, also ein Datenwort der Länge 8 Bit.
About[Bearbeiten | Quelltext bearbeiten]
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[Bearbeiten | Quelltext bearbeiten]
Überblick[Bearbeiten | Quelltext bearbeiten]
Escape-Schicht[Bearbeiten | Quelltext bearbeiten]
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[Bearbeiten | Quelltext bearbeiten]
0x42 Reset[Bearbeiten | Quelltext bearbeiten]
0x23 0x14 Message[Bearbeiten | Quelltext bearbeiten]
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[Bearbeiten | Quelltext bearbeiten]
Die Sequenz 0x23 0x15 stellt eine besondere Markierung im Datenstrom da, und ist für Synchonisierungszwecke geeignet.
Implementierung[Bearbeiten | Quelltext bearbeiten]
AVR-Mikrocontroller[Bearbeiten | Quelltext bearbeiten]
Eine Implementierung des LOP für AVR-Mikrocontroller ist unter [1] zu finden. Auf diese Implementierung beziehen sich auch die folgenden Aussagen.
Konzept[Bearbeiten | Quelltext bearbeiten]
Die Nutzung basiert auf dem Umgang mit einem sogenannten LOP-Kontext, 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; |