Skip to content

Commit f6ad6e2

Browse files
committed
Update FunctionalInterrupt for all-functional IRQ implementation
1 parent ab3f822 commit f6ad6e2

File tree

7 files changed

+65
-92
lines changed

7 files changed

+65
-92
lines changed

libraries/esp8266/examples/GPIO/Functional/Functional.ino renamed to libraries/FunctionalInterrupt/examples/Functional/Functional.ino

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//#include "FunctionalInterrupt.h"
1+
#include <FunctionalInterrupt.h>
22

33
#if defined(ESP32)
44
#define BUTTON1 16
@@ -15,14 +15,12 @@ class Button {
1515
public:
1616
Button(uint8_t reqPin) : PIN(reqPin) {
1717
pinMode(PIN, INPUT_PULLUP);
18-
// Arduino C API:
18+
// Arduino API:
1919
//attachInterruptArg(PIN, [](void* self) {
2020
// static_cast<Button*>(self)->buttonIsr();
2121
//}, this, FALLING); // fails on ESP8266: "buttonIsr not in IRAM"
2222
//attachInterruptArg(PIN, reinterpret_cast<void(*)(void*)>(&buttonIsr_static), this, FALLING); // works on ESP8266
23-
attachInterrupt(PIN, [this]() {
24-
buttonIsr();
25-
}, FALLING); // works on ESP8266
23+
attachInterrupt(PIN, std::bind(&Button::buttonIsr, this), FALLING); // works on ESP8266
2624
// FunctionalInterrupt.h API:
2725
//attachScheduledInterrupt(PIN, [this](const InterruptInfo & ii) {
2826
// Serial.print("Pin ");
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#######################################
2+
# Datatypes (KEYWORD1)
3+
#######################################
4+
5+
InterruptInfo KEYWORD1
6+
7+
#######################################
8+
# Methods and Functions (KEYWORD2)
9+
#######################################
10+
11+
attachScheduledInterrupt KEYWORD2
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
name=FunctionalInterrupt
2+
version=1.0
3+
author=hreintke <hreintke@tauri.nl>
4+
maintainer=hreintke <hreintke@tauri.nl>
5+
sentence=C++ functional and scheduled interrupt handling
6+
paragraph=
7+
category=Other
8+
url=https://github.com/esp8266/Arduino
9+
architectures=esp8266
10+
dot_a_linkage=true
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include "FunctionalInterrupt.h"
2+
#include <Schedule.h>
3+
#include <Arduino.h>
4+
5+
namespace {
6+
7+
void ICACHE_RAM_ATTR interruptScheduleFunctional(uint8_t pin, std::function<void(InterruptInfo)> scheduledIntRoutine)
8+
{
9+
InterruptInfo interruptInfo(pin);
10+
interruptInfo.value = digitalRead(pin);
11+
interruptInfo.micro = micros();
12+
schedule_function(std::bind(std::move(scheduledIntRoutine), std::move(interruptInfo)));
13+
}
14+
15+
}
16+
17+
void attachScheduledInterrupt(uint8_t pin, std::function<void(InterruptInfo)> scheduledIntRoutine, int mode)
18+
{
19+
if (scheduledIntRoutine)
20+
{
21+
attachInterrupt(pin, std::bind(interruptScheduleFunctional, pin, std::move(scheduledIntRoutine)), mode);
22+
}
23+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#ifndef FUNCTIONALINTERRUPT_H
2+
#define FUNCTIONALINTERRUPT_H
3+
4+
#include <functional>
5+
6+
// Structures for communication
7+
8+
struct InterruptInfo
9+
{
10+
InterruptInfo(uint8_t _pin) : pin(_pin) {}
11+
const uint8_t pin;
12+
uint8_t value = 0;
13+
uint32_t micro = 0;
14+
};
15+
16+
void attachScheduledInterrupt(uint8_t pin, std::function<void(InterruptInfo)> scheduledIntRoutine, int mode);
17+
18+
#endif //FUNCTIONALINTERRUPT_H

libraries/esp8266/examples/GPIO/Functional/FunctionalInterrupt.cpp

Lines changed: 0 additions & 34 deletions
This file was deleted.

libraries/esp8266/examples/GPIO/Functional/FunctionalInterrupt.h

Lines changed: 0 additions & 53 deletions
This file was deleted.

0 commit comments

Comments
 (0)