Tutorial: PMDG 737 NGX Befehle in FSUIPC programmieren

Einleitung

Dies ist ein kleines Tutorial, welches erklären soll, wie Befehle für die PMDG 737 NGX direkt über FSUIPC Knöpfen und Tasten zugewiesen werden können. Entstanden ist dieses Tutorial aus einem Beitrag im Forum der German Air Express. Vielen Dank an dieser Stelle an Captain Robert S. Randazzo von PMDG für die freundliche Genehmigung zur Veröffentlichung dieses Tutorials.

Wie Ihr bestimmt schon mitbekommen habt, kam mit dem Servicepack 1C auch das lang ersehnte SDK auf die heimische Platte, zu finden unter: …\FSX\PMDG\PMDG_737_NGX\SDK.

Hab ich mir natürlich gleich mal angeschaut und in dem Ordner befinden sich neben einem PDF, in welchem überwiegend rechtliche Hinweise zur Verwendung des SDK´s aufgelistet sind, zwei weitere Dateien. Die PMDG_NGX_ConnectionTest.cpp ist, wenn ich das richtig verstanden habe, ein Beispielprogramm, was zeigen soll, wie mit den Daten aus dem SDK Software für die NGX geschrieben werden kann, für uns Enduser eher uninteressant.

Schnell fand ich heraus, die Datei, welche uns interessiert, ist die PMDG_NGX_SDK.h. Also ein wenig gegoogelt und rausgekriegt, am besten zu öffnen mit Notepad++, welches als Freeware zum Download zur Verfügung steht (Die Datei lässt sich zwar auch mit dem normalen Windows Editor öffnen, jedoch ist das ganze im Notepad++ wesentlich übersichtlicher).

Erst mal konnte ich mit dem ganzen überhaupt nix anfangen und hab mich erst mal durch die Foren gekämpft, hauptsächlich in Zusammenhang mit FSUIPC, da es mir ja darum ging, alle Knöpfe, welche ich mit FSUIPC-Mousemacros belegt hatte, direkt zu belegen. Ich fand zwar heraus, dass es geht, aber keiner schreibt irgendwo, wie es geht. Doch nach viel, viel Google Suche und nicht zuletzt mit Hilfe von Andi Palm, fand ich heraus, wie das ganze funktioniert.

Voraussetzungen

  • Servicepack 1C der NGX installiert
  • aktuelle FSUIPC 4.827 (oder höher) installiert
  • Notepad++ installiert (optional)

Struktur des SDK

Als erstes schauen wir uns, wie schon beschrieben mit Notepad++ die PMDG_NGX_SDK.h an. Dort fällt schnell auf, dass es zwei Bereiche gibt. Im ersten Bereich ist dokumentiert was, wie aus der NGX ausgelesen werden kann und dieser sieht so aus:





Das Auslesen könnte durchaus mal interessant werden, im Moment geht es uns ja aber darum, bestimmten Knöpfen, bzw. Tasten, direkt Aktionen in der NGX zuzuordnen. Dafür ist der zweite Teil der Datei interessant



Programierung in FSUIPC

Die wichtigste Zeile ist dabei erst mal diese:

define THIRD_PARTY_EVENT_ID_MIN 0x00011000 // equals to 69632

Vor allem die Zahl 69632 sollten wir uns gut merken und irgendwo notieren, denn diese brauchen wir bei jedem Button, den wir programmieren möchten. Wie das funktioniert zeige ich am Beispiel des Battery Schalters. Dazu wird der FSX gestartet und die NGX geladen, auf welchem Airport ist wurscht. Nun öffnet man das FSUIPC Fenster über´s Flusi Menü. Im FSUIPC Fenster auf den Reiter „Buttons and Switches“ welchseln und die Taste an Eurem Eingabegerät (Joystick o.ä.) drücken. In der oberen Zeile erscheint nun die Nummer des Joysticks und der betätigten Taste. Rechts davon befindet sich das Kästchen „Select for FS control“, welches Ihr anhakt. Darunter befindet sich ein Pulldown Menü „Control sent when button pressed“ und wenn Ihr das aufklappt ist gleich der erste Eintrag „custom control“. Genau diesen brauchen wir.

Habt Ihr das ausgewählt geht ein kleines Fenster auf, wo Ihr aufgefordert werdet eine Nummer einzugeben. Diese Nummer ergibt sich wie folgt:

define EVT_OH_ELEC_BATTERY_SWITCH (THIRD_PARTY_EVENT_ID_MIN + 1) // 01 - BAT Switch

Alles klar? Nein? Ok, ich hab auch ne Weile gebraucht, dort steht „THIRD_PARTY_EVENT_ID_MIN + 1“ heißt also, die Third Party Event ID nehmen und im Fall vom BAT Switch 1 dazuzählen. Die Third Party Event ID ist eben jene, oben beschriebene 69632, welche Ihr Euch aufschreiben solltet. Ergibt also laut Adam Riese 69633 und genau diese Zahl tragt Ihr in das kleine Fenster bei FSUIPC ein. Nun befindet sich noch ein Feld „Parameter“ darunter und jetzt wird´s wirklich spannend.

Erst mal gibt es die Möglichkeiten den Parameter entweder auf 0 (für AUS) oder auf 1 (für AN) zu setzen. Das macht vor allem dann Sinn, wenn Ihr Kippschalter habt, welche zwei Positionen und somit auch zwei Button Nummern haben. Habt Ihr jedoch einen normalen Joystickknopf bringt das recht wenig, da Ihr den Schalter nicht wechseln, also toggle, könnt, sondern immer nur entweder (wenn Parameter 1 gesetzt wird) von Aus auf An, oder umgekehrt (wenn Parameter 0 gesetzt ist) von An auf Aus schalten könnt.

Wollt Ihr jedoch mit einem Joystick Knopf einen NGX Schalter zwischen An und Aus hin und her schalten wird folgender Abschnitt interessant:

define MOUSE_FLAG_RIGHTSINGLE 0x80000000
define MOUSE_FLAG_MIDDLESINGLE 0x40000000
define MOUSE_FLAG_LEFTSINGLE 0x20000000
define MOUSE_FLAG_RIGHTDOUBLE 0x10000000
define MOUSE_FLAG_MIDDLEDOUBLE 0x08000000
define MOUSE_FLAG_LEFTDOUBLE 0x04000000
define MOUSE_FLAG_RIGHTDRAG 0x02000000
define MOUSE_FLAG_MIDDLEDRAG 0x01000000
define MOUSE_FLAG_LEFTDRAG 0x00800000
define MOUSE_FLAG_MOVE 0x00400000
define MOUSE_FLAG_DOWN_REPEAT 0x00200000
define MOUSE_FLAG_RIGHTRELEASE 0x00080000
define MOUSE_FLAG_MIDDLERELEASE 0x00040000
define MOUSE_FLAG_LEFTRELEASE 0x00020000
define MOUSE_FLAG_WHEEL_FLIP 0x00010000 // invert direction of mouse wheel
define MOUSE_FLAG_WHEEL_SKIP 0x00008000 // look at next 2 rect for mouse wheel commands
define MOUSE_FLAG_WHEEL_UP 0x00004000
define MOUSE_FLAG_WHEEL_DOWN 0x00002000

Damit wird als Parameter gesetzt, was ihr mit dem NGX-Schalter, welchen Ihr durch die Kombination aus „Third Party Event ID“ plus der entsprechenden Nummer addiert, angegeben habt, passieren soll. In unserem Fall soll auf den BAT Switch ein linker Mouseklick gemacht werden, es muss also folgender Parameter in FSUIPC gesetzt werden:

define MOUSE_FLAG_LEFTSINGLE 0x20000000

WICHTIG: Wenn der Parameter eingetragen wird muss die erste Null weggelassen werden, also in unserem Beispiel x20000000

Ihr seht also im Grunde kann jede Mausaktion auch als Parameter für einen Schalter/Knopf in der NGX gesetzt werden. Für Diejenigen unter Euch, welche sich schon etwas mit dem Thema FSUIPC.ini beschäftigt haben, Ihr könnt die Einträge auch direkt in der FSUIPC4.ini machen, jedoch ist zu beachten, dass der Parameter dann nicht im hexadezimalen Format, sondern als Zahl eingegeben werden muss. Dies sieht dann z.B. so aus:

80=P0,20,C70325,536870912

Laut Pete Dowson ist zwar auch vorgesehen in einer zukünftigen Version von FSUIPC4 die wichtigsten Funktionen über das Pulldownmenü direkt, ohne Eingabe der entsprechenden Zahl, möglich zu machen, die volle Bandbreite an Programmiermöglichkeiten jedoch, hat man nur über den oben beschriebenen Weg.

So nun hoffe ich alle Klarheiten beseitigt zu haben und wünsch Euch viel Spaß beim Programieren….

http://www.va-gae.eu