]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim/models/FGFCS.h
sync with JSB JSBSim CVS
[flightgear.git] / src / FDM / JSBSim / models / FGFCS.h
index 9a99aded1560e8b71af172756d0ba9948251a19d..5c485c2bd01af1849d07c2c9289da3857b43bc96 100644 (file)
@@ -4,23 +4,23 @@
  Author:       Jon S. Berndt
  Date started: 12/12/98
 
- ------------- Copyright (C) 1999  Jon S. Berndt (jsb@hal-pc.org) -------------
+ ------------- Copyright (C) 1999  Jon S. Berndt (jon@jsbsim.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
+ 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
+ FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
  details.
 
- You should have received a copy of the GNU General Public License along with
+ 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., 59 Temple
  Place - Suite 330, Boston, MA  02111-1307, USA.
 
- Further information about the GNU General Public License can also be found on
+ Further information about the GNU Lesser General Public License can also be found on
  the world wide web at http://www.gnu.org.
 
 HISTORY
@@ -38,28 +38,20 @@ SENTRY
 INCLUDES
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#ifdef FGFS
-#  include <simgear/compiler.h>
-#  ifdef SG_HAVE_STD_INCLUDES
-#    include <vector>
-#  else
-#    include <vector.h>
-#  endif
-#else
-#  include <vector>
-#endif
+#include <iosfwd>
+#include <vector>
 
 #include <string>
-#include <models/flight_control/FGFCSComponent.h>
-#include <models/FGModel.h>
-#include <models/FGLGear.h>
-#include <input_output/FGXMLElement.h>
+#include "models/flight_control/FGFCSComponent.h"
+#include "models/FGModel.h"
+#include "models/FGLGear.h"
+#include "input_output/FGXMLFileRead.h"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_FCS "$Id$"
+#define ID_FCS "$Id: FGFCS.h,v 1.40 2011/10/31 14:54:41 bcoconni Exp $"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
@@ -74,81 +66,129 @@ CLASS DOCUMENTATION
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
 /** Encapsulates the Flight Control System (FCS) functionality.
-    This class owns and contains the list of FGFCSComponents
-    that define the control system for this aircraft. The config file for the
-    aircraft contains a description of the control path that starts at an input
-    or command and ends at an effector, e.g. an aerosurface. The FCS components
-    which comprise the control laws for an axis are defined sequentially in
-    the configuration file. For instance, for the X-15:
-
-    <pre>
-    \<flight_control name="X-15 SAS">
-      \<channel>
-        \<component name="Pitch Trim Sum" type="SUMMER">
+    This class also encapsulates the identical "system" and "autopilot" capability.
+    FGFCS owns and contains the list of FGFCSComponents
+    that define a system or systems for the modeled aircraft. The config file
+    for the aircraft contains a description of the control path that starts at
+    an input or command and ends at an effector, e.g. an aerosurface. The FCS
+    components which comprise the control laws for an axis are defined
+    sequentially in the configuration file. For instance, for the X-15:
+
+    @code
+    <flight_control name="X-15 SAS">
+      <channel>
+        <summer name="Pitch Trim Sum">
            <input> fcs/elevator-cmd-norm </input>
            <input> fcs/pitch-trim-cmd-norm </input>
            <clipto>
              <min>-1</min>
              <max>1</max>
            </clipto>
-        \</component>
+        </summer>
 
-        \<component name="Pitch Command Scale" TYPE="AEROSURFACE_SCALE">
+        <aerosurface_scale name="Pitch Command Scale">
           <input> fcs/pitch-trim-sum </input>
-          <limit>
+          <range>
             <min> -50 </min>
             <max>  50 </max>
-          </limit>
-        \</component>
+          </range>
+        </aerosurface_scale>
 
         ... etc.
-    </pre>
+    @endcode
 
     In the above case we can see the first few components of the pitch channel
-    defined. The input to the first component, as can be seen in the "Pitch trim
+    defined. The input to the first component (a summer), as can be seen in the "Pitch trim
     sum" component, is really the sum of two parameters: elevator command (from
-    the stick - a pilot input), and pitch trim. The type of this component is
-    "Summer".
+    the stick - a pilot input), and pitch trim.
     The next component created is an aerosurface scale component - a type of
     gain (see the LoadFCS() method for insight on how the various types of
     components map into the actual component classes).  This continues until the
     final component for an axis when the
-    \<output> element specifies where the output is supposed to go. See the
+    \<output> element is usually used to specify where the output is supposed to go. See the
     individual components for more information on how they are mechanized.
 
     Another option for the flight controls portion of the config file is that in
     addition to using the "NAME" attribute in,
 
-    <pre>
-    \<flight_control name="X-15 SAS">
-    </pre>
+    @code
+    <flight_control name="X-15 SAS">
+    @endcode
 
     one can also supply a filename:
 
-    <pre>
-    \<flight_control name="X-15 SAS" file="X15.xml">
-    \</flight_control>
-    </pre>
+    @code
+    <flight_control name="X-15 SAS" file="X15.xml">
+    </flight_control>
+    @endcode
 
     In this case, the FCS would be read in from another file.
 
+    <h2>Properties</h2>
+    @property fcs/aileron-cmd-norm normalized aileron command
+    @property fcs/elevator-cmd-norm normalized elevator command
+    @property fcs/rudder-cmd-norm
+    @property fcs/steer-cmd-norm
+    @property fcs/flap-cmd-norm
+    @property fcs/speedbrake-cmd-norm
+    @property fcs/spoiler-cmd-norm
+    @property fcs/pitch-trim-cmd-norm
+    @property fcs/roll-trim-cmd-norm
+    @property fcs/yaw-trim-cmd-norm
+    @property gear/gear-cmd-norm
+    @property fcs/left-aileron-pos-rad
+    @property fcs/left-aileron-pos-deg
+    @property fcs/left-aileron-pos-norm
+    @property fcs/mag-left-aileron-pos-rad
+    @property fcs/right-aileron-pos-rad
+    @property fcs/right-aileron-pos-deg
+    @property fcs/right-aileron-pos-norm
+    @property fcs/mag-right-aileron-pos-rad
+    @property fcs/elevator-pos-rad
+    @property fcs/elevator-pos-deg
+    @property fcs/elevator-pos-norm
+    @property fcs/mag-elevator-pos-rad
+    @property fcs/rudder-pos-rad
+    @property fcs/rudder-pos-deg
+    @property fcs/rudder-pos-norm
+    @property fcs/mag-rudder-pos-rad
+    @property fcs/flap-pos-rad
+    @property fcs/flap-pos-deg
+    @property fcs/flap-pos-norm
+    @property fcs/speedbrake-pos-rad
+    @property fcs/speedbrake-pos-deg
+    @property fcs/speedbrake-pos-norm
+    @property fcs/mag-speedbrake-pos-rad
+    @property fcs/spoiler-pos-rad
+    @property fcs/spoiler-pos-deg
+    @property fcs/spoiler-pos-norm
+    @property fcs/mag-spoiler-pos-rad
+    @property fcs/wing-fold-pos-norm
+    @property gear/gear-pos-norm
+    @property gear/tailhook-pos-norm
+
     @author Jon S. Berndt
-    @version $Id$
-    @see FGFCSComponent
-    @see FGXMLElement
+    @version $Revision: 1.40 $
+    @see FGActuator
+    @see FGDeadBand
+    @see FGFCSFunction
+    @see FGFilter
     @see FGGain
+    @see FGKinemat
+    @see FGPID
+    @see FGSensor
     @see FGSummer
     @see FGSwitch
-    @see FGGradient
-    @see FGFilter
-    @see FGDeadBand
+    @see FGFCSComponent
+    @see Element
 */
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 CLASS DECLARATION
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-class FGFCS : public FGModel {
+class FGFCS : public FGModel, public FGXMLFileRead
+{
 
 public:
   /** Constructor
@@ -157,115 +197,124 @@ public:
   /// Destructor
   ~FGFCS();
 
+  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
   //@{
   /** Gets the aileron command.
       @return aileron command in range from -1.0 - 1.0 */
-  inline double GetDaCmd(void) const { return DaCmd; }
+  double GetDaCmd(void) const { return DaCmd; }
 
   /** Gets the elevator command.
       @return elevator command in range from -1.0 - 1.0 */
-  inline double GetDeCmd(void) const { return DeCmd; }
+  double GetDeCmd(void) const { return DeCmd; }
 
   /** Gets the rudder command.
       @return rudder command in range from -1.0 - 1.0 */
-  inline double GetDrCmd(void) const { return DrCmd; }
+  double GetDrCmd(void) const { return DrCmd; }
 
   /** Gets the steering command.
       @return steering command in range from -1.0 - 1.0 */
-  inline double GetDsCmd(void) const { return DsCmd; }
+  double GetDsCmd(void) const { return DsCmd; }
 
   /** Gets the flaps command.
       @return flaps command in range from 0 to 1.0 */
-  inline double GetDfCmd(void) const { return DfCmd; }
+  double GetDfCmd(void) const { return DfCmd; }
 
   /** Gets the speedbrake command.
       @return speedbrake command in range from 0 to 1.0 */
-  inline double GetDsbCmd(void) const { return DsbCmd; }
+  double GetDsbCmd(void) const { return DsbCmd; }
 
   /** Gets the spoiler command.
       @return spoiler command in range from 0 to 1.0 */
-  inline double GetDspCmd(void) const { return DspCmd; }
+  double GetDspCmd(void) const { return DspCmd; }
 
   /** Gets the throttle command.
       @param engine engine ID number
       @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 */
-  inline double GetMixtureCmd(int engine) const { return MixtureCmd[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 */
-  inline double GetPropAdvanceCmd(int engine) const { return PropAdvanceCmd[engine]; }
+  double GetPropAdvanceCmd(int engine) const { return PropAdvanceCmd[engine]; }
 
   /** Gets the prop feather command.
       @param engine engine ID number
       @return feather command for the given engine (on / off)*/
-  inline bool GetFeatherCmd(int engine) const { return PropFeatherCmd[engine]; }
+  bool GetFeatherCmd(int engine) const { return PropFeatherCmd[engine]; }
 
   /** Gets the pitch trim command.
       @return pitch trim command in range from -1.0 to 1.0 */
-  inline double GetPitchTrimCmd(void) const { return PTrimCmd; }
+  double GetPitchTrimCmd(void) const { return PTrimCmd; }
 
   /** Gets the rudder trim command.
       @return rudder trim command in range from -1.0 - 1.0 */
-  inline double GetYawTrimCmd(void) const { return YTrimCmd; }
+  double GetYawTrimCmd(void) const { return YTrimCmd; }
 
   /** Gets the aileron trim command.
       @return aileron trim command in range from -1.0 - 1.0 */
-  inline double GetRollTrimCmd(void) const { return RTrimCmd; }
+  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; }
+  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 )
+  double GetDaLPos( int form = ofRad )
                          const { return DaLPos[form]; }
 
-  /// @name Aerosurface position retrieval
-  //@{
   /** Gets the right aileron position.
       @return aileron position in radians */
-  inline double GetDaRPos( int form = ofRad )
+  double GetDaRPos( int form = ofRad )
                          const { return DaRPos[form]; }
 
   /** Gets the elevator position.
       @return elevator position in radians */
-  inline double GetDePos( int form = ofRad )
+  double GetDePos( int form = ofRad )
                          const { return DePos[form]; }
 
   /** Gets the rudder position.
       @return rudder position in radians */
-  inline double GetDrPos( int form = ofRad )
+  double GetDrPos( int form = ofRad )
                          const { return DrPos[form]; }
 
   /** Gets the speedbrake position.
       @return speedbrake position in radians */
-  inline double GetDsbPos( int form = ofRad )
+  double GetDsbPos( int form = ofRad )
                          const { return DsbPos[form]; }
 
   /** Gets the spoiler position.
       @return spoiler position in radians */
-  inline double GetDspPos( int form = ofRad )
+  double GetDspPos( int form = ofRad )
                          const { return DspPos[form]; }
 
   /** Gets the flaps position.
       @return flaps position in radians */
-  inline double GetDfPos( int form = ofRad )
+  double GetDfPos( int form = ofRad )
                          const { return DfPos[form]; }
 
   /** Gets the throttle position.
@@ -273,96 +322,109 @@ public:
       @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 */
-  inline double GetMixturePos(int engine) const { return MixturePos[engine]; }
+  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) */
-  inline double GetGearPos(void) const { return GearPos; }
+  double GetGearPos(void) const { return GearPos; }
+
+  /** Gets the tailhook position (0 up, 1 down)
+      @return tailhook position (0 up, 1 down) */
+  double GetTailhookPos(void) const { return TailhookPos; }
+
+  /** Gets the wing fold position (0 unfolded, 1 folded)
+      @return wing fold position (0 unfolded, 1 folded) */
+  double GetWingFoldPos(void) const { return WingFoldPos; }
 
   /** Gets the prop pitch position.
       @param engine engine ID number
       @return prop pitch position for the given engine in range from 0 - 1.0 */
-  inline double GetPropAdvance(int engine) const { return PropAdvance[engine]; }
+  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)*/
-  inline bool GetPropFeather(int engine) const { return PropFeather[engine]; }
-  //@}
+  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 */
-  inline FGState* GetState(void) { return State; }
+  const vector<bool>& GetPropFeather() const { return PropFeather; }
+  //@}
 
   /** Retrieves all component names for inclusion in output stream
-      @param delimeter either a tab or comma string depending on output type
+      @param delimiter either a tab or comma string depending on output type
       @return a string containing the descriptive names for all components */
-  string GetComponentStrings(string delimeter);
+  std::string GetComponentStrings(const std::string& delimiter) const;
 
   /** Retrieves all component outputs for inclusion in output stream
-      @param delimeter either a tab or comma string depending on output type
+      @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 */
-  string GetComponentValues(string delimeter);
+  std::string GetComponentValues(const std::string& delimiter) const;
 
   /// @name Pilot input command setting
   //@{
   /** Sets the aileron command
       @param cmd aileron command */
-  inline void SetDaCmd( double cmd ) { DaCmd = cmd; }
+  void SetDaCmd( double cmd ) { DaCmd = cmd; }
 
   /** Sets the elevator command
       @param cmd elevator command in percent*/
-  inline void SetDeCmd(double cmd ) { DeCmd = cmd; }
+  void SetDeCmd(double cmd ) { DeCmd = cmd; }
 
   /** Sets the rudder command
       @param cmd rudder command in percent*/
-  inline void SetDrCmd(double cmd) { DrCmd = cmd; }
+  void SetDrCmd(double cmd) { DrCmd = cmd; }
 
   /** Sets the steering command
       @param cmd steering command in percent*/
-  inline void SetDsCmd(double cmd) { DsCmd = cmd; }
+  void SetDsCmd(double cmd) { DsCmd = cmd; }
 
   /** Sets the flaps command
       @param cmd flaps command in percent*/
-  inline void SetDfCmd(double cmd) { DfCmd = cmd; }
+  void SetDfCmd(double cmd) { DfCmd = cmd; }
 
   /** Sets the speedbrake command
       @param cmd speedbrake command in percent*/
-  inline void SetDsbCmd(double cmd) { DsbCmd = cmd; }
+  void SetDsbCmd(double cmd) { DsbCmd = cmd; }
 
   /** Sets the spoilers command
       @param cmd spoilers command in percent*/
-  inline void SetDspCmd(double cmd) { DspCmd = cmd; }
+  void SetDspCmd(double cmd) { DspCmd = cmd; }
 
   /** Sets the pitch trim command
       @param cmd pitch trim command in percent*/
-  inline void SetPitchTrimCmd(double cmd) { PTrimCmd = cmd; }
+  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; }
+  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; }
+  void SetRollTrimCmd(double cmd) { RTrimCmd = cmd; }
 
   /** 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
@@ -384,40 +446,40 @@ public:
   //@{
   /** Sets the left aileron position
       @param cmd left aileron position in radians*/
-  inline void SetDaLPos( int form , double pos );
+  void SetDaLPos( int form , double pos );
 
   /** Sets the right aileron position
       @param cmd right aileron position in radians*/
-  inline void SetDaRPos( int form , double pos );
+  void SetDaRPos( int form , double pos );
 
   /** Sets the elevator position
       @param cmd elevator position in radians*/
-  inline void SetDePos( int form , double pos );
+  void SetDePos( int form , double pos );
 
   /** Sets the rudder position
       @param cmd rudder position in radians*/
-  inline void SetDrPos( int form , double pos );
+  void SetDrPos( int form , double pos );
 
    /** Sets the flaps position
       @param cmd flaps position in radians*/
-  inline void SetDfPos( int form , double pos );
+  void SetDfPos( int form , double pos );
 
   /** Sets the speedbrake position
       @param cmd speedbrake position in radians*/
-  inline void SetDsbPos( int form , double pos );
+  void SetDsbPos( int form , double pos );
 
   /** Sets the spoiler position
       @param cmd spoiler position in radians*/
-  inline void SetDspPos( int form , double pos );
+  void SetDspPos( int form , double pos );
 
   /** 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
@@ -428,6 +490,13 @@ public:
       @param gear position 0 up, 1 down       */
    void SetGearPos(double gearpos) { GearPos = gearpos; }
 
+  /** Set the tailhook position
+      @param tailhook position 0 up, 1 down       */
+   void SetTailhookPos(double hookpos) { TailhookPos = hookpos; }
+
+  /** Set the wing fold position
+      @param wing fold position 0 unfolded, 1 folded  */
+   void SetWingFoldPos(double foldpos) { WingFoldPos = foldpos; }
 
   /** Sets the actual prop pitch setting for the specified engine
       @param engine engine ID number
@@ -444,60 +513,86 @@ public:
   //@{
   /** 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 BrakePos[FGLGear::bgLeft];}
+
+  /** Gets the right brake.
+      @return the right brake setting. */
+  double GetRBrake(void) const {return BrakePos[FGLGear::bgRight];}
+
+  /** Gets the center brake.
+      @return the center brake setting. */
+  double GetCBrake(void) const {return BrakePos[FGLGear::bgCenter];}
   //@}
 
+  enum SystemType { stFCS, stSystem, stAutoPilot }; 
+
   /** Loads the Flight Control System.
-      The FGAircraft instance is actually responsible for reading the config file
-      and calling the various Load() methods of the other systems, passing in
-      the XML Element instance pointer. Load() is called from FGAircraft.
+      Load() is called from FGFDMExec.
       @param el pointer to the Element instance
+      @param systype type of system (FCS, Autopilot, System) 
       @return true if succesful */
-  bool Load(Element* el);
+  bool Load(Element* el, SystemType systype);
+
+  std::ifstream* FindSystemFile(const std::string& system_filename);
+  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];
   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;
-  vector <bool> PropFeatherCmd;
-  vector <bool> PropFeather;
-  vector <double> SteerPosDeg;
+  std::vector <double> ThrottleCmd;
+  std::vector <double> ThrottlePos;
+  std::vector <double> MixtureCmd;
+  std::vector <double> MixturePos;
+  std::vector <double> PropAdvanceCmd;
+  std::vector <double> PropAdvance;
+  std::vector <bool> PropFeatherCmd;
+  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;
 
-  vector <FGFCSComponent*> FCSComponents;
-  vector <FGFCSComponent*> APComponents;
-  vector <double*> interface_properties;
-  vector <FGFCSComponent*> sensors;
+  typedef std::vector <FGFCSComponent*> FCSCompVec;
+  FCSCompVec Systems;
+  FCSCompVec FCSComponents;
+  FCSCompVec APComponents;
   void bind(void);
   void bindModel(void);
   void bindThrottle(unsigned int);
-  void unbind(FGPropertyManager *node);
   void Debug(int from);
 };
 }