X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FJSBSim%2FJSBSim.hxx;h=80b3f3c3aaac930a1d3174c7cdf6d663884dc50f;hb=c112b8b8e169a427e8cb0da871347e5c10031479;hp=55dcbc453421f16f9ae1de34d3fed87b17224b41;hpb=1b6cde22dcf46d9b44c99ee979c14b9317c47b8d;p=flightgear.git diff --git a/src/FDM/JSBSim/JSBSim.hxx b/src/FDM/JSBSim/JSBSim.hxx index 55dcbc453..80b3f3c3a 100644 --- a/src/FDM/JSBSim/JSBSim.hxx +++ b/src/FDM/JSBSim/JSBSim.hxx @@ -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,6 @@ INCLUDES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ #undef MAX_ENGINES -#include /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DEFINITIONS @@ -53,28 +52,29 @@ DEFINITIONS FORWARD DECLARATIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#include +#include #include -class FGState; +namespace JSBSim { class FGAtmosphere; +class FGWinds; class FGFCS; class FGPropulsion; class FGMassBalance; class FGAerodynamics; class FGInertial; class FGAircraft; -class FGTranslation; -class FGRotation; -class FGPosition; +class FGPropagate; class FGAuxiliary; class FGOutput; class FGInitialCondition; +class FGLocation; +class FGAccelerations; +} -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -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 @@ -87,7 +87,7 @@ 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) */ @@ -112,21 +112,30 @@ public: /// Reset flight params to a specific position void init(); + /// Unbind properties + void unbind(); + + /// Suspend integration + void suspend(); + + /// Resume integration + void resume(); + /// @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 //@} @@ -136,33 +145,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 @@ -181,69 +190,118 @@ public: //@{ /** Sets the atmospheric static pressure @param p pressure in psf */ - void set_Static_pressure(double p); +// void set_Static_pressure(double p); /** Sets the atmospheric temperature @param T temperature in degrees rankine */ - void set_Static_temperature(double T); +// void set_Static_temperature(double T); /** Sets the atmospheric density. @param rho air density slugs/cubic foot */ - void set_Density(double rho); +// 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 ); /// @name Position Parameter Update //@{ /** Update the position based on inputs, positions, velocities, etc. - @param multiloop number of times to loop through the FDM - @return true if successful */ - void update( int multiloop ); + @param dt delta time in seconds. */ + void update(double dt); + bool ToggleDataLogging(bool state); bool ToggleDataLogging(void); - 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::FGWinds* Winds; + 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; + JSBSim::FGAccelerations* Accelerations; 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_ptr gear_pos_pct; + SGPropertyNode_ptr wing_fold_pos_pct; + SGPropertyNode_ptr tailhook_pos_pct; + + SGPropertyNode_ptr temperature; + SGPropertyNode_ptr pressure; + SGPropertyNode_ptr pressureSL; + SGPropertyNode_ptr ground_wind; + SGPropertyNode_ptr turbulence_gain; + SGPropertyNode_ptr turbulence_rate; + SGPropertyNode_ptr turbulence_model; + + SGPropertyNode_ptr wind_from_north; + SGPropertyNode_ptr wind_from_east; + SGPropertyNode_ptr wind_from_down; + + SGPropertyNode_ptr slaved; + + static std::map TURBULENCE_TYPE_NAMES; + + double last_hook_tip[3]; + double last_hook_root[3]; + JSBSim::FGColumnVector3 hook_root_struct; + double hook_length; + bool got_wire; + + bool crashed; + + void do_trim(void); + + bool update_ground_cache(JSBSim::FGLocation cart, double* cart_pos, double dt); void init_gear(void); void update_gear(void); - + + void update_external_forces(double t_off); };