Преглед на файлове

Plumb default period setting into transition controller

Chris Mullins преди 6 години
родител
ревизия
de475a1c52

+ 1 - 1
lib/Transitions/ChangeFieldOnFinishTransition.cpp

@@ -7,7 +7,7 @@ ChangeFieldOnFinishTransition::Builder::Builder(
   uint16_t arg,
   std::shared_ptr<Transition::Builder> delegate
 )
-  : Transition::Builder(delegate->id, delegate->bulbId, delegate->callback, delegate->getMaxSteps())
+  : Transition::Builder(delegate->id, delegate->defaultPeriod, delegate->bulbId, delegate->callback, delegate->getMaxSteps())
   , delegate(delegate)
   , field(field)
   , arg(arg)

+ 2 - 2
lib/Transitions/ColorTransition.cpp

@@ -1,8 +1,8 @@
 #include <ColorTransition.h>
 #include <Arduino.h>
 
-ColorTransition::Builder::Builder(size_t id, const BulbId& bulbId, TransitionFn callback, const ParsedColor& start, const ParsedColor& end)
-  : Transition::Builder(id, bulbId, callback, calculateMaxDistance(start, end))
+ColorTransition::Builder::Builder(size_t id, uint16_t defaultPeriod, const BulbId& bulbId, TransitionFn callback, const ParsedColor& start, const ParsedColor& end)
+  : Transition::Builder(id, defaultPeriod, bulbId, callback, calculateMaxDistance(start, end))
   , start(start)
   , end(end)
 { }

+ 1 - 1
lib/Transitions/ColorTransition.h

@@ -16,7 +16,7 @@ public:
 
   class Builder : public Transition::Builder {
   public:
-    Builder(size_t id, const BulbId& bulbId, TransitionFn callback, const ParsedColor& start, const ParsedColor& end);
+    Builder(size_t id, uint16_t defaultPeriod, const BulbId& bulbId, TransitionFn callback, const ParsedColor& start, const ParsedColor& end);
 
     virtual std::shared_ptr<Transition> _build() const override;
 

+ 2 - 1
lib/Transitions/FieldTransition.cpp

@@ -2,9 +2,10 @@
 #include <cmath>
 #include <algorithm>
 
-FieldTransition::Builder::Builder(size_t id, const BulbId& bulbId, TransitionFn callback, GroupStateField field, uint16_t start, uint16_t end)
+FieldTransition::Builder::Builder(size_t id, uint16_t defaultPeriod, const BulbId& bulbId, TransitionFn callback, GroupStateField field, uint16_t start, uint16_t end)
   : Transition::Builder(
       id,
+      defaultPeriod,
       bulbId,
       callback,
       max(

+ 1 - 1
lib/Transitions/FieldTransition.h

@@ -12,7 +12,7 @@ public:
 
   class Builder : public Transition::Builder {
   public:
-    Builder(size_t id, const BulbId& bulbId, TransitionFn callback, GroupStateField field, uint16_t start, uint16_t end);
+    Builder(size_t id, uint16_t defaultPeriod, const BulbId& bulbId, TransitionFn callback, GroupStateField field, uint16_t start, uint16_t end);
 
     virtual std::shared_ptr<Transition> _build() const override;
 

+ 4 - 3
lib/Transitions/Transition.cpp

@@ -2,8 +2,9 @@
 #include <Arduino.h>
 #include <cmath>
 
-Transition::Builder::Builder(size_t id, const BulbId& bulbId, TransitionFn callback, size_t maxSteps)
+Transition::Builder::Builder(size_t id, uint16_t defaultPeriod, const BulbId& bulbId, TransitionFn callback, size_t maxSteps)
   : id(id)
+  , defaultPeriod(defaultPeriod)
   , bulbId(bulbId)
   , callback(callback)
   , duration(0)
@@ -111,14 +112,14 @@ std::shared_ptr<Transition> Transition::Builder::build() {
 
   if (numSet == 0) {
     setDuration(DEFAULT_DURATION);
-    setDurationAwarePeriod(DEFAULT_PERIOD, duration, maxSteps);
+    setDurationAwarePeriod(defaultPeriod, duration, maxSteps);
   } else if (numSet == 1) {
     // If duration is unbound, bind it
     if (! isSetDuration()) {
       setDurationRaw(DEFAULT_DURATION);
     // Otherwise, bind the period
     } else {
-      setDurationAwarePeriod(DEFAULT_PERIOD, duration, maxSteps);
+      setDurationAwarePeriod(defaultPeriod, duration, maxSteps);
     }
   }
 

+ 3 - 7
lib/Transitions/Transition.h

@@ -18,7 +18,7 @@ public:
 
   class Builder {
   public:
-    Builder(size_t id, const BulbId& bulbId, TransitionFn callback, size_t maxSteps);
+    Builder(size_t id, uint16_t defaultPeriod, const BulbId& bulbId, TransitionFn callback, size_t maxSteps);
 
     Builder& setDuration(float duration);
     Builder& setPeriod(size_t period);
@@ -54,6 +54,7 @@ public:
     std::shared_ptr<Transition> build();
 
     const size_t id;
+    const uint16_t defaultPeriod;
     const BulbId& bulbId;
     const TransitionFn callback;
 
@@ -67,14 +68,9 @@ public:
     size_t numSetParams() const;
   };
 
-  // Default time to wait between steps.  Do this rather than having a fixed step size because it's
-  // more capable of adapting to different situations.
-  static const size_t DEFAULT_PERIOD = 225;
-  static const size_t DEFAULT_NUM_PERIODS = 20;
-  static const size_t DEFAULT_DURATION = DEFAULT_PERIOD*DEFAULT_NUM_PERIODS;
-
   // If period goes lower than this, throttle other parameters up to adjust.
   static const size_t MIN_PERIOD = 150;
+  static const size_t DEFAULT_DURATION = 10000;
 
   const size_t id;
   const BulbId bulbId;

+ 7 - 0
lib/Transitions/TransitionController.cpp

@@ -14,8 +14,13 @@ using namespace std::placeholders;
 TransitionController::TransitionController()
   : callback(std::bind(&TransitionController::transitionCallback, this, _1, _2, _3))
   , currentId(0)
+  , defaultPeriod(500)
 { }
 
+void TransitionController::setDefaultPeriod(uint16_t defaultPeriod) {
+  this->defaultPeriod = defaultPeriod;
+}
+
 void TransitionController::clearListeners() {
   observers.clear();
 }
@@ -27,6 +32,7 @@ void TransitionController::addListener(Transition::TransitionFn fn) {
 std::shared_ptr<Transition::Builder> TransitionController::buildColorTransition(const BulbId& bulbId, const ParsedColor& start, const ParsedColor& end) {
   return std::make_shared<ColorTransition::Builder>(
     currentId++,
+    defaultPeriod,
     bulbId,
     callback,
     start,
@@ -37,6 +43,7 @@ std::shared_ptr<Transition::Builder> TransitionController::buildColorTransition(
 std::shared_ptr<Transition::Builder> TransitionController::buildFieldTransition(const BulbId& bulbId, GroupStateField field, uint16_t start, uint16_t end) {
   return std::make_shared<FieldTransition::Builder>(
     currentId++,
+    defaultPeriod,
     bulbId,
     callback,
     field,

+ 2 - 0
lib/Transitions/TransitionController.h

@@ -13,6 +13,7 @@ public:
 
   void clearListeners();
   void addListener(Transition::TransitionFn fn);
+  void setDefaultPeriod(uint16_t period);
 
   std::shared_ptr<Transition::Builder> buildColorTransition(const BulbId& bulbId, const ParsedColor& start, const ParsedColor& end);
   std::shared_ptr<Transition::Builder> buildFieldTransition(const BulbId& bulbId, GroupStateField field, uint16_t start, uint16_t end);
@@ -32,6 +33,7 @@ private:
   LinkedList<std::shared_ptr<Transition>> activeTransitions;
   std::vector<Transition::TransitionFn> observers;
   size_t currentId;
+  uint16_t defaultPeriod;
 
   void transitionCallback(const BulbId& bulbId, GroupStateField field, uint16_t arg);
 };

+ 2 - 0
src/main.cpp

@@ -219,6 +219,8 @@ void applySettings() {
     delete radios;
   }
 
+  transitions.setDefaultPeriod(settings.defaultTransitionPeriod);
+
   radioFactory = MiLightRadioFactory::fromSettings(settings);
 
   if (radioFactory == NULL) {