Blynk library for embedded hardware. Works with Arduino, ESP8266, Raspberry Pi, Intel Edison/Galileo, LinkIt ONE, Particle Core/Photon, Energia, ARM mbed, etc. http://www.blynk.cc/

Dependents:   Blynk_RBL_BLE_Nano Blynk_MicroBit Blynk_Serial Blynk_RBL_BLE_Nano

Committer:
Volodymyr Shymanskyy
Date:
Mon Nov 27 19:48:07 2017 +0200
Revision:
15:975b60f7a8ff
Parent:
14:76d8fd871a4d
Update version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Volodymyr Shymanskyy 13:ed6276c0afb7 1 /*
Volodymyr Shymanskyy 13:ed6276c0afb7 2 * SimpleTimer.cpp
Volodymyr Shymanskyy 13:ed6276c0afb7 3 *
Volodymyr Shymanskyy 13:ed6276c0afb7 4 * SimpleTimer - A timer library for Arduino.
Volodymyr Shymanskyy 13:ed6276c0afb7 5 * Author: mromani@ottotecnica.com
Volodymyr Shymanskyy 13:ed6276c0afb7 6 * Copyright (c) 2010 OTTOTECNICA Italy
Volodymyr Shymanskyy 13:ed6276c0afb7 7 *
Volodymyr Shymanskyy 14:76d8fd871a4d 8 * Callback function parameters added & compiler warnings
Volodymyr Shymanskyy 14:76d8fd871a4d 9 * removed by Bill Knight <billk@rosw.com> 20March2017
Volodymyr Shymanskyy 14:76d8fd871a4d 10 *
Volodymyr Shymanskyy 13:ed6276c0afb7 11 * This library is free software; you can redistribute it
Volodymyr Shymanskyy 13:ed6276c0afb7 12 * and/or modify it under the terms of the GNU Lesser
Volodymyr Shymanskyy 13:ed6276c0afb7 13 * General Public License as published by the Free Software
Volodymyr Shymanskyy 13:ed6276c0afb7 14 * Foundation; either version 2.1 of the License, or (at
Volodymyr Shymanskyy 13:ed6276c0afb7 15 * your option) any later version.
Volodymyr Shymanskyy 13:ed6276c0afb7 16 *
Volodymyr Shymanskyy 13:ed6276c0afb7 17 * This library is distributed in the hope that it will
Volodymyr Shymanskyy 13:ed6276c0afb7 18 * be useful, but WITHOUT ANY WARRANTY; without even the
Volodymyr Shymanskyy 13:ed6276c0afb7 19 * implied warranty of MERCHANTABILITY or FITNESS FOR A
Volodymyr Shymanskyy 13:ed6276c0afb7 20 * PARTICULAR PURPOSE. See the GNU Lesser General Public
Volodymyr Shymanskyy 13:ed6276c0afb7 21 * License for more details.
Volodymyr Shymanskyy 13:ed6276c0afb7 22 *
Volodymyr Shymanskyy 13:ed6276c0afb7 23 * You should have received a copy of the GNU Lesser
Volodymyr Shymanskyy 13:ed6276c0afb7 24 * General Public License along with this library; if not,
Volodymyr Shymanskyy 13:ed6276c0afb7 25 * write to the Free Software Foundation, Inc.,
Volodymyr Shymanskyy 13:ed6276c0afb7 26 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Volodymyr Shymanskyy 13:ed6276c0afb7 27 */
Volodymyr Shymanskyy 13:ed6276c0afb7 28
Volodymyr Shymanskyy 13:ed6276c0afb7 29
Volodymyr Shymanskyy 13:ed6276c0afb7 30 #include "Blynk/BlynkTimer.h"
Volodymyr Shymanskyy 14:76d8fd871a4d 31 #include <string.h>
Volodymyr Shymanskyy 13:ed6276c0afb7 32
Volodymyr Shymanskyy 13:ed6276c0afb7 33 // Select time function:
Volodymyr Shymanskyy 13:ed6276c0afb7 34 //static inline unsigned long elapsed() { return micros(); }
Volodymyr Shymanskyy 15:975b60f7a8ff 35 static inline unsigned long elapsed() { return BlynkMillis(); }
Volodymyr Shymanskyy 13:ed6276c0afb7 36
Volodymyr Shymanskyy 13:ed6276c0afb7 37
Volodymyr Shymanskyy 13:ed6276c0afb7 38 SimpleTimer::SimpleTimer()
Volodymyr Shymanskyy 13:ed6276c0afb7 39 : numTimers (-1)
Volodymyr Shymanskyy 13:ed6276c0afb7 40 {
Volodymyr Shymanskyy 13:ed6276c0afb7 41 }
Volodymyr Shymanskyy 13:ed6276c0afb7 42
Volodymyr Shymanskyy 13:ed6276c0afb7 43 void SimpleTimer::init() {
Volodymyr Shymanskyy 13:ed6276c0afb7 44 unsigned long current_millis = elapsed();
Volodymyr Shymanskyy 13:ed6276c0afb7 45
Volodymyr Shymanskyy 13:ed6276c0afb7 46 for (int i = 0; i < MAX_TIMERS; i++) {
Volodymyr Shymanskyy 14:76d8fd871a4d 47 memset(&timer[i], 0, sizeof (timer_t));
Volodymyr Shymanskyy 14:76d8fd871a4d 48 timer[i].prev_millis = current_millis;
Volodymyr Shymanskyy 13:ed6276c0afb7 49 }
Volodymyr Shymanskyy 13:ed6276c0afb7 50
Volodymyr Shymanskyy 13:ed6276c0afb7 51 numTimers = 0;
Volodymyr Shymanskyy 13:ed6276c0afb7 52 }
Volodymyr Shymanskyy 13:ed6276c0afb7 53
Volodymyr Shymanskyy 13:ed6276c0afb7 54
Volodymyr Shymanskyy 13:ed6276c0afb7 55 void SimpleTimer::run() {
Volodymyr Shymanskyy 13:ed6276c0afb7 56 int i;
Volodymyr Shymanskyy 13:ed6276c0afb7 57 unsigned long current_millis;
Volodymyr Shymanskyy 13:ed6276c0afb7 58
Volodymyr Shymanskyy 13:ed6276c0afb7 59 // get current time
Volodymyr Shymanskyy 13:ed6276c0afb7 60 current_millis = elapsed();
Volodymyr Shymanskyy 13:ed6276c0afb7 61
Volodymyr Shymanskyy 13:ed6276c0afb7 62 for (i = 0; i < MAX_TIMERS; i++) {
Volodymyr Shymanskyy 13:ed6276c0afb7 63
Volodymyr Shymanskyy 14:76d8fd871a4d 64 timer[i].toBeCalled = DEFCALL_DONTRUN;
Volodymyr Shymanskyy 13:ed6276c0afb7 65
Volodymyr Shymanskyy 13:ed6276c0afb7 66 // no callback == no timer, i.e. jump over empty slots
Volodymyr Shymanskyy 14:76d8fd871a4d 67 if (timer[i].callback != NULL) {
Volodymyr Shymanskyy 13:ed6276c0afb7 68
Volodymyr Shymanskyy 13:ed6276c0afb7 69 // is it time to process this timer ?
Volodymyr Shymanskyy 13:ed6276c0afb7 70 // see http://arduino.cc/forum/index.php/topic,124048.msg932592.html#msg932592
Volodymyr Shymanskyy 13:ed6276c0afb7 71
Volodymyr Shymanskyy 14:76d8fd871a4d 72 if ((current_millis - timer[i].prev_millis) >= timer[i].delay) {
Volodymyr Shymanskyy 13:ed6276c0afb7 73
Volodymyr Shymanskyy 13:ed6276c0afb7 74 // update time
Volodymyr Shymanskyy 14:76d8fd871a4d 75 timer[i].prev_millis += timer[i].delay;
Volodymyr Shymanskyy 13:ed6276c0afb7 76
Volodymyr Shymanskyy 13:ed6276c0afb7 77 // check if the timer callback has to be executed
Volodymyr Shymanskyy 14:76d8fd871a4d 78 if (timer[i].enabled) {
Volodymyr Shymanskyy 13:ed6276c0afb7 79
Volodymyr Shymanskyy 13:ed6276c0afb7 80 // "run forever" timers must always be executed
Volodymyr Shymanskyy 14:76d8fd871a4d 81 if (timer[i].maxNumRuns == RUN_FOREVER) {
Volodymyr Shymanskyy 14:76d8fd871a4d 82 timer[i].toBeCalled = DEFCALL_RUNONLY;
Volodymyr Shymanskyy 13:ed6276c0afb7 83 }
Volodymyr Shymanskyy 13:ed6276c0afb7 84 // other timers get executed the specified number of times
Volodymyr Shymanskyy 14:76d8fd871a4d 85 else if (timer[i].numRuns < timer[i].maxNumRuns) {
Volodymyr Shymanskyy 14:76d8fd871a4d 86 timer[i].toBeCalled = DEFCALL_RUNONLY;
Volodymyr Shymanskyy 14:76d8fd871a4d 87 timer[i].numRuns++;
Volodymyr Shymanskyy 13:ed6276c0afb7 88
Volodymyr Shymanskyy 13:ed6276c0afb7 89 // after the last run, delete the timer
Volodymyr Shymanskyy 14:76d8fd871a4d 90 if (timer[i].numRuns >= timer[i].maxNumRuns) {
Volodymyr Shymanskyy 14:76d8fd871a4d 91 timer[i].toBeCalled = DEFCALL_RUNANDDEL;
Volodymyr Shymanskyy 13:ed6276c0afb7 92 }
Volodymyr Shymanskyy 13:ed6276c0afb7 93 }
Volodymyr Shymanskyy 13:ed6276c0afb7 94 }
Volodymyr Shymanskyy 13:ed6276c0afb7 95 }
Volodymyr Shymanskyy 13:ed6276c0afb7 96 }
Volodymyr Shymanskyy 13:ed6276c0afb7 97 }
Volodymyr Shymanskyy 13:ed6276c0afb7 98
Volodymyr Shymanskyy 13:ed6276c0afb7 99 for (i = 0; i < MAX_TIMERS; i++) {
Volodymyr Shymanskyy 14:76d8fd871a4d 100 if (timer[i].toBeCalled == DEFCALL_DONTRUN)
Volodymyr Shymanskyy 14:76d8fd871a4d 101 continue;
Volodymyr Shymanskyy 13:ed6276c0afb7 102
Volodymyr Shymanskyy 14:76d8fd871a4d 103 if (timer[i].hasParam)
Volodymyr Shymanskyy 14:76d8fd871a4d 104 (*(timer_callback_p)timer[i].callback)(timer[i].param);
Volodymyr Shymanskyy 14:76d8fd871a4d 105 else
Volodymyr Shymanskyy 14:76d8fd871a4d 106 (*(timer_callback)timer[i].callback)();
Volodymyr Shymanskyy 13:ed6276c0afb7 107
Volodymyr Shymanskyy 14:76d8fd871a4d 108 if (timer[i].toBeCalled == DEFCALL_RUNANDDEL)
Volodymyr Shymanskyy 14:76d8fd871a4d 109 deleteTimer(i);
Volodymyr Shymanskyy 13:ed6276c0afb7 110 }
Volodymyr Shymanskyy 13:ed6276c0afb7 111 }
Volodymyr Shymanskyy 13:ed6276c0afb7 112
Volodymyr Shymanskyy 13:ed6276c0afb7 113
Volodymyr Shymanskyy 13:ed6276c0afb7 114 // find the first available slot
Volodymyr Shymanskyy 13:ed6276c0afb7 115 // return -1 if none found
Volodymyr Shymanskyy 13:ed6276c0afb7 116 int SimpleTimer::findFirstFreeSlot() {
Volodymyr Shymanskyy 13:ed6276c0afb7 117 // all slots are used
Volodymyr Shymanskyy 13:ed6276c0afb7 118 if (numTimers >= MAX_TIMERS) {
Volodymyr Shymanskyy 13:ed6276c0afb7 119 return -1;
Volodymyr Shymanskyy 13:ed6276c0afb7 120 }
Volodymyr Shymanskyy 13:ed6276c0afb7 121
Volodymyr Shymanskyy 13:ed6276c0afb7 122 // return the first slot with no callback (i.e. free)
Volodymyr Shymanskyy 14:76d8fd871a4d 123 for (int i = 0; i < MAX_TIMERS; i++) {
Volodymyr Shymanskyy 14:76d8fd871a4d 124 if (timer[i].callback == NULL) {
Volodymyr Shymanskyy 13:ed6276c0afb7 125 return i;
Volodymyr Shymanskyy 13:ed6276c0afb7 126 }
Volodymyr Shymanskyy 13:ed6276c0afb7 127 }
Volodymyr Shymanskyy 13:ed6276c0afb7 128
Volodymyr Shymanskyy 13:ed6276c0afb7 129 // no free slots found
Volodymyr Shymanskyy 13:ed6276c0afb7 130 return -1;
Volodymyr Shymanskyy 13:ed6276c0afb7 131 }
Volodymyr Shymanskyy 13:ed6276c0afb7 132
Volodymyr Shymanskyy 13:ed6276c0afb7 133
Volodymyr Shymanskyy 14:76d8fd871a4d 134 int SimpleTimer::setupTimer(unsigned long d, void* f, void* p, bool h, unsigned n) {
Volodymyr Shymanskyy 13:ed6276c0afb7 135 int freeTimer;
Volodymyr Shymanskyy 13:ed6276c0afb7 136
Volodymyr Shymanskyy 13:ed6276c0afb7 137 if (numTimers < 0) {
Volodymyr Shymanskyy 13:ed6276c0afb7 138 init();
Volodymyr Shymanskyy 13:ed6276c0afb7 139 }
Volodymyr Shymanskyy 13:ed6276c0afb7 140
Volodymyr Shymanskyy 13:ed6276c0afb7 141 freeTimer = findFirstFreeSlot();
Volodymyr Shymanskyy 13:ed6276c0afb7 142 if (freeTimer < 0) {
Volodymyr Shymanskyy 13:ed6276c0afb7 143 return -1;
Volodymyr Shymanskyy 13:ed6276c0afb7 144 }
Volodymyr Shymanskyy 13:ed6276c0afb7 145
Volodymyr Shymanskyy 13:ed6276c0afb7 146 if (f == NULL) {
Volodymyr Shymanskyy 13:ed6276c0afb7 147 return -1;
Volodymyr Shymanskyy 13:ed6276c0afb7 148 }
Volodymyr Shymanskyy 13:ed6276c0afb7 149
Volodymyr Shymanskyy 14:76d8fd871a4d 150 timer[freeTimer].delay = d;
Volodymyr Shymanskyy 14:76d8fd871a4d 151 timer[freeTimer].callback = f;
Volodymyr Shymanskyy 14:76d8fd871a4d 152 timer[freeTimer].param = p;
Volodymyr Shymanskyy 14:76d8fd871a4d 153 timer[freeTimer].hasParam = h;
Volodymyr Shymanskyy 14:76d8fd871a4d 154 timer[freeTimer].maxNumRuns = n;
Volodymyr Shymanskyy 14:76d8fd871a4d 155 timer[freeTimer].enabled = true;
Volodymyr Shymanskyy 14:76d8fd871a4d 156 timer[freeTimer].prev_millis = elapsed();
Volodymyr Shymanskyy 13:ed6276c0afb7 157
Volodymyr Shymanskyy 13:ed6276c0afb7 158 numTimers++;
Volodymyr Shymanskyy 13:ed6276c0afb7 159
Volodymyr Shymanskyy 13:ed6276c0afb7 160 return freeTimer;
Volodymyr Shymanskyy 13:ed6276c0afb7 161 }
Volodymyr Shymanskyy 13:ed6276c0afb7 162
Volodymyr Shymanskyy 13:ed6276c0afb7 163
Volodymyr Shymanskyy 14:76d8fd871a4d 164 int SimpleTimer::setTimer(unsigned long d, timer_callback f, unsigned n) {
Volodymyr Shymanskyy 14:76d8fd871a4d 165 return setupTimer(d, (void *)f, NULL, false, n);
Volodymyr Shymanskyy 14:76d8fd871a4d 166 }
Volodymyr Shymanskyy 14:76d8fd871a4d 167
Volodymyr Shymanskyy 14:76d8fd871a4d 168 int SimpleTimer::setTimer(unsigned long d, timer_callback_p f, void* p, unsigned n) {
Volodymyr Shymanskyy 14:76d8fd871a4d 169 return setupTimer(d, (void *)f, p, true, n);
Volodymyr Shymanskyy 14:76d8fd871a4d 170 }
Volodymyr Shymanskyy 14:76d8fd871a4d 171
Volodymyr Shymanskyy 14:76d8fd871a4d 172 int SimpleTimer::setInterval(unsigned long d, timer_callback f) {
Volodymyr Shymanskyy 14:76d8fd871a4d 173 return setupTimer(d, (void *)f, NULL, false, RUN_FOREVER);
Volodymyr Shymanskyy 14:76d8fd871a4d 174 }
Volodymyr Shymanskyy 14:76d8fd871a4d 175
Volodymyr Shymanskyy 14:76d8fd871a4d 176 int SimpleTimer::setInterval(unsigned long d, timer_callback_p f, void* p) {
Volodymyr Shymanskyy 14:76d8fd871a4d 177 return setupTimer(d, (void *)f, p, true, RUN_FOREVER);
Volodymyr Shymanskyy 14:76d8fd871a4d 178 }
Volodymyr Shymanskyy 14:76d8fd871a4d 179
Volodymyr Shymanskyy 14:76d8fd871a4d 180 int SimpleTimer::setTimeout(unsigned long d, timer_callback f) {
Volodymyr Shymanskyy 14:76d8fd871a4d 181 return setupTimer(d, (void *)f, NULL, false, RUN_ONCE);
Volodymyr Shymanskyy 13:ed6276c0afb7 182 }
Volodymyr Shymanskyy 13:ed6276c0afb7 183
Volodymyr Shymanskyy 14:76d8fd871a4d 184 int SimpleTimer::setTimeout(unsigned long d, timer_callback_p f, void* p) {
Volodymyr Shymanskyy 14:76d8fd871a4d 185 return setupTimer(d, (void *)f, p, true, RUN_ONCE);
Volodymyr Shymanskyy 13:ed6276c0afb7 186 }
Volodymyr Shymanskyy 13:ed6276c0afb7 187
Volodymyr Shymanskyy 14:76d8fd871a4d 188 bool SimpleTimer::changeInterval(unsigned numTimer, unsigned long d) {
Volodymyr Shymanskyy 14:76d8fd871a4d 189 if (numTimer >= MAX_TIMERS) {
Volodymyr Shymanskyy 14:76d8fd871a4d 190 return false;
Volodymyr Shymanskyy 14:76d8fd871a4d 191 }
Volodymyr Shymanskyy 13:ed6276c0afb7 192
Volodymyr Shymanskyy 14:76d8fd871a4d 193 // Updates interval of existing specified timer
Volodymyr Shymanskyy 14:76d8fd871a4d 194 if (timer[numTimer].callback != NULL) {
Volodymyr Shymanskyy 14:76d8fd871a4d 195 timer[numTimer].delay = d;
Volodymyr Shymanskyy 14:76d8fd871a4d 196 timer[numTimer].prev_millis = elapsed();
Volodymyr Shymanskyy 14:76d8fd871a4d 197 return true;
Volodymyr Shymanskyy 14:76d8fd871a4d 198 }
Volodymyr Shymanskyy 14:76d8fd871a4d 199 // false return for non-used numTimer, no callback
Volodymyr Shymanskyy 14:76d8fd871a4d 200 return false;
Volodymyr Shymanskyy 14:76d8fd871a4d 201 }
Volodymyr Shymanskyy 14:76d8fd871a4d 202
Volodymyr Shymanskyy 14:76d8fd871a4d 203 void SimpleTimer::deleteTimer(unsigned timerId) {
Volodymyr Shymanskyy 13:ed6276c0afb7 204 if (timerId >= MAX_TIMERS) {
Volodymyr Shymanskyy 13:ed6276c0afb7 205 return;
Volodymyr Shymanskyy 13:ed6276c0afb7 206 }
Volodymyr Shymanskyy 13:ed6276c0afb7 207
Volodymyr Shymanskyy 13:ed6276c0afb7 208 // nothing to delete if no timers are in use
Volodymyr Shymanskyy 13:ed6276c0afb7 209 if (numTimers == 0) {
Volodymyr Shymanskyy 13:ed6276c0afb7 210 return;
Volodymyr Shymanskyy 13:ed6276c0afb7 211 }
Volodymyr Shymanskyy 13:ed6276c0afb7 212
Volodymyr Shymanskyy 13:ed6276c0afb7 213 // don't decrease the number of timers if the
Volodymyr Shymanskyy 13:ed6276c0afb7 214 // specified slot is already empty
Volodymyr Shymanskyy 14:76d8fd871a4d 215 if (timer[timerId].callback != NULL) {
Volodymyr Shymanskyy 14:76d8fd871a4d 216 memset(&timer[timerId], 0, sizeof (timer_t));
Volodymyr Shymanskyy 14:76d8fd871a4d 217 timer[timerId].prev_millis = elapsed();
Volodymyr Shymanskyy 13:ed6276c0afb7 218
Volodymyr Shymanskyy 13:ed6276c0afb7 219 // update number of timers
Volodymyr Shymanskyy 13:ed6276c0afb7 220 numTimers--;
Volodymyr Shymanskyy 13:ed6276c0afb7 221 }
Volodymyr Shymanskyy 13:ed6276c0afb7 222 }
Volodymyr Shymanskyy 13:ed6276c0afb7 223
Volodymyr Shymanskyy 13:ed6276c0afb7 224
Volodymyr Shymanskyy 13:ed6276c0afb7 225 // function contributed by code@rowansimms.com
Volodymyr Shymanskyy 14:76d8fd871a4d 226 void SimpleTimer::restartTimer(unsigned numTimer) {
Volodymyr Shymanskyy 13:ed6276c0afb7 227 if (numTimer >= MAX_TIMERS) {
Volodymyr Shymanskyy 13:ed6276c0afb7 228 return;
Volodymyr Shymanskyy 13:ed6276c0afb7 229 }
Volodymyr Shymanskyy 13:ed6276c0afb7 230
Volodymyr Shymanskyy 14:76d8fd871a4d 231 timer[numTimer].prev_millis = elapsed();
Volodymyr Shymanskyy 13:ed6276c0afb7 232 }
Volodymyr Shymanskyy 13:ed6276c0afb7 233
Volodymyr Shymanskyy 13:ed6276c0afb7 234
Volodymyr Shymanskyy 14:76d8fd871a4d 235 bool SimpleTimer::isEnabled(unsigned numTimer) {
Volodymyr Shymanskyy 13:ed6276c0afb7 236 if (numTimer >= MAX_TIMERS) {
Volodymyr Shymanskyy 13:ed6276c0afb7 237 return false;
Volodymyr Shymanskyy 13:ed6276c0afb7 238 }
Volodymyr Shymanskyy 13:ed6276c0afb7 239
Volodymyr Shymanskyy 14:76d8fd871a4d 240 return timer[numTimer].enabled;
Volodymyr Shymanskyy 13:ed6276c0afb7 241 }
Volodymyr Shymanskyy 13:ed6276c0afb7 242
Volodymyr Shymanskyy 13:ed6276c0afb7 243
Volodymyr Shymanskyy 14:76d8fd871a4d 244 void SimpleTimer::enable(unsigned numTimer) {
Volodymyr Shymanskyy 14:76d8fd871a4d 245 if (numTimer >= MAX_TIMERS) {
Volodymyr Shymanskyy 14:76d8fd871a4d 246 return;
Volodymyr Shymanskyy 14:76d8fd871a4d 247 }
Volodymyr Shymanskyy 14:76d8fd871a4d 248
Volodymyr Shymanskyy 14:76d8fd871a4d 249 timer[numTimer].enabled = true;
Volodymyr Shymanskyy 14:76d8fd871a4d 250 }
Volodymyr Shymanskyy 14:76d8fd871a4d 251
Volodymyr Shymanskyy 14:76d8fd871a4d 252
Volodymyr Shymanskyy 14:76d8fd871a4d 253 void SimpleTimer::disable(unsigned numTimer) {
Volodymyr Shymanskyy 13:ed6276c0afb7 254 if (numTimer >= MAX_TIMERS) {
Volodymyr Shymanskyy 13:ed6276c0afb7 255 return;
Volodymyr Shymanskyy 13:ed6276c0afb7 256 }
Volodymyr Shymanskyy 13:ed6276c0afb7 257
Volodymyr Shymanskyy 14:76d8fd871a4d 258 timer[numTimer].enabled = false;
Volodymyr Shymanskyy 13:ed6276c0afb7 259 }
Volodymyr Shymanskyy 13:ed6276c0afb7 260
Volodymyr Shymanskyy 14:76d8fd871a4d 261 void SimpleTimer::enableAll() {
Volodymyr Shymanskyy 14:76d8fd871a4d 262 // Enable all timers with a callback assigned (used)
Volodymyr Shymanskyy 14:76d8fd871a4d 263 for (int i = 0; i < MAX_TIMERS; i++) {
Volodymyr Shymanskyy 14:76d8fd871a4d 264 if (timer[i].callback != NULL && timer[i].numRuns == RUN_FOREVER) {
Volodymyr Shymanskyy 14:76d8fd871a4d 265 timer[i].enabled = true;
Volodymyr Shymanskyy 14:76d8fd871a4d 266 }
Volodymyr Shymanskyy 14:76d8fd871a4d 267 }
Volodymyr Shymanskyy 14:76d8fd871a4d 268 }
Volodymyr Shymanskyy 13:ed6276c0afb7 269
Volodymyr Shymanskyy 14:76d8fd871a4d 270 void SimpleTimer::disableAll() {
Volodymyr Shymanskyy 14:76d8fd871a4d 271 // Disable all timers with a callback assigned (used)
Volodymyr Shymanskyy 14:76d8fd871a4d 272 for (int i = 0; i < MAX_TIMERS; i++) {
Volodymyr Shymanskyy 14:76d8fd871a4d 273 if (timer[i].callback != NULL && timer[i].numRuns == RUN_FOREVER) {
Volodymyr Shymanskyy 14:76d8fd871a4d 274 timer[i].enabled = false;
Volodymyr Shymanskyy 14:76d8fd871a4d 275 }
Volodymyr Shymanskyy 14:76d8fd871a4d 276 }
Volodymyr Shymanskyy 14:76d8fd871a4d 277 }
Volodymyr Shymanskyy 14:76d8fd871a4d 278
Volodymyr Shymanskyy 14:76d8fd871a4d 279 void SimpleTimer::toggle(unsigned numTimer) {
Volodymyr Shymanskyy 13:ed6276c0afb7 280 if (numTimer >= MAX_TIMERS) {
Volodymyr Shymanskyy 13:ed6276c0afb7 281 return;
Volodymyr Shymanskyy 13:ed6276c0afb7 282 }
Volodymyr Shymanskyy 13:ed6276c0afb7 283
Volodymyr Shymanskyy 14:76d8fd871a4d 284 timer[numTimer].enabled = !timer[numTimer].enabled;
Volodymyr Shymanskyy 13:ed6276c0afb7 285 }
Volodymyr Shymanskyy 13:ed6276c0afb7 286
Volodymyr Shymanskyy 13:ed6276c0afb7 287
Volodymyr Shymanskyy 14:76d8fd871a4d 288 unsigned SimpleTimer::getNumTimers() {
Volodymyr Shymanskyy 13:ed6276c0afb7 289 return numTimers;
Volodymyr Shymanskyy 13:ed6276c0afb7 290 }