From 197ea94ab8b1e29694cbda3db225cc7e16151f43 Mon Sep 17 00:00:00 2001 From: Nanosonde <2073569+nanosonde@users.noreply.github.com> Date: Tue, 3 Nov 2020 09:40:16 +0100 Subject: [PATCH] Better handling of buttonUp() across platforms --- examples/knx-cc1310/knx_wrapper.cpp | 11 +++++++++++ src/knx_facade.cpp | 21 +++++++++++++-------- src/knx_facade.h | 15 ++++++++------- 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/examples/knx-cc1310/knx_wrapper.cpp b/examples/knx-cc1310/knx_wrapper.cpp index 798cdb5..67efd2e 100644 --- a/examples/knx-cc1310/knx_wrapper.cpp +++ b/examples/knx-cc1310/knx_wrapper.cpp @@ -5,6 +5,17 @@ KnxFacade *pKnx = nullptr; +void buttonUp() +{ + static uint32_t lastpressed=0; + if (millis() - lastpressed > 200) + { + KnxFacade &knx = *pKnx; + knx._toogleProgMode = true; + lastpressed = millis(); + } +} + void setup() { pKnx = new KnxFacade; diff --git a/src/knx_facade.cpp b/src/knx_facade.cpp index b52de9e..272256f 100644 --- a/src/knx_facade.cpp +++ b/src/knx_facade.cpp @@ -40,25 +40,30 @@ #else #error Mask version not supported on ARDUINO_ARCH_STM32 #endif -#elif __linux__ - // no predefined global instance -#else // Non-Arduino platforms +#else // Non-Arduino platforms and Linux platform // no predefined global instance #endif +// Only ESP8266 and ESP32 have this define. For all other platforms this is just empty. #ifndef ICACHE_RAM_ATTR #define ICACHE_RAM_ATTR #endif + +#if (defined(ARDUINO_ARCH_STM32) || \ + defined(ARDUINO_ARCH_ESP32) || \ + defined(ARDUINO_ARCH_ESP8266) || \ + defined(ARDUINO_ARCH_SAMD)) ICACHE_RAM_ATTR void buttonUp() { - #if !defined(__linux__) && (defined(ARDUINO_ARCH_STM32) || \ - defined(ARDUINO_ARCH_ESP32) || \ - defined(ARDUINO_ARCH_ESP8266) || \ - defined(ARDUINO_ARCH_SAMD)) static uint32_t lastpressed=0; if (millis() - lastpressed > 200){ knx._toogleProgMode = true; lastpressed = millis(); } - #endif } +#elif defined(__linux__) +void buttonUp() +{ + // no de-bounce on linux platform, just satisfy the compiler +} +#endif \ No newline at end of file diff --git a/src/knx_facade.h b/src/knx_facade.h index d246549..21f3a0f 100644 --- a/src/knx_facade.h +++ b/src/knx_facade.h @@ -8,18 +8,22 @@ #include "knx/bau07B0.h" #include "knx/bau27B0.h" #include "knx/bau2920.h" + void buttonUp(); #elif ARDUINO_ARCH_ESP8266 #include "esp_platform.h" #include "knx/bau57B0.h" + void buttonUp(); #elif ARDUINO_ARCH_ESP32 #define LED_BUILTIN 13 #include "esp32_platform.h" #include "knx/bau07B0.h" #include "knx/bau57B0.h" #include "knx/bau091A.h" + void buttonUp(); #elif ARDUINO_ARCH_STM32 #include "stm32_platform.h" #include "knx/bau07B0.h" + void buttonUp(); #elif __linux__ #define LED_BUILTIN 0 #include "linux_platform.h" @@ -28,19 +32,18 @@ #include "knx/bau07B0.h" #include "knx/bau091A.h" #include "knx/bau2920.h" + void buttonUp(); #else #define LED_BUILTIN 0 #include "cc1310_platform.h" - #include "knx/bau57B0.h" #include "knx/bau27B0.h" #include "knx/bau07B0.h" - #include "knx/bau091A.h" #include "knx/bau2920.h" + extern void buttonUp(); #endif -void buttonUp(); typedef uint8_t* (*SaveRestoreCallback)(uint8_t* buffer); - + template class KnxFacade : private SaveRestore { friend void buttonUp(); @@ -365,8 +368,6 @@ template class KnxFacade : private SaveRestore #else #error Mask version not supported on ARDUINO_ARCH_STM32 #endif -#elif __linux__ - // no predefined global instance -#else // Non-Arduino platforms +#else // Non-Arduino platforms and Linux platform // no predefined global instance #endif