| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | /** * @file * @author Marek Bel */#include "Timer.h"#include "system_timer.h"/** * @brief construct Timer * * It is guaranteed, that construction is equivalent with zeroing all members. * This property can be exploited in menu_data. */template<typename T>Timer<T>::Timer() : m_isRunning(false), m_started(){}/** * @brief Start timer */template<typename T>void Timer<T>::start(){    m_started = _millis();    m_isRunning = true;}/** * @brief Timer has expired * * Timer is considered expired after msPeriod has passed from time the timer was started. * Timer is stopped after expiration. * This function must be called at least each (T maximum value - msPeriod) milliseconds to be sure to * catch first expiration. * This function is expected to handle wrap around of time register well. * * @param msPeriod Time interval in milliseconds. Do not omit "ul" when using constant literal with LongTimer. * @retval true Timer has expired * @retval false Timer not expired yet, or is not running, or time window in which is timer considered expired passed. */template<typename T>bool Timer<T>::expired(T msPeriod){    if (!m_isRunning) return false;    bool expired = false;    const T now = _millis();    if (m_started <=  m_started + msPeriod)    {        if ((now >= m_started + msPeriod) || (now < m_started))        {            expired = true;        }    }    else    {        if ((now >= m_started + msPeriod) && (now < m_started))        {            expired = true;        }    }    if (expired) m_isRunning = false;    return expired;}template class Timer<unsigned long>;template class Timer<unsigned short>;
 |