]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim.hxx
Syncing with latest JSBSim code with retractable landing gear support.
[flightgear.git] / src / FDM / JSBSim.hxx
index 9d5f542c0f50d9fb45f4bd9ce0e764e876cf92c8..6d9f66f345bdacf7e44fec89d0f969478e6311f2 100644 (file)
@@ -37,8 +37,6 @@ SENTRY
 INCLUDES
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#include <FDM/JSBSim/FGFDMExec.h>
-#include <FDM/JSBSim/FGInitialCondition.h>
 #undef MAX_ENGINES
 #include <Aircraft/aircraft.hxx>
 
@@ -48,10 +46,32 @@ DEFINITIONS
 
 #define ID_JSBSIMXX "$Header JSBSim.hxx,v 1.4 2000/10/22 14:02:16 jsb Exp $"
 
+#define METERS_TO_FEET 3.2808398950
+#define RADTODEG 57.2957795
+
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
+#include <simgear/misc/props.hxx>
+
+#include <FDM/JSBSim/FGFDMExec.h>
+
+class FGState;
+class FGAtmosphere;
+class FGFCS;
+class FGPropulsion;
+class FGMassBalance;
+class FGAerodynamics;
+class FGInertial;
+class FGAircraft;
+class FGTranslation;
+class FGRotation;
+class FGPosition;
+class FGAuxiliary;
+class FGOutput;
+class FGInitialCondition;
+
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
@@ -60,7 +80,7 @@ COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
 CLASS DOCUMENTATION
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-/** FGFS / JSBSim interface (aka "The Bus")
+/** FGFS / JSBSim interface (aka "The Bus").
     This class provides for an interface between FlightGear and its data
     structures and JSBSim and its data structures. This is the class which is
     used to command JSBSim when integrated with FlightGear. See the
@@ -77,18 +97,9 @@ CLASS DECLARATION
 
 class FGJSBsim: public FGInterface {
 
-    // The aircraft for this instance
-    FGFDMExec *fdmex;
-    FGInitialCondition *fgic;
-    bool needTrim;
-    
-    bool trimmed;
-    float trim_elev;
-    float trim_throttle;
-
 public:
     /// Constructor
-    FGJSBsim::FGJSBsim(void);
+    FGJSBsim::FGJSBsim( double dt );
     /// Destructor
     FGJSBsim::~FGJSBsim();
 
@@ -99,41 +110,149 @@ public:
     bool copy_from_JSBsim();
 
     /// Reset flight params to a specific position
-    bool init( double dt );
-    
-    // Positions
+    void init();
+
+    /// @name Position Parameter Set
+    //@{
+    /** Set geocentric latitude
+        @param lat latitude in radians measured from the 0 meridian where
+                        the westerly direction is positive and east is negative */
     void set_Latitude(double lat);  // geocentric
-    void set_Longitude(double lon);    
+
+    /** Set longitude
+        @param lon longitude in radians measured from the equator where
+                        the northerly direction is positive and south is negative */
+    void set_Longitude(double lon);
+
+    /** Set altitude
+        Note: this triggers a recalculation of AGL altitude
+             @param alt altitude in feet */
     void set_Altitude(double alt);        // triggers re-calc of AGL altitude
+    //@}
+
     //void set_AltitudeAGL(double altagl); // and vice-versa
-    
-    // Speeds -- setting any of these will trigger a re-calc of the rest
+
+    /// @name Velocity Parameter Set
+    //@{
+    /** Sets calibrated airspeed
+        Setting this will trigger a recalc of the other velocity terms.
+             @param vc Calibrated airspeed in ft/sec */
     void set_V_calibrated_kts(double vc);
+
+    /** Sets Mach number.
+        Setting this will trigger a recalc of the other velocity terms.
+             @param mach Mach number */
     void set_Mach_number(double mach);
+
+    /** Sets velocity in N-E-D coordinates.
+        Setting this will trigger a recalc of the other velocity terms.
+             @param north velocity northward in ft/sec
+             @param east velocity eastward in ft/sec
+             @param down velocity downward in ft/sec */
     void set_Velocities_Local( double north, double east, double down );
+
+    /** Sets aircraft velocity in stability frame.
+        Setting this will trigger a recalc of the other velocity terms.
+             @param u X velocity in ft/sec
+             @param v Y velocity  in ft/sec
+             @param w Z velocity in ft/sec */
     void set_Velocities_Wind_Body( double u, double v, double w);
-    
-    // Euler angles 
+    //@}
+
+    /** Euler Angle Parameter Set
+        @param phi roll angle in radians
+             @param theta pitch angle in radians
+             @param psi heading angle in radians */
     void set_Euler_Angles( double phi, double theta, double psi );
-    
-    // Flight Path
+
+    /// @name Flight Path Parameter Set
+    //@{
+    /** Sets rate of climb
+        @param roc Rate of climb in ft/sec */
     void set_Climb_Rate( double roc);
+
+    /** Sets the flight path angle in radians
+        @param gamma flight path angle in radians. */
     void set_Gamma_vert_rad( double gamma);
-    
-    // Earth
+    //@}
+
+    /// @name Earth Parameter Set
+    //@{
+    /** Sets the sea level radius in feet.
+        @param slr Sea Level Radius in feet */
     void set_Sea_level_radius(double slr);
+
+    /** Sets the runway altitude in feet above sea level.
+        @param ralt Runway altitude in feet above sea level. */
     void set_Runway_altitude(double ralt);
-    
-    // Atmosphere
+    //@}
+
+    /// @name Atmospheric Parameter Set
+    //@{
+    /** Sets the atmospheric static pressure
+        @param p pressure in psf */
     void set_Static_pressure(double p);
+
+    /** Sets the atmospheric temperature
+        @param T temperature in degrees rankine */
     void set_Static_temperature(double T);
+
+    /** Sets the atmospheric density.
+        @param rho air density slugs/cubic foot */
     void set_Density(double rho);
-    void set_Velocities_Local_Airmass (double wnorth, 
-                                      double weast, 
+
+    /** Sets the velocity of the local airmass for wind modeling.
+        @param wnorth velocity north in fps
+        @param weast velocity east in fps
+        @param wdown velocity down in fps*/
+    void set_Velocities_Local_Airmass (double wnorth,
+                                      double weast,
                                       double wdown );
+    /// @name Position Parameter Update
+    //@{
 
-    // update position based on inputs, positions, velocities, etc.
+
+    /** Update the position based on inputs, positions, velocities, etc.
+        @param multiloop number of times to loop through the FDM
+             @return true if successful */
     bool update( int multiloop );
+    bool ToggleDataLogging(bool state);
+    bool ToggleDataLogging(void);
+    void do_trim(void);
+
+private:
+    FGFDMExec *fdmex;
+    FGInitialCondition *fgic;
+    bool needTrim;
+
+    FGState*        State;
+    FGAtmosphere*   Atmosphere;
+    FGFCS*          FCS;
+    FGPropulsion*   Propulsion;
+    FGMassBalance*  MassBalance;
+    FGAircraft*     Aircraft;
+    FGTranslation*  Translation;
+    FGRotation*     Rotation;
+    FGPosition*     Position;
+    FGAuxiliary*    Auxiliary;
+    FGAerodynamics* Aerodynamics;
+    FGGroundReactions *GroundReactions;
+
+    int runcount;
+    float trim_elev;
+    float trim_throttle;
+    
+    SGPropertyNode *startup_trim;
+    SGPropertyNode *trimmed;
+    SGPropertyNode *pitch_trim;
+    SGPropertyNode *throttle_trim;
+    SGPropertyNode *aileron_trim;
+    SGPropertyNode *rudder_trim;
+    SGPropertyNode *stall_warning;
+    
+    void init_gear(void);
+    void update_gear(void);
+    
 };