]> git.mxchange.org Git - flightgear.git/blobdiff - src/Network/net_fdm.hxx
Fix for bug 1304 - crash loading XML route
[flightgear.git] / src / Network / net_fdm.hxx
index 0294d08fbce6ba0fee804d01b32e596f954e0e5f..353a1812b1a883a9df41ca60e55b975b63440f80 100644 (file)
@@ -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$
 
 #define _NET_FDM_HXX
 
 
-#ifndef __cplusplus                                                          
-# error This library requires C++
-#endif                                   
-
 #include <time.h> // time_t
+#include <simgear/misc/stdint.hxx>
+
+// 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 int FG_NET_FDM_VERSION = 16;
+const uint32_t FG_NET_FDM_VERSION = 24;
 
 
 // Define a structure containing the top level flight dynamics model
@@ -42,18 +32,15 @@ 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)
@@ -62,8 +49,8 @@ public:
     float phi;                 // roll (radians)
     float theta;               // pitch (radians)
     float psi;                 // yaw or true heading (radians)
-    float alpha;                // angle of attack
-    float beta;                 // side slip angle
+    float alpha;                // angle of attack (radians)
+    float beta;                 // side slip angle (radians)
 
     // Velocities
     float phidot;              // roll rate (radians/sec)
@@ -74,13 +61,10 @@ public:
     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_wind_body_north;    // north velocity in local/body frame
-                                // relative to local airmass, fps
-    float v_wind_body_east;     // east velocity in local/body frame
-                                // relative to local airmass, fps
-    float v_wind_body_down;     // down/vertical velocity in local/body
-                                // frame relative to local airmass, 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
@@ -93,33 +77,40 @@ public:
     // Pressure
     
     // Engine status
-    int num_engines;           // Number of valid engines
-    int eng_state[FG_MAX_ENGINES]; // Engine state (off, cranking, running)
-    float rpm[FG_MAX_ENGINES]; // Engine RPM rev/min
+    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 EGT[FG_MAX_ENGINES]; // Exhuast gas temp deg F
-    float oil_temp[FG_MAX_ENGINES]; // Oil temp deg F
-    float oil_px[FG_MAX_ENGINES]; // Oil pressure psi
+    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
-    int num_tanks;             // Max number of fuel tanks
+    uint32_t num_tanks;                // Max number of fuel tanks
     float fuel_quantity[FG_MAX_TANKS];
 
     // Gear status
-    int num_wheels;
-    bool wow[FG_MAX_WHEELS];
+    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
-    float 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 flaps;
+    float elevator_trim_tab;
+    float left_flap;
+    float right_flap;
     float left_aileron;
     float right_aileron;
     float rudder;