]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim/JSBSim.hxx
Fix for bug #204 and #222 by Bertrand Coconnier; NaNs (bug #222) were basically gener...
[flightgear.git] / src / FDM / JSBSim / JSBSim.hxx
index 04a10b29934c7e481ec84d21a2dbc656a890bb87..a01146bcc0447aa5e06b744707553081e9cb7dd7 100644 (file)
@@ -8,16 +8,16 @@
 ------ Copyright (C) 1999 - 2000  Curtis L. Olson (curt@flightgear.org) ------
 
  This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
+ modify it under the terms of the GNU Lesser General Public License as
  published by the Free Software Foundation; either version 2 of the
  License, or (at your option) any later version.
 
  This program is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- General Public License for more details.
Lesser General Public License for more details.
 
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
@@ -38,7 +38,7 @@ INCLUDES
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
 #undef MAX_ENGINES
-#include <Aircraft/aircraft.hxx>
+#include "math/FGColumnVector3.h"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 DEFINITIONS
@@ -53,12 +53,11 @@ DEFINITIONS
 FORWARD DECLARATIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#include <simgear/misc/props.hxx>
+#include <simgear/props/props.hxx>
 
 #include <FDM/JSBSim/FGFDMExec.h>
 
 namespace JSBSim {
-class FGState;
 class FGAtmosphere;
 class FGFCS;
 class FGPropulsion;
@@ -66,19 +65,14 @@ class FGMassBalance;
 class FGAerodynamics;
 class FGInertial;
 class FGAircraft;
-class FGTranslation;
-class FGRotation;
-class FGPosition;
+class FGPropagate;
 class FGAuxiliary;
 class FGOutput;
 class FGInitialCondition;
 }
 
-using namespace JSBSim;
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+// Adding it here will cause a namespace clash in FlightGear -EMH-
+// using namespace JSBSim;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 CLASS DOCUMENTATION
@@ -91,12 +85,8 @@ CLASS DOCUMENTATION
     documentation for main for direction on running JSBSim apart from FlightGear.
     @author Curtis L. Olson (original)
     @author Tony Peden (Maintained and refined)
-    @version $Id$
+    @version $Id: JSBSim.hxx,v 1.15 2010/10/07 03:45:40 jberndt Exp $
     @see main in file JSBSim.cpp (use main() wrapper for standalone usage)
-    @see <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/jsbsim/JSBSim/JSBSim.hxx?rev=HEAD&content-type=text/vnd.viewcvs-markup">
-         Header File </a>
-    @see <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/jsbsim/JSBSim/JSBSim.cxx?rev=HEAD&content-type=text/vnd.viewcvs-markup">
-         Source File </a>
 */
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -120,21 +110,24 @@ public:
     /// Reset flight params to a specific position
     void init();
 
+    /// Unbind properties
+    void unbind();
+
     /// @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 */
+                   the westerly direction is positive and east is negative */
     void set_Latitude(double lat);  // geocentric
 
     /** Set longitude
         @param lon longitude in radians measured from the equator where
-                        the northerly direction is positive and south is negative */
+                   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 */
+        @param alt altitude in feet */
     void set_Altitude(double alt);        // triggers re-calc of AGL altitude
     //@}
 
@@ -144,33 +137,33 @@ public:
     //@{
     /** Sets calibrated airspeed
         Setting this will trigger a recalc of the other velocity terms.
-             @param vc Calibrated airspeed in ft/sec */
+        @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 */
+        @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 */
+        @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 */
+        @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 Angle Parameter Set
         @param phi roll angle in radians
-             @param theta pitch angle in radians
-             @param psi heading 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 );
 
     /// @name Flight Path Parameter Set
@@ -215,65 +208,84 @@ public:
     void do_trim(void);
     void update_ic(void);
 
+    bool get_agl_ft(double t, const double pt[3], double alt_off,
+                    double contact[3], double normal[3], double vel[3],
+                    double angularVel[3], double *agl);
 private:
-    FGFDMExec *fdmex;
-    FGInitialCondition *fgic;
+    JSBSim::FGFDMExec *fdmex;
+    JSBSim::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;
+    JSBSim::FGAtmosphere*   Atmosphere;
+    JSBSim::FGFCS*          FCS;
+    JSBSim::FGPropulsion*   Propulsion;
+    JSBSim::FGMassBalance*  MassBalance;
+    JSBSim::FGAircraft*     Aircraft;
+    JSBSim::FGPropagate*    Propagate;
+    JSBSim::FGAuxiliary*    Auxiliary;
+    JSBSim::FGAerodynamics* Aerodynamics;
+    JSBSim::FGGroundReactions* GroundReactions;
+    JSBSim::FGInertial*     Inertial;
 
     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;
+    double trim_elev;
+    double trim_throttle;
+
+    SGPropertyNode_ptr startup_trim;
+    SGPropertyNode_ptr trimmed;
+    SGPropertyNode_ptr pitch_trim;
+    SGPropertyNode_ptr throttle_trim;
+    SGPropertyNode_ptr aileron_trim;
+    SGPropertyNode_ptr rudder_trim;
+    SGPropertyNode_ptr stall_warning;
+
+    /* SGPropertyNode_ptr elevator_pos_deg;
+    SGPropertyNode_ptr left_aileron_pos_deg;
+    SGPropertyNode_ptr right_aileron_pos_deg;
+    SGPropertyNode_ptr rudder_pos_deg;
+    SGPropertyNode_ptr flap_pos_deg; */
+
+
+    SGPropertyNode_ptr elevator_pos_pct;
+    SGPropertyNode_ptr left_aileron_pos_pct;
+    SGPropertyNode_ptr right_aileron_pos_pct;
+    SGPropertyNode_ptr rudder_pos_pct;
+    SGPropertyNode_ptr flap_pos_pct;
+    SGPropertyNode_ptr speedbrake_pos_pct;
+    SGPropertyNode_ptr spoilers_pos_pct;
+
+    SGPropertyNode_ptr ab_brake_engaged;
+    SGPropertyNode_ptr ab_brake_left_pct;
+    SGPropertyNode_ptr ab_brake_right_pct;
     
-    /* SGPropertyNode *elevator_pos_deg;
-    SGPropertyNode *left_aileron_pos_deg;
-    SGPropertyNode *right_aileron_pos_deg;
-    SGPropertyNode *rudder_pos_deg;
-    SGPropertyNode *flap_pos_deg; */
+    SGPropertyNode_ptr gear_pos_pct;
+    SGPropertyNode_ptr wing_fold_pos_pct;
+    SGPropertyNode_ptr tailhook_pos_pct;
+
+    SGPropertyNode_ptr temperature;
+    SGPropertyNode_ptr pressure;
+    SGPropertyNode_ptr density;
+    SGPropertyNode_ptr turbulence_gain;
+    SGPropertyNode_ptr turbulence_rate;
+
+    SGPropertyNode_ptr wind_from_north;
+    SGPropertyNode_ptr wind_from_east;
+    SGPropertyNode_ptr wind_from_down;
+
+    SGPropertyNode_ptr slaved;
+
+    double last_hook_tip[3];
+    double last_hook_root[3];
+    JSBSim::FGColumnVector3 hook_root_struct;
+    double hook_length;
+    bool got_wire;
+
+    bool crashed;
 
-    
-    SGPropertyNode *elevator_pos_pct;
-    SGPropertyNode *left_aileron_pos_pct;
-    SGPropertyNode *right_aileron_pos_pct;
-    SGPropertyNode *rudder_pos_pct;
-    SGPropertyNode *flap_pos_pct;
-    SGPropertyNode *speedbrake_pos_pct;
-    SGPropertyNode *spoilers_pos_pct;
-    
-    SGPropertyNode *gear_pos_pct;
-    
-    SGPropertyNode *temperature;
-    SGPropertyNode *pressure;
-    SGPropertyNode *density;
-    SGPropertyNode *turbulence;
-    
-    SGPropertyNode *wind_from_north;
-    SGPropertyNode *wind_from_east;
-    SGPropertyNode *wind_from_down;
-    
     void init_gear(void);
     void update_gear(void);
-    
+
+    void update_external_forces(double t_off);
 };