From 4e2bbc04fa73514812f43e2973c0916417d39bad Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sun, 17 Oct 2021 17:14:55 +0200 Subject: [PATCH] Button handling hook for usermods. --- wled00/button.cpp | 2 ++ wled00/fcn_declare.h | 3 ++- wled00/um_manager.cpp | 7 +++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/wled00/button.cpp b/wled00/button.cpp index bd409060f..d64ae0a4f 100644 --- a/wled00/button.cpp +++ b/wled00/button.cpp @@ -214,6 +214,8 @@ void handleButton() if (btnPin[b]<0 || buttonType[b] == BTN_TYPE_NONE) continue; #endif + if (usermods.handleButton(b)) continue; // did usermod handle buttons + if ((buttonType[b] == BTN_TYPE_ANALOG || buttonType[b] == BTN_TYPE_ANALOG_INVERTED) && millis() - lastRead > 250) { // button is not a button but a potentiometer if (b+1 == WLED_MAX_BUTTONS) lastRead = millis(); handleAnalog(b); continue; diff --git a/wled00/fcn_declare.h b/wled00/fcn_declare.h index a796848c5..20e62b3a1 100644 --- a/wled00/fcn_declare.h +++ b/wled00/fcn_declare.h @@ -218,6 +218,7 @@ class Usermod { public: virtual void loop() {} virtual void handleOverlayDraw() {} + virtual bool handleButton(uint8_t b) { return false; } virtual void setup() {} virtual void connected() {} virtual void addToJsonState(JsonObject& obj) {} @@ -238,7 +239,7 @@ class UsermodManager { public: void loop(); void handleOverlayDraw(); - + bool handleButton(uint8_t b); void setup(); void connected(); void addToJsonState(JsonObject& obj); diff --git a/wled00/um_manager.cpp b/wled00/um_manager.cpp index a9aac784a..caaf100df 100644 --- a/wled00/um_manager.cpp +++ b/wled00/um_manager.cpp @@ -6,6 +6,13 @@ //Usermod Manager internals void UsermodManager::loop() { for (byte i = 0; i < numMods; i++) ums[i]->loop(); } void UsermodManager::handleOverlayDraw() { for (byte i = 0; i < numMods; i++) ums[i]->handleOverlayDraw(); } +bool UsermodManager::handleButton(uint8_t b) { + bool overrideIO = false; + for (byte i = 0; i < numMods; i++) { + if (ums[i]->handleButton(b)) overrideIO = true; + } + return overrideIO; +} void UsermodManager::setup() { for (byte i = 0; i < numMods; i++) ums[i]->setup(); } void UsermodManager::connected() { for (byte i = 0; i < numMods; i++) ums[i]->connected(); }