]> git.mxchange.org Git - flightgear.git/blobdiff - src/Autopilot/xmlauto.hxx
James Turner:
[flightgear.git] / src / Autopilot / xmlauto.hxx
index 26a92da828c625bafae261a439a7d8144db51e5a..07d5dd7ced1fa62562122b191f642b467ae1b4b3 100644 (file)
@@ -16,7 +16,7 @@
 //
 // You should have received a copy of the GNU General Public License
 // along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 //
 // $Id$
 
 
 #include <simgear/compiler.h>
 
-#include STL_STRING
+#include <string>
 #include <vector>
 #include <deque>
 
-SG_USING_STD(string);
-SG_USING_STD(vector);
-SG_USING_STD(deque);
+using std::string;
+using std::vector;
+using std::deque;
 
 #include <simgear/props/props.hxx>
 #include <simgear/structure/subsystem_mgr.hxx>
 
+#include <Main/fg_props.hxx>
+
 
 /**
  * Base class for other autopilot components
  */
 
-class FGXMLAutoComponent {
+class FGXMLAutoComponent : public SGReferenced {
 
 protected:
 
     string name;
 
-    SGPropertyNode *enable_prop;
+    SGPropertyNode_ptr enable_prop;
+    SGPropertyNode_ptr passive_mode;
     string enable_value;
+    bool honor_passive;
     bool enabled;
 
-    SGPropertyNode *input_prop;
-    SGPropertyNode *r_n_prop;
+    SGPropertyNode_ptr input_prop;
+    SGPropertyNode_ptr r_n_prop;
     double r_n_value;
-    vector <SGPropertyNode *> output_list;
+    vector <SGPropertyNode_ptr> output_list;
 
 public:
 
     FGXMLAutoComponent() :
       enable_prop( NULL ),
+      passive_mode( fgGetNode("/autopilot/locks/passive-mode", true) ),
       enable_value( "" ),
+      honor_passive( false ),
       enabled( false ),
       input_prop( NULL ),
       r_n_prop( NULL ),
@@ -105,6 +111,7 @@ private:
 
     // Configuration values
     double Kp;                  // proportional gain
+    SGPropertyNode_ptr Kp_prop;
 
     double alpha;               // low pass filter weighing factor (usually 0.1)
     double beta;                // process value weighing factor for
@@ -115,10 +122,13 @@ private:
                                 // (usually 0.0)
 
     double Ti;                  // Integrator time (sec)
+    SGPropertyNode_ptr Ti_prop;
     double Td;                  // Derivator time (sec)
-
+    SGPropertyNode_ptr Td_prop;
     double u_min;               // Minimum output clamp
+    SGPropertyNode_ptr umin_prop;
     double u_max;               // Maximum output clamp
+    SGPropertyNode_ptr umax_prop;
 
     // Previous state tracking values
     double ep_n_1;              // ep[n-1]  (prop error)
@@ -152,7 +162,8 @@ private:
     // proportional component data
     bool proportional;
     double Kp;
-    SGPropertyNode *offset_prop;
+    SGPropertyNode_ptr Kp_prop;
+    SGPropertyNode_ptr offset_prop;
     double offset_value;
 
     // integral component data
@@ -173,7 +184,9 @@ private:
     double r_scale;             // scale reference input from property system
 
     double u_min;               // Minimum output clamp
+    SGPropertyNode_ptr umin_prop;
     double u_max;               // Maximum output clamp
+    SGPropertyNode_ptr umax_prop;
 
     
 public:
@@ -232,9 +245,15 @@ private:
     double Tf;            // Filter time [s]
     unsigned int samples; // Number of input samples to average
     double rateOfChange;  // The maximum allowable rate of change [1/s]
+    double gainFactor;
+    double output_min_clamp;
+    double output_max_clamp;
+    SGPropertyNode_ptr gain_prop;
+
     deque <double> output;
     deque <double> input;
-    enum filterTypes { exponential, doubleExponential, movingAverage, noiseSpike };
+    enum filterTypes { exponential, doubleExponential, movingAverage,
+                       noiseSpike, gain, reciprocal };
     filterTypes filterType;
 
     bool debug;
@@ -269,12 +288,12 @@ public:
 
 protected:
 
-    typedef vector<FGXMLAutoComponent *> comp_list;
+    typedef vector<SGSharedPtr<FGXMLAutoComponent> > comp_list;
 
 private:
 
     bool serviceable;
-    SGPropertyNode *config_props;
+    SGPropertyNode_ptr config_props;
     comp_list components;
 };