Dateiformat DMX-Modul

Aus PyroNeo Wiki
Version vom 13. November 2018, 19:11 Uhr von Admin (Diskussion | Beiträge) (Allgemeiner Header)
Zur Navigation springenZur Suche springen

Das DMX-Modul benutzt ein kompaktes Binärformat, damit Sequenzen möglichst schnell aufgerufen und gefunden werden können. Diese Seite ermöglicht es Softwareentwicklern, direkt die vom DMX-Modul verwendeten Dateien zu schreiben.

Grundsätze

Die Dateiendung ist .DMX. Alle in der Datei angegebenen Integer-Daten sind im Big-Endian-Format abgelegt, d.H. das höherwertige Byte wird zuerst gespeichert. Nach dem Dateiheader folgt eine Versionskennung welche es für die Zukunft ermöglicht, das Dateiformat aktuellen Entwicklungen anzupassen. Dabei wird die Rückwärtskompatibilität aufrecht erhalten. Alte Dateiformate können also weiterhin vom DMX-Modul geladen werden.

Allgemeiner Header

Die vom DMX-Modul verwendeten Dateien beginnen alle mit dem folgenden Header:

Offset Länge Bedeutung
9 Bytes | String "SDDMXDATA"
9 8 Bit Versionsnummer
10 16 Bit Padding (0-Bytes)

Dateiformat Version 1

Version 1 des Dateiformats wurde nur intern verwendet und wurde nie öffentlich benutzt. Hierzu existiert daher keine Beschreibung.

Dateiformat Version 2

Version 2 untergliedert die DMX-Datei in verschiedene Bereiche, welche unterschiedliche Zwecke erfüllen. Nicht jeder Bereich muss vorhanden sein. In der Zukunft können für erweiterte Funktionen andere Bereiche hinzu kommen. Unbekannte Bereiche werden vom DMX-Modul ignoriert.

Teilbereiche

Hinter dem Dateiheader befindet sich eine Tabelle in welcher die unterschiedlichen Bereiche zusammen mit ihrem Offset innerhalb der Gesamtdatei angegeben sind. Der Aufbau ist wie folgt:

  • 32 Bit Anzahl der folgenden Bereiche (= n)

Die folgende Struktur wird n-mal wiederholt:

Offset (Byte) Größe Bedeutung
0 4 Byte Name des Bereichs, aufgefüllt mit 0-Bytes
4 32 Bit Reserviert, auf 0 setzen
8 32 Bit Startposition des Bereichs innerhalb der Datei (Offset)
12 32 Bit Länge des Bereichs

Hinter der Tabelle der Teilbereiche folgen die Daten der einzelnen Teilbereiche.

Bereich DAFT

Im DAFT-Bereich (DMX Address Flag Table) werden unterschiedliche Konfigurationen für die benutzten DMX-Kanäle festgelegt. Für jeden der 513 DMX-Datenkanäle (Kanal 0 wird zusätzlich mit 0 belegt) wird ein Flag-Feld angegeben. Jedes Feld ist 32 Bit groß. Der gesamte Teilbereich hat daher eine Größe von 2052 Bytes. Folgende Flags sind vergeben:

Name Flag-Wert Bedeutung
FLAG_ARMING_LOCK 1 Der Kanal wird auf 0 gehalten, bis das Modul scharf geschaltet ist
ALWAYS_INTERNAL 2 Der Kanal wird nie vom DMX-Eingang übernommen sondern IMMER intern gesetzt.
COPY_ARMED_VALUE 4 Der Wert des Kanals wird beim unscharf schalten NICHT zurückgesetzt

Bereich DSQT

Im DSQT-Bereich (DMX SeQuence Table) werden die einzelnen DMX-Sequenzen verwaltet. Der Bereich wird verwendet um eine bestimmte Sequenz innerhalb der Sequenzdaten (Bereich DSQD) schnell anspringen zu können:

  • 16 Bit Anzahl der gespeicherten Sequenzen (= n)

Folgende Struktur wird n-mal wiederholt:

Offset (Byte) Länge Bedeutung
0 16 Bit Sequenznummer
2 32 Bit Sequenzoffset innerhalb des DSQD-Bereichs
6 32 Bit Dauer der Sequenz in Millisekunden

Bereich DSQD

Im Bereich DSQD (DMX SeQeuence Data) werden die einzelnen Sequenzen abgelegt welche dann vom DMX-Modul ausgeführt werden. Die Sequenzdaten beinhalten außerdem Einsprungpunkte um bestimmte Stellen innerhalb der Sequenzdaten schnell anspringen zu können. Jede Sequenz beginnt mit der erneuten Angabe der Nummer der Sequenz:

  • 16 Bit Sequenznummer

Sequenz-Flags

Sequenz-Flags bestimmen den Ablauf einer Sequenz sowie die Bedingungen unter denen eine Sequenz ausgeführt werden darf:

  • 32 Bit Kennung der Flags (Wert 0x0200xxxx), xxxx entspricht den Sequenz-Flags
  • 32 Bit Länge der Sequenztabelle: Wert 0

Folgende Flags werden z.Zt. erkannt:

Name Wert Bedeutung
MAY_RUN_DISARMED 1 Die Sequenz darf auch gestartet werden/ablaufen wenn das DMX-Modul NICHT scharf geschaltet ist.

Einsprungpunkte

Es folgt die Tabelle mit den Einsprungpunkten. Im Schnitt wird pro 100 DMX-Befehle eine Sprungmarke gesetzt.

  • 32 Bit Kennung der Sprungmarkentabelle (Wert 0x01000000)
  • 32 Bit Byte-Länge der Sprungmarken-Daten (Offset der Programmdaten)

Anschließend folgen die eigentlichen Sprungmarken-Daten:

Offset Länge Beschreibung
0 32 Bit Aktuelle Sequenzzeit in Millisekunden
4 32 Bit Byte-Offset innerhalb der Programmierdaten

Programmdaten

Die eigentlichen DMX-Daten bestehen aus einzelnen Befehlen, die vom DMX-Modul ausgeführt werden. Dies können Befehle zur Ansteuerung von DMX-Ausgängen, aber auch Befehle zum Abwarten einer Wartezeit sein. Es können in Zukunft Befehle hinzu kommen. Jeder Befehl hat eine implizite Länge; diese wird verwendet um den nächsten Befehl zu finden. Der Bereich der Programmdaten beginnt mit dem folgenden Header:

  • 32 Bit Kennung der Programmdaten (Wert 0)
  • 32 Bit Byte-Länge der Programmdaten

Anschließend folgen die einzelnen Befehle. Ab hier wird auch der Offset in der Sprungtabelle gezählt:

Befehl 0, Ende der Sequenz

Befehl 0 besteht nur aus einem Nullbyte. Er beendet die laufende Sequenz bzw. kennzeichnet deren Ende.

Befehl 1, relative Wartezeit

  • 8 Bit Befehl: 1
  • 16 Bit Wartezeit in Millisekunden

Es wird ab der aktuellen Sequenzzeit die angegebene Zeit gewartet

Befehl 2, absolute Wartezeit

  • 8 Bit Befehl: 2
  • 32 Bit Sequenzzeit in Millisekunden.

Es wird gewartet, bis die angegebene Sequenzzeit erreicht ist.

Befehl 3, DMX-Kanal setzen

  • 8 Bit Befehl: 3
  • 16 Bit DMX-Kanal
  • 8 Bit Neuer Wert des Kanals

Setzt den angegebenen DMX-Kanal auf den angegebenen Wert



Bereich MDSI

Im Bereich MDSI (Manual DMX Sequence Information) werden Informationen zu von Hand am DMX-Modul aufrufbaren Sequenzen abgelegt. Die Einträge werden dabei einfach hintereinander abgelegt:

Offset Länge Bedeutung
0 20 Byte Name der Sequenz
20 8 Byte (Reserviert, 0-Bytes)
28 16 Bit Sequenznummer
30 16 Bit Flags

Folgende Flags können angegeben werden:

Name Wert Bedeutung
ARM_BEFORE_RUN 1 Das Modul muss temporär und lokal scharf geschaltet werden, damit die Sequenz laufen kann