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