MicroControllerUnitFrame
Stream
Das microcontroller unit frame protocol wird benutzt um Farb- oder Graustufen-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 | | 0x23 0x54 0x26 0x66 | +-----------+-----------+ | height | width | | 0x00 0x14 | 0x00 0x1A | +-----------+-----------+ | channels | maxval | | 0x00 0x01 | 0x00 0xFF | +-----------+-----------+ | pixels | | 0xFF 0xCC 0x99 0x66 | | 0x33 0x00 0x00 0x00 | | ... | | 0x00 0x00 0x00 0x00 | +-----------------------+
- magic: fester Wert
- height: die Höhe des Bildes in Pixeln
- width: die Breite des Bildes in Pixeln
- channels: die Anzahl der Kanäle im Bild, 1 für Graustufen, 3 für RGB
- maxval: der maximale Wert in den Pixel-Daten
- pixels: die Werte der channels * width * height Pixel
- 0x00 für aus, maxval für an, Werte dazwischen für Graustufen
- von links nach rechts, dann von oben nach unten (also alle Kanäle des oberen linken Pixels 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 MCUF-Stream dynamisch anzufordern. Ein Anfrage-Paket wird periodisch (alle 10s) zum UDP-Port des Servers gesendet. Der Server antwortet dann mit einem MCUF-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 | | 0x42 0x42 0x42 0x42 | +-----------------------+ | reserved | | 0x00 0x00 0x00 0x00 | | 0x00 0x00 0x00 0x00 | +-----------------------+
- magic: fester Wert
- reserved: vorerst 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 | | 0x42 0x42 0x42 0x43 | +-----------------------+ | reserved | | 0x00 0x00 0x00 0x00 | | 0x00 0x00 0x00 0x00 | +-----------------------+
- magic: fester Wert
- reserved: vorerst 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 | | 0x42 0x42 0x42 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