Interrupts.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * Interrupts.h
8  *
9  ****/
10 
15 #pragma once
16 
17 #include <cstdint>
18 #include <driver/gpio.h>
19 #include <Delegate.h>
20 #include <WConstants.h>
21 #include <sming_attr.h>
22 
23 constexpr unsigned ESP_MAX_INTERRUPTS = 16;
24 
25 typedef void (*InterruptCallback)();
27 
33 {
34  switch(mode) {
35  case LOW: // to trigger the interrupt whenever the pin is low,
36  return GPIO_PIN_INTR_LOLEVEL;
37  case CHANGE: // to trigger the interrupt whenever the pin changes value
38  return (GPIO_INT_TYPE)3; // GPIO_PIN_INTR_ANYEDGE
39  case RISING: // to trigger when the pin goes from low to high,
40  return GPIO_PIN_INTR_POSEDGE;
41  case FALLING: // for when the pin goes from high to low.
42  return GPIO_PIN_INTR_NEGEDGE;
43  case HIGH: // to trigger the interrupt whenever the pin is high.
44  return GPIO_PIN_INTR_HILEVEL;
45  default:
46  return GPIO_PIN_INTR_DISABLE;
47  }
48 }
49 
56 void attachInterrupt(uint8_t pin, InterruptCallback callback, GPIO_INT_TYPE type);
57 
65 __forceinline void attachInterrupt(uint8_t pin, InterruptCallback callback, uint8_t mode)
66 {
68  attachInterrupt(pin, callback, type);
69 }
70 
77 void attachInterrupt(uint8_t pin, InterruptDelegate delegateFunction, GPIO_INT_TYPE type);
78 
87 __forceinline void attachInterrupt(uint8_t pin, InterruptDelegate delegateFunction, uint8_t mode)
88 {
90  attachInterrupt(pin, delegateFunction, type);
91 }
92 
98 void attachInterruptHandler(uint8_t pin, GPIO_INT_TYPE type);
99 
103 void detachInterrupt(uint8_t pin);
104 
110 void interruptMode(uint8_t pin, GPIO_INT_TYPE type);
111 
117 __forceinline void interruptMode(uint8_t pin, uint8_t mode)
118 {
120  interruptMode(pin, type);
121 }
122 
123 #define digitalPinToInterrupt(pin) ((pin) < ESP_MAX_INTERRUPTS ? (pin) : -1)
124 
125 // AVR-style interrupt management
126 #define cli() noInterrupts()
127 #define sei() interrupts()
128 
void interruptMode(uint8_t pin, GPIO_INT_TYPE type)
Set interrupt mode.
#define __forceinline
Definition: sming_attr.h:13
void(* InterruptCallback)()
Definition: Interrupts.h:25
Definition: esp8266/ESP8266_NONOS_SDK/include/gpio.h:36
Definition: esp8266/ESP8266_NONOS_SDK/include/gpio.h:41
Definition: esp8266/ESP8266_NONOS_SDK/include/gpio.h:38
#define HIGH
Definition: WConstants.h:38
constexpr unsigned ESP_MAX_INTERRUPTS
Definition: Interrupts.h:23
Definition: esp8266/ESP8266_NONOS_SDK/include/gpio.h:40
void detachInterrupt(uint8_t pin)
Disable interrupts on GPIO pin.
#define CHANGE
Definition: WConstants.h:56
GPIO_INT_TYPE ConvertArduinoInterruptMode(uint8_t mode)
Convert Arduino interrupt mode to Sming mode.
Definition: Interrupts.h:32
#define LOW
Definition: WConstants.h:37
Definition: esp8266/ESP8266_NONOS_SDK/include/gpio.h:37
#define FALLING
Definition: WConstants.h:57
void attachInterrupt(uint8_t pin, InterruptCallback callback, GPIO_INT_TYPE type)
Attach a function to a GPIO interrupt.
void attachInterruptHandler(uint8_t pin, GPIO_INT_TYPE type)
Enable interrupts on GPIO pin.
Delegate< void()> InterruptDelegate
Definition: Interrupts.h:26
#define RISING
Definition: WConstants.h:58
GPIO_INT_TYPE
Defines the GPIO interrupt type.
Definition: esp8266/ESP8266_NONOS_SDK/include/gpio.h:35