YAHAL
Yet Another Hardware Abstraction Library
Loading...
Searching...
No Matches
gpio_BBB.h
1#ifndef _GPIO_BBB_H_
2#define _GPIO_BBB_H_
3
4#include "gpio_interface.h"
5#include "gpio_module/gpio_bbb_if.h"
6#include <thread>
7
8class gpio_BBB : public gpio_interface {
9
10 public:
11 virtual ~gpio_BBB();
12 static gpio_BBB inst;
13
14 // Basic GPIO handling
15 void gpioMode (gpio_pin_t gpio, gpio_mode_t mode);
16 bool gpioRead (gpio_pin_t gpio);
17 void gpioWrite (gpio_pin_t gpio, bool value);
18 void gpioToggle(gpio_pin_t gpio);
19
20 // Interrupt handling
21 void gpioAttachIrq (gpio_pin_t gpio, gpio_irq_t irq_mode,
22 void (*handler)(gpio_pin_t, void *),
23 void * arg = nullptr);
24 void gpioDetachIrq (gpio_pin_t gpio);
25 void gpioEnableIrq (gpio_pin_t gpio);
26 void gpioDisableIrq(gpio_pin_t gpio);
27
28 /* Additional functionality */
29 void setDebounce (uint8_t gpio, uint16_t msdelay);
30
31 private:
32 gpio_BBB();
33
34 void irq_handler();
35 std::thread irq_thread;
36 void (*usrHandler[GPIO_COUNT])(gpio_pin_t gpio, void *);
37
38 int _fd_gpio;
39};
40
41
42// This small wrapper class provides GPIO
43// functionality for a single GPIO pin.
44class gpio_BBB_pin : public gpio_pin {
45public:
46 gpio_BBB_pin() : gpio_pin(gpio_BBB::inst) { }
47 gpio_BBB_pin(gpio_pin_t gpio) : gpio_pin(gpio_BBB::inst, gpio) { }
48 void setDebounce(uint16_t msdelay) {
49 gpio_BBB::inst.setDebounce(_gpio, msdelay);
50 }
51};
52
53#endif
54