Pico-Arduino
PicoTimer.h
1 #pragma once
2 
3 #include "pico/stdlib.h"
4 
5 typedef int64_t(* alarm_callback_t )(alarm_id_t id, void *user_data);
6 typedef bool(* repeating_timer_callback_t )(repeating_timer_t *rt);
7 
8 enum TimeUnit {MS,US};
9 
15 class TimerAlarm {
16  public:
17  TimerAlarm(){
18  alarm_pool_init_default();
19  ap = alarm_pool_get_default();
20  }
21 
22  ~TimerAlarm(){
23  stop();
24  }
25 
26  void start(alarm_callback_t callback, uint64_t time, TimeUnit unit = MS, void *user_data=nullptr, bool fire_if_past=true){
27  switch(unit){
28  case MS:
29  // milliseconds 1/1000 sec
30  alarm_id = alarm_pool_add_alarm_in_ms(ap, time, callback, user_data, fire_if_past);
31  break;
32  case US:
33  // microseconds 1/1000000 (10^6) sec
34  alarm_id = alarm_pool_add_alarm_in_us(ap, time, callback, user_data, fire_if_past);
35  break;
36  }
37  }
38 
39  bool stop(){
40  return alarm_pool_cancel_alarm(ap, alarm_id);
41  }
42 
43  protected:
44  alarm_id_t alarm_id=-1;
45  alarm_pool_t *ap;
46 
47 };
48 
54  public:
56  alarm_pool_init_default();
57  ap = alarm_pool_get_default();
58  }
59 
61  stop();
62  }
63 
64  bool start(repeating_timer_callback_t callback, uint64_t time, TimeUnit unit = MS, void *user_data=nullptr){
65  bool result = false;
66  switch(unit){
67  case MS:
68  result = alarm_pool_add_repeating_timer_ms(ap, time, callback, user_data, &timer);
69  break;
70  case US:
71  result = alarm_pool_add_repeating_timer_us(ap, time, callback, user_data, &timer);
72  break;
73  }
74  return result;
75  }
76 
77  bool stop(){
78  return cancel_repeating_timer(&timer);
79  }
80 
81  protected:
82  alarm_pool_t *ap;
83  repeating_timer_t timer;
84 };
Alarm functions for scheduling future execution.
Definition: PicoTimer.h:15
Repeating Timer functions for simple scheduling of repeated execution.
Definition: PicoTimer.h:53