]> git.mxchange.org Git - flightgear.git/commitdiff
Merge branch 'topics/mac-package' into next
authorJames Turner <zakalawe@mac.com>
Tue, 2 Nov 2010 10:27:44 +0000 (10:27 +0000)
committerJames Turner <zakalawe@mac.com>
Tue, 2 Nov 2010 10:27:44 +0000 (10:27 +0000)
src/Autopilot/digitalfilter.cxx
src/Autopilot/digitalfilter.hxx

index bdd39397a51b6dc97410e52a65188589ced08b1c..57bca13c86269977665dd5a0b8eee03309bbb7c7 100644 (file)
@@ -303,7 +303,8 @@ bool ExponentialFilterImplementation::configure( const std::string & nodeName, S
 /* --------------------------------------------------------------------------------- */
 
 DigitalFilter::DigitalFilter() :
-    AnalogComponent()
+    AnalogComponent(),
+    _initializeTo(INITIALIZE_INPUT)
 {
 }
 
@@ -335,6 +336,20 @@ bool DigitalFilter::configure(const string& nodeName, SGPropertyNode_ptr configN
     return true;
   }
 
+  if( nodeName == "initialize-to" ) {
+    string s( configNode->getStringValue() );
+    if( s == "input" ) {
+      _initializeTo = INITIALIZE_INPUT;
+    } else if( s == "output" ) {
+      _initializeTo = INITIALIZE_OUTPUT;
+    } else if( s == "none" ) {
+      _initializeTo = INITIALIZE_NONE;
+    } else {
+      SG_LOG( SG_AUTOPILOT, SG_WARN, "unhandled initialize-to value '" << s << "' ignored" );
+    }
+    return true;
+  }
+
   SG_LOG( SG_AUTOPILOT, SG_BULK, "DigitalFilter::configure(" << nodeName << ") [unhandled]" << endl );
   return false; // not handled by us, let the base class try
 }
@@ -344,8 +359,22 @@ void DigitalFilter::update( bool firstTime, double dt)
   if( _implementation == NULL ) return;
 
   if( firstTime ) {
-    SG_LOG(SG_AUTOPILOT,SG_DEBUG, "First time initialization of " << get_name() << " to " << _valueInput.get_value() );
-    _implementation->initialize( _valueInput.get_value() );
+    switch( _initializeTo ) {
+
+      case INITIALIZE_INPUT:
+        SG_LOG(SG_AUTOPILOT,SG_DEBUG, "First time initialization of " << get_name() << " to " << _valueInput.get_value() );
+        _implementation->initialize( _valueInput.get_value() );
+        break;
+
+      case INITIALIZE_OUTPUT:
+        SG_LOG(SG_AUTOPILOT,SG_DEBUG, "First time initialization of " << get_name() << " to " << get_output_value() );
+        _implementation->initialize( get_output_value() );
+        break;
+
+      default:
+        SG_LOG(SG_AUTOPILOT,SG_DEBUG, "First time initialization of " << get_name() << " to (uninitialized)" );
+        break;
+    }
   }
 
   double input = _valueInput.get_value() - _referenceInput.get_value();
index 4bc37a9045470e9711623ca8a26a0c4ef978fb9c..d9b0ac48d8d9500d7ca0af7ca941437e87cd3000 100644 (file)
@@ -53,6 +53,12 @@ class DigitalFilter : public AnalogComponent
 private:
     SGSharedPtr<DigitalFilterImplementation> _implementation;
 
+    enum InitializeTo {
+      INITIALIZE_OUTPUT,
+      INITIALIZE_INPUT,
+      INITIALIZE_NONE
+    };
+
 protected:
     bool configure( const std::string & nodeName, SGPropertyNode_ptr configNode);
     void update( bool firstTime, double dt);
@@ -61,6 +67,7 @@ protected:
     InputValueList _samples;
     InputValueList _rateOfChange;
     InputValueList _gain;
+    InitializeTo _initializeTo;
 
 public:
     DigitalFilter();