]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim/models/flight_control/FGFilter.h
Sync. with JSBSim CVS
[flightgear.git] / src / FDM / JSBSim / models / flight_control / FGFilter.h
index 483730b5d29120722849fc987fb8dd1c42a9ee0e..efb03541cef6cd4f63575456105a6a01ec68aa73 100644 (file)
@@ -4,7 +4,7 @@
  Author:       Jon S. Berndt
  Date started: 4/2000
 
- ------------- Copyright (C) 2000 Jon S. Berndt jsb@hal-pc.org -------------
+ ------------- Copyright (C) 2000 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 Lesser General Public License as published by the Free Software
@@ -38,13 +38,12 @@ INCLUDES
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
 #include "FGFCSComponent.h"
-#include <input_output/FGXMLElement.h>
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_FILTER "$Id$"
+#define ID_FILTER "$Id: FGFilter.h,v 1.12 2009/10/24 22:59:30 jberndt Exp $"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
@@ -52,6 +51,10 @@ FORWARD DECLARATIONS
 
 namespace JSBSim {
 
+class Element;
+class FGPropertyManager;
+class FGFCS;
+
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 CLASS DOCUMENTATION
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
@@ -64,12 +67,12 @@ time domain. The general format for a filter specification is:
 @code
 <typename name="name">
   <input> property </input>
-  <c1> value </c1>
-  [<c2> value </c2>]
-  [<c3> value </c3>]
-  [<c4> value </c4>]
-  [<c5> value </c5>]
-  [<c6> value </c6>]
+  <c1> value|property </c1>
+  [<c2> value|property </c2>]
+  [<c3> value|property </c3>]
+  [<c4> value|property </c4>]
+  [<c5> value|property </c5>]
+  [<c6> value|property </c6>]
   [<clipto>
     <min> {[-]property name | value} </min>
     <max> {[-]property name | value} </max>
@@ -91,7 +94,7 @@ the corresponding filter definition is:
 @code
 <lag_filter name="name">
   <input> property </input>
-  <c1> value </c1>
+  <c1> value|property </c1>
   [<clipto>
     <min> {[-]property name | value} </min>
     <max> {[-]property name | value} </max>
@@ -130,10 +133,10 @@ The corresponding filter definition is:
 @code
 <lead_lag_filter name="name">
   <input> property </input>
-  <c1> value <c/1>
-  <c2> value <c/2>
-  <c3> value <c/3>
-  <c4> value <c/4>
+  <c1> value|property <c/1>
+  <c2> value|property <c/2>
+  <c3> value|property <c/3>
+  <c4> value|property <c/4>
   [<clipto>
     <min> {[-]property name | value} </min>
     <max> {[-]property name | value} </max>
@@ -177,12 +180,12 @@ The corresponding filter definition is:
 @code
 <second_order_filter name="name">
   <input> property </input>
-  <c1> value </c1>
-  <c2> value </c2>
-  <c3> value </c3>
-  <c4> value </c4>
-  <c5> value </c5>
-  <c6> value </c6>
+  <c1> value|property </c1>
+  <c2> value|property </c2>
+  <c3> value|property </c3>
+  <c4> value|property </c4>
+  <c5> value|property </c5>
+  <c6> value|property </c6>
   [<clipto>
     <min> {[-]property name | value} </min>
     <max> {[-]property name | value} </max>
@@ -204,7 +207,7 @@ The corresponding filter definition is:
 @code
 <integrator name="name">
   <input> property </input>
-  <c1> value </c1>
+  <c1> value|property </c1>
   [<trigger> property </trigger>]
   [<clipto>
     <min> {[-]property name | value} </min>
@@ -225,7 +228,7 @@ is so that the last component in a "string" can copy its value to the appropriat
 output, such as the elevator, or speedbrake, etc.
 
 @author Jon S. Berndt
-@version $Revision$
+@version $Revision: 1.12 $
 
 */
 
@@ -244,27 +247,27 @@ public:
   /** When true, causes previous values to be set to current values. This
       is particularly useful for first pass. */
   bool Initialize;
-
+  void ResetPastStates(void) {Input = 0.0; Initialize = true;}
+  
   enum {eLag, eLeadLag, eOrder2, eWashout, eIntegrator, eUnknown} FilterType;
 
 private:
-  double dt;
   double ca;
   double cb;
   double cc;
   double cd;
   double ce;
-  double C1;
-  double C2;
-  double C3;
-  double C4;
-  double C5;
-  double C6;
+  double C[7]; // There are 6 coefficients, indexing is "1" based.
+  double PropertySign[7];
   double PreviousInput1;
   double PreviousInput2;
   double PreviousOutput1;
   double PreviousOutput2;
   FGPropertyManager* Trigger;
+  FGPropertyManager* PropertyNode[7];
+  void CalculateDynamicFilters(void);
+  void ReadFilterCoefficients(Element* el, int index);
+  bool DynamicFilter;
   void Debug(int from);
 };
 }