123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /**
- * @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;
- }
- /**
- * @brief Ticks since the timer was started
- *
- * This function returns 0 if the timer is not started. Otherwise, it returns
- * the time in milliseconds since the timer was started.
- * This function is expected to handle wrap around of time register well.
- * The maximum elapsed time is dictated by the template type
- */
- template<typename T>
- T Timer<T>::elapsed() {
- return m_isRunning ? (_millis() - m_started) : 0;
- }
- template<typename T>
- bool Timer<T>::expired_cont(T msPeriod)
- {
- return !m_isRunning || expired(msPeriod);
- }
- template class Timer<unsigned long>;
- template class Timer<unsigned short>;
|