kopia lustrzana https://github.com/Aircoookie/WLED
156 wiersze
5.3 KiB
C++
156 wiersze
5.3 KiB
C++
/*
|
|
* SimpleTimer.h
|
|
*
|
|
* SimpleTimer - A timer library for Arduino.
|
|
* Author: mromani@ottotecnica.com
|
|
* Copyright (c) 2010 OTTOTECNICA Italy
|
|
*
|
|
* Modifications by Bill Knight <billk@rosw.com> 18March2017
|
|
*
|
|
* This library is free software; you can redistribute it
|
|
* and/or modify it under the terms of the GNU Lesser
|
|
* General Public License as published by the Free Software
|
|
* Foundation; either version 2.1 of the License, or (at
|
|
* your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will
|
|
* be useful, but WITHOUT ANY WARRANTY; without even the
|
|
* implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
* PARTICULAR PURPOSE. See the GNU Lesser General Public
|
|
* License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser
|
|
* General Public License along with this library; if not,
|
|
* write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*
|
|
*/
|
|
|
|
#ifndef BLYNKTIMER_H
|
|
#define BLYNKTIMER_H
|
|
|
|
#include "BlynkDebug.h"
|
|
|
|
// Replace SimpleTimer
|
|
#define SIMPLETIMER_H
|
|
#define SimpleTimer BlynkTimer
|
|
|
|
typedef void (*timer_callback)(void);
|
|
typedef void (*timer_callback_p)(void *);
|
|
|
|
class SimpleTimer {
|
|
|
|
public:
|
|
// maximum number of timers
|
|
const static int MAX_TIMERS = 16;
|
|
|
|
// setTimer() constants
|
|
const static int RUN_FOREVER = 0;
|
|
const static int RUN_ONCE = 1;
|
|
|
|
// constructor
|
|
SimpleTimer();
|
|
|
|
void init();
|
|
|
|
// this function must be called inside loop()
|
|
void run();
|
|
|
|
// Timer will call function 'f' every 'd' milliseconds forever
|
|
// returns the timer number (numTimer) on success or
|
|
// -1 on failure (f == NULL) or no free timers
|
|
int setInterval(unsigned long d, timer_callback f);
|
|
|
|
// Timer will call function 'f' with parameter 'p' every 'd' milliseconds forever
|
|
// returns the timer number (numTimer) on success or
|
|
// -1 on failure (f == NULL) or no free timers
|
|
int setInterval(unsigned long d, timer_callback_p f, void* p);
|
|
|
|
// Timer will call function 'f' after 'd' milliseconds one time
|
|
// returns the timer number (numTimer) on success or
|
|
// -1 on failure (f == NULL) or no free timers
|
|
int setTimeout(unsigned long d, timer_callback f);
|
|
|
|
// Timer will call function 'f' with parameter 'p' after 'd' milliseconds one time
|
|
// returns the timer number (numTimer) on success or
|
|
// -1 on failure (f == NULL) or no free timers
|
|
int setTimeout(unsigned long d, timer_callback_p f, void* p);
|
|
|
|
// Timer will call function 'f' every 'd' milliseconds 'n' times
|
|
// returns the timer number (numTimer) on success or
|
|
// -1 on failure (f == NULL) or no free timers
|
|
int setTimer(unsigned long d, timer_callback f, unsigned n);
|
|
|
|
// Timer will call function 'f' with parameter 'p' every 'd' milliseconds 'n' times
|
|
// returns the timer number (numTimer) on success or
|
|
// -1 on failure (f == NULL) or no free timers
|
|
int setTimer(unsigned long d, timer_callback_p f, void* p, unsigned n);
|
|
|
|
// updates interval of the specified timer
|
|
bool changeInterval(unsigned numTimer, unsigned long d);
|
|
|
|
// destroy the specified timer
|
|
void deleteTimer(unsigned numTimer);
|
|
|
|
// restart the specified timer
|
|
void restartTimer(unsigned numTimer);
|
|
|
|
// returns true if the specified timer is enabled
|
|
bool isEnabled(unsigned numTimer);
|
|
|
|
// enables the specified timer
|
|
void enable(unsigned numTimer);
|
|
|
|
// disables the specified timer
|
|
void disable(unsigned numTimer);
|
|
|
|
// enables all timers
|
|
void enableAll();
|
|
|
|
// disables all timers
|
|
void disableAll();
|
|
|
|
// enables the specified timer if it's currently disabled,
|
|
// and vice-versa
|
|
void toggle(unsigned numTimer);
|
|
|
|
// returns the number of used timers
|
|
unsigned getNumTimers();
|
|
|
|
// returns the number of available timers
|
|
unsigned getNumAvailableTimers() { return MAX_TIMERS - numTimers; };
|
|
|
|
private:
|
|
// deferred call constants
|
|
const static int DEFCALL_DONTRUN = 0; // don't call the callback function
|
|
const static int DEFCALL_RUNONLY = 1; // call the callback function but don't delete the timer
|
|
const static int DEFCALL_RUNANDDEL = 2; // call the callback function and delete the timer
|
|
|
|
// low level function to initialize and enable a new timer
|
|
// returns the timer number (numTimer) on success or
|
|
// -1 on failure (f == NULL) or no free timers
|
|
int setupTimer(unsigned long d, void* f, void* p, bool h, unsigned n);
|
|
|
|
// find the first available slot
|
|
int findFirstFreeSlot();
|
|
|
|
typedef struct {
|
|
unsigned long prev_millis; // value returned by the millis() function in the previous run() call
|
|
void* callback; // pointer to the callback function
|
|
void* param; // function parameter
|
|
bool hasParam; // true if callback takes a parameter
|
|
unsigned long delay; // delay value
|
|
unsigned maxNumRuns; // number of runs to be executed
|
|
unsigned numRuns; // number of executed runs
|
|
bool enabled; // true if enabled
|
|
unsigned toBeCalled; // deferred function call (sort of) - N.B.: only used in run()
|
|
} timer_t;
|
|
|
|
timer_t timer[MAX_TIMERS];
|
|
|
|
// actual number of timers in use (-1 means uninitialized)
|
|
int numTimers;
|
|
};
|
|
|
|
#endif
|