Skip to content
Dan Krusi edited this page Aug 1, 2013 · 18 revisions

ExtPlane-Plugin

Screenshot

A plugin for X-Plane that allows commanding the simulation from external programs through an easy-to-use TCP protocol.

Features

  • Multiple concurrent connections
  • Set and get datarefs
  • Dataref types supported: int, float, double, int[], float[], data
  • Simulate key and button presses
  • Supports both X-Plane 9 and 10
  • Free & Open Source under GPLv3
  • Client classes for Qt included

Known users:

License:

  • GNU GPLv3

Downloading

Some binaries for various platforms are available in binaries/ directory. Just download a suitable binary and copy it to X-Plane/Resources/plugins/extplane.xpl.

If a binary for your favorite platform is missing, please build it and send it to authors!

Building

Copy X-Plane SDK to home directory, so that the headers can be found at ~/SDK/CHeaders/XPLM (or edit the .pro file).

You'll need Qt development libraries installed.

To build on Mac & Linux

$ qmake $ make

Mac notes:

Warning! If you see any error or warning like : ld: in /opt/local/lib/libxslt.1.dylib, file was built for unsupported file format which is not the architecture being linked (i386)

You need to rebuild libxslt with the +universal variant on MacPort otherwise the plugin cannot be loaded by X-Plane ! You should get the same for qt4-mac also.

Test session

Launch X-Plane in console and observe the output. You should see something like: TcpServer::TcpServer(QObject*, DataRefProvider*) Listening on port 51000

Open another console and run 'telnet localhost 51000'

Wait until you see line 'EXTPLANE 1'

Try typing the following commands:

sub sim/cockpit/electrical/night_vision_on set sim/cockpit/electrical/night_vision_on 1 set sim/cockpit/electrical/night_vision_on 0 sub sim/flightmodel/position/local_y 100 set sim/flightmodel/position/local_y 3000 key 0 key 0 set sim/flightmodel/engine/ENGN_thro [1,0] set sim/flightmodel/engine/ENGN_thro [0,0] disconnect

Command reference

Datarefs

  • sub {dataref} [accuracy] Subscribe to dataref, with optional accuracy.
  • unsub {dataref} Unsubscribe dataref.
  • set {dataref} {value} Set dataref to value. Dataref must be subscribed first.

With accuracy you can decide how much the dataref's value can change before a update is sent. Set it to as large value as possible to maximize frame rate and minimize network traffic. For data datarefs, the accuracy represents the update interval in milliseconds.

List of datarefs can be found at: http://www.xsquawkbox.net/xpsdk/docs/DataRefs.txt

For example, to subscribe to the indicated heading with an accuracy of 10 degrees, send

sub sim/flightmodel/misc/h_ind 10.0

If you want to set a dataref which supports writing, you can send the following:

set sim/flightmodel/misc/h_ind 267.32

Array datarefs can be set the same way. You can give less values than the dataref holds. For example this sets full throttle for engines 1 & 2:

set sim/flightmodel/engine/ENGN_thro [1,1]

Keys and Buttons

  • key {key id} Create a command key press.
  • but {button id} Press down an button.
  • rel {button id} Release button pressed using "but" command.

List of key and button id's can be found at: http://www.xsquawkbox.net/xpsdk/mediawiki/XPLMUtilities Note that the key and button id's are numbers, not names. X-Plane does not provide a way to lookup keys or buttons by name.

Other

  • disconnect Disconnect the TCP socket.
  • extplane-set {setting} {value} Set ExtPlane setting

Supported settings are:

  • update_interval {value} How often ExtPlane should update its data from X-Plane, in seconds. Use as high value as possible here for best performance. For example 0.16 would mean 60Hz, 0.33 = 30Hz, 0.1 = 10Hz etc.. Must be a positive float. Default is 0.33.

Protocol Output

  • EXTPLANE {version} Sent when connected. Version number is currently 1.
  • u{type} {dataref} {value} Dataref has changed in value based on accuracy.

The following types may be sent by the ExtPlane-Plugin: int, float, double, int array, float array, data

Int/Float/Double Dataref

ui sim/aircraft/engine/acf_num_engines 2
uf sim/cockpit2/gauges/indicators/slip_deg -0.023
ud sim/flightmodel/misc/h_ind 267.32

Int/Float Array Dataref

Array datarefs output data like this (a float array, size 4):

ufa sim/flightmodel/position/q [0.84599,-0.00730657,0.00933933,0.533067]
uia sim/cockpit2/engine/indicators/N1_percent [99,97]

Console Output

ExtPlane plugin outputs some log to stdout, so if you have problems with the plugin, start X-Plane in console and read any output starting with ExtPlane-Plugin.

Client library

See directory "client" for client code. Currently there is only client code for Qt. If you write client code for other environments (Python, Java..) please add them here.

Contact / Feedback

Original Author:

Contributors:

Contributions welcome!

Clone this wiki locally