Skip to content

FunctionalInterrupt/ScheduledFunctions should be in a library, not in esp32-hal-gpio #2734

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 49 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
f938f81
Update Ticker API to compatibility with ESP8266, prepares for co-op l…
dok-net Jun 2, 2019
2030ba0
Fixing Build server complaints
dok-net Jun 2, 2019
108f87f
Fix omitted casts in template member function
dok-net Jun 2, 2019
01dced2
Changes after review
dok-net Jun 4, 2019
aa5d1c0
Expose µs resolution of OS API in Ticker class
dok-net Jun 4, 2019
e069d83
Return Ticker to libraries only for modularity.
dok-net Jun 5, 2019
cc9aa7d
Unify Ticker examples.
dok-net Jun 6, 2019
b6b5afd
Default for LED_BUILTIN
dok-net Jun 6, 2019
2f2b66c
In Ticker, the *scheduled functions become available in another devel…
dok-net Jun 6, 2019
28f71f3
Astyle from ESP8266
dok-net Jun 6, 2019
af944b4
Add hooks for sketches/libraries to perform work on each yield() and …
dok-net Jun 6, 2019
e7d5411
Add Schedule.(h|cpp) from ESP8266 to run off loopTask.
dok-net May 5, 2019
37cebc1
Updated with latest sources and ESP8266/ESP32 portability.
dok-net May 28, 2019
bfe8739
Misordering resulting from merge fixed.
dok-net May 28, 2019
b5b6dc9
Yield in scheduling loop to prevent wdt elapsing.
dok-net May 29, 2019
65d9467
Ticker and Schedule updated from ESP8266 Arduino
dok-net Jun 1, 2019
42d5350
Port Schedule to ESP32.
dok-net Jun 2, 2019
bc62a5a
circular_queue.h with API comments.
dok-net Jun 3, 2019
35018f4
Provide own memory management for Ticker instances to conserve heap.
dok-net Jun 3, 2019
274159b
Use µs resolution in Ticker from Schedule
dok-net Jun 4, 2019
ce691dd
Adapt to ESP32/ESP8266 native ticker resolution.
dok-net Jun 4, 2019
7b5489e
Return Ticker to libraries only for modularity.
dok-net Jun 5, 2019
1355467
Make entry points into sequential cont scheduler weak functions
dok-net Jun 5, 2019
c7fc06c
Move PolledTimeout to own libraries for source code compatibility wit…
dok-net Jun 6, 2019
fda9f1e
Add Schedule.(h|cpp) from ESP8266 to run off loopTask.
dok-net May 5, 2019
562fbcb
Port Schedule to ESP32.
dok-net Jun 2, 2019
487a7b0
Make entry points into sequential cont scheduler weak functions
dok-net Jun 5, 2019
f307262
Add hooks for sketches/libraries to perform work on each yield() and …
dok-net Jun 6, 2019
adcc380
Add Schedule.(h|cpp) from ESP8266 to run off loopTask.
dok-net May 5, 2019
5972c52
Ticker and Schedule updated from ESP8266 Arduino
dok-net Jun 1, 2019
b968905
Remove special support for FunctionalInterrupt from core interrupt ha…
dok-net May 2, 2019
f1416fd
Add supporting function for interrupt arg memory management, linke wi…
dok-net May 2, 2019
549f2ab
Bring back FunctionalInterrupt, and ScheduledFunctions from ESP8266, …
dok-net May 2, 2019
d192d3c
Ridiculous port number mistake.
dok-net May 2, 2019
ad3a24a
Apply astyle to example INO.
dok-net May 2, 2019
e530b68
Remove ScheduledFunctions.(h|cpp), per comment https://github.com/esp…
dok-net May 2, 2019
2768906
Invented void* detachInterruptArg() that returns the argument given i…
dok-net May 3, 2019
4960474
Modified example to showcase how general FunctionalInterrupt uses vio…
dok-net May 3, 2019
a55364c
Direct call or scheduled is either-or.
dok-net May 3, 2019
16cd6ff
While Schedule.cpp is not part of ESP32 core...
dok-net May 3, 2019
cc0183d
Always apply astyle to examples.
dok-net May 3, 2019
896ec6b
Fix renaming for better PR readability.
dok-net May 11, 2019
c9d8753
Properly turn FunctionalInterrupt into integral library
dok-net Jun 2, 2019
260aaaf
remove leftover files
dok-net Jun 2, 2019
f770056
Update to latest ESP8266/ESP32 compatible version
dok-net Jun 2, 2019
41265dd
Proper detach for scheduled ISR example
dok-net Jun 2, 2019
386b6e6
Return Ticker to libraries only for modularity.
dok-net Jun 5, 2019
ef061bc
Fill in empty fields
dok-net Jun 5, 2019
5c46e6d
Bring back FunctionalInterrupt's attachInterrupt()
dok-net Jun 22, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ set(CORE_SRCS
cores/esp32/esp32-hal-uart.c
cores/esp32/esp32-hal-rmt.c
cores/esp32/Esp.cpp
cores/esp32/FunctionalInterrupt.cpp
cores/esp32/HardwareSerial.cpp
cores/esp32/IPAddress.cpp
cores/esp32/IPv6Address.cpp
Expand Down Expand Up @@ -47,10 +46,12 @@ set(LIBRARY_SRCS
libraries/FFat/src/FFat.cpp
libraries/FS/src/FS.cpp
libraries/FS/src/vfs_api.cpp
libraries/FunctionalInterrupt/src/FunctionalInterrupt.cpp
libraries/HTTPClient/src/HTTPClient.cpp
libraries/HTTPUpdate/src/HTTPUpdate.cpp
libraries/NetBIOS/src/NetBIOS.cpp
libraries/Preferences/src/Preferences.cpp
libraries/Schedule/src/Schedule.cpp
libraries/SD_MMC/src/SD_MMC.cpp
libraries/SD/src/SD.cpp
libraries/SD/src/sd_diskio.cpp
Expand Down Expand Up @@ -186,10 +187,13 @@ set(COMPONENT_ADD_INCLUDEDIRS
libraries/ESPmDNS/src
libraries/FFat/src
libraries/FS/src
libraries/FunctionalInterrupt/src
libraries/HTTPClient/src
libraries/HTTPUpdate/src
libraries/NetBIOS/src
libraries/PolledTimeout/src
libraries/Preferences/src
libraries/Schedule/src
libraries/SD_MMC/src
libraries/SD/src
libraries/SimpleBLE/src
Expand Down
3 changes: 3 additions & 0 deletions cores/esp32/Arduino.h
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,9 @@ void init(void);
void initVariant(void);
void initArduino(void);

void yield_completed(void);
void loop_completed(void);

unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout);
unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout);

Expand Down
44 changes: 0 additions & 44 deletions cores/esp32/FunctionalInterrupt.cpp

This file was deleted.

20 changes: 0 additions & 20 deletions cores/esp32/FunctionalInterrupt.h

This file was deleted.

34 changes: 10 additions & 24 deletions cores/esp32/esp32-hal-gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,8 @@ typedef void (*voidFuncPtrArg)(void*);
typedef struct {
voidFuncPtr fn;
void* arg;
bool functional;
} InterruptHandle_t;
static InterruptHandle_t __pinInterruptHandlers[GPIO_PIN_COUNT] = {0,};
static InterruptHandle_t __pinInterruptHandlers[GPIO_PIN_COUNT] = { {0,0}, };

#include "driver/rtc_io.h"

Expand Down Expand Up @@ -239,9 +238,7 @@ static void IRAM_ATTR __onPinInterrupt()
}
}

extern void cleanupFunctional(void* arg);

extern void __attachInterruptFunctionalArg(uint8_t pin, voidFuncPtrArg userFunc, void * arg, int intr_type, bool functional)
extern void __attachInterruptArg(uint8_t pin, voidFuncPtrArg userFunc, void* arg, int intr_type)
{
static bool interrupt_initialized = false;

Expand All @@ -250,14 +247,8 @@ extern void __attachInterruptFunctionalArg(uint8_t pin, voidFuncPtrArg userFunc,
esp_intr_alloc(ETS_GPIO_INTR_SOURCE, (int)ESP_INTR_FLAG_IRAM, __onPinInterrupt, NULL, &gpio_intr_handle);
}

// if new attach without detach remove old info
if (__pinInterruptHandlers[pin].functional && __pinInterruptHandlers[pin].arg)
{
cleanupFunctional(__pinInterruptHandlers[pin].arg);
}
__pinInterruptHandlers[pin].fn = (voidFuncPtr)userFunc;
__pinInterruptHandlers[pin].arg = arg;
__pinInterruptHandlers[pin].functional = functional;

esp_intr_disable(gpio_intr_handle);
if(esp_intr_get_cpu(gpio_intr_handle)) { //APP_CPU
Expand All @@ -269,36 +260,31 @@ extern void __attachInterruptFunctionalArg(uint8_t pin, voidFuncPtrArg userFunc,
esp_intr_enable(gpio_intr_handle);
}

extern void __attachInterruptArg(uint8_t pin, voidFuncPtrArg userFunc, void * arg, int intr_type)
{
__attachInterruptFunctionalArg(pin, userFunc, arg, intr_type, false);
}

extern void __attachInterrupt(uint8_t pin, voidFuncPtr userFunc, int intr_type) {
__attachInterruptFunctionalArg(pin, (voidFuncPtrArg)userFunc, NULL, intr_type, false);
__attachInterruptArg(pin, (voidFuncPtrArg)userFunc, NULL, intr_type);
}

extern void __detachInterrupt(uint8_t pin)
{
esp_intr_disable(gpio_intr_handle);
if (__pinInterruptHandlers[pin].functional && __pinInterruptHandlers[pin].arg)
{
cleanupFunctional(__pinInterruptHandlers[pin].arg);
}
__pinInterruptHandlers[pin].fn = NULL;
__pinInterruptHandlers[pin].arg = NULL;
__pinInterruptHandlers[pin].functional = false;

GPIO.pin[pin].int_ena = 0;
GPIO.pin[pin].int_type = 0;
esp_intr_enable(gpio_intr_handle);
}

extern void* __detachInterruptArg(uint8_t pin) {
void* arg = (pin < GPIO_PIN_COUNT) ? __pinInterruptHandlers[pin].arg : NULL;
__detachInterrupt(pin);
return arg;
}

extern void pinMode(uint8_t pin, uint8_t mode) __attribute__ ((weak, alias("__pinMode")));
extern void digitalWrite(uint8_t pin, uint8_t val) __attribute__ ((weak, alias("__digitalWrite")));
extern int digitalRead(uint8_t pin) __attribute__ ((weak, alias("__digitalRead")));
extern void attachInterrupt(uint8_t pin, voidFuncPtr handler, int mode) __attribute__ ((weak, alias("__attachInterrupt")));
extern void detachInterrupt(uint8_t pin) __attribute__((weak, alias("__detachInterrupt")));
extern void attachInterruptArg(uint8_t pin, voidFuncPtrArg handler, void * arg, int mode) __attribute__ ((weak, alias("__attachInterruptArg")));
extern void detachInterrupt(uint8_t pin) __attribute__ ((weak, alias("__detachInterrupt")));

extern void* detachInterruptArg(uint8_t pin) __attribute__((weak, alias("__detachInterruptArg")));
3 changes: 2 additions & 1 deletion cores/esp32/esp32-hal-gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,9 @@ void digitalWrite(uint8_t pin, uint8_t val);
int digitalRead(uint8_t pin);

void attachInterrupt(uint8_t pin, void (*)(void), int mode);
void attachInterruptArg(uint8_t pin, void (*)(void*), void * arg, int mode);
void detachInterrupt(uint8_t pin);
void attachInterruptArg(uint8_t pin, void (*)(void*), void* arg, int mode);
void* detachInterruptArg(uint8_t pin);

#ifdef __cplusplus
}
Expand Down
47 changes: 26 additions & 21 deletions cores/esp32/esp32-hal-misc.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,6 @@ float temperatureRead()
return (temprature_sens_read() - 32) / 1.8;
}

void yield()
{
vPortYield();
}

#if CONFIG_AUTOSTART_ARDUINO

extern TaskHandle_t loopTaskHandle;
Expand Down Expand Up @@ -139,9 +134,34 @@ unsigned long IRAM_ATTR millis()
return (unsigned long) (esp_timer_get_time() / 1000ULL);
}

void initVariant() __attribute__((weak));
void initVariant() {}

void init() __attribute__((weak));
void init() {}

void yield_completed() __attribute__((weak));
void yield_completed() {}

bool verifyOta() __attribute__((weak));
bool verifyOta() { return true; }

#ifdef CONFIG_BT_ENABLED
//overwritten in esp32-hal-bt.c
bool btInUse() __attribute__((weak));
bool btInUse() { return false; }
#endif

void yield()
{
vPortYield();
yield_completed();
}

void delay(uint32_t ms)
{
vTaskDelay(ms / portTICK_PERIOD_MS);
vTaskDelay(ms / portTICK_PERIOD_MS);
yield_completed();
}

void IRAM_ATTR delayMicroseconds(uint32_t us)
Expand All @@ -160,21 +180,6 @@ void IRAM_ATTR delayMicroseconds(uint32_t us)
}
}

void initVariant() __attribute__((weak));
void initVariant() {}

void init() __attribute__((weak));
void init() {}

bool verifyOta() __attribute__((weak));
bool verifyOta() { return true; }

#ifdef CONFIG_BT_ENABLED
//overwritten in esp32-hal-bt.c
bool btInUse() __attribute__((weak));
bool btInUse(){ return false; }
#endif

void initArduino()
{
#ifdef CONFIG_APP_ROLLBACK_ENABLE
Expand Down
4 changes: 4 additions & 0 deletions cores/esp32/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ void loopTask(void *pvParameters)
esp_task_wdt_reset();
}
loop();
loop_completed();
}
}

Expand All @@ -27,4 +28,7 @@ extern "C" void app_main()
xTaskCreateUniversal(loopTask, "loopTask", 8192, NULL, 1, &loopTaskHandle, CONFIG_ARDUINO_RUNNING_CORE);
}

extern "C" void loop_completed() __attribute__((weak));
extern "C" void loop_completed() {}

#endif

This file was deleted.

Loading