]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim.hxx
b) FDM - ada.cxx, ada.hxx have been updated with the faux, daux and iaux arrays that...
[flightgear.git] / src / FDM / JSBSim.hxx
index 7b34a1a476ea795eb5a5dcf3b7eec8a8e4bf40e0..bb6cdccbb9821770bb6c0a9c65660dffda3d5bfb 100644 (file)
-// JSBsim.hxx -- interface to the "JSBsim" flight model
-//
-// Written by Curtis Olson, started February 1999.
-//
-// Copyright (C) 1999  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
-// 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.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-//
-// $Id$
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
+ Header:        JSBSim.hxx
+ Author:        Curtis L. Olson
+ Maintained by: Tony Peden, Curt Olson
+ Date started:  02/01/1999
 
-#ifndef _JSBSIM_HXX
-#define _JSBSIM_HXX
+------ Copyright (C) 1999 - 2000  Curtis L. Olson (curt@flightgear.org) ------
 
-#include <FDM/JSBsim/FGFDMExec.h>
-#undef MAX_ENGINES
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
 
-#include <Aircraft/aircraft.hxx>
+ 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.
 
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-class FGJSBsim: public FGInterface {
+HISTORY
+--------------------------------------------------------------------------------
+02/01/1999   CLO   Created
+Additional log messages stored in CVS
 
-    // The aircraft for this instance
-    FGFDMExec FDMExec;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+SENTRY
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-public:
+#ifndef _JSBSIM_HXX
+#define _JSBSIM_HXX
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+INCLUDES
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-    // copy FDM state to LaRCsim structures
-    int copy_to_JSBsim();
+#undef MAX_ENGINES
+#include <Aircraft/aircraft.hxx>
 
-    // copy FDM state from LaRCsim structures
-    int copy_from_JSBsim();
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+DEFINITIONS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+#define ID_JSBSIMXX "$Header JSBSim.hxx,v 1.4 2000/10/22 14:02:16 jsb Exp $"
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+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]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+CLASS DOCUMENTATION
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+/** 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
+    documentation for main for direction on running JSBSim apart from FlightGear.
+    @author Curtis L. Olson (original)
+    @author Tony Peden (Maintained and refined)
+    @version $Id$
+    @see main in file JSBSim.cpp (use main() wrapper for standalone usage)
+*/
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+CLASS DECLARATION
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-    // reset flight params to a specific position 
-    int init( double dt );
+class FGJSBsim: public FGInterface {
 
-    // update position based on inputs, positions, velocities, etc.
-    int update( int multiloop );
+public:
+    /// Constructor
+    FGJSBsim::FGJSBsim( double dt );
+    /// Destructor
+    FGJSBsim::~FGJSBsim();
+
+    /// copy FDM state to LaRCsim structures
+    bool copy_to_JSBsim();
+
+    /// copy FDM state from LaRCsim structures
+    bool copy_from_JSBsim();
+
+    /// Reset flight params to a specific position
+    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
+
+    /** 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
+
+    /// @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 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 );
+
+    /// @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);
+    //@}
+
+    /// @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);
+    //@}
+
+    /// @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);
+
+    /** 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 );
+    //@}
+
+    /** 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);
+
+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;
+
+    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;
+    
+    void snap_shot(void);
 };