]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim.hxx
Sync with latest JSBSim CVS.
[flightgear.git] / src / FDM / JSBSim.hxx
1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
3  Header:        JSBSim.hxx
4  Author:        Curtis L. Olson
5  Maintained by: Tony Peden, Curt Olson
6  Date started:  02/01/1999
7
8 ------ Copyright (C) 1999 - 2000  Curtis L. Olson (curt@flightgear.org) ------
9
10  This program is free software; you can redistribute it and/or
11  modify it under the terms of the GNU General Public License as
12  published by the Free Software Foundation; either version 2 of the
13  License, or (at your option) any later version.
14
15  This program is distributed in the hope that it will be useful, but
16  WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18  General Public License for more details.
19
20  You should have received a copy of the GNU General Public License
21  along with this program; if not, write to the Free Software
22  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23
24 HISTORY
25 --------------------------------------------------------------------------------
26 02/01/1999   CLO   Created
27 Additional log messages stored in CVS
28
29 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
30 SENTRY
31 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
32
33 #ifndef _JSBSIM_HXX
34 #define _JSBSIM_HXX
35
36 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
37 INCLUDES
38 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
39
40 #undef MAX_ENGINES
41 #include <Aircraft/aircraft.hxx>
42
43 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
44 DEFINITIONS
45 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
46
47 #define ID_JSBSIMXX "$Header JSBSim.hxx,v 1.4 2000/10/22 14:02:16 jsb Exp $"
48
49 #define METERS_TO_FEET 3.2808398950
50 #define RADTODEG 57.2957795
51
52 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
53 FORWARD DECLARATIONS
54 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
55
56 #include <simgear/misc/props.hxx>
57
58 #include <FDM/JSBSim/FGFDMExec.h>
59
60 class FGState;
61 class FGAtmosphere;
62 class FGFCS;
63 class FGPropulsion;
64 class FGMassBalance;
65 class FGAerodynamics;
66 class FGInertial;
67 class FGAircraft;
68 class FGTranslation;
69 class FGRotation;
70 class FGPosition;
71 class FGAuxiliary;
72 class FGOutput;
73 class FGInitialCondition;
74
75 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
76 COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
77 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
78
79 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
80 CLASS DOCUMENTATION
81 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
82
83 /** FGFS / JSBSim interface (aka "The Bus").
84     This class provides for an interface between FlightGear and its data
85     structures and JSBSim and its data structures. This is the class which is
86     used to command JSBSim when integrated with FlightGear. See the
87     documentation for main for direction on running JSBSim apart from FlightGear.
88     @author Curtis L. Olson (original)
89     @author Tony Peden (Maintained and refined)
90     @version $Id$
91     @see main in file JSBSim.cpp (use main() wrapper for standalone usage)
92 */
93
94 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
95 CLASS DECLARATION
96 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
97
98 class FGJSBsim: public FGInterface {
99
100 public:
101     /// Constructor
102     FGJSBsim::FGJSBsim( double dt );
103     /// Destructor
104     FGJSBsim::~FGJSBsim();
105
106     /// copy FDM state to LaRCsim structures
107     bool copy_to_JSBsim();
108
109     /// copy FDM state from LaRCsim structures
110     bool copy_from_JSBsim();
111
112     /// Reset flight params to a specific position
113     void init();
114
115     /// @name Position Parameter Set
116     //@{
117     /** Set geocentric latitude
118         @param lat latitude in radians measured from the 0 meridian where
119                          the westerly direction is positive and east is negative */
120     void set_Latitude(double lat);  // geocentric
121
122     /** Set longitude
123         @param lon longitude in radians measured from the equator where
124                          the northerly direction is positive and south is negative */
125     void set_Longitude(double lon);
126
127     /** Set altitude
128         Note: this triggers a recalculation of AGL altitude
129               @param alt altitude in feet */
130     void set_Altitude(double alt);        // triggers re-calc of AGL altitude
131     //@}
132
133     //void set_AltitudeAGL(double altagl); // and vice-versa
134
135     /// @name Velocity Parameter Set
136     //@{
137     /** Sets calibrated airspeed
138         Setting this will trigger a recalc of the other velocity terms.
139               @param vc Calibrated airspeed in ft/sec */
140     void set_V_calibrated_kts(double vc);
141
142     /** Sets Mach number.
143         Setting this will trigger a recalc of the other velocity terms.
144               @param mach Mach number */
145     void set_Mach_number(double mach);
146
147     /** Sets velocity in N-E-D coordinates.
148         Setting this will trigger a recalc of the other velocity terms.
149               @param north velocity northward in ft/sec
150               @param east velocity eastward in ft/sec
151               @param down velocity downward in ft/sec */
152     void set_Velocities_Local( double north, double east, double down );
153
154     /** Sets aircraft velocity in stability frame.
155         Setting this will trigger a recalc of the other velocity terms.
156               @param u X velocity in ft/sec
157               @param v Y velocity  in ft/sec
158               @param w Z velocity in ft/sec */
159     void set_Velocities_Wind_Body( double u, double v, double w);
160     //@}
161
162     /** Euler Angle Parameter Set
163         @param phi roll angle in radians
164               @param theta pitch angle in radians
165               @param psi heading angle in radians */
166     void set_Euler_Angles( double phi, double theta, double psi );
167
168     /// @name Flight Path Parameter Set
169     //@{
170     /** Sets rate of climb
171         @param roc Rate of climb in ft/sec */
172     void set_Climb_Rate( double roc);
173
174     /** Sets the flight path angle in radians
175         @param gamma flight path angle in radians. */
176     void set_Gamma_vert_rad( double gamma);
177     //@}
178
179     /// @name Earth Parameter Set
180     //@{
181     /** Sets the sea level radius in feet.
182         @param slr Sea Level Radius in feet */
183     void set_Sea_level_radius(double slr);
184
185     /** Sets the runway altitude in feet above sea level.
186         @param ralt Runway altitude in feet above sea level. */
187     void set_Runway_altitude(double ralt);
188     //@}
189
190     /// @name Atmospheric Parameter Set
191     //@{
192     /** Sets the atmospheric static pressure
193         @param p pressure in psf */
194     void set_Static_pressure(double p);
195
196     /** Sets the atmospheric temperature
197         @param T temperature in degrees rankine */
198     void set_Static_temperature(double T);
199
200     /** Sets the atmospheric density.
201         @param rho air density slugs/cubic foot */
202     void set_Density(double rho);
203
204     /** Sets the velocity of the local airmass for wind modeling.
205         @param wnorth velocity north in fps
206         @param weast velocity east in fps
207         @param wdown velocity down in fps*/
208     void set_Velocities_Local_Airmass (double wnorth,
209                                        double weast,
210                                        double wdown );
211     /// @name Position Parameter Update
212     //@{
213
214
215     /** Update the position based on inputs, positions, velocities, etc.
216         @param multiloop number of times to loop through the FDM
217               @return true if successful */
218     bool update( int multiloop );
219     bool ToggleDataLogging(bool state);
220     bool ToggleDataLogging(void);
221     void do_trim(void);
222
223 private:
224     FGFDMExec *fdmex;
225     FGInitialCondition *fgic;
226     bool needTrim;
227
228     FGState*        State;
229     FGAtmosphere*   Atmosphere;
230     FGFCS*          FCS;
231     FGPropulsion*   Propulsion;
232     FGMassBalance*  MassBalance;
233     FGAircraft*     Aircraft;
234     FGTranslation*  Translation;
235     FGRotation*     Rotation;
236     FGPosition*     Position;
237     FGAuxiliary*    Auxiliary;
238     FGAerodynamics* Aerodynamics;
239     FGGroundReactions *GroundReactions;
240
241     int runcount;
242     float trim_elev;
243     float trim_throttle;
244     
245     SGPropertyNode *startup_trim;
246     SGPropertyNode *trimmed;
247     SGPropertyNode *pitch_trim;
248     SGPropertyNode *throttle_trim;
249     SGPropertyNode *aileron_trim;
250     SGPropertyNode *rudder_trim;
251     SGPropertyNode *stall_warning;
252     
253     void init_gear(void);
254     void update_gear(void);
255     
256 };
257
258
259 #endif // _JSBSIM_HXX
260
261