Avio-Treiber selbst schreiben

Wenn Sie ein Gerät über das Avio-System seriell steuern möchten und es noch keinen Treiber gibt, können Sie mit Hilfe eines Texteditors selbst einen Treiber erstellen. Dafür müssen Sie das Protokoll des Gerätes kennen und wissen, wie ein Avio-Treiber aufgebaut ist. Letztes erfahren Sie in diesem Kapitel. Wenn Sie einen Treiber geschrieben haben, bitten wir Sie, uns diesen zur Verfügung zu stellen, denn wir möchten möglichst schnell eine Treiber-Datenbank aufbauen, von der alle Stumpfl-Anwender profitieren können, siehe auch Verfügbare Treiber. Und wenn Sie das nächste Mal einen Treiber benötigen, hat vielleicht schon ein anderer diese Arbeit erledigt.

Treiberstruktur

Wenn Sie einen bestehenden Treiber mit einem Texteditor öffnen, können Sie seinen Aufbau erkennen. Verfügbare Treiber finden Sie, indem Sie im Hauptmenü von Wings Vioso RX auf Extras - Ordner öffnen Treiber klicken. Achten Sie jedoch darauf, dass Sie einen Treiber mit der Endung *.asd öffnen (Avio Serial Driver). Ein Avio-Treiber enthält am Anfang eine Beschreibung und dann folgen die Befehle in der Reihenfolge, wie sie im Avio Manager erscheinen sollen. Jede Zeile kann einen beliebigen Kommentar enthalten, der durch zwei Schrägstriche getrennt sein muss, Beispiel:  //Dieser Kommentar dient nur zu Ihrer Information und wird nicht ausgewertet.

[Driver]

Diese Kennung ist in der ersten Zeile zwingend erforderlich.

Name=XXX

Name des Treibers bzw. des zu steuernden Gerätes

Version=X.X

Version des Treibers

Date=XX.XX.XXXX

Datum der Erstellung

Author=XXX

Name des Treiberautors

Comment=XXX

Kommentar zum Treiber

Es folgen Parameter für die Schnittstellenkonfiguration. Wenn die für ein Gerät erforderlichen Parameter bekannt sind, ist es sinnvoll diese hier vorzugeben.

NetworkIP=XXX.XXX.XXX.XXX

Die angegebene IP-Adresse erscheint als Standardvorgabe im Dialog.

NetworkPort=XXXXX

Der angegebene Port erscheint als Standardvorgabe im Dialog.

ConnectionType=X

Bei X=UDP wird das UPD-Protokoll voreingestellt, bei X=TCP das TCP-Protokoll und bei X=RS232 das RS232-Protokoll

DefaultPollInterval=X

Bestimmt das Standard-Interval, mit dem Parameter abgefragt werden sollen; X wird in Sekunden angegeben, bei X=0 wird nicht gepollt. Das Standard-Pollintervall kann in jedem Befehl durch ein individuelles Pollintervall überschieben werden.

In der Treiberdatei sieht ein kompletter Informationsblock dann beispielsweise so aus:

[Driver]

Name=Canon WUX450

Version=1.00

Date=21.11.2013

Author=Dieter Hartmann

Comment=Basic control of Canon XEED WUX450 projector

NetworkIP=???????

NetworkPort=?????

ConnectionType=UDP

DefaultPollInterval=10

Danach folgen die Befehlsblöcke, die jeweils durch eine Leerzeile getrennt sind.

Datenformat

Zeichenfolgen für serielle Befehle können Sie in verschiedener Form eingeben, auch gemischte Schreibweise ist möglich:

Aufbau eines Befehlsblocks

Wir erläutern Ihnen zunächst den prinzipiellen Aufbau von Befehlen im Treiber. Am Ende folgen einige Beispiele, die nicht alle Optionen nutzen und auch zeigen, wie einfache Befehle aufgebaut sind. Bitte denken Sie daran, alle Informationen und Kommentare möglichst in Englisch zu verfassen, damit der Treiber international einsetzbar ist.

[Gruppe:Channel]

Die Bezeichnung des Channels ist die Befehlsbezeichnung, die im Avio Manager erscheint. Optional kann eine Gruppenbezeichnung getrennt durch Doppelpunkt vorangestellt werden. Im Avio Manager erscheinen alle Channels der Gruppe in einem Ordner und zwar auch, wenn Befehle im Treiber nicht untereinander aufgeführt sind.

Par1=Format (Y, Z), Bezeichnung des Parameters im Avio Manager

Ermöglicht die Eingabe von Parametern im Avio Manager. Mit "Format" wird die Art der erwarteten Information festgelegt; der mögliche Wertebereich wird mit Y (Minimum) und Z (Maximum) definiert. Folgende Formate sind möglich:

Data ... max. 255 Zeichen gemäß definiertem Datenformat, gemischte Schreibweise ASCII, Hex etc. möglich

Number (Y, Z), Eingabe von Werten, die Angabe des Wertebereichs ist optional, z. B. Number(1,255)

Auf diese Weise können bis zu acht verschiedene Parameter benutzt werden (Par1 bis Par8). In einer Parameter-Zeile folgt, getrennt durch ein Komma, die optionale Bezeichnung des Channels im Avio Manager.

Send=Zeichenfolge

Als Zeichenfolge können bis zu 255 Zeichen gesendet werden, die Eingabe erfolgt in gemischter Schreibweise gemäß definiertem Datenformat.

Variable Parameter (Par1 bis Par8) können auf folgende Weise mit einbezogen werden:

#Data(Par1)

Beim Senden und Empfangen wird die Zeichenfolge 1:1 als Text gesendet bzw. an Avio weitergegeben.

#Byte(Par1)

Wie zuvor, jedoch wird nur das erste Byte von Parameter 1 gesendet.

#WordBE(Par1) oder #Word(Par1)

Wie zuvor, jedoch werden die ersten zwei Bytes von Parameter 1 in der vorgegeben Reihenfolge gesendet (Big-Endian).

#WordLE(Par1)

Wie zuvor, jedoch werden die Bytes in umgekehrter Reihenfolge gesendet (Little-Endian). Diese Variante ist für das Senden von Befehlen an Wings Vioso RX zu verwenden.

#LongBE(Par1) oder  #Long(Par1)

Wie #WordBE, jedoch werden die ersten vier Bytes von Parameter 1 in der vorgegeben Reihenfolge gesendet (Big-Endian).

#LongLE(Par1)

Wie #LongBE, jedoch werden die ersten vier Bytes in umgekehrter Reihenfolge gesendet (Little-Endian). Diese Variante ist für das Senden von Befehlen an Wings Vioso RX zu verwenden.

#Decimal(Par1)

Die ASCII-Zeichenfolge wird als Zahl interpretiert.

 

Auswertung von Rückmeldungen

Wenn das Gerät Rückmeldungen nach dem Empfang bzw. nach dem Ausführen von Befehlen sendet, kann dieses sogenannte Acknowledge ausgewertet werden.

ReceiveAck=XXX

Hier geben Sie die Zeichenfolge ein, die das Gerät nach dem Empfang eines Befehls zurücksendet. Es können sich bis zu neun Parameter in der empfangenen Zeichenfolge befinden (Ret1 bis Ret9), z. B. ReceiveAck=0x00 #byte(Ret1) #byte(Ret2)0x01. Die Informationen können als Channels im Avio Manager verfügbar gemacht werden. Die Kennzeichnung der erwarteten Informationen (im Beispiel #byte) erfolgt wie schon bei den Parametern erläutert.

Nun legen Sie noch festlegen, wie die empfangenen Informationen im Avio Manager erscheinen sollen:

Ret1=Name(Y,Z)

Der Name erscheint als Channel-Bezeichnung im Avio Manager. Der Wertebereich der vom Gerät erwarteten Werte kann optional mit Y (Minimum) und Z (Maximum) angegeben werden. Dies ist durchaus sinnvoll, weil das Avio-System dann den korrekten Bereich automatisch für andere Kanäle skalieren kann.

Es werden Wildcards (*) als Platzhalter innerhalb des angegebenen Rückgabeparameters unterstützt. An Stellen mit dem Platzhalter * wird eine beliebige Zeichenfolge in der empfangenen Rückmeldung akzeptiert. Als praktisches Beispiel wäre z. B. ein Rückgabewert, bei dem am Schluss eine Checksumme gesandt wird, die jedes mal unterschiedlich ist. Um die empfangene Rückmeldung trotzdem richtig zu erkennen, wird am Schluss des angegebenen Rückgabeparameters ein * gesetzt, d. h. der empfangene Wert kann an der Stelle, wo der Stern steht beliebige Zeichen enthalten, um trotzdem als der angegebene Rückgabewert erkannt zu werden.

PollInterval=X

Wenn bei einem Abfragebefehl das Standard-Intervall nicht zur Anwendung kommen soll, können Sie das Intervall für diesen Befehl individuell in Sekunden vorgeben. Die Abfrage wird nicht ausgeführt, wenn X=0 ist.

 

Beispiele

Hier zeigen wir Ihnen einige Beispiele aus dem Treiber für Wings Vioso RX. Der untenstehende Befehlsblock dient zum Senden eines einfachen Befehls, hier der Play-Befehl für die aktuelle Timeline in Wings Vioso RX. Er lautet in Hex: FF 01 04 FE

[Play]

Send=0xFF 0x01 0x04 0xFE

 

Soll sich der Play-Befehl auf eine bestimmte Stelle beziehen, müssen die Remote-Indexe von Timeline und Positions-Marker im Befehl enthalten sein. Dies lösen Sie mit der Angabe von Parametern.  Dafür wurde das Nummernformat und ein Wertebereich von 1 bis 250 gewählt. In den Befehl wurde #Byte(Par1) bzw. #Byte(Par2) zur Angabe der beiden Remote-Indexe eingefügt. Diese Angabe bewirkt, dass nur das erste Byte der Information im Eingabefeld des Treiberdialogs ausgewertet wird. Im Unterschied zum obigen Beispiel wird hier bei der Befehlsbezeichnung noch eine Gruppenbezeichnung vorangestellt.

[Play:Timeline and Position Marker]

Par1=Number(1,250), Remote index of Timeline

Par1=Number(1,250), Remote index of Position Marker

Send=0xFF 0x02 0x04 #Byte(Par1) #Byte(Par2) 0xFE

 

Mit diesem Befehlsblock wird die Betriebsdauer einer Projektorlampe abgefragt und als Channel im Avio Manager zur Verfügung gestellt. Der Statuts kann dann z. B. auf der Oberfläche dargestellt werden. Bei ReceiveAck wird einfach die vom Gerät zurückgemeldete Zeichenfolge eingetragen, wobei hier die Stundenzahl mit dem Rückmeldeparameter Ret1 als Channel im Avio Manager verfügbar ist.

[Get lamp counter]

Send="GET LAMPCOUNTER" 0x0d

ReceiveAck="g:LAMPCOUNTER=" #Decimal(Ret1) 0x0d

Ret1=LampCounter

PollInterval=10

 

Tipps für die erste Treibererstellung

siehe auch

Serielle Befehle über die LAN-Schnittstelle des PCs senden/empfangen