mirror of
https://github.com/espressif/arduino-esp32
synced 2024-09-21 10:28:04 +00:00
6bfcd6d9a9
* refactor(style): Change some style options * refactor(style): Apply style changes
35 lines
945 B
C++
35 lines
945 B
C++
/*
|
|
* FunctionalInterrupt.cpp
|
|
*
|
|
* Created on: 8 jul. 2018
|
|
* Author: Herman
|
|
*/
|
|
|
|
#include "FunctionalInterrupt.h"
|
|
#include "Arduino.h"
|
|
|
|
typedef void (*voidFuncPtr)(void);
|
|
typedef void (*voidFuncPtrArg)(void *);
|
|
|
|
extern "C" {
|
|
extern void __attachInterruptFunctionalArg(uint8_t pin, voidFuncPtrArg userFunc, void *arg, int intr_type, bool functional);
|
|
}
|
|
|
|
void ARDUINO_ISR_ATTR interruptFunctional(void *arg) {
|
|
InterruptArgStructure *localArg = (InterruptArgStructure *)arg;
|
|
if (localArg->interruptFunction) {
|
|
localArg->interruptFunction();
|
|
}
|
|
}
|
|
|
|
void attachInterrupt(uint8_t pin, std::function<void(void)> intRoutine, int mode) {
|
|
// use the local interrupt routine which takes the ArgStructure as argument
|
|
__attachInterruptFunctionalArg(pin, (voidFuncPtrArg)interruptFunctional, new InterruptArgStructure{intRoutine}, mode, true);
|
|
}
|
|
|
|
extern "C" {
|
|
void cleanupFunctional(void *arg) {
|
|
delete (InterruptArgStructure *)arg;
|
|
}
|
|
}
|