1 /**************************************************************************
2 * ls_interface.h -- interface to the "LaRCsim" flight model
4 * Written by Curtis Olson, started May 1997.
6 * Copyright (C) 1997 Curtis L. Olson - http://www.flightgear.org/~curt
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of the
11 * License, or (at your option) any later version.
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 * (Log is kept at end of this file)
24 **************************************************************************/
27 #ifndef _LS_INTERFACE_H
28 #define _LS_INTERFACE_H
39 /* reset flight params to a specific position */
40 int ls_toplevel_init(double dt, char * aircraft);
42 /* update position based on inputs, positions, velocities, etc. */
43 int ls_update(int multiloop);
45 void ls_set_model_dt(double dt);
48 /* Convert from the fgFLIGHT struct to the LaRCsim generic_ struct */
49 int fgFlight_2_LaRCsim (fgFLIGHT *f);
51 /* Convert from the LaRCsim generic_ struct to the fgFLIGHT struct */
52 int fgLaRCsim_2_Flight (fgFLIGHT *f);
55 void ls_loop( SCALAR dt, int initialize );
57 /* Set the altitude (force) */
58 int ls_ForceAltitude(double alt_feet);
65 #endif /* _LS_INTERFACE_H */
69 // Revision 1.2 2004/11/19 22:10:42 curt
70 // Fix my mailing address by replacing it with my web page.
72 // Revision 1.1.1.1 2002/09/10 01:14:02 curt
73 // Initial revision of FlightGear-0.9.0
75 // Revision 1.5 2001/03/24 05:03:12 curt
76 // SG-ified logstream.
78 // Revision 1.4 2000/10/23 22:34:54 curt
80 // LaRCsim c172 on-ground and in-air starts, reset: all work
81 // UIUC Cessna172 on-ground and in-air starts work as expected, reset
82 // results in an aircraft that is upside down but does not crash FG. I
83 // don't know what it was like before, so it may well be no change.
84 // JSBSim c172 and X15 in-air starts work fine, resets now work (and are
85 // trimmed), on-ground starts do not -- the c172 ends up on its back. I
86 // suspect this is no worse than before.
89 // Balloon (the weather code returns nan's for the atmosphere data --this
90 // is in the weather module and apparently is a linux only bug)
91 // ADA (don't know how)
92 // MagicCarpet (needs work yet)
93 // External (don't know how)
95 // known to be broken:
96 // LaRCsim c172 on-ground starts with a negative terrain altitude (this
97 // happens at KPAO when the scenery is not present). The FDM inits to
98 // about 50 feet AGL and the model falls to the ground. It does stay
99 // upright, however, and seems to be fine once it settles out, FWIW.
102 // --implement set_Model on the bus
103 // --bring Christian's weather data into JSBSim
104 // -- add default method to bus for updating things like the sin and cos of
105 // latitude (for Balloon, MagicCarpet)
106 // -- lots of cleanup
109 // src/FDM/flight.cxx
110 // src/FDM/flight.hxx
111 // -- all data members now declared protected instead of private.
112 // -- eliminated all but a small set of 'setters', no change to getters.
113 // -- that small set is declared virtual, the default implementation
114 // provided preserves the old behavior
115 // -- all of the vector data members are now initialized.
116 // -- added busdump() method -- SG_LOG's all the bus data when called,
117 // useful for diagnostics.
120 // -- bus data members now directly assigned to
122 // src/FDM/Balloon.cxx
123 // -- bus data members now directly assigned to
124 // -- changed V_equiv_kts to V_calibrated_kts
126 // src/FDM/JSBSim.cxx
127 // src/FDM/JSBSim.hxx
128 // -- bus data members now directly assigned to
129 // -- implemented the FGInterface virtual setters with JSBSim specific
131 // -- changed the static FDMExec to a dynamic fdmex (needed so that the
132 // JSBSim object can be deleted when a model change is called for)
133 // -- implemented constructor and destructor, moved some of the logic
134 // formerly in init() to constructor
135 // -- added logic to bring up FGEngInterface objects and set the RPM and
138 // src/FDM/LaRCsim.cxx
139 // src/FDM/LaRCsim.hxx
140 // -- bus data members now directly assigned to
141 // -- implemented the FGInterface virtual setters with LaRCsim specific
142 // logic, uses LaRCsimIC
143 // -- implemented constructor and destructor, moved some of the logic
144 // formerly in init() to constructor
145 // -- moved default inertias to here from fg_init.cxx
146 // -- eliminated the climb rate calculation. The equivalent, climb_rate =
147 // -1*vdown, is now in copy_from_LaRCsim().
149 // src/FDM/LaRCsimIC.cxx
150 // src/FDM/LaRCsimIC.hxx
151 // -- similar to FGInitialCondition, this class has all the logic needed to
152 // turn data like Vc and Mach into the more fundamental quantities LaRCsim
153 // needs to initialize.
154 // -- put it in src/FDM since it is a class
156 // src/FDM/MagicCarpet.cxx
157 // -- bus data members now directly assigned to
159 // src/FDM/Makefile.am
160 // -- adds LaRCsimIC.hxx and cxx
162 // src/FDM/JSBSim/FGAtmosphere.h
163 // src/FDM/JSBSim/FGDefs.h
164 // src/FDM/JSBSim/FGInitialCondition.cpp
165 // src/FDM/JSBSim/FGInitialCondition.h
166 // src/FDM/JSBSim/JSBSim.cpp
167 // -- changes to accomodate the new bus
169 // src/FDM/LaRCsim/atmos_62.h
170 // src/FDM/LaRCsim/ls_geodesy.h
171 // -- surrounded prototypes with #ifdef __cplusplus ... #endif , functions
172 // here are needed in LaRCsimIC
174 // src/FDM/LaRCsim/c172_main.c
175 // src/FDM/LaRCsim/cherokee_aero.c
176 // src/FDM/LaRCsim/ls_aux.c
177 // src/FDM/LaRCsim/ls_constants.h
178 // src/FDM/LaRCsim/ls_geodesy.c
179 // src/FDM/LaRCsim/ls_geodesy.h
180 // src/FDM/LaRCsim/ls_step.c
181 // src/FDM/UIUCModel/uiuc_betaprobe.cpp
182 // -- changed PI to LS_PI, eliminates preprocessor naming conflict with
185 // src/FDM/LaRCsim/ls_interface.c
186 // src/FDM/LaRCsim/ls_interface.h
187 // -- added function ls_set_model_dt()
190 // -- eliminated calls that set the NED speeds to body components. They
191 // are no longer needed and confuse the new bus.
193 // src/Main/fg_init.cxx
194 // -- eliminated calls that just brought the bus data up-to-date (e.g.
195 // set_sin_cos_latitude). or set default values. The bus now handles the
196 // defaults and updates itself when the setters are called (for LaRCsim and
197 // JSBSim). A default method for doing this needs to be added to the bus.
198 // -- added fgVelocityInit() to set the speed the user asked for. Both
199 // JSBSim and LaRCsim can now be initialized using any of:
200 // vc,mach, NED components, UVW components.
203 // --eliminated call to fgFDMSetGroundElevation, this data is now 'pulled'
204 // onto the bus every update()
206 // src/Main/options.cxx
207 // src/Main/options.hxx
208 // -- added enum to keep track of the speed requested by the user
209 // -- eliminated calls to set NED velocity properties to body speeds, they
210 // are no longer needed.
211 // -- added options for the NED components.
213 // src/Network/garmin.cxx
214 // src/Network/nmea.cxx
215 // --eliminated calls that just brought the bus data up-to-date (e.g.
216 // set_sin_cos_latitude). The bus now updates itself when the setters are
217 // called (for LaRCsim and JSBSim). A default method for doing this needs
218 // to be added to the bus.
219 // -- changed set_V_equiv_kts to set_V_calibrated_kts. set_V_equiv_kts no
220 // longer exists ( get_V_equiv_kts still does, though)
222 // src/WeatherCM/FGLocalWeatherDatabase.cpp
223 // -- commented out the code to put the weather data on the bus, a
224 // different scheme for this is needed.
226 // Revision 1.3 2000/04/27 19:57:08 curt
227 // MacOS build updates.
229 // Revision 1.2 2000/04/10 18:09:41 curt
230 // David Megginson made a few (mostly minor) mods to the LaRCsim files, and
231 // it's now possible to choose the LaRCsim model at runtime, as in
233 // fgfs --aircraft=c172
237 // fgfs --aircraft=uiuc --aircraft-dir=Aircraft-uiuc/Boeing747
239 // I did this so that I could play with the UIUC stuff without losing
240 // Tony's C172 with its flaps, etc. I did my best to respect the design
241 // of the LaRCsim code by staying in C, making only minimal changes, and
242 // not introducing any dependencies on the rest of FlightGear. The
243 // modified files are attached.
245 // Revision 1.1.1.1 1999/06/17 18:07:33 curt
246 // Start of 0.7.x branch
248 // Revision 1.1.1.1 1999/04/05 21:32:45 curt
249 // Start of 0.6.x branch.
251 // Revision 1.11 1998/10/17 01:34:15 curt
254 // Revision 1.10 1998/10/16 23:27:45 curt
257 // Revision 1.9 1998/07/12 03:11:04 curt
258 // Removed some printf()'s.
259 // Fixed the autopilot integration so it should be able to update it's control
260 // positions every time the internal flight model loop is run, and not just
261 // once per rendered frame.
262 // Added a routine to do the necessary stuff to force an arbitrary altitude
264 // Gave the Navion engine just a tad more power.
266 // Revision 1.8 1998/04/21 16:59:39 curt
267 // Integrated autopilot.
268 // Prepairing for C++ integration.
270 // Revision 1.7 1998/02/07 15:29:39 curt
271 // Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
272 // <chotchkiss@namg.us.anritsu.com>
274 // Revision 1.6 1998/02/03 23:20:17 curt
275 // Lots of little tweaks to fix various consistency problems discovered by
276 // Solaris' CC. Fixed a bug in fg_debug.c with how the fgPrintf() wrapper
277 // passed arguments along to the real printf(). Also incorporated HUD changes
278 // by Michele America.
280 // Revision 1.5 1998/01/19 19:27:05 curt
281 // Merged in make system changes from Bob Kuehne <rpk@sgi.com>
282 // This should simplify things tremendously.
284 // Revision 1.4 1998/01/19 18:40:27 curt
285 // Tons of little changes to clean up the code and to remove fatal errors
286 // when building with the c++ compiler.
288 // Revision 1.3 1997/07/23 21:52:20 curt
289 // Put comments around the text after an #endif for increased portability.
291 // Revision 1.2 1997/05/29 22:39:59 curt
292 // Working on incorporating the LaRCsim flight model.
294 // Revision 1.1 1997/05/29 00:09:58 curt
295 // Initial Flight Gear revision.