]> git.mxchange.org Git - flightgear.git/blobdiff - src/Autopilot/newauto.hxx
Bugfix. The engine thrust is recalculated based on the current N1 value
[flightgear.git] / src / Autopilot / newauto.hxx
index 22c1db947fab8bdbff8a8714810950eadb73c823..a2670d319c61a1019440b20406e4aba6de03f7ac 100644 (file)
 #include <simgear/misc/props.hxx>
 #include <simgear/route/waypoint.hxx>
 
+#include <Main/fgfs.hxx>
 #include <Main/fg_props.hxx>
 
 // Structures
-class FGAutopilot {
+class FGAutopilot : public FGSubsystem
+{
 
 public:
 
@@ -50,9 +52,11 @@ public:
        FG_ALTITUDE_LOCK = 0,     // lock to a specific altitude
        FG_ALTITUDE_TERRAIN = 1,  // try to maintain a specific AGL
        FG_ALTITUDE_GS1 = 2,      // follow glide slope 1
-       FG_ALTITUDE_GS2 = 3       // follow glide slope 2
+       FG_ALTITUDE_GS2 = 3,      // follow glide slope 2
+        FG_ALTITUDE_ARM = 4       // ascend to selected altitude
     };
 
+
 private:
 
     bool heading_hold;         // the current state of the heading hold
@@ -71,15 +75,9 @@ private:
     double TargetHeading;      // the true heading the AP should steer to.
     double TargetAltitude;     // altitude to hold
     double TargetAGL;          // the terrain separation
-    SGPropertyNode *min_climb;           // minimum climb speed
-    SGPropertyNode *best_climb;          // best climb speed
-    SGPropertyNode *elevator_adj_factor; // factor to optimize altitude hold adjustments
-    SGPropertyNode *integral_contrib;    // amount of contribution of the integral
-                                // component of the pid
-    SGPropertyNode *TargetClimbRate;   // target climb rate
-    SGPropertyNode *TargetDescentRate; // target decent rate
+
     double TargetSpeed;                // speed to shoot for
-    double alt_error_accum;    // altitude error accumulator
+    double alt_error_accum;     // altitude error accumulator
     double climb_error_accum;  // climb error accumulator (for GS)
     double speed_error_accum;  // speed error accumulator
 
@@ -117,6 +115,7 @@ private:
     char TargetHeadingStr[64];
     char TargetAltitudeStr[64];
 
+    // property nodes
     SGPropertyNode *latitude_node;
     SGPropertyNode *longitude_node;
     SGPropertyNode *altitude_node;
@@ -124,6 +123,23 @@ private:
     SGPropertyNode *vertical_speed_node;
     SGPropertyNode *heading_node;
     SGPropertyNode *roll_node;
+    SGPropertyNode *pitch_node;
+
+    SGPropertyNode *min_climb;           // minimum climb speed
+    SGPropertyNode *best_climb;          // best climb speed
+    SGPropertyNode *elevator_adj_factor; // factor to optimize altitude hold adjustments
+    SGPropertyNode *integral_contrib;    // amount of contribution of the integral
+                                // component of the pid
+    SGPropertyNode *zero_pitch_throttle; // amount of throttle at which the aircraft does not pitch up
+    SGPropertyNode *zero_pitch_trim_full_throttle; // amount of trim required to level at full throttle
+    SGPropertyNode *max_aileron_node; // maximum aileron setting range -1 ~ 1
+    SGPropertyNode *max_roll_node; // maximum roll setting in degrees
+    SGPropertyNode *roll_out_node; // start rollout offset from desired heading in degrees
+    SGPropertyNode *roll_out_smooth_node; // rollout smoothing offset in degrees
+
+    SGPropertyNode *TargetClimbRate;   // target climb rate
+    SGPropertyNode *TargetDescentRate; // target decent rate
+    SGPropertyNode *current_throttle; // current throttle (engine 0)
 
 public:
 
@@ -133,15 +149,19 @@ public:
     // destructor
     ~FGAutopilot();
 
-    // Initialize autopilot system
-    void init();
+\f
+    ////////////////////////////////////////////////////////////////////
+    // Implementation of FGSubsystem.
+    ////////////////////////////////////////////////////////////////////
+
+    void init ();
+    void bind ();
+    void unbind ();
+    void update (double dt);
 
     // Reset the autopilot system
     void reset(void);
 
-    // run an interation of the autopilot (updates control positions)
-    int run();
-
     void AltitudeSet( double new_altitude );
     void AltitudeAdjust( double inc );
     void HeadingAdjust( double inc );
@@ -218,12 +238,46 @@ public:
     inline double get_RollOutSmooth() const { return RollOutSmooth; }
     inline void set_RollOutSmooth( double val ) { RollOutSmooth = val; }
 
-};
+private:
+
+    bool getAPAltitudeLock () const;
+    void setAPAltitudeLock (bool lock);
+    double getAPAltitude () const;
+    void setAPAltitude (double altitude);
+    bool getAPGSLock () const;
+    void setAPGSLock (bool lock);
+    bool getAPTerrainLock () const;
+    void setAPTerrainLock (bool lock);
+    double getAPClimb () const;
+    void setAPClimb (double rate);
+    bool getAPHeadingLock () const;
+    void setAPHeadingLock (bool lock);
+    double getAPHeadingBug () const;
+    void setAPHeadingBug (double heading);
+    bool getAPWingLeveler () const;
+    void setAPWingLeveler (bool lock);
+    bool getAPNAV1Lock () const;
+    void setAPNAV1Lock (bool lock);
+    bool getAPAutoThrottleLock () const;
+    void setAPAutoThrottleLock (bool lock);
+    double getAPRudderControl () const;
+    void setAPRudderControl (double value);
+    double getAPElevatorControl () const;
+    void setAPElevatorControl (double value);
+    double getAPThrottleControl () const;
+    void setAPThrottleControl (double value);
 
+};
 
-extern FGAutopilot *current_autopilot;
 
 #define DEFAULT_AP_HEADING_LOCK FGAutopilot::FG_DG_HEADING_LOCK
 // #define DEFAULT_AP_HEADING_LOCK FGAutopilot::FG_TRUE_HEADING_LOCK
+#define DEFAULT_AP_ALTITUDE_LOCK FGAutopilot::FG_ALTITUDE_LOCK
+
+
+/**
+ * static functions for autopilot properties
+ */
 
 #endif // _NEWAUTO_HXX
+