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