Pico-Arduino
PicoSemaphore.h
1 #pragma once
2 
3 #include "pico/stdlib.h"
4 #include "pico/sync.h"
5 
11 class Semaphore {
12  public:
13  Semaphore(int maxPermits=1, int initalPermits=1){
14  sem_init(&sem, initalPermits,maxPermits);
15  }
16 
17  ~Semaphore(){
18  sem_release(&sem);
19  }
20 
21  int available(){
22  return sem_available(&sem);
23  }
24 
25  void reset(int permits=1) {
26  sem_reset(&sem, permits);
27  }
28 
29  bool aquire(int64_t timeoutMs=-1){
30  bool result = false;
31  if (timeoutMs<0){
32  sem_acquire_blocking(&sem);
33  result = true;
34  } else {
35  result = sem_acquire_timeout_ms(&sem, timeoutMs);
36  }
37  return result;
38  }
39 
40  bool release() {
41  return sem_release(&sem);
42  }
43 
44  bool up(){
45  return aquire();
46  }
47 
48  bool down() {
49  return release();
50  }
51 
52  bool wait() {
53  return aquire();
54  }
55 
56  bool signal(){
57  return release();
58  }
59 
60  protected:
61  semaphore_t sem;
62 };
Pico Semaphore which might be useful if you use the 2 processors (e.g. with the Thread class)
Definition: PicoSemaphore.h:11