45 lines
956 B
C++
45 lines
956 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;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|