+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);