discoLight
Loading...
Searching...
No Matches
GPIO.h
Go to the documentation of this file.
1
32#ifndef GPIO_H_
33#define GPIO_H_
34
35#include <mutex> // std::mutex, std::unique_lock
36#include <condition_variable> // std::condition_variable
37#include "GenericThreadInfo.h"
38
39#define NUMBER_OF_GPIO_PINS (28)
40
41namespace SWE4211RPi {
42
43typedef int (*CallbackType)(int);
44
49class GPIO {
50public:
54 enum DIRECTION {
55 GPIO_IN, GPIO_OUT
56 };
61 enum VALUE {
62 GPIO_LOW = 0, GPIO_HIGH = 1
63 };
68 enum EDGE {
69 GPIO_NONE, GPIO_RISING, GPIO_FALLING, GPIO_BOTH
70 };
71
72protected:
76 int number=0;
77
83
88 std::mutex mtx;
89
94 std::condition_variable cv;
95 std::condition_variable ccv;
96
101 CallbackType methodCallback=nullptr;
102
107 struct timespec isrRisingTimestamp;
108
113 struct timespec isrFallingTimestamp;
114
115
116
117public:
118 static GPIO& getInstance(int number, DIRECTION dir, VALUE vale = GPIO_LOW);
119 static void freeInstance(GPIO& instance);
120
121 GPIO();
122 virtual ~GPIO(); //destructor will unexport the pin
123
129 static GPIO* gpio_instances[NUMBER_OF_GPIO_PINS+1];
130 static GenericThreadInfo* threadInstances[NUMBER_OF_GPIO_PINS+1];
131
132
133 // General Input and Output Settings
138 virtual void setValue(GPIO::VALUE)=0;
139
145
146// Edge and Interrupt Methods
147
155 virtual void enableEdgeInterrupt(EDGE edgeType)=0;
156
160 virtual void disableEdgeInterrupt()=0;
161
169 virtual int waitForEdge(int maxWait);
170
176 virtual struct timespec getRisingISRTimestamp();
177
183 virtual struct timespec getFallingISRTimestamp();
184
193 virtual void setCallbackMethod(CallbackType methodCallback);
194
201 virtual void callBackThreadHandler();
202
208
213 virtual int getPinNumber();
214};
215
222 void myInterrupt0();
223
227 void myInterrupt1();
228
232 void myInterrupt2();
233
237 void myInterrupt3();
238
242 void myInterrupt4();
243
247 void myInterrupt5();
248
252 void myInterrupt6();
253
257 void myInterrupt7();
258
262 void myInterrupt8();
263
267 void myInterrupt9();
268
272 void myInterrupt10();
273
277 void myInterrupt11();
278
282 void myInterrupt12();
283
287 void myInterrupt13();
291 void myInterrupt14();
292
296 void myInterrupt15();
297
301 void myInterrupt16();
302
306 void myInterrupt17();
307
311 void myInterrupt18();
312
316 void myInterrupt19();
317
321 void myInterrupt20();
322
326 void myInterrupt21();
327
331 void myInterrupt22();
332
336 void myInterrupt23();
337
341 void myInterrupt24();
342
346 void myInterrupt25();
347
351 void myInterrupt26();
352
356 void myInterrupt27();
357
361 void myInterrupt28();
362} /* namespace SWE4211RPi */
363
364#endif /* GPIO_H_ */
void myInterrupt2()
Definition WiringPiGPIO.cpp:345
void myInterrupt6()
Definition WiringPiGPIO.cpp:377
void myInterrupt21()
Definition WiringPiGPIO.cpp:497
void myInterrupt7()
Definition WiringPiGPIO.cpp:385
void myInterrupt0()
Definition WiringPiGPIO.cpp:329
void myInterrupt9()
Definition WiringPiGPIO.cpp:401
void myInterrupt26()
Definition WiringPiGPIO.cpp:537
void myInterrupt13()
Definition WiringPiGPIO.cpp:433
void myInterrupt25()
Definition WiringPiGPIO.cpp:529
void myInterrupt20()
Definition WiringPiGPIO.cpp:489
void myInterrupt12()
Definition WiringPiGPIO.cpp:425
void myInterrupt4()
Definition WiringPiGPIO.cpp:361
void myInterrupt16()
Definition WiringPiGPIO.cpp:457
void myInterrupt3()
Definition WiringPiGPIO.cpp:353
void myInterrupt28()
Definition WiringPiGPIO.cpp:553
void myInterrupt14()
Definition WiringPiGPIO.cpp:441
void myInterrupt27()
Definition WiringPiGPIO.cpp:545
void myInterrupt17()
Definition WiringPiGPIO.cpp:465
void myInterrupt19()
Definition WiringPiGPIO.cpp:481
void myInterrupt11()
Definition WiringPiGPIO.cpp:417
void myInterrupt18()
Definition WiringPiGPIO.cpp:473
void myInterrupt1()
Definition WiringPiGPIO.cpp:337
void myInterrupt5()
Definition WiringPiGPIO.cpp:369
void myInterrupt15()
Definition WiringPiGPIO.cpp:449
void myInterrupt24()
Definition WiringPiGPIO.cpp:521
void myInterrupt22()
Definition WiringPiGPIO.cpp:505
void myInterrupt10()
Definition WiringPiGPIO.cpp:409
void myInterrupt23()
Definition WiringPiGPIO.cpp:513
void myInterrupt8()
Definition WiringPiGPIO.cpp:393
GPIO GPIO wrapper classes for usage with C++ and wiringPi.
Definition GPIO.h:49
static GPIO * gpio_instances[NUMBER_OF_GPIO_PINS+1]
Definition GPIO.h:129
virtual void callBackThreadHandler()
Definition GPIO.cpp:206
virtual GPIO::VALUE getValue()=0
struct timespec isrRisingTimestamp
Definition GPIO.h:107
virtual void setCallbackMethod(CallbackType methodCallback)
Definition GPIO.cpp:169
virtual void enableEdgeInterrupt(EDGE edgeType)=0
DIRECTION
Definition GPIO.h:54
std::mutex mtx
Definition GPIO.h:88
virtual int getPinNumber()
Definition GPIO.cpp:219
virtual void setValue(GPIO::VALUE)=0
VALUE
Definition GPIO.h:61
struct timespec isrFallingTimestamp
Definition GPIO.h:113
virtual struct timespec getRisingISRTimestamp()
Definition GPIO.cpp:147
std::condition_variable cv
Definition GPIO.h:94
int instanceCount
Definition GPIO.h:82
EDGE
Definition GPIO.h:68
int number
Definition GPIO.h:76
CallbackType methodCallback
Definition GPIO.h:101
virtual int waitForEdge(int maxWait)
Definition GPIO.cpp:129
virtual void disableEdgeInterrupt()=0
virtual void handleInterruptDrivenGPIOPin()=0
virtual struct timespec getFallingISRTimestamp()
Definition GPIO.cpp:156
Definition GenericThreadInfo.h:35