Browse Source

Add TimerRemaining class.

Marek Bel 5 years ago
parent
commit
9772905ade
2 changed files with 40 additions and 1 deletions
  1. 1 1
      Firmware/Timer.h
  2. 39 0
      Firmware/TimerRemaining.h

+ 1 - 1
Firmware/Timer.h

@@ -22,7 +22,7 @@ public:
     void stop(){m_isRunning = false;}
     bool running(){return m_isRunning;}
     bool expired(T msPeriod);
-private:
+protected:
     bool m_isRunning;
     T m_started;
 };

+ 39 - 0
Firmware/TimerRemaining.h

@@ -0,0 +1,39 @@
+/**
+ * @file
+ * @author Marek Bel
+ */
+
+#ifndef TIMERREMAINING_H
+#define TIMERREMAINING_H
+
+#include "Timer.h"
+#include "Arduino.h"
+#include <limits.h>
+
+class TimerRemaining : public LongTimer
+{
+public:
+    /**
+     * @brief Time remaining to expiration
+     *
+     * @param msPeriod timer period in milliseconds
+     * @return time remaining to expiration in milliseconds
+     * @retval 0 Timer has expired, or was not even started.
+     */
+    unsigned long remaining(unsigned long msPeriod)
+    {
+      if (!m_isRunning) return 0;
+      if (expired(msPeriod)) return 0;
+      const unsigned long now = millis();
+      if ((m_started <=  m_started + msPeriod) || (now < m_started))
+      {
+          return (m_started + msPeriod - now);
+      }
+      else //(now >= m_started)
+      {
+          return ULONG_MAX - now + (m_started + msPeriod);
+      }
+    }
+};
+
+#endif // ifndef TIMERREMAINING_H