89 lines
1.5 KiB
C++
89 lines
1.5 KiB
C++
extern "C" {
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <inttypes.h>
|
|
}
|
|
#include <Arduino.h>
|
|
#include "interval.h"
|
|
|
|
// Public Methods //////////////////////////////////////////////////////////////
|
|
uint32_t Interval::remains(void)
|
|
{
|
|
|
|
return _timeout - (millis() - _timefrom);
|
|
}
|
|
|
|
uint32_t Interval::elapsed(void)
|
|
{
|
|
|
|
return millis() - _timefrom;
|
|
}
|
|
|
|
bool Interval::expired(void)
|
|
{
|
|
bool result = false;
|
|
if (_done)
|
|
{
|
|
if (1 == mode)
|
|
{ // oneshot mode
|
|
if ((millis() - _timefrom) >= _timeout)
|
|
{
|
|
_done = 0;
|
|
result = true;
|
|
}
|
|
}
|
|
else if (2 == mode)
|
|
{ // periodic mode
|
|
if ((millis() - _timefrom) >= _timeout)
|
|
{
|
|
result = true;
|
|
_timefrom = millis();
|
|
_timeout = _reload;
|
|
}
|
|
}
|
|
else
|
|
{ // compatibility mode
|
|
if ((millis() - _timefrom) >= _timeout)
|
|
result = true;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
void Interval::set(uint32_t tmout)
|
|
{
|
|
|
|
_reload = tmout;
|
|
_timefrom = millis();
|
|
_timeout = _reload;
|
|
_mode = 0;
|
|
_done = 0xff;
|
|
}
|
|
|
|
void Interval::setOneshot(uint32_t tmout)
|
|
{
|
|
|
|
_reload = tmout;
|
|
_timefrom = millis();
|
|
_timeout = _reload;
|
|
_mode = 1;
|
|
_done = 0xff;
|
|
}
|
|
|
|
void Interval::setPeriodic(uint32_t tmout)
|
|
{
|
|
|
|
_reload = tmout;
|
|
_timefrom = millis();
|
|
_timeout = _reload;
|
|
_mode = 2;
|
|
_done = 0xff;
|
|
}
|
|
|
|
void Interval::reload(void)
|
|
{
|
|
|
|
_timefrom = millis();
|
|
_timeout = _reload;
|
|
}
|