]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim/FGFCS.h
Updated to match changes in radiostack.[ch]xx
[flightgear.git] / src / FDM / JSBSim / FGFCS.h
index c334935f09b66cd11cf4a5b6f1c9702ce4722c6a..fa0a8baf1e5276ded634055ee132fa0ca3fb5d30 100644 (file)
@@ -40,7 +40,7 @@ INCLUDES
 
 #ifdef FGFS
 #  include <simgear/compiler.h>
-#  ifdef FG_HAVE_STD_INCLUDES
+#  ifdef SG_HAVE_STD_INCLUDES
 #    include <vector>
 #  else
 #    include <vector.h>
@@ -59,12 +59,15 @@ INCLUDES
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_FCS "$Header"
+#define ID_FCS "$Id$"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
+typedef enum { iDe=0, iDaL, iDaR, iDr, iDsb, iDsp, iDf, NNorm } FcIdx;
+typedef enum { ofRad=0, ofNorm, ofMag , NForms} OutputForm;
+
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
@@ -146,8 +149,11 @@ CLASS DOCUMENTATION
     @see FGSwitch
     @see FGGradient
     @see FGFilter
-    @see FGFlaps
     @see FGDeadBand
+    @see <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/jsbsim/JSBSim/FGFCS.h?rev=HEAD&content-type=text/vnd.viewcvs-markup">
+         Header File </a>
+    @see <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/jsbsim/JSBSim/FGFCS.cpp?rev=HEAD&content-type=text/vnd.viewcvs-markup">
+         Source File </a>
 */
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -161,7 +167,7 @@ public:
       @param Executive a pointer to the parent executive object */
   FGFCS(FGFDMExec*);
   /// Destructor
-  ~FGFCS(void);
+  ~FGFCS();
 
   /** Runs the Flight Controls model; called by the Executive
       @return false if no error */
@@ -170,141 +176,276 @@ public:
   /// @name Pilot input command retrieval
   //@{
   /** Gets the aileron command.
-      @return aileron command in radians */
-  inline float GetDaCmd(void) { return DaCmd; }
+      @return aileron command in percent */
+  inline double GetDaCmd(void) const { return DaCmd; }
+  
   /** Gets the elevator command.
-      @return elevator command in radians */
-  inline float GetDeCmd(void) { return DeCmd; }
+      @return elevator command in percent */
+  inline double GetDeCmd(void) const { return DeCmd; }
+
   /** Gets the rudder command.
-      @return rudder command in radians */
-  inline float GetDrCmd(void) { return DrCmd; }
+      @return rudder command in percent */
+  inline double GetDrCmd(void) const { return DrCmd; }
+
   /** Gets the flaps command.
-      @return flaps command in radians */
-  inline float GetDfCmd(void) { return DfCmd; }
+      @return flaps command in percent */
+  inline double GetDfCmd(void) const { return DfCmd; }
+
   /** Gets the speedbrake command.
-      @return speedbrake command in radians */
-  inline float GetDsbCmd(void) { return DsbCmd; }
+      @return speedbrake command in percent */
+  inline double GetDsbCmd(void) const { return DsbCmd; }
+
   /** Gets the spoiler command.
-      @return spoiler command in radians */
-  inline float GetDspCmd(void) { return DspCmd; }
+      @return spoiler command in percent */
+  inline double GetDspCmd(void) const { return DspCmd; }
+
   /** Gets the throttle command.
       @param engine engine ID number
       @return throttle command in percent ( 0 - 100) for the given engine */
-  inline float GetThrottleCmd(int engine) { return ThrottleCmd[engine]; }
+  double GetThrottleCmd(int engine) const;
+
+  /** Gets the mixture command.
+      @param engine engine ID number
+      @return mixture command in percent ( 0 - 100) for the given engine */
+  inline double GetMixtureCmd(int engine) const { return MixtureCmd[engine]; }
+
+  /** Gets the prop pitch command.
+      @param engine engine ID number
+      @return pitch command in percent ( 0.0 - 1.0) for the given engine */
+  inline double GetPropAdvanceCmd(int engine) const { return PropAdvanceCmd[engine]; }
+
   /** Gets the pitch trim command.
-      @return pitch trim command in radians */
-  inline float GetPitchTrimCmd(void) { return PTrimCmd; }
-  //@}
+      @return pitch trim command in percent */
+  inline double GetPitchTrimCmd(void) const { return PTrimCmd; }
+  
+  /** Gets the rudder trim command.
+      @return rudder trim command in percent */
+  inline double GetYawTrimCmd(void) const { return YTrimCmd; }
+  
+  /** Gets the aileron trim command.
+      @return aileron trim command in percent */
+  inline double GetRollTrimCmd(void) const { return RTrimCmd; }
   
+  /** Get the gear extend/retract command. 0 commands gear up, 1 down.
+      defaults to down.
+      @return the current value of the gear extend/retract command*/
+  inline double GetGearCmd(void) const { return GearCmd; }    
+  //@}
+
+  /// @name Aerosurface position retrieval
+  //@{
+  /** Gets the left aileron position.
+      @return aileron position in radians */
+  inline double GetDaLPos( int form = ofRad ) 
+                         const { return DaLPos[form]; }
+
   /// @name Aerosurface position retrieval
   //@{
-  /** Gets the aileron position.
+  /** Gets the right aileron position.
       @return aileron position in radians */
-  inline float GetDaPos(void) { return DaPos; }
+  inline double GetDaRPos( int form = ofRad ) 
+                         const { return DaRPos[form]; }
+
   /** Gets the elevator position.
       @return elevator position in radians */
-  inline float GetDePos(void) { return DePos; }
+  inline double GetDePos( int form = ofRad ) 
+                         const { return DePos[form]; }
   /** Gets the rudder position.
       @return rudder position in radians */
-  inline float GetDrPos(void) { return DrPos; }
-  /** Gets the flaps position.
-      @return flaps position in radians */
-  inline float GetDfPos(void) { return DfPos; }
+  inline double GetDrPos( int form = ofRad ) 
+                         const { return DrPos[form]; }
+
   /** Gets the speedbrake position.
       @return speedbrake position in radians */
-  inline float GetDsbPos(void) { return DsbPos; }
+  inline double GetDsbPos( int form = ofRad ) 
+                         const { return DsbPos[form]; }
+
   /** Gets the spoiler position.
       @return spoiler position in radians */
-  inline float GetDspPos(void) { return DspPos; }
+  inline double GetDspPos( int form = ofRad ) 
+                         const { return DspPos[form]; }
+  
+  /** Gets the flaps position.
+      @return flaps position in radians */
+  inline double GetDfPos( int form = ofRad ) 
+                         const { return DfPos[form]; }
+                         
   /** Gets the throttle position.
       @param engine engine ID number
       @return throttle position for the given engine in percent ( 0 - 100)*/
-  inline float GetThrottlePos(int engine) { return ThrottlePos[engine]; }
+  double GetThrottlePos(int engine) const;
+
+  /** Gets the mixture position.
+      @param engine engine ID number
+      @return mixture position for the given engine in percent ( 0 - 100)*/
+  inline double GetMixturePos(int engine) const { return MixturePos[engine]; }
+  
+  /** Gets the gear position (0 up, 1 down), defaults to down
+      @return gear position (0 up, 1 down) */
+  inline double GetGearPos(void) const { return GearPos; }    
+
+  /** Gets the prop pitch position.
+      @param engine engine ID number
+      @return prop pitch position for the given engine in percent ( 0.0-1.0)*/
+  inline double GetPropAdvance(int engine) const { return PropAdvance[engine]; }
   //@}
 
   /** Retrieves the State object pointer.
       This is used by the FGFCS-owned components.
       @return pointer to the State object */
   inline FGState* GetState(void) { return State; }
+
   /** Retrieves a components output value
       @param idx the index of the component (the component ID)
       @return output value from the component */
-  float GetComponentOutput(eParam idx);
+  double GetComponentOutput(int idx);
+
   /** Retrieves the component name
       @param idx the index of the component (the component ID)
       @return name of the component */
   string GetComponentName(int idx);
 
+  /** Retrieves all component names for inclusion in output stream */
+  string GetComponentStrings(void);
+
+  /** Retrieves all component outputs for inclusion in output stream */
+  string GetComponentValues(void);
+
   /// @name Pilot input command setting
   //@{
   /** Sets the aileron command
-      @param cmd aileron command in radians*/
-  inline void SetDaCmd(float cmd) { DaCmd = cmd; }
+      @param cmd aileron command in percent*/
+  inline void SetDaCmd( double cmd ) { DaCmd = cmd; }
+
   /** Sets the elevator command
-      @param cmd elevator command in radians*/
-  inline void SetDeCmd(float cmd) { DeCmd = cmd; }
+      @param cmd elevator command in percent*/
+  inline void SetDeCmd(double cmd ) { DeCmd = cmd; }
+
   /** Sets the rudder command
-      @param cmd rudder command in radians*/
-  inline void SetDrCmd(float cmd) { DrCmd = cmd; }
+      @param cmd rudder command in percent*/
+  inline void SetDrCmd(double cmd) { DrCmd = cmd; }
+
   /** Sets the flaps command
-      @param cmd flaps command in radians*/
-  inline void SetDfCmd(float cmd) { DfCmd = cmd; }
+      @param cmd flaps command in percent*/
+  inline void SetDfCmd(double cmd) { DfCmd = cmd; }
+
   /** Sets the speedbrake command
-      @param cmd speedbrake command in radians*/
-  inline void SetDsbCmd(float cmd) { DsbCmd = cmd; }
+      @param cmd speedbrake command in percent*/
+  inline void SetDsbCmd(double cmd) { DsbCmd = cmd; }
+
   /** Sets the spoilers command
-      @param cmd spoilers command in radians*/
-  inline void SetDspCmd(float cmd) { DspCmd = cmd; }
+      @param cmd spoilers command in percent*/
+  inline void SetDspCmd(double cmd) { DspCmd = cmd; }
+
   /** Sets the pitch trim command
-      @param cmd pitch trim command in radians*/
-  inline void SetPitchTrimCmd(float cmd) { PTrimCmd = cmd; }
+      @param cmd pitch trim command in percent*/
+  inline void SetPitchTrimCmd(double cmd) { PTrimCmd = cmd; }
+
+  /** Sets the rudder trim command
+      @param cmd rudder trim command in percent*/
+  inline void SetYawTrimCmd(double cmd) { YTrimCmd = cmd; }
+
+  /** Sets the aileron trim command
+      @param cmd aileron trim command in percent*/
+  inline void SetRollTrimCmd(double cmd) { RTrimCmd = cmd; }
+
   /** Sets the throttle command for the specified engine
-      @param engine engine ID number 
+      @param engine engine ID number
       @param cmd throttle command in percent (0 - 100)*/
-  inline void SetThrottleCmd(int engine, float cmd);
+  void SetThrottleCmd(int engine, double cmd);
+
+  /** Sets the mixture command for the specified engine
+      @param engine engine ID number
+      @param cmd mixture command in percent (0 - 100)*/
+  void SetMixtureCmd(int engine, double cmd);
+  
+  /** Set the gear extend/retract command, defaults to down
+      @param gear command 0 for up, 1 for down */
+   void SetGearCmd(double gearcmd) { GearCmd = gearcmd; }   
+
+  /** Sets the propeller pitch command for the specified engine
+      @param engine engine ID number
+      @param cmd mixture command in percent (0.0 - 1.0)*/
+  void SetPropAdvanceCmd(int engine, double cmd);
   //@}
 
   /// @name Aerosurface position setting
   //@{
-  /** Sets the aileron position
-      @param cmd aileron position in radians*/
-  inline void SetDaPos(float cmd) { DaPos = cmd; }
+  /** Sets the left aileron position
+      @param cmd left aileron position in radians*/
+  inline void SetDaLPos( int form , double pos ) 
+                                      { DaLPos[form] = pos; }
+
+  /** Sets the right aileron position
+      @param cmd right aileron position in radians*/
+  inline void SetDaRPos( int form , double pos ) 
+                                      { DaRPos[form] = pos; }
+
   /** Sets the elevator position
       @param cmd elevator position in radians*/
-  inline void SetDePos(float cmd) { DePos = cmd; }
+  inline void SetDePos( int form , double pos ) 
+                                      { DePos[form] = pos; }
+
   /** Sets the rudder position
       @param cmd rudder position in radians*/
-  inline void SetDrPos(float cmd) { DrPos = cmd; }
-  /** Sets the flaps position
+  inline void SetDrPos( int form , double pos ) 
+                                      { DrPos[form] = pos; }
+   /** Sets the flaps position
       @param cmd flaps position in radians*/
-  inline void SetDfPos(float cmd) { DfPos = cmd; }
+  inline void SetDfPos( int form , double pos ) 
+                                      { DfPos[form] = pos; }
+  
   /** Sets the speedbrake position
       @param cmd speedbrake position in radians*/
-  inline void SetDsbPos(float cmd) { DsbPos = cmd; }
+  inline void SetDsbPos( int form , double pos ) 
+                                      { DsbPos[form] = pos; }
+
   /** Sets the spoiler position
       @param cmd spoiler position in radians*/
-  inline void SetDspPos(float cmd) { DspPos = cmd; }
+  inline void SetDspPos( int form , double pos ) 
+                                      { DspPos[form] = pos; }
   /** Sets the actual throttle setting for the specified engine
-      @param engine engine ID number 
+      @param engine engine ID number
       @param cmd throttle setting in percent (0 - 100)*/
-  inline void SetThrottlePos(int engine, float cmd);
+  void SetThrottlePos(int engine, double cmd);
+
+  /** Sets the actual mixture setting for the specified engine
+      @param engine engine ID number
+      @param cmd mixture setting in percent (0 - 100)*/
+  void SetMixturePos(int engine, double cmd);
+  
+  /** Set the gear extend/retract position, defaults to down
+      @param gear position 0 up, 1 down       */
+   void SetGearPos(double gearpos) { GearPos = gearpos; }   
+
+
+  /** Sets the actual prop pitch setting for the specified engine
+      @param engine engine ID number
+      @param cmd prop pitch setting in percent (0.0 - 1.0)*/
+  void SetPropAdvance(int engine, double cmd);
   //@}
 
   /// @name Landing Gear brakes
   //@{
   /** Sets the left brake group
       @param cmd brake setting in percent (0.0 - 1.0) */
-  void SetLBrake(float cmd) {LeftBrake = cmd;}
+  void SetLBrake(double cmd) {LeftBrake = cmd;}
+
   /** Sets the right brake group
       @param cmd brake setting in percent (0.0 - 1.0) */
-  void SetRBrake(float cmd) {RightBrake = cmd;}
+  void SetRBrake(double cmd) {RightBrake = cmd;}
+
   /** Sets the center brake group
       @param cmd brake setting in percent (0.0 - 1.0) */
-  void SetCBrake(float cmd) {CenterBrake = cmd;}
+  void SetCBrake(double cmd) {CenterBrake = cmd;}
+
   /** Gets the brake for a specified group.
       @param bg which brakegroup to retrieve the command for
       @return the brake setting for the supplied brake group argument */
-  float GetBrake(FGLGear::eBrakeGroup bg);
+  double GetBrake(FGLGear::BrakeGroup bg);
   //@}
 
   /** Loads the Flight Control System.
@@ -313,24 +454,39 @@ public:
       the config file instance pointer. LoadFCS() is called from FGAircraft.
       @param AC_cfg pointer to the config file instance
       @return true if succesful */
-  bool LoadFCS(FGConfigFile* AC_cfg);
+  bool Load(FGConfigFile* AC_cfg);
+
+  void AddThrottle(void);
   
-  /** The name of the flight control laws for this aircraft.
-      This is given in the config file, and is not used for anything currently.*/
-  string FCSName;
+  FGPropertyManager* GetPropertyManager(void) { return PropertyManager; }
+  
+  void bind(void);
+  void bindModel(void);
+  void unbind(void);
   
 private:
-  float DaCmd, DeCmd, DrCmd, DfCmd, DsbCmd, DspCmd;
-  float DaPos, DePos, DrPos, DfPos, DsbPos, DspPos;
-  float PTrimCmd;
-  float ThrottleCmd[MAX_ENGINES];       // Needs to be changed: s/b no limit
-  float ThrottlePos[MAX_ENGINES];       // Needs to be changed: s/b no limit
-  float LeftBrake, RightBrake, CenterBrake; // Brake settings
+  double DaCmd, DeCmd, DrCmd, DfCmd, DsbCmd, DspCmd;
+  double DePos[NForms], DaLPos[NForms], DaRPos[NForms], DrPos[NForms];  
+  double DfPos[NForms], DsbPos[NForms], DspPos[NForms];
+  double PTrimCmd, YTrimCmd, RTrimCmd;
+  vector <double> ThrottleCmd;
+  vector <double> ThrottlePos;
+  vector <double> MixtureCmd;
+  vector <double> MixturePos;
+  vector <double> PropAdvanceCmd;
+  vector <double> PropAdvance;
+  double LeftBrake, RightBrake, CenterBrake; // Brake settings
+  double GearCmd,GearPos;
+  
+  bool DoNormalize;
+  void Normalize(void);
 
   vector <FGFCSComponent*> Components;
-
+  int ToNormalize[NNorm];
+  void Debug(int from);
 };
 
 #include "FGState.h"
 
 #endif
+