DEFINITIONS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-#define ID_FCS "$Id$"
+#define ID_FCS "$Id: FGFCS.h,v 1.40 2011/10/31 14:54:41 bcoconni Exp $"
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FORWARD DECLARATIONS
@property gear/tailhook-pos-norm
@author Jon S. Berndt
- @version $Revision$
+ @version $Revision: 1.40 $
@see FGActuator
@see FGDeadBand
@see FGFCSFunction
bool InitModel(void);
/** Runs the Flight Controls model; called by the Executive
+ Can pass in a value indicating if the executive is directing the simulation to Hold.
+ @param Holding if true, the executive has been directed to hold the sim from
+ advancing time. Some models may ignore this flag, such as the Input
+ model, which may need to be active to listen on a socket for the
+ "Resume" command to be given.
@return false if no error */
- bool Run(void);
+ bool Run(bool Holding);
/// @name Pilot input command retrieval
//@{
@return throttle command in range from 0 - 1.0 for the given engine */
double GetThrottleCmd(int engine) const;
+ const vector<double>& GetThrottleCmd() const {return ThrottleCmd;}
+
/** Gets the mixture command.
@param engine engine ID number
@return mixture command in range from 0 - 1.0 for the given engine */
double GetMixtureCmd(int engine) const { return MixtureCmd[engine]; }
+ const vector<double>& GetMixtureCmd() const {return MixtureCmd;}
+
/** Gets the prop pitch command.
@param engine engine ID number
@return pitch command in range from 0.0 - 1.0 for the given engine */
double GetDaLPos( int form = ofRad )
const { return DaLPos[form]; }
- /// @name Aerosurface position retrieval
- //@{
/** Gets the right aileron position.
@return aileron position in radians */
double GetDaRPos( int form = ofRad )
@return throttle position for the given engine in range from 0 - 1.0 */
double GetThrottlePos(int engine) const;
+ const vector<double>& GetThrottlePos() const {return ThrottlePos;}
+
/** Gets the mixture position.
@param engine engine ID number
@return mixture position for the given engine in range from 0 - 1.0 */
double GetMixturePos(int engine) const { return MixturePos[engine]; }
+ const vector<double>& GetMixturePos() const {return MixturePos;}
+
/** Gets the steering position.
@return steering position in degrees */
double GetSteerPosDeg(int gear) const { return SteerPosDeg[gear]; }
+ const vector<double>& GetSteerPosDeg() const {return SteerPosDeg;}
+
/** Gets the gear position (0 up, 1 down), defaults to down
@return gear position (0 up, 1 down) */
double GetGearPos(void) const { return GearPos; }
@return prop pitch position for the given engine in range from 0 - 1.0 */
double GetPropAdvance(int engine) const { return PropAdvance[engine]; }
+ const vector<double>& GetPropAdvance() const { return PropAdvance; }
+
/** Gets the prop feather position.
@param engine engine ID number
@return prop fether for the given engine (on / off)*/
bool GetPropFeather(int engine) const { return PropFeather[engine]; }
- //@}
- /** Retrieves the State object pointer.
- This is used by the FGFCS-owned components.
- @return pointer to the State object */
- FGState* GetState(void) { return State; }
+ const vector<bool>& GetPropFeather() const { return PropFeather; }
+ //@}
/** Retrieves all component names for inclusion in output stream
@param delimiter either a tab or comma string depending on output type
@return a string containing the descriptive names for all components */
- std::string GetComponentStrings(const std::string& delimiter);
+ std::string GetComponentStrings(const std::string& delimiter) const;
/** Retrieves all component outputs for inclusion in output stream
@param delimiter either a tab or comma string depending on output type
@return a string containing the numeric values for the current set of
component outputs */
- std::string GetComponentValues(const std::string& delimiter);
+ std::string GetComponentValues(const std::string& delimiter) const;
/// @name Pilot input command setting
//@{
/** Sets the throttle command for the specified engine
@param engine engine ID number
- @param cmd throttle command in percent (0 - 100)*/
+ @param cmd normalized throttle command (0.0 - 1.0)*/
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)*/
+ @param cmd normalized mixture command (0.0 - 1.0)*/
void SetMixtureCmd(int engine, double cmd);
/** Set the gear extend/retract command, defaults to down
/** Sets the actual throttle setting for the specified engine
@param engine engine ID number
- @param cmd throttle setting in percent (0 - 100)*/
+ @param cmd normalized throttle setting (0.0 - 1.0)*/
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)*/
+ @param cmd normalized mixture setting (0.0 - 1.0)*/
void SetMixturePos(int engine, double cmd);
/** Sets the steering position
//@{
/** Sets the left brake group
@param cmd brake setting in percent (0.0 - 1.0) */
- void SetLBrake(double cmd) {LeftBrake = cmd;}
+ void SetLBrake(double cmd) {BrakePos[FGLGear::bgLeft] = cmd;}
/** Sets the right brake group
@param cmd brake setting in percent (0.0 - 1.0) */
- void SetRBrake(double cmd) {RightBrake = cmd;}
+ void SetRBrake(double cmd) {BrakePos[FGLGear::bgRight] = cmd;}
/** Sets the center brake group
@param cmd brake setting in percent (0.0 - 1.0) */
- void SetCBrake(double cmd) {CenterBrake = cmd;}
+ void SetCBrake(double cmd) {BrakePos[FGLGear::bgCenter] = 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 */
double GetBrake(FGLGear::BrakeGroup bg);
+ const vector<double>& GetBrakePos() const {return BrakePos;}
+
/** Gets the left brake.
@return the left brake setting. */
- double GetLBrake(void) const {return LeftBrake;}
+ double GetLBrake(void) const {return BrakePos[FGLGear::bgLeft];}
/** Gets the right brake.
@return the right brake setting. */
- double GetRBrake(void) const {return RightBrake;}
+ double GetRBrake(void) const {return BrakePos[FGLGear::bgRight];}
/** Gets the center brake.
@return the center brake setting. */
- double GetCBrake(void) const {return CenterBrake;}
+ double GetCBrake(void) const {return BrakePos[FGLGear::bgCenter];}
//@}
enum SystemType { stFCS, stSystem, stAutoPilot };
std::string FindSystemFullPathname(const std::string& system_filename);
void AddThrottle(void);
- void AddGear(void);
+ void AddGear(unsigned int NumGear);
double GetDt(void);
FGPropertyManager* GetPropertyManager(void) { return PropertyManager; }
+ bool GetTrimStatus(void) const { return FDMExec->GetTrimStatus(); }
+
+ struct Inputs {
+ unsigned int NumGear;
+ } in;
+
private:
double DaCmd, DeCmd, DrCmd, DsCmd, DfCmd, DsbCmd, DspCmd;
double DePos[NForms], DaLPos[NForms], DaRPos[NForms], DrPos[NForms];
std::vector <bool> PropFeather;
std::vector <double> SteerPosDeg;
double LeftBrake, RightBrake, CenterBrake; // Brake settings
+ vector <double> BrakePos; // left, center, right - defined by FGLGear:: enum
double GearCmd,GearPos;
double TailhookPos, WingFoldPos;