M5Unified
M5Timer.h
Go to the documentation of this file.
1 // Copyright (c) M5Stack. All rights reserved.
2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3 
4 #ifndef __M5_Timer_H__
5 #define __M5_Timer_H__
6 
7 #include <functional>
8 #include <stdint.h>
9 #include <stddef.h>
10 
11 typedef std::function<void(void)> timer_callback;
12 
13 class M5Timer {
14  public:
16  static constexpr const uint32_t MAX_TIMERS = 10;
17 
19  M5Timer(void);
20 
22  void run(void);
23 
28  int_fast8_t setTimer(uint32_t interval_msec, timer_callback function, uint32_t times);
29 
34  inline int_fast8_t setInterval(uint32_t interval_msec, timer_callback function) {
35  return setTimer(interval_msec, function, 0);
36  }
37 
42  inline int_fast8_t setTimeout(uint32_t interval_msec, timer_callback function) {
43  return setTimer(interval_msec, function, 1);
44  }
45 
48  void deleteTimer(int_fast8_t id);
49 
52  void restartTimer(int_fast8_t id);
53 
56  void enable(int_fast8_t id) {
57  if ((uint_fast8_t)id < MAX_TIMERS) {
58  _timer_info[id].setEnabled(true);
59  }
60  }
61 
64  void disable(int_fast8_t id) {
65  if ((uint_fast8_t)id < MAX_TIMERS) {
66  _timer_info[id].setEnabled(false);
67  }
68  }
69 
72  void toggle(int_fast8_t id) {
73  if ((uint_fast8_t)id < MAX_TIMERS) {
74  _timer_info[id].toggle();
75  }
76  }
77 
81  bool isEnabled(int_fast8_t id) const {
82  return ((uint_fast8_t)id < MAX_TIMERS) ? _timer_info[id].getEnabled() : false;
83  }
84 
87  uint_fast8_t getNumTimers(void) const {
88  return _enable_count;
89  }
90 
93  uint_fast8_t getNumAvailableTimers(void) const {
94  return MAX_TIMERS - _enable_count;
95  }
96 
97  private:
98 
99  class timer_info_t {
100  public:
101  void set(uint32_t interval_msec, timer_callback function, uint32_t times);
102  bool run(uint32_t interval_msec);
103  void clear(void);
104 
105  inline timer_callback getCallback(void) const { return _callback; }
106  inline bool getEnabled(void) const { return _enabled; }
107  inline void setEnabled(bool flg) { _enabled = flg; }
108  inline void toggle(void) { _enabled = !_enabled; }
109  inline void setPreviousMsec(uint32_t msec) { _prev_msec = msec; }
110 
111  private:
112  timer_callback _callback = nullptr;
113  uint32_t _prev_msec = 0;
114  uint32_t _interval = 0;
115  uint32_t _remain = 0;
116  bool _enabled = false;
117  };
118 
119  timer_info_t _timer_info[MAX_TIMERS];
120 
121  uint8_t _enable_count = 0;
122 };
123 
124 #endif
std::function< void(void)> timer_callback
Definition: M5Timer.h:11
uint_fast8_t getNumTimers(void) const
Definition: M5Timer.h:87
void restartTimer(int_fast8_t id)
Definition: M5Timer.cpp:76
void toggle(int_fast8_t id)
Definition: M5Timer.h:72
int_fast8_t setTimeout(uint32_t interval_msec, timer_callback function)
Definition: M5Timer.h:42
void disable(int_fast8_t id)
Definition: M5Timer.h:64
int_fast8_t setInterval(uint32_t interval_msec, timer_callback function)
Definition: M5Timer.h:34
void deleteTimer(int_fast8_t id)
Definition: M5Timer.cpp:69
static constexpr const uint32_t MAX_TIMERS
maximum number of timers
Definition: M5Timer.h:16
void enable(int_fast8_t id)
Definition: M5Timer.h:56
uint_fast8_t getNumAvailableTimers(void) const
Definition: M5Timer.h:93
bool isEnabled(int_fast8_t id) const
Definition: M5Timer.h:81
void run(void)
this function must be called inside loop()
Definition: M5Timer.cpp:44
M5Timer(void)
constructor
Definition: M5Timer.cpp:7
int_fast8_t setTimer(uint32_t interval_msec, timer_callback function, uint32_t times)
Definition: M5Timer.cpp:56