MicroControllerUnitFrame

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 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