33 * Registration and management utility for v2 usermods
44 */
55
6- static Usermod* ums[WLED_MAX_USERMODS] = {nullptr };
7- byte UsermodManager::numMods = 0 ;
8- static Usermod* umsEnabled[WLED_MAX_USERMODS] = {nullptr };
6+ static std::vector<Usermod*> ums;
7+ static std::vector<Usermod*> umsEnabled;
98
109// Usermod Manager internals
11- void UsermodManager::setup () { for (Usermod* um : umsEnabled) if (um) if (um) { um ->setup (); } }
12- void UsermodManager::connected () { for (Usermod* um : umsEnabled) if (um) { um ->connected (); } }
13- void UsermodManager::loop () { for (Usermod* um : umsEnabled) if (um) { um ->loop (); } }
14- void UsermodManager::handleOverlayDraw () { for (Usermod* um : umsEnabled) if (um) { um ->handleOverlayDraw (); } }
15- void UsermodManager::appendConfigData (Print& dest) { for (Usermod* um : ums) if (um) { um ->appendConfigData (dest); } }
10+ void UsermodManager::setup () { for (Usermod* um : umsEnabled) um ->setup (); }
11+ void UsermodManager::connected () { for (Usermod* um : umsEnabled) um ->connected (); }
12+ void UsermodManager::loop () { for (Usermod* um : umsEnabled) um ->loop (); }
13+ void UsermodManager::handleOverlayDraw () { for (Usermod* um : umsEnabled) um ->handleOverlayDraw (); }
14+ void UsermodManager::appendConfigData (Print& dest) { for (Usermod* um : ums) um ->appendConfigData (dest); }
1615bool UsermodManager::handleButton (uint8_t b) {
1716 bool overrideIO = false ;
18- for (unsigned i = 0 ; i < numMods; i++ ) {
19- if (ums[i] ->handleButton (b)) overrideIO = true ;
17+ for (Usermod* um : umsEnabled ) {
18+ if (um ->handleButton (b)) overrideIO = true ;
2019 }
2120 return overrideIO;
2221}
@@ -27,58 +26,57 @@ bool UsermodManager::getUMData(um_data_t **data, uint8_t mod_id) {
2726 }
2827 return false ;
2928}
30- void UsermodManager::addToJsonState (JsonObject& obj) { for (Usermod* um : umsEnabled) if (um) { um ->addToJsonState (obj); } }
31- void UsermodManager::addToJsonInfo (JsonObject& obj) { for (Usermod* um : ums) if (um) { um ->addToJsonInfo (obj); } }
32- void UsermodManager::readFromJsonState (JsonObject& obj) { for (Usermod* um : umsEnabled) if (um) { um ->readFromJsonState (obj); } }
33- void UsermodManager::addToConfig (JsonObject& obj) { for (Usermod* um : ums) if (um) { um ->addToConfig (obj); } }
29+ void UsermodManager::addToJsonState (JsonObject& obj) { for (Usermod* um : umsEnabled) um ->addToJsonState (obj); }
30+ void UsermodManager::addToJsonInfo (JsonObject& obj) { for (Usermod* um : ums) um ->addToJsonInfo (obj); }
31+ void UsermodManager::readFromJsonState (JsonObject& obj) { for (Usermod* um : umsEnabled) um ->readFromJsonState (obj); }
32+ void UsermodManager::addToConfig (JsonObject& obj) { for (Usermod* um : ums) um ->addToConfig (obj); }
3433bool UsermodManager::readFromConfig (JsonObject& obj) {
3534 bool allComplete = true ;
36- for (unsigned i = 0 ; i < numMods; i++) {
37- if (!ums[i]->readFromConfig (obj)) allComplete = false ;
38- if (!ums[i]->isEnabled ()) {
39- umsEnabled[i] = ums[i];
40- }
41- else {
42- umsEnabled[i] = nullptr ;
35+ umsEnabled.clear ();
36+ for (Usermod* um : ums) {
37+ if (!um->readFromConfig (obj)) allComplete = false ;
38+ if (!um->isEnabled ()) {
39+ umsEnabled.push_back (um);
4340 }
4441 }
4542 return allComplete;
4643}
4744#ifndef WLED_DISABLE_MQTT
48- void UsermodManager::onMqttConnect (bool sessionPresent) { for (Usermod* um : umsEnabled) if (um) { um ->onMqttConnect (sessionPresent); } }
45+ void UsermodManager::onMqttConnect (bool sessionPresent) { for (Usermod* um : umsEnabled) um ->onMqttConnect (sessionPresent); }
4946bool UsermodManager::onMqttMessage (char * topic, char * payload) {
50- for (Usermod* um : umsEnabled) if (um && um ->onMqttMessage (topic, payload)) return true ;
47+ for (Usermod* um : umsEnabled) if (um->onMqttMessage (topic, payload)) return true ;
5148 return false ;
5249}
5350#endif
5451#ifndef WLED_DISABLE_ESPNOW
5552bool UsermodManager::onEspNowMessage (uint8_t * sender, uint8_t * payload, uint8_t len) {
56- for (Usermod* um : umsEnabled) if (um && um ->onEspNowMessage (sender, payload, len)) return true ;
53+ for (Usermod* um : umsEnabled) if (um->onEspNowMessage (sender, payload, len)) return true ;
5754 return false ;
5855}
5956#endif
60- void UsermodManager::onUpdateBegin (bool init) { for (Usermod* um : umsEnabled) if (um) { um ->onUpdateBegin (init); } } // notify usermods that update is to begin
61- void UsermodManager::onStateChange (uint8_t mode) { for (Usermod* um : umsEnabled) if (um) { um ->onStateChange (mode); } } // notify usermods that WLED state changed
57+ void UsermodManager::onUpdateBegin (bool init) { for (Usermod* um : umsEnabled) um ->onUpdateBegin (init); } // notify usermods that update is to begin
58+ void UsermodManager::onStateChange (uint8_t mode) { for (Usermod* um : umsEnabled) um ->onStateChange (mode); } // notify usermods that WLED state changed
6259
6360/*
6461 * Enables usermods to lookup another Usermod.
6562 */
6663Usermod* UsermodManager::lookup (uint16_t mod_id) {
67- for (unsigned i = 0 ; i < numMods; i++ ) {
68- if (ums[i] ->getId () == mod_id) {
69- return ums[i] ;
64+ for (Usermod* um : ums ) {
65+ if (um ->getId () == mod_id) {
66+ return um ;
7067 }
7168 }
7269 return nullptr ;
7370}
7471
7572bool UsermodManager::add (Usermod* um)
7673{
77- if (numMods >= WLED_MAX_USERMODS || um == nullptr ) return false ;
78- ums[numMods++] = um ;
74+ if (ums. size () >= WLED_MAX_USERMODS || um == nullptr ) return false ;
75+ ums. push_back (um) ;
7976 return true ;
8077}
8178
79+ byte UsermodManager::getModCount () { return ums.size (); }
8280
8381/* Usermod v2 interface shim for oappend */
8482Print* Usermod::oappend_shim = nullptr ;
0 commit comments