1 // bfi.hxx - Big Flat Interface
3 // Written by David Megginson, started February, 2000.
5 // Copyright (C) 2000 David Megginson - david@megginson.com
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.
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.
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.
26 #include <simgear/compiler.h>
28 FG_USING_NAMESPACE(std);
34 * This class implements the Facade design pattern (GOF p.185) to provide
35 * a single, (deceptively) simple flat interface for the FlightGear
38 * To help cut down on interdependence, subsystems should
39 * use the BFI whenever possible for inter-system communication.
42 * - add selectors to switch the current plane, throttle, brake, etc.
43 * - add more autopilot settings
49 // Initialize before first use.
52 // Reinit if necessary.
53 static void update ();
56 static int getFlightModel ();
57 static const string getAircraft ();
58 static const string getAircraftDir ();
59 static time_t getTimeGMT ();
60 static bool getHUDVisible ();
61 static bool getPanelVisible ();
63 static void setFlightModel (int flightModel);
64 static void setAircraft (const string &aircraft);
65 static void setAircraftDir (const string &aircraftDir);
66 static void setTimeGMT (time_t time);
67 static void setHUDVisible (bool hudVisible);
68 static void setPanelVisible (bool panelVisible);
72 static double getLatitude ();
73 static double getLongitude ();
74 static double getAltitude ();
75 static double getAGL ();
77 static void setLatitude (double latitude);
78 static void setLongitude (double longitude);
79 static void setAltitude (double altitude);
83 static double getHeading (); // true heading
84 static double getHeadingMag (); // exact magnetic heading
85 static double getPitch ();
86 static double getRoll ();
88 static void setHeading (double heading);
89 static void setPitch (double pitch);
90 static void setRoll (double roll);
94 static double getAirspeed ();
95 static double getSideSlip ();
96 static double getVerticalSpeed ();
97 static double getSpeedNorth ();
98 static double getSpeedEast ();
99 static double getSpeedDown ();
101 static void setSpeedNorth (double speed);
102 static void setSpeedEast (double speed);
103 static void setSpeedDown (double speed);
107 static double getThrottle ();
108 static double getFlaps ();
109 static double getAileron ();
110 static double getRudder ();
111 static double getElevator ();
112 static double getElevatorTrim ();
113 static double getBrake ();
114 static double getLeftBrake ();
115 static double getRightBrake ();
117 static void setThrottle (double throttle);
118 static void setFlaps (double flaps);
119 static void setFlapsRaise (bool step);
120 static void setFlapsLower (bool step);
121 static void setAileron (double aileron);
122 static void setRudder (double rudder);
123 static void setElevator (double elevator);
124 static void setElevatorTrim (double trim);
125 static void setBrake (double brake);
126 static void setLeftBrake (double brake);
127 static void setRightBrake (double brake);
131 static bool getAPAltitudeLock ();
132 static double getAPAltitude ();
133 static bool getAPHeadingLock ();
134 static double getAPHeadingMag ();
136 static void setAPAltitudeLock (bool lock);
137 static void setAPAltitude (double altitude);
138 static void setAPHeadingLock (bool lock);
139 static void setAPHeadingMag (double heading);
141 static bool getAPNAV1Lock ();
142 static void setAPNAV1Lock (bool lock);
145 static double getNAV1Freq ();
146 static double getNAV1AltFreq ();
147 static double getNAV1Radial ();
148 static double getNAV1SelRadial ();
149 static double getNAV1DistDME ();
150 static bool getNAV1InRange ();
151 static bool getNAV1DMEInRange ();
153 static double getNAV2Freq ();
154 static double getNAV2AltFreq ();
155 static double getNAV2Radial ();
156 static double getNAV2SelRadial ();
157 static double getNAV2DistDME ();
158 static bool getNAV2InRange ();
159 static bool getNAV2DMEInRange ();
161 static double getADFFreq ();
162 static double getADFAltFreq ();
163 static double getADFRotation ();
165 static void setNAV1Freq (double freq);
166 static void setNAV1AltFreq (double freq);
167 static void setNAV1SelRadial (double radial);
169 static void setNAV2Freq (double freq);
170 static void setNAV2AltFreq (double freq);
171 static void setNAV2SelRadial (double radial);
173 static void setADFFreq (double freq);
174 static void setADFAltFreq (double freq);
175 static void setADFRotation (double rot);
178 static const string getTargetAirport ();
179 static bool getGPSLock ();
180 static double getGPSTargetLatitude ();
181 static double getGPSTargetLongitude ();
183 static void setTargetAirport (const string &targetAirport);
184 static void setGPSLock (bool lock);
185 static void setGPSTargetLatitude (double latitude);
186 static void setGPSTargetLongitude (double longitude);
190 static double getVisibility ();
191 static bool getClouds ();
192 static double getCloudsASL ();
194 static void setVisibility (double visiblity);
195 static void setClouds (bool clouds);
196 static void setCloudsASL (double cloudsASL);
199 // Time (this varies with time) huh, huh
200 static double getMagVar ();
201 static double getMagDip ();
205 // Will cause a linking error if invoked.
208 static void reinit ();
209 static void needReinit () { _needReinit = true; }
210 static bool _needReinit;