diff --git a/wled00/fcn_declare.h b/wled00/fcn_declare.h index 2a9d0bfcd..d95b8ef8e 100644 --- a/wled00/fcn_declare.h +++ b/wled00/fcn_declare.h @@ -310,6 +310,7 @@ class Usermod { virtual bool readFromConfig(JsonObject& obj) { return true; } // Note as of 2021-06 readFromConfig() now needs to return a bool, see usermod_v2_example.h virtual void onMqttConnect(bool sessionPresent) {} // fired when MQTT connection is established (so usermod can subscribe) virtual bool onMqttMessage(char* topic, char* payload) { return false; } // fired upon MQTT message received (wled topic) + virtual bool onEspNowMessage(uint8_t* sender, uint8_t* payload, uint8_t len) { return false; } // fired upon ESP-NOW message received virtual void onUpdateBegin(bool) {} // fired prior to and after unsuccessful firmware update virtual void onStateChange(uint8_t mode) {} // fired upon WLED state change virtual uint16_t getId() {return USERMOD_ID_UNSPECIFIED;} @@ -333,8 +334,13 @@ class UsermodManager { void readFromJsonState(JsonObject& obj); void addToConfig(JsonObject& obj); bool readFromConfig(JsonObject& obj); +#ifndef WLED_DISABLE_MQTT void onMqttConnect(bool sessionPresent); bool onMqttMessage(char* topic, char* payload); +#endif +#ifndef WLED_DISABLE_ESPNOW + bool onEspNowMessage(uint8_t* sender, uint8_t* payload, uint8_t len); +#endif void onUpdateBegin(bool); void onStateChange(uint8_t); bool add(Usermod* um); diff --git a/wled00/udp.cpp b/wled00/udp.cpp index 100ace166..6f4dfeaa4 100644 --- a/wled00/udp.cpp +++ b/wled00/udp.cpp @@ -969,6 +969,11 @@ void espNowReceiveCB(uint8_t* address, uint8_t* data, uint8_t len, signed int rs DEBUG_PRINTLN(); #endif +#ifndef WLED_DISABLE_ESPNOW + // usermods hook can override processing + if (usermods.onEspNowMessage(address, data, len)) return; +#endif + // handle WiZ Mote data if (data[0] == 0x91 || data[0] == 0x81 || data[0] == 0x80) { handleRemote(data, len); diff --git a/wled00/um_manager.cpp b/wled00/um_manager.cpp index e744651f6..e73b66c38 100644 --- a/wled00/um_manager.cpp +++ b/wled00/um_manager.cpp @@ -34,11 +34,19 @@ bool UsermodManager::readFromConfig(JsonObject& obj) { } return allComplete; } +#ifndef WLED_DISABLE_MQTT void UsermodManager::onMqttConnect(bool sessionPresent) { for (byte i = 0; i < numMods; i++) ums[i]->onMqttConnect(sessionPresent); } bool UsermodManager::onMqttMessage(char* topic, char* payload) { for (byte i = 0; i < numMods; i++) if (ums[i]->onMqttMessage(topic, payload)) return true; return false; } +#endif +#ifndef WLED_DISABLE_ESPNOW +bool UsermodManager::onEspNowMessage(uint8_t* sender, uint8_t* payload, uint8_t len) { + for (byte i = 0; i < numMods; i++) if (ums[i]->onEspNowMessage(sender, payload, len)) return true; + return false; +} +#endif void UsermodManager::onUpdateBegin(bool init) { for (byte i = 0; i < numMods; i++) ums[i]->onUpdateBegin(init); } // notify usermods that update is to begin void UsermodManager::onStateChange(uint8_t mode) { for (byte i = 0; i < numMods; i++) ums[i]->onStateChange(mode); } // notify usermods that WLED state changed