40 lines
896 B
C++
40 lines
896 B
C++
/**
|
|
* @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
|