27#ifndef _GPIO_INTERFACE_H_
28#define _GPIO_INTERFACE_H_
45#undef OUTPUT_OPEN_DRAIN
51typedef uint16_t gpio_pin_t;
52#define PORT_PIN(port, pin) ((port) << 8 | (pin))
53#define PORT(gpio) ((gpio) >> 8)
54#define PIN(gpio) ((gpio) & 0xff)
56typedef uint16_t gpio_mode_t;
57typedef uint16_t gpio_irq_t;
62const gpio_mode_t NONE = 0x0000;
63const gpio_mode_t INPUT = 0x0001;
64const gpio_mode_t OUTPUT = 0x0002;
65const gpio_mode_t OUTPUT_OPEN_DRAIN = 0x0004;
66const gpio_mode_t OUTPUT_OPEN_SOURCE = 0x0008;
69const gpio_mode_t PULLUP = 0x0010;
70const gpio_mode_t PULLDOWN = 0x0020;
71const gpio_mode_t SLOW = 0x0040;
72const gpio_mode_t FAST = 0x0080;
73const gpio_mode_t INIT_HIGH = 0x0100;
74const gpio_mode_t INIT_LOW = 0x0200;
77const gpio_irq_t RISING = 0x0001;
78const gpio_irq_t FALLING = 0x0002;
79const gpio_irq_t LEVEL_HIGH = 0x0004;
80const gpio_irq_t LEVEL_LOW = 0x0008;
90 virtual void setGpio(gpio_pin_t gpio) = 0;
91 virtual gpio_pin_t getGpio()
const = 0;
94 virtual void gpioMode (gpio_mode_t mode) = 0;
95 virtual bool gpioRead ()
const = 0;
96 virtual void gpioWrite (
bool value) = 0;
97 virtual void gpioToggle() = 0;
102 virtual void gpioAttachIrq (gpio_irq_t irq_mode,
103 function<
void()> handler) = 0;
105 virtual void gpioDetachIrq () = 0;
107 virtual void gpioEnableIrq () = 0;
109 virtual void gpioDisableIrq() = 0;
112 inline void operator = (
bool b) {
115 inline operator bool ()
const {