Browse Source

Store timer period in TimerRemaining.

Marek Bel 5 years ago
parent
commit
490f0c9620
3 changed files with 35 additions and 6 deletions
  1. 2 0
      Firmware/Timer.h
  2. 29 6
      Firmware/TimerRemaining.h
  3. 4 0
      Tests/Timer_test.cpp

+ 2 - 0
Firmware/Timer.h

@@ -23,6 +23,8 @@ public:
     bool running(){return m_isRunning;}
     bool expired(T msPeriod);
 protected:
+    T started(){return m_started;}
+private:
     bool m_isRunning;
     T m_started;
 };

+ 29 - 6
Firmware/TimerRemaining.h

@@ -13,6 +13,18 @@
 class TimerRemaining : public LongTimer
 {
 public:
+    TimerRemaining() : m_period(){}
+    void start() = delete;
+    bool expired(unsigned long msPeriod) = delete;
+    /**
+     * @brief Start timer
+     * @param msPeriod Time to expire in milliseconds
+     */
+    void start(unsigned long msPeriod)
+    {
+        m_period = msPeriod;
+        LongTimer::start();
+    }
     /**
      * @brief Time remaining to expiration
      *
@@ -20,20 +32,31 @@ public:
      * @return time remaining to expiration in milliseconds
      * @retval 0 Timer has expired, or was not even started.
      */
-    unsigned long remaining(unsigned long msPeriod)
+    unsigned long remaining()
     {
-      if (!m_isRunning) return 0;
-      if (expired(msPeriod)) return 0;
+      if (!running()) return 0;
+      if (expired()) return 0;
       const unsigned long now = millis();
-      if ((m_started <=  m_started + msPeriod) || (now < m_started))
+      if ((started() <=  started() + m_period) || (now < started()))
       {
-          return (m_started + msPeriod - now);
+          return (started() + m_period - now);
       }
       else //(now >= m_started)
       {
-          return ULONG_MAX - now + (m_started + msPeriod);
+          return ULONG_MAX - now + (started() + m_period);
       }
     }
+    /**
+     * @brief Timer has expired.
+     * @retval true Timer has expired.
+     * @retval false Timer has not expired.
+     */
+    bool expired()
+    {
+        return LongTimer::expired(m_period);
+    }
+private:
+    unsigned long m_period; //!< Timer period in milliseconds.
 };
 
 #endif // ifndef TIMERREMAINING_H

+ 4 - 0
Tests/Timer_test.cpp

@@ -6,6 +6,7 @@
 
 #include "catch.hpp"
 #include "../Firmware/Timer.h"
+#include "../Firmware/TimerRemaining.h"
 
 unsigned long millis()
 {
@@ -31,4 +32,7 @@ TEST_CASE( "LongTimer tested.", "[timer]" )
     timer.start();
     REQUIRE( timer.expired(1) == false );
     REQUIRE( timer.running() == true);
+
+    TimerRemaining otherTimer;
+    otherTimer.start(100);
 }