extern "C" { #include #include #include } #include #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; }