X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNetwork%2Fnet_fdm.hxx;h=353a1812b1a883a9df41ca60e55b975b63440f80;hb=b0dcb657e77579ecc79798ff365737095f96f9e2;hp=b1436e8457aca1f4d1bc509781f88ee6a6829b03;hpb=61d31ab822db94d4eaa5891a5df4a4f7521294d8;p=flightgear.git diff --git a/src/Network/net_fdm.hxx b/src/Network/net_fdm.hxx index b1436e845..353a1812b 100644 --- a/src/Network/net_fdm.hxx +++ b/src/Network/net_fdm.hxx @@ -1,23 +1,10 @@ // net_fdm.hxx -- defines a common net I/O interface to the flight // dynamics model // -// Written by Curtis Olson, started September 2001. +// Written by Curtis Olson - http://www.flightgear.org/~curt +// Started September 2001. // -// Copyright (C) 2001 Curtis L. Olson - curt@flightgear.com -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// This file is in the Public Domain, and comes with no warranty. // // $Id$ @@ -26,11 +13,17 @@ #define _NET_FDM_HXX -#ifndef __cplusplus -# error This library requires C++ -#endif +#include // time_t +#include + +// NOTE: this file defines an external interface structure. Due to +// variability between platforms and architectures, we only used fixed +// length types here. Specifically, integer types can vary in length. +// I am not aware of any platforms that don't use 4 bytes for float +// and 8 bytes for double. + +const uint32_t FG_NET_FDM_VERSION = 24; -const int FG_NET_FDM_VERSION = 0x0004; // Define a structure containing the top level flight dynamics model // parameters @@ -39,29 +32,91 @@ class FGNetFDM { public: - int version; // increment when data values change - int pad; // keep doubles 64-bit aligned for some - // hardware platforms, such as the Sun - // SPARC, which don't like misaligned - // data + enum { + FG_MAX_ENGINES = 4, + FG_MAX_WHEELS = 3, + FG_MAX_TANKS = 4 + }; + + uint32_t version; // increment when data values change + uint32_t padding; // padding // Positions double longitude; // geodetic (radians) double latitude; // geodetic (radians) double altitude; // above sea level (meters) - double agl; // above ground level (meters) - double phi; // roll (radians) - double theta; // pitch (radians) - double psi; // yaw or true heading (radians) + float agl; // above ground level (meters) + float phi; // roll (radians) + float theta; // pitch (radians) + float psi; // yaw or true heading (radians) + float alpha; // angle of attack (radians) + float beta; // side slip angle (radians) // Velocities - double vcas; // calibrated airspeed - double climb_rate; // feet per second + float phidot; // roll rate (radians/sec) + float thetadot; // pitch rate (radians/sec) + float psidot; // yaw rate (radians/sec) + float vcas; // calibrated airspeed + float climb_rate; // feet per second + float v_north; // north velocity in local/body frame, fps + float v_east; // east velocity in local/body frame, fps + float v_down; // down/vertical velocity in local/body frame, fps + float v_body_u; // ECEF velocity in body frame + float v_body_v; // ECEF velocity in body frame + float v_body_w; // ECEF velocity in body frame + + // Accelerations + float A_X_pilot; // X accel in body frame ft/sec^2 + float A_Y_pilot; // Y accel in body frame ft/sec^2 + float A_Z_pilot; // Z accel in body frame ft/sec^2 + + // Stall + float stall_warning; // 0.0 - 1.0 indicating the amount of stall + float slip_deg; // slip ball deflection + + // Pressure + + // Engine status + uint32_t num_engines; // Number of valid engines + uint32_t eng_state[FG_MAX_ENGINES];// Engine state (off, cranking, running) + float rpm[FG_MAX_ENGINES]; // Engine RPM rev/min + float fuel_flow[FG_MAX_ENGINES]; // Fuel flow gallons/hr + float fuel_px[FG_MAX_ENGINES]; // Fuel pressure psi + float egt[FG_MAX_ENGINES]; // Exhuast gas temp deg F + float cht[FG_MAX_ENGINES]; // Cylinder head temp deg F + float mp_osi[FG_MAX_ENGINES]; // Manifold pressure + float tit[FG_MAX_ENGINES]; // Turbine Inlet Temperature + float oil_temp[FG_MAX_ENGINES]; // Oil temp deg F + float oil_px[FG_MAX_ENGINES]; // Oil pressure psi + + // Consumables + uint32_t num_tanks; // Max number of fuel tanks + float fuel_quantity[FG_MAX_TANKS]; + + // Gear status + uint32_t num_wheels; + uint32_t wow[FG_MAX_WHEELS]; + float gear_pos[FG_MAX_WHEELS]; + float gear_steer[FG_MAX_WHEELS]; + float gear_compression[FG_MAX_WHEELS]; // Environment - time_t cur_time; // current unix time - long int warp; // offset in seconds to unix time - double visibility; // visibility in meters (for env. effects) + uint32_t cur_time; // current unix time + // FIXME: make this uint64_t before 2038 + int32_t warp; // offset in seconds to unix time + float visibility; // visibility in meters (for env. effects) + + // Control surface positions (normalized values) + float elevator; + float elevator_trim_tab; + float left_flap; + float right_flap; + float left_aileron; + float right_aileron; + float rudder; + float nose_wheel; + float speedbrake; + float spoilers; };