eliXPLANE logo

An X-Plane network client for Elixir [1]. So far you can

I'm continuing to work on the data and command modules at the moment so that we can set writeable Data Refs or send commands to X-Plane. With this in place users should be able to drive X-Plane from their own hardware, write autopilots etc.

iex> XPlane.Instance.start
{:ok, #PID<0.154.0>}
iex> [xp] = XPlane.Instance.list
[
%XPlane.Instance{
addr: "192.168.0.22",
computer_name: "Similitude",
host: :xplane,
ip: {192, 168, 0, 22},
major_version: 1,
minor_version: 1,
port: 49000,
role: :master,
seconds_since_seen: 1,
version_number: 105101
}
]
iex> drefs = XPlane.DataRef.load_version(105000)
...
iex> drefs |> XPlane.DataRef.describe(~r/flightmodel_position_l/)
flightmodel_position_local_ax The acceleration in local OGL coordinates (mtr/sec2, writable)
flightmodel_position_latitude The latitude of the aircraft (degrees)
...
flightmodel_position_longitude The longitude of the aircraft (degrees)
flightmodel_position_local_vx The velocity in local OGL coordinates (mtr/sec, writable)
flightmodel_position_local_ay The acceleration in local OGL coordinates (mtr/sec2, writable)
:ok
iex> crefs = XPlane.CmdRef.load_version(105000)
...
iex> crefs |> XPlane.CmdRef.describe(~r/throttle/)
autopilot_autothrottle_off Autopilot auto-throttle off.
autopilot_autothrottle_on Autopilot auto-throttle on.
autopilot_autothrottle_toggle Autopilot auto-throttle toggle.
engines_throttle_down Throttle down a bit.
...
iex> XPlane.Data.start(xp)
{:ok, #PID<0.157.0>}
iex> XPlane.Data.request_updates(xp, [
...> flightmodel_position_elevation: 1,
...> flightmodel_position_longitude: 1,
...> flightmodel_position_latitude: 1])
:ok
iex> XPlane.Data.latest_updates(xp, [
...> :flightmodel_position_elevation,
...> :flightmodel_position_longitude,
...> :flightmodel_position_latitude])
%{
flightmodel_position_elevation: 17.584819793701172,
flightmodel_position_latitude: -31.069093704223633,
flightmodel_position_longitude: 152.76556396484375
}
iex> XPlane.Data.stop(xp)
:ok
iex> XPlane.Instance.stop
:ok
  1. Currently assumes that X-Plane and Elixir are running on platforms with the same endian byte order.

  2. I confirmed with X-Plane that it's ok to redistribute the DataRef files: https://forums.x-plane.org/index.php?/forums/topic/151455-redistributing-datarefs-files/