]> git.mxchange.org Git - flightgear.git/blob - src/Network/net_gui.hxx
Fix a Clang warning, checking signed char as if it was unsigned.
[flightgear.git] / src / Network / net_gui.hxx
1 // net_gui.hxx -- defines a simple subset I/O interface to the flight
2 //                     dynamics model variables
3 //
4 // Written by Curtis Olson - curt@flightgear.com, started January 2002.
5 //
6 // This file is in the Public Domain, and comes with no warranty.
7 //
8 // $Id$
9
10
11 #ifndef _NET_GUI_HXX
12 #define _NET_GUI_HXX
13
14 #include <simgear/misc/stdint.hxx>
15
16 // NOTE: this file defines an external interface structure.  Due to
17 // variability between platforms and architectures, we only used fixed
18 // length types here.  Specifically, integer types can vary in length.
19 // I am not aware of any platforms that don't use 4 bytes for float
20 // and 8 bytes for double.
21
22
23 const uint32_t FG_NET_GUI_VERSION = 8;
24
25
26 // Define a structure containing the top level flight dynamics model
27 // parameters
28
29 class FGNetGUI {
30
31 public:
32
33     enum {
34         FG_MAX_ENGINES = 4,
35         FG_MAX_WHEELS = 3,
36         FG_MAX_TANKS = 4
37     };
38
39 // Note: align fields properly and manually to avoid incompatibilities
40 // between 32bit and 64bit CPUs. Make sure that each field is already
41 // placed on an offset which is a multiple of the size of its data
42 // type, i.e. uint32/float need to have on offset of 4, doubles need
43 // an offset of 8. This guarantees that compilers will _not_ add
44 // CPU-specific padding bytes. Whenever in doubt about padding rules,
45 // check "data structure alignment" in Wikipedia/Google :).
46
47     uint32_t version;           // increment when data values change
48     uint32_t padding1;          // 4 padding bytes, so the next (64bit) var is aligned to 8
49
50     // Positions (note: offset for these doubles is already aligned to 8 - to avoid architecture specific alignments)
51     double longitude;           // geodetic (radians)
52     double latitude;            // geodetic (radians)
53
54     float altitude;             // above sea level (meters)
55     float agl;                  // above ground level (meters)
56     float phi;                  // roll (radians)
57     float theta;                // pitch (radians)
58     float psi;                  // yaw or true heading (radians)
59
60     // Velocities
61     float vcas;
62     float climb_rate;           // feet per second
63
64     // Consumables
65     uint32_t num_tanks;         // Max number of fuel tanks
66     float fuel_quantity[FG_MAX_TANKS];
67
68     // Environment
69     uint32_t cur_time;          // current unix time
70                                 // FIXME: make this uint64_t before 2038
71     uint32_t warp;              // offset in seconds to unix time
72     float ground_elev;          // ground elev (meters)
73
74     // Approach
75     float tuned_freq;           // currently tuned frequency
76     float nav_radial;           // target nav radial
77     uint32_t in_range;           // tuned navaid is in range?
78     float dist_nm;              // distance to tuned navaid in nautical miles
79     float course_deviation_deg; // degrees off target course
80     float gs_deviation_deg;     // degrees off target glide slope
81 };
82
83
84 #endif // _NET_GUI_HXX