]> git.mxchange.org Git - flightgear.git/blob - src/Main/bfi.hxx
Changes to support new simgear waypoint module.
[flightgear.git] / src / Main / bfi.hxx
1 // bfi.hxx - Big Flat Interface
2 //
3 // Written by David Megginson, started February, 2000.
4 //
5 // Copyright (C) 2000  David Megginson - david@megginson.com
6 //
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License as
9 // published by the Free Software Foundation; either version 2 of the
10 // License, or (at your option) any later version.
11 //
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 // General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software
19 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 //
21 // $Id$
22
23 #include <time.h>
24 #include <string>
25
26 #include <simgear/compiler.h>
27
28 FG_USING_NAMESPACE(std);
29
30
31 /**
32  * Big Flat Interface
33  *
34  * This class implements the Facade design pattern (GOF p.185) to provide
35  * a single, (deceptively) simple flat interface for the FlightGear
36  * subsystems.  
37  *
38  * To help cut down on interdependence, subsystems should
39  * use the BFI whenever possible for inter-system communication.
40  *
41  * TODO:
42  * - add selectors to switch the current plane, throttle, brake, etc.
43  * - add more autopilot settings
44  */
45 class FGBFI
46 {
47 public:
48
49                                 // Initialize before first use.
50   static void init ();
51
52                                 // Reinit if necessary.
53   static void update ();
54
55                                 // Simulation
56   static int getFlightModel ();
57   static const string getAircraft ();
58   static const string getAircraftDir ();
59   static time_t getTimeGMT ();
60   static const string &getGMTString ();
61   static bool getHUDVisible ();
62   static bool getPanelVisible ();
63
64   static void setFlightModel (int flightModel);
65   static void setAircraft (const string &aircraft);
66   static void setAircraftDir (const string &aircraftDir);
67   static void setTimeGMT (time_t time);
68   static void setHUDVisible (bool hudVisible);
69   static void setPanelVisible (bool panelVisible);
70
71
72                                 // Position
73   static double getLatitude ();
74   static double getLongitude ();
75   static double getAltitude ();
76   static double getAGL ();
77
78   static void setLatitude (double latitude);
79   static void setLongitude (double longitude);
80   static void setAltitude (double altitude);
81
82
83                                 // Attitude
84   static double getHeading ();    // true heading
85   static double getHeadingMag (); // exact magnetic heading
86   static double getPitch ();
87   static double getRoll ();
88
89   static void setHeading (double heading);
90   static void setPitch (double pitch);
91   static void setRoll (double roll);
92
93                                 // Engine
94   static double getRPM ();
95   static void setRPM ( double rpm );
96   static double getEGT ();
97
98                                 // Velocities
99   static double getAirspeed ();
100   static double getSideSlip ();
101   static double getVerticalSpeed ();
102   static double getSpeedNorth ();
103   static double getSpeedEast ();
104   static double getSpeedDown ();
105
106   static void setSpeedNorth (double speed);
107   static void setSpeedEast (double speed);
108   static void setSpeedDown (double speed);
109
110
111                                 // Controls
112   static double getThrottle ();
113   static double getMixture ();
114   static double getPropAdvance ();
115   static double getFlaps ();
116   static double getAileron ();
117   static double getRudder ();
118   static double getElevator ();
119   static double getElevatorTrim ();
120   static double getBrakes ();
121   static double getLeftBrake ();
122   static double getRightBrake ();
123   static double getCenterBrake ();
124
125   static void setThrottle (double throttle);
126   static void setMixture (double mixture);
127   static void setPropAdvance (double pitch);
128   static void setFlaps (double flaps);
129   static void setAileron (double aileron);
130   static void setRudder (double rudder);
131   static void setElevator (double elevator);
132   static void setElevatorTrim (double trim);
133   static void setBrakes (double brake);
134   static void setLeftBrake (double brake);
135   static void setRightBrake (double brake);
136   static void setCenterBrake (double brake);
137
138
139                                 // Autopilot
140   static bool getAPAltitudeLock ();
141   static double getAPAltitude ();
142   static bool getAPHeadingLock ();
143   static double getAPHeading ();
144   static double getAPHeadingMag ();
145
146   static void setAPAltitudeLock (bool lock);
147   static void setAPAltitude (double altitude);
148   static void setAPHeadingLock (bool lock);
149   static void setAPHeading (double heading);
150   static void setAPHeadingMag (double heading);
151
152   static bool getAPNAV1Lock ();
153   static void setAPNAV1Lock (bool lock);
154
155                                 // Radio Navigation
156   static double getNAV1Freq ();
157   static double getNAV1AltFreq ();
158   static double getNAV1Radial ();
159   static double getNAV1SelRadial ();
160   static double getNAV1DistDME ();
161   static bool getNAV1TO ();
162   static bool getNAV1FROM ();
163   static bool getNAV1InRange ();
164   static bool getNAV1DMEInRange ();
165
166   static double getNAV2Freq ();
167   static double getNAV2AltFreq ();
168   static double getNAV2Radial ();
169   static double getNAV2SelRadial ();
170   static double getNAV2DistDME ();
171   static bool getNAV2TO ();
172   static bool getNAV2FROM ();
173   static bool getNAV2InRange ();
174   static bool getNAV2DMEInRange ();
175
176   static double getADFFreq ();
177   static double getADFAltFreq ();
178   static double getADFRotation ();
179
180   static void setNAV1Freq (double freq);
181   static void setNAV1AltFreq (double freq);
182   static void setNAV1SelRadial (double radial);
183
184   static void setNAV2Freq (double freq);
185   static void setNAV2AltFreq (double freq);
186   static void setNAV2SelRadial (double radial);
187
188   static void setADFFreq (double freq);
189   static void setADFAltFreq (double freq);
190   static void setADFRotation (double rot);
191
192                                 // GPS
193   static const string &getTargetAirport ();
194   static bool getGPSLock ();
195   static double getGPSTargetLatitude ();
196   static double getGPSTargetLongitude ();
197
198   static void setTargetAirport (const string &targetAirport);
199   static void setGPSLock (bool lock);
200   // static void setGPSTargetLatitude (double latitude);
201   // static void setGPSTargetLongitude (double longitude);
202   static void setGPSTargetWayPoint (double latitude, double longitude);
203
204
205                                 // Weather
206   static double getVisibility ();
207   static bool getClouds ();
208   static double getCloudsASL ();
209
210   static void setVisibility (double visiblity);
211   static void setClouds (bool clouds);
212   static void setCloudsASL (double cloudsASL);
213
214
215                                 // Time (this varies with time) huh, huh
216   static double getMagVar (); 
217   static double getMagDip (); 
218
219
220 private:
221                                 // Will cause a linking error if invoked.
222   FGBFI ();
223
224   static void reinit ();
225   static void needReinit () { _needReinit = true; }
226   static bool _needReinit;
227 };
228
229 // end of bfi.hxx