-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTimeOut.cpp
89 lines (71 loc) · 1.39 KB
/
TimeOut.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <Heiko.h>
#include "TimeOut.h"
TimeOut::TimeOut (unsigned long _ms, bool timeout, bool enabled)
: enabled (enabled), ms (_ms), overflow (timeout ? 0 : millis () + ms)
{
}
#if defined DEBUG_TimeOut
void TimeOut::toString (char* bfr)
{
sprintf_P (bfr, PSTR ("%d, %ld"), ms, overflow);
}
#endif
bool TimeOut::hasOverflow ()
{
if (!enabled)
return false;
auto now = millis ();
if (now < overflow)
return false;
overflow = now + ms;
return true;
}
bool TimeOut::hasEnded ()
{
if (!enabled)
return false;
unsigned long now = millis ();
if (now < overflow)
return false;
enabled = false;
return true;
}
void TimeOut::reset ()
{
enabled = true;
overflow = millis () + ms;
}
void TimeOut::reset (unsigned long _ms)
{
enabled = _ms != 0;
ms = _ms;
overflow = millis () + ms;
}
void TimeOut::disable ()
{
enabled = false;
}
// _______________________________________________________________________________
bool RepetiveDelay::hasOverflow ()
{
if (!isRunning ())
return false;
unsigned long now = millis ();
if (now < overflow)
return false;
if (++repeated > repetitions)
disable ();
else
overflow = now + ms;
return true;
}
void RepetiveDelay::reset ()
{
TimeOut::reset ();
repeated = 0;
}
void RepetiveDelay::reset (unsigned long ms)
{
TimeOut::reset (ms);
repeated = 0;
}