Skip to content

Commit 685023c

Browse files
committed
Update to latest ESP8266/ESP32 compatible version
1 parent e1c6ee1 commit 685023c

File tree

3 files changed

+10
-49
lines changed

3 files changed

+10
-49
lines changed

libraries/FunctionalInterrupt/examples/Functional/Functional.ino

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
#include <Arduino.h>
21
#include <FunctionalInterrupt.h>
2+
#include <Arduino.h>
33

44
#if defined(ESP32)
55
#define BUTTON1 16
@@ -22,8 +22,7 @@ class Button {
2222
//}, this, FALLING); // works on ESP32; fails on ESP8266: "ISR not in IRAM"
2323
//attachInterruptArg(PIN, reinterpret_cast<void(*)(void*)>(&isr_static), this, FALLING); // works on ESP32; works on ESP8266
2424
// FunctionalInterrupts API:
25-
attachInterrupt(PIN, [this]() { isr(); }, FALLING); // works on ESP32; works on ESP8266
26-
//attachScheduledInterrupt(PIN, [this](InterruptInfo ii) { Serial.print("Pin "); Serial.println(ii.pin); isr(); }, FALLING); // works on ESP32; works on ESP8266
25+
attachScheduledInterrupt(PIN, [this](InterruptInfo ii) { Serial.print("Pin "); Serial.println(ii.pin); isr(); }, FALLING); // works on ESP32; works on ESP8266
2726
};
2827
~Button() {
2928
detachInterrupt(PIN);
@@ -78,6 +77,4 @@ void setup() {
7877
void loop() {
7978
button1->checkPressed();
8079
button2->checkPressed();
81-
82-
run_scheduled_functions();
8380
}

libraries/FunctionalInterrupt/src/FunctionalInterrupt.cpp

+7-35
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#include "FunctionalInterrupt.h"
2-
#include "Schedule.h"
2+
#include <Schedule.h>
33
#include <Arduino.h>
44

55
void ICACHE_RAM_ATTR interruptFunctional(void* arg)
@@ -10,19 +10,15 @@ void ICACHE_RAM_ATTR interruptFunctional(void* arg)
1010
localArg->interruptInfo->value = digitalRead(localArg->interruptInfo->pin);
1111
localArg->interruptInfo->micro = micros();
1212
}
13-
if (localArg->functionInfo->reqScheduledFunction)
13+
if (localArg->scheduledFunction)
1414
{
1515
schedule_function(
16-
[reqScheduledFunction = localArg->functionInfo->reqScheduledFunction,
17-
interruptInfo = *localArg->interruptInfo]()
16+
[scheduledFunction = localArg->scheduledFunction,
17+
interruptInfo = *localArg->interruptInfo]()
1818
{
19-
reqScheduledFunction(interruptInfo);
19+
scheduledFunction(interruptInfo);
2020
});
2121
}
22-
else if (localArg->functionInfo->reqFunction)
23-
{
24-
localArg->functionInfo->reqFunction();
25-
}
2622
}
2723

2824
void cleanupFunctional(void* arg)
@@ -31,25 +27,6 @@ void cleanupFunctional(void* arg)
3127
delete localArg;
3228
}
3329

34-
void attachInterrupt(uint8_t pin, std::function<void(void)> intRoutine, int mode)
35-
{
36-
// use the local interrupt routine which takes the ArgStructure as argument
37-
38-
void* localArg = detachInterruptArg(pin);
39-
if (localArg)
40-
{
41-
cleanupFunctional(localArg);
42-
}
43-
44-
FunctionInfo* fi = new FunctionInfo;
45-
fi->reqFunction = intRoutine;
46-
47-
ArgStructure* as = new ArgStructure;
48-
as->functionInfo = fi;
49-
50-
attachInterruptArg(pin, interruptFunctional, as, mode);
51-
}
52-
5330
void attachScheduledInterrupt(uint8_t pin, std::function<void(InterruptInfo)> scheduledIntRoutine, int mode)
5431
{
5532
void* localArg = detachInterruptArg(pin);
@@ -58,14 +35,9 @@ void attachScheduledInterrupt(uint8_t pin, std::function<void(InterruptInfo)> sc
5835
cleanupFunctional(localArg);
5936
}
6037

61-
InterruptInfo* ii = new InterruptInfo(pin);
62-
63-
FunctionInfo* fi = new FunctionInfo;
64-
fi->reqScheduledFunction = scheduledIntRoutine;
65-
6638
ArgStructure* as = new ArgStructure;
67-
as->interruptInfo = ii;
68-
as->functionInfo = fi;
39+
as->interruptInfo = new InterruptInfo(pin);
40+
as->scheduledFunction = scheduledIntRoutine;
6941

7042
attachInterruptArg(pin, interruptFunctional, as, mode);
7143
}

libraries/FunctionalInterrupt/src/FunctionalInterrupt.h

+1-9
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,16 @@ struct InterruptInfo
1313
uint32_t micro = 0;
1414
};
1515

16-
struct FunctionInfo
17-
{
18-
std::function<void(void)> reqFunction = nullptr;
19-
std::function<void(InterruptInfo)> reqScheduledFunction = nullptr;
20-
};
21-
2216
struct ArgStructure
2317
{
2418
~ArgStructure()
2519
{
26-
delete functionInfo;
2720
delete interruptInfo;
2821
}
2922
InterruptInfo* interruptInfo = nullptr;
30-
FunctionInfo* functionInfo = nullptr;
23+
std::function<void(InterruptInfo)> scheduledFunction = nullptr;
3124
};
3225

33-
void attachInterrupt(uint8_t pin, std::function<void(void)> intRoutine, int mode);
3426
void attachScheduledInterrupt(uint8_t pin, std::function<void(InterruptInfo)> scheduledIntRoutine, int mode);
3527
void detachFunctionalInterrupt(uint8_t pin);
3628

0 commit comments

Comments
 (0)