BlinkenlightsProtocol

From BlinkenArea Wiki
Jump to: navigation, search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
English Version of this Page

zurück zur Übersicht

Stream

Das Blinkenlights protocol wird benutzt um schwarz/weisse Blinkenlights-Streams per UDP zu versenden. Es wird dazu einfach für jedes neue Bild ein UDP-Paket gesendet (für über 1 Sekunde andauernde Frames wird das Frame jede Sekunde wiederholt, 5 Sekunden ist das Stream-Timeout):

+-----------------------+
| magic                 |
| 0xDE 0xAD   0xBE 0xEF |
+-----------------------+
| frame number          |
| 0x00 0x00   0x00 0x00 |
+-----------+-----------+
| width     | height    |
| 0x00 0x12 | 0x00 0x08 |
+-----------+-----------+
| pixels                |
| 0x01 0x01   0x00 0x00 |
| 0x00 0x00   0x01 0x00 |
| ...                   |
| 0x00 0x00   0x00 0x00 |
+-----------------------+
  • magic: fester Wert
  • frame number: Nummer des Bildes, mit jedem Bild erhöht, Benutzung ist optional
  • width: die Breite des Bildes in Pixeln
  • height: die Höhe des Bildes in Pixeln
  • pixels: die Werte der width * height Pixel
    • 0x00 für aus, 0x01 für an, keine anderen Werte erlaubt
    • von links nach rechts, dann von oben nach unten (also oberer linker Pixel zuerst, dann der Pixel rechts daneben, ...)
  • alle Werte sind in network byte order - big endian - High-Byte zuerst

Der UDP Port sollte auf Server- und Client-Seite konfigurierbar sein. Der Standard-Port ist UDP 2323.

Es ist auch möglich, diese Pakete über Datenströme, wie TCP oder serielle Schnittstellen, zu senden.

Dynamische Erweiterung

Die dynamische Erweiterung kann benutzt werden, um einen BLP-Stream dynamisch anzufordern. Ein Anfrage-Paket wird periodisch (alle 10s) zum UDP-Port des Servers gesendet. Der Server antwortet dann mit einem BLP-Stream, gesendet von diesem Port zum Quell-Port des Anfrage-Pakets. Nachdem für eine längere Zeit (30s) kein Anfrage-Paket empfangen wurde, wird das Senden des Streams eingestellt.

Das Format des Anfrage-Pakets ist wie folgt:

+-----------------------+
| magic                 |
| 0xDE 0xAD   0xBE 0xCD |
+-----------------------+
| command               |
| 'R'  'E'    'F'  'R'  |
| 'E'  'S'    'H'       |
+-----------------------+
  • magic: fester Wert
  • command: fester Wert

Es ist auch möglich, dem Server mitzuteilen, dass der Stream nicht länger benötigt wird. Dies passiert, indem man ein Ende-Paket anstelle eines Anfrage-Pakets sendet:

+-----------------------+
| magic                 |
| 0xDE 0xAD   0xBE 0xCD |
+-----------------------+
| command               |
| 'C'  'L'    'O'  'S'  |
| 'E'                   |
+-----------------------+
  • magic: fester Wert
  • command: fester Wert

Zusätzliche Informationen

Eine weitere Erweiterung erlaubt, zusätzlich zu den Stream-Paketen oder Stream-Anforderungen Informationen zu übertragen. Diese Informationen haben die folgende Struktur:

+-----------------------+
| magic                 |
| 0xDE 0xAD   0xBE 0x23 |
+-----------------------+
| info                  |
| 0x45 0x4E   0x44 0x00 |
| 0x00 0x00   0x00 0x00 |
+-----------------------+
  • magic: fester Wert
  • info: 0..8 ASCII-Zeichen, aufgefüllt mit 0x00 bis 8 Bytes Gesamtlänge
    • "END", SaE: der Stream ist beendet
  • Abkürzungen:
    • SaE: Sender an Empfänger, Paket wird in Richtung der Stream-Frames gesendet
    • EaS: Empfänger an Sender, Paket wird in Richtung der Stream-Requests gesendet