diff --git a/usermods/ADS1115_v2/ADS1115_v2.cpp b/usermods/ADS1115_v2/ADS1115_v2.cpp index bbf457f486..ddbbca5132 100644 --- a/usermods/ADS1115_v2/ADS1115_v2.cpp +++ b/usermods/ADS1115_v2/ADS1115_v2.cpp @@ -118,7 +118,13 @@ class ADS1115Usermod : public Usermod { return USERMOD_ID_ADS1115; } + const char* getName() override + { + return _name; + } + private: + static const char _name[]; static const uint8_t channelsCount = 8; ChannelSettings channelSettings[channelsCount] = { @@ -252,5 +258,7 @@ class ADS1115Usermod : public Usermod { } }; +const char ADS1115Usermod::_name[] PROGMEM = "ADS1115"; + static ADS1115Usermod ads1115_v2; REGISTER_USERMOD(ads1115_v2); \ No newline at end of file diff --git a/usermods/AHT10_v2/AHT10_v2.cpp b/usermods/AHT10_v2/AHT10_v2.cpp index f88bee1daa..d851c0d78a 100644 --- a/usermods/AHT10_v2/AHT10_v2.cpp +++ b/usermods/AHT10_v2/AHT10_v2.cpp @@ -182,6 +182,11 @@ class UsermodAHT10 : public Usermod return USERMOD_ID_AHT10; } + const char* getName() override + { + return _name; + } + void addToJsonInfo(JsonObject &root) override { // if "u" object does not exist yet wee need to create it diff --git a/usermods/Analog_Clock/Analog_Clock.cpp b/usermods/Analog_Clock/Analog_Clock.cpp index d3a2b73b8d..9ba75bd257 100644 --- a/usermods/Analog_Clock/Analog_Clock.cpp +++ b/usermods/Analog_Clock/Analog_Clock.cpp @@ -7,6 +7,7 @@ extern Timezone* tz; class AnalogClockUsermod : public Usermod { private: + static const char _name[]; static constexpr uint32_t refreshRate = 50; // per second static constexpr uint32_t refreshDelay = 1000 / refreshRate; @@ -252,8 +253,14 @@ class AnalogClockUsermod : public Usermod { uint16_t getId() override { return USERMOD_ID_ANALOG_CLOCK; } + + const char* getName() override { + return _name; + } }; +const char AnalogClockUsermod::_name[] PROGMEM = "Analog Clock"; + static AnalogClockUsermod analog_clock; REGISTER_USERMOD(analog_clock); \ No newline at end of file diff --git a/usermods/Animated_Staircase/Animated_Staircase.cpp b/usermods/Animated_Staircase/Animated_Staircase.cpp index 2d2d27cf43..ded98540e9 100644 --- a/usermods/Animated_Staircase/Animated_Staircase.cpp +++ b/usermods/Animated_Staircase/Animated_Staircase.cpp @@ -353,6 +353,11 @@ class Animated_Staircase : public Usermod { uint16_t getId() { return USERMOD_ID_ANIMATED_STAIRCASE; } + const char* getName() override + { + return _name; + } + #ifndef WLED_DISABLE_MQTT /** * handling of MQTT message diff --git a/usermods/BH1750_v2/BH1750_v2.h b/usermods/BH1750_v2/BH1750_v2.h index 22f51ce9ba..fe80c42eb3 100644 --- a/usermods/BH1750_v2/BH1750_v2.h +++ b/usermods/BH1750_v2/BH1750_v2.h @@ -89,4 +89,9 @@ class Usermod_BH1750 : public Usermod return USERMOD_ID_BH1750; } + inline const char* getName() + { + return _name; + } + }; diff --git a/usermods/BME280_v2/BME280_v2.cpp b/usermods/BME280_v2/BME280_v2.cpp index dd58590448..5fbe571be5 100644 --- a/usermods/BME280_v2/BME280_v2.cpp +++ b/usermods/BME280_v2/BME280_v2.cpp @@ -473,6 +473,11 @@ class UsermodBME280 : public Usermod uint16_t getId() { return USERMOD_ID_BME280; } + + const char* getName() override + { + return _name; + } }; const char UsermodBME280::_name[] PROGMEM = "BME280/BMP280"; diff --git a/usermods/BME68X_v2/BME68X_v2.cpp b/usermods/BME68X_v2/BME68X_v2.cpp index 63bada5af0..4c2a055aeb 100644 --- a/usermods/BME68X_v2/BME68X_v2.cpp +++ b/usermods/BME68X_v2/BME68X_v2.cpp @@ -45,6 +45,7 @@ public: /* Public: Functions */ uint16_t getId(); + const char* getName(); void loop(); // Loop of the user module called by wled main in loop void setup(); // Setup of the user module called by wled main void addToConfig(JsonObject& root); // Extends the settings/user module settings page to include the user module requirements. The settings are written from the wled core to the configuration file. @@ -74,6 +75,7 @@ private: /* Private: Functions */ + static const char _name[]; void HomeAssistantDiscovery(); void MQTT_PublishHASensor(const String& name, const String& deviceClass, const String& unitOfMeasurement, const int8_t& digs, const uint8_t& option = 0); void MQTT_publish(const char* topic, const float& value, const int8_t& dig); @@ -864,6 +866,15 @@ return USERMOD_ID_BME68X; } + /** + * @brief Called by WLED: Returns the user module name + * + * @return const char* User module name + */ + const char* UsermodBME68X::getName() { + return _name; + } + /** * @brief Returns the current temperature in the scale which is choosen in settings @@ -1110,5 +1121,7 @@ } + const char UsermodBME68X::_name[] PROGMEM = "BME68X"; + static UsermodBME68X bme68x_v2; REGISTER_USERMOD(bme68x_v2); \ No newline at end of file diff --git a/usermods/Battery/Battery.cpp b/usermods/Battery/Battery.cpp index 5572f55024..e27bbd6f15 100644 --- a/usermods/Battery/Battery.cpp +++ b/usermods/Battery/Battery.cpp @@ -604,6 +604,11 @@ class UsermodBattery : public Usermod return USERMOD_ID_BATTERY; } + const char* getName() override + { + return _name; + } + /** * get currently active battery type */ diff --git a/usermods/Cronixie/Cronixie.cpp b/usermods/Cronixie/Cronixie.cpp index e0a3bbee7a..ac4e2061cc 100644 --- a/usermods/Cronixie/Cronixie.cpp +++ b/usermods/Cronixie/Cronixie.cpp @@ -2,6 +2,7 @@ class UsermodCronixie : public Usermod { private: + static const char _name[]; unsigned long lastTime = 0; char cronixieDisplay[7] = "HHMMSS"; byte _digitOut[6] = {10,10,10,10,10,10}; @@ -297,7 +298,13 @@ class UsermodCronixie : public Usermod { { return USERMOD_ID_CRONIXIE; } + + const char* getName() override { + return _name; + } }; +const char UsermodCronixie::_name[] PROGMEM = "Cronixie"; + static UsermodCronixie cronixie; REGISTER_USERMOD(cronixie); \ No newline at end of file diff --git a/usermods/DHT/DHT.cpp b/usermods/DHT/DHT.cpp index 2ed3dd0ace..cf674e59de 100644 --- a/usermods/DHT/DHT.cpp +++ b/usermods/DHT/DHT.cpp @@ -59,6 +59,7 @@ DHT_nonblocking dht_sensor(DHTPIN, DHTTYPE); class UsermodDHT : public Usermod { private: + static const char _name[]; unsigned long nextReadTime = 0; unsigned long lastReadTime = 0; float humidity, temperature = 0; @@ -242,8 +243,14 @@ class UsermodDHT : public Usermod { return USERMOD_ID_DHT; } + const char* getName() override { + return _name; + } + }; +const char UsermodDHT::_name[] PROGMEM = "DHT"; + static UsermodDHT dht; REGISTER_USERMOD(dht); \ No newline at end of file diff --git a/usermods/EXAMPLE/usermod_v2_example.cpp b/usermods/EXAMPLE/usermod_v2_example.cpp index 02e399fe08..cd893141e8 100644 --- a/usermods/EXAMPLE/usermod_v2_example.cpp +++ b/usermods/EXAMPLE/usermod_v2_example.cpp @@ -378,6 +378,14 @@ class MyExampleUsermod : public Usermod { return USERMOD_ID_EXAMPLE; } + /* + * getName() must return the _name string of the usermod. + */ + const char* getName() override + { + return _name; + } + //More methods can be added in the future, this example will then be extended. //Your usermod will remain compatible as it does not need to implement all methods from the Usermod base class! }; diff --git a/usermods/EleksTube_IPS/EleksTube_IPS.cpp b/usermods/EleksTube_IPS/EleksTube_IPS.cpp index e8637b0fe8..aea6599eef 100644 --- a/usermods/EleksTube_IPS/EleksTube_IPS.cpp +++ b/usermods/EleksTube_IPS/EleksTube_IPS.cpp @@ -149,6 +149,11 @@ class ElekstubeIPSUsermod : public Usermod { { return USERMOD_ID_ELEKSTUBE_IPS; } + + const char* getName() override + { + return _name; + } }; // strings to reduce flash memory usage (used more than twice) diff --git a/usermods/Fix_unreachable_netservices_v2/usermod_Fix_unreachable_netservices.cpp b/usermods/Fix_unreachable_netservices_v2/usermod_Fix_unreachable_netservices.cpp index 7fb8e97982..aa63c5c3c1 100644 --- a/usermods/Fix_unreachable_netservices_v2/usermod_Fix_unreachable_netservices.cpp +++ b/usermods/Fix_unreachable_netservices_v2/usermod_Fix_unreachable_netservices.cpp @@ -27,6 +27,7 @@ class FixUnreachableNetServices : public Usermod { private: //Private class members. You can declare variables and functions only accessible to your usermod here + static const char _name[]; unsigned long m_lastTime = 0; // declare required variables @@ -159,7 +160,13 @@ Delay > sequence_ {}; @@ -77,7 +78,13 @@ class BuzzerUsermod : public Usermod { { return USERMOD_ID_BUZZER; } + + const char* getName() override { + return _name; + } }; +const char BuzzerUsermod::_name[] PROGMEM = "Buzzer"; + static BuzzerUsermod buzzer; REGISTER_USERMOD(buzzer); \ No newline at end of file diff --git a/usermods/deep_sleep/deep_sleep.cpp b/usermods/deep_sleep/deep_sleep.cpp index f6f3604fba..10fc96388f 100644 --- a/usermods/deep_sleep/deep_sleep.cpp +++ b/usermods/deep_sleep/deep_sleep.cpp @@ -218,6 +218,11 @@ void addToConfig(JsonObject& root) override return USERMOD_ID_DEEP_SLEEP; } + const char* getName() override + { + return _name; + } + }; // add more strings here to reduce flash memory usage diff --git a/usermods/mpu6050_imu/mpu6050_imu.cpp b/usermods/mpu6050_imu/mpu6050_imu.cpp index 6df5d64e12..a7f4509ae6 100644 --- a/usermods/mpu6050_imu/mpu6050_imu.cpp +++ b/usermods/mpu6050_imu/mpu6050_imu.cpp @@ -432,6 +432,11 @@ class MPU6050Driver : public Usermod { return USERMOD_ID_IMU; } + const char* getName() override + { + return _name; + } + }; diff --git a/usermods/mpu6050_imu/usermod_gyro_surge.h b/usermods/mpu6050_imu/usermod_gyro_surge.h index c19358de74..e35d3e3ccb 100644 --- a/usermods/mpu6050_imu/usermod_gyro_surge.h +++ b/usermods/mpu6050_imu/usermod_gyro_surge.h @@ -214,6 +214,10 @@ class GyroSurge : public Usermod { // TODO - multiple segment handling?? strip.getSegment(0).fadeToBlackBy(max - result); } + + const char* getName() { + return _name; + } }; const char GyroSurge::_name[] PROGMEM = "GyroSurge"; \ No newline at end of file diff --git a/usermods/multi_relay/multi_relay.cpp b/usermods/multi_relay/multi_relay.cpp index 4cbdb2fe39..8bf568586e 100644 --- a/usermods/multi_relay/multi_relay.cpp +++ b/usermods/multi_relay/multi_relay.cpp @@ -146,6 +146,11 @@ class MultiRelay : public Usermod { */ inline uint16_t getId() override { return USERMOD_ID_MULTI_RELAY; } + const char* getName() override + { + return _name; + } + /** * switch relay on/off */ diff --git a/usermods/pixels_dice_tray/pixels_dice_tray.cpp b/usermods/pixels_dice_tray/pixels_dice_tray.cpp index 2e97aff650..1b336e6716 100644 --- a/usermods/pixels_dice_tray/pixels_dice_tray.cpp +++ b/usermods/pixels_dice_tray/pixels_dice_tray.cpp @@ -39,6 +39,7 @@ class PixelsDiceTrayUsermod : public Usermod { private: + static const char _name[]; bool enabled = true; DiceUpdate dice_update; @@ -527,11 +528,17 @@ class PixelsDiceTrayUsermod : public Usermod { */ uint16_t getId() { return USERMOD_ID_PIXELS_DICE_TRAY; } + const char* getName() override { + return _name; + } + // More methods can be added in the future, this example will then be // extended. Your usermod will remain compatible as it does not need to // implement all methods from the Usermod base class! }; +const char PixelsDiceTrayUsermod::_name[] PROGMEM = "Pixels Dice Tray"; + static PixelsDiceTrayUsermod pixels_dice_tray; REGISTER_USERMOD(pixels_dice_tray); \ No newline at end of file diff --git a/usermods/pov_display/pov_display.cpp b/usermods/pov_display/pov_display.cpp index ac68e1b209..62b0f910f7 100644 --- a/usermods/pov_display/pov_display.cpp +++ b/usermods/pov_display/pov_display.cpp @@ -69,6 +69,11 @@ class PovDisplayUsermod : public Usermod { uint16_t getId() override { return USERMOD_ID_POV_DISPLAY; } + + const char* getName() override + { + return _name; + } }; static PovDisplayUsermod pov_display("POV Display", false); diff --git a/usermods/pwm_outputs/pwm_outputs.cpp b/usermods/pwm_outputs/pwm_outputs.cpp index d94f1d848f..883d58e702 100644 --- a/usermods/pwm_outputs/pwm_outputs.cpp +++ b/usermods/pwm_outputs/pwm_outputs.cpp @@ -211,6 +211,10 @@ class PwmOutputsUsermod : public Usermod { return USERMOD_ID_PWM_OUTPUTS; } + const char* getName() override { + return USERMOD_NAME; + } + private: PwmOutput pwms_[USERMOD_PWM_OUTPUT_PINS]; @@ -219,6 +223,5 @@ class PwmOutputsUsermod : public Usermod { const char PwmOutputsUsermod::USERMOD_NAME[] PROGMEM = "PwmOutputs"; const char PwmOutputsUsermod::PWM_STATE_NAME[] PROGMEM = "pwm"; - static PwmOutputsUsermod pwm_outputs; REGISTER_USERMOD(pwm_outputs); \ No newline at end of file diff --git a/usermods/quinled-an-penta/quinled-an-penta.cpp b/usermods/quinled-an-penta/quinled-an-penta.cpp index a3b452bf18..732ebdc31d 100644 --- a/usermods/quinled-an-penta/quinled-an-penta.cpp +++ b/usermods/quinled-an-penta/quinled-an-penta.cpp @@ -687,6 +687,11 @@ class QuinLEDAnPentaUsermod : public Usermod { return USERMOD_ID_QUINLED_AN_PENTA; } + + const char* getName() override + { + return _name; + } }; // strings to reduce flash memory usage (used more than twice) diff --git a/usermods/rgb-rotary-encoder/rgb-rotary-encoder.cpp b/usermods/rgb-rotary-encoder/rgb-rotary-encoder.cpp index 6be3a92640..b91b97c650 100644 --- a/usermods/rgb-rotary-encoder/rgb-rotary-encoder.cpp +++ b/usermods/rgb-rotary-encoder/rgb-rotary-encoder.cpp @@ -328,6 +328,11 @@ class RgbRotaryEncoderUsermod : public Usermod return USERMOD_RGB_ROTARY_ENCODER; } + const char* getName() override + { + return _name; + } + //More methods can be added in the future, this example will then be extended. //Your usermod will remain compatible as it does not need to implement all methods from the Usermod base class! }; diff --git a/usermods/sd_card/sd_card.cpp b/usermods/sd_card/sd_card.cpp index 4e68b97a34..7d233bfb6f 100644 --- a/usermods/sd_card/sd_card.cpp +++ b/usermods/sd_card/sd_card.cpp @@ -132,6 +132,11 @@ class UsermodSdCard : public Usermod { return USERMOD_ID_SD_CARD; } + const char* getName() override + { + return _name; + } + void addToConfig(JsonObject& root) { #ifdef WLED_USE_SD_SPI diff --git a/usermods/sensors_to_mqtt/sensors_to_mqtt.cpp b/usermods/sensors_to_mqtt/sensors_to_mqtt.cpp index 5f7da97a98..599be38755 100644 --- a/usermods/sensors_to_mqtt/sensors_to_mqtt.cpp +++ b/usermods/sensors_to_mqtt/sensors_to_mqtt.cpp @@ -16,6 +16,7 @@ static Adafruit_CCS811 ccs811; class UserMod_SensorsToMQTT : public Usermod { private: + static const char _name[]; bool initialized = false; bool mqttInitialized = false; float SensorPressure = 0; @@ -274,8 +275,13 @@ class UserMod_SensorsToMQTT : public Usermod } } } + + const char* getName() override { + return _name; + } }; +const char UserMod_SensorsToMQTT::_name[] PROGMEM = "Sensors to MQTT"; static UserMod_SensorsToMQTT sensors_to_mqtt; REGISTER_USERMOD(sensors_to_mqtt); \ No newline at end of file diff --git a/usermods/seven_segment_display/seven_segment_display.cpp b/usermods/seven_segment_display/seven_segment_display.cpp index 13a6306be5..2a0c327948 100644 --- a/usermods/seven_segment_display/seven_segment_display.cpp +++ b/usermods/seven_segment_display/seven_segment_display.cpp @@ -11,6 +11,7 @@ class SevenSegmentDisplay : public Usermod #define REFRESHTIME 497 private: //Runtime variables. + static const char _name[]; unsigned long lastRefresh = 0; unsigned long lastCharacterStep = 0; String ssDisplayBuffer = ""; @@ -486,6 +487,10 @@ class SevenSegmentDisplay : public Usermod { return USERMOD_ID_SEVEN_SEGMENT_DISPLAY; } + + const char* getName() override { + return _name; + } }; const char SevenSegmentDisplay::_str_perSegment[] PROGMEM = "perSegment"; @@ -498,5 +503,7 @@ const char SevenSegmentDisplay::_str_displayMask[] PROGMEM = "displayMask"; const char SevenSegmentDisplay::_str_displayMsg[] PROGMEM = "displayMsg"; const char SevenSegmentDisplay::_str_sevenSeg[] PROGMEM = "sevenSeg"; +const char SevenSegmentDisplay::_name[] PROGMEM = "Seven Segment Display"; + static SevenSegmentDisplay seven_segment_display; REGISTER_USERMOD(seven_segment_display); \ No newline at end of file diff --git a/usermods/seven_segment_display_reloaded/seven_segment_display_reloaded.cpp b/usermods/seven_segment_display_reloaded/seven_segment_display_reloaded.cpp index 893e061bc8..ca01dd9fba 100644 --- a/usermods/seven_segment_display_reloaded/seven_segment_display_reloaded.cpp +++ b/usermods/seven_segment_display_reloaded/seven_segment_display_reloaded.cpp @@ -579,6 +579,10 @@ class UsermodSSDR : public Usermod { uint16_t getId() { return USERMOD_ID_SSDR; } + + const char* getName() { + return _str_name; + } }; const char UsermodSSDR::_str_name[] PROGMEM = "UsermodSSDR"; diff --git a/usermods/sht/ShtUsermod.h b/usermods/sht/ShtUsermod.h index 5dd83f46d6..5a7e61b33a 100644 --- a/usermods/sht/ShtUsermod.h +++ b/usermods/sht/ShtUsermod.h @@ -68,4 +68,9 @@ class ShtUsermod : public Usermod const char* getUnitString(); uint16_t getId() { return USERMOD_ID_SHT; } + + const char* getName() override + { + return _name; + } }; diff --git a/usermods/smartnest/smartnest.cpp b/usermods/smartnest/smartnest.cpp index d0cb92dcfd..c118336340 100644 --- a/usermods/smartnest/smartnest.cpp +++ b/usermods/smartnest/smartnest.cpp @@ -7,6 +7,7 @@ class Smartnest : public Usermod { private: + static const char _name[]; bool initialized = false; unsigned long lastMqttReport = 0; unsigned long mqttReportInterval = 60000; // Report every minute @@ -171,6 +172,10 @@ class Smartnest : public Usermod return USERMOD_ID_SMARTNEST; } + const char* getName() override { + return _name; + } + /** * setup() is called once at startup to initialize the usermod. */ @@ -203,5 +208,7 @@ class Smartnest : public Usermod }; +const char Smartnest::_name[] PROGMEM = "Smartnest"; + static Smartnest smartnest; REGISTER_USERMOD(smartnest); \ No newline at end of file diff --git a/usermods/stairway_wipe_basic/stairway_wipe_basic.cpp b/usermods/stairway_wipe_basic/stairway_wipe_basic.cpp index cddd655d6d..e3789fcb48 100644 --- a/usermods/stairway_wipe_basic/stairway_wipe_basic.cpp +++ b/usermods/stairway_wipe_basic/stairway_wipe_basic.cpp @@ -14,6 +14,7 @@ class StairwayWipeUsermod : public Usermod { private: //Private class members. You can declare variables and functions only accessible to your usermod here + static const char _name[]; unsigned long lastTime = 0; byte wipeState = 0; //0: inactive 1: wiping 2: solid unsigned long timeStaticStart = 0; @@ -89,6 +90,10 @@ void setup() { return USERMOD_ID_STAIRWAY_WIPE; } + const char* getName() override { + return _name; + } + void startWipe() { @@ -128,5 +133,7 @@ void setup() { }; +const char StairwayWipeUsermod::_name[] PROGMEM = "Stairway Wipe"; + static StairwayWipeUsermod stairway_wipe_basic; REGISTER_USERMOD(stairway_wipe_basic); \ No newline at end of file diff --git a/usermods/udp_name_sync/udp_name_sync.cpp b/usermods/udp_name_sync/udp_name_sync.cpp index b31b856983..9b571b2991 100644 --- a/usermods/udp_name_sync/udp_name_sync.cpp +++ b/usermods/udp_name_sync/udp_name_sync.cpp @@ -79,7 +79,13 @@ class UdpNameSync : public Usermod { DEBUG_PRINT(F("UdpNameSync: set segment name")); return true; } + + const char* getName() override { + return _name; + } }; +const char UdpNameSync::_name[] PROGMEM = "UDP Name Sync"; + static UdpNameSync udp_name_sync; REGISTER_USERMOD(udp_name_sync); diff --git a/usermods/user_fx/user_fx.cpp b/usermods/user_fx/user_fx.cpp index da6937c87d..fafef437e4 100644 --- a/usermods/user_fx/user_fx.cpp +++ b/usermods/user_fx/user_fx.cpp @@ -95,6 +95,7 @@ static const char _data_FX_MODE_DIFFUSIONFIRE[] PROGMEM = "Diffusion Fire@!,Spar class UserFxUsermod : public Usermod { private: + static const char _name[]; public: void setup() override { strip.addEffect(255, &mode_diffusionfire, _data_FX_MODE_DIFFUSIONFIRE); @@ -111,7 +112,13 @@ class UserFxUsermod : public Usermod { } void loop() override {} // nothing to do in the loop uint16_t getId() override { return USERMOD_ID_USER_FX; } + + const char* getName() override { + return _name; + } }; +const char UserFxUsermod::_name[] PROGMEM = "User FX"; + static UserFxUsermod user_fx; REGISTER_USERMOD(user_fx); diff --git a/usermods/usermod_rotary_brightness_color/usermod_rotary_brightness_color.cpp b/usermods/usermod_rotary_brightness_color/usermod_rotary_brightness_color.cpp index 0a485152f1..90b371a104 100644 --- a/usermods/usermod_rotary_brightness_color/usermod_rotary_brightness_color.cpp +++ b/usermods/usermod_rotary_brightness_color/usermod_rotary_brightness_color.cpp @@ -6,6 +6,7 @@ class RotaryEncoderBrightnessColor : public Usermod { private: //Private class members. You can declare variables and functions only accessible to your usermod here + static const char _name[]; unsigned long lastTime = 0; unsigned long currentTime; unsigned long loopTime; @@ -184,8 +185,14 @@ class RotaryEncoderBrightnessColor : public Usermod return configComplete; } + + const char* getName() override { + return _name; + } }; +const char RotaryEncoderBrightnessColor::_name[] PROGMEM = "Rotary Brightness Color"; + static RotaryEncoderBrightnessColor usermod_rotary_brightness_color; REGISTER_USERMOD(usermod_rotary_brightness_color); \ No newline at end of file diff --git a/usermods/usermod_v2_HttpPullLightControl/usermod_v2_HttpPullLightControl.h b/usermods/usermod_v2_HttpPullLightControl/usermod_v2_HttpPullLightControl.h index 187b2b0912..a5e780c0a5 100644 --- a/usermods/usermod_v2_HttpPullLightControl/usermod_v2_HttpPullLightControl.h +++ b/usermods/usermod_v2_HttpPullLightControl/usermod_v2_HttpPullLightControl.h @@ -86,6 +86,11 @@ class HttpPullLightControl : public Usermod { bool readFromConfig(JsonObject& root); void addToConfig(JsonObject& root); uint16_t getId() { return USERMOD_ID_HTTP_PULL_LIGHT_CONTROL; } + + const char* getName() override + { + return _name; + } inline void enable(bool enable) { enabled = enable; } // Enable or Disable the usermod inline bool isEnabled() { return enabled; } // Get usermod enabled or disabled state virtual ~HttpPullLightControl() { diff --git a/usermods/usermod_v2_RF433/usermod_v2_RF433.cpp b/usermods/usermod_v2_RF433/usermod_v2_RF433.cpp index 9ac6c416d1..e437d15add 100644 --- a/usermods/usermod_v2_RF433/usermod_v2_RF433.cpp +++ b/usermods/usermod_v2_RF433/usermod_v2_RF433.cpp @@ -118,6 +118,10 @@ class RF433Usermod : public Usermod return USERMOD_ID_RF433; } + const char* getName() override { + return _modName; + } + // this function follows the same principle as decodeIRJson() / remoteJson() bool remoteJson433(int button) { diff --git a/usermods/usermod_v2_animartrix/usermod_v2_animartrix.cpp b/usermods/usermod_v2_animartrix/usermod_v2_animartrix.cpp index d2968f2fbd..0373664006 100644 --- a/usermods/usermod_v2_animartrix/usermod_v2_animartrix.cpp +++ b/usermods/usermod_v2_animartrix/usermod_v2_animartrix.cpp @@ -448,6 +448,11 @@ class AnimartrixUsermod : public Usermod { return USERMOD_ID_ANIMARTRIX; } + const char* getName() + { + return _name; + } + }; static AnimartrixUsermod animartrix_module("Animartrix", false); diff --git a/usermods/usermod_v2_auto_save/usermod_v2_auto_save.cpp b/usermods/usermod_v2_auto_save/usermod_v2_auto_save.cpp index 1b97ea94da..6f0caee950 100644 --- a/usermods/usermod_v2_auto_save/usermod_v2_auto_save.cpp +++ b/usermods/usermod_v2_auto_save/usermod_v2_auto_save.cpp @@ -265,6 +265,11 @@ class AutoSaveUsermod : public Usermod { uint16_t getId() { return USERMOD_ID_AUTO_SAVE; } + + const char* getName() override + { + return _name; + } }; // strings to reduce flash memory usage (used more than twice) diff --git a/usermods/usermod_v2_brightness_follow_sun/usermod_v2_brightness_follow_sun.cpp b/usermods/usermod_v2_brightness_follow_sun/usermod_v2_brightness_follow_sun.cpp index ff97cba468..73e7e2d4ec 100644 --- a/usermods/usermod_v2_brightness_follow_sun/usermod_v2_brightness_follow_sun.cpp +++ b/usermods/usermod_v2_brightness_follow_sun/usermod_v2_brightness_follow_sun.cpp @@ -39,6 +39,11 @@ class UsermodBrightnessFollowSun : public Usermod return USERMOD_ID_BRIGHTNESS_FOLLOW_SUN; } + const char* getName() override + { + return _name; + } + void update() { if (sunrise == 0 || sunset == 0 || localTime == 0) diff --git a/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display.h b/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display.h index 4fc963b9c1..463449e692 100644 --- a/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display.h +++ b/usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display.h @@ -311,5 +311,9 @@ class FourLineDisplayUsermod : public Usermod { uint16_t getId() override { return USERMOD_ID_FOUR_LINE_DISP; } + + const char* getName() override { + return _name; + } }; \ No newline at end of file diff --git a/usermods/usermod_v2_klipper_percentage/usermod_v2_klipper_percentage.cpp b/usermods/usermod_v2_klipper_percentage/usermod_v2_klipper_percentage.cpp index 71c5c45f3f..6587e4b264 100644 --- a/usermods/usermod_v2_klipper_percentage/usermod_v2_klipper_percentage.cpp +++ b/usermods/usermod_v2_klipper_percentage/usermod_v2_klipper_percentage.cpp @@ -215,6 +215,11 @@ class klipper_percentage : public Usermod { return USERMOD_ID_KLIPPER; } + + const char* getName() override + { + return _name; + } }; const char klipper_percentage::_name[] PROGMEM = "Klipper_Percentage"; const char klipper_percentage::_enabled[] PROGMEM = "enabled"; diff --git a/usermods/usermod_v2_ping_pong_clock/usermod_v2_ping_pong_clock.cpp b/usermods/usermod_v2_ping_pong_clock/usermod_v2_ping_pong_clock.cpp index c6632b53a0..c9790927b4 100644 --- a/usermods/usermod_v2_ping_pong_clock/usermod_v2_ping_pong_clock.cpp +++ b/usermods/usermod_v2_ping_pong_clock/usermod_v2_ping_pong_clock.cpp @@ -4,6 +4,7 @@ class PingPongClockUsermod : public Usermod { private: // Private class members. You can declare variables and functions only accessible to your usermod here + static const char _name[]; unsigned long lastTime = 0; bool colonOn = true; @@ -114,8 +115,14 @@ class PingPongClockUsermod : public Usermod return USERMOD_ID_PING_PONG_CLOCK; } + const char* getName() override { + return _name; + } + }; +const char PingPongClockUsermod::_name[] PROGMEM = "Ping Pong Clock"; + static PingPongClockUsermod usermod_v2_ping_pong_clock; REGISTER_USERMOD(usermod_v2_ping_pong_clock); \ No newline at end of file diff --git a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp index 79ce3f85c9..efc4f3f33f 100644 --- a/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp +++ b/usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.cpp @@ -288,6 +288,11 @@ class RotaryEncoderUIUsermod : public Usermod { * This could be used in the future for the system to determine whether your usermod is installed. */ uint16_t getId() override { return USERMOD_ID_ROTARY_ENC_UI; } + + const char* getName() override + { + return _name; + } /** * Enable/Disable the usermod */ diff --git a/usermods/usermod_v2_word_clock/usermod_v2_word_clock.cpp b/usermods/usermod_v2_word_clock/usermod_v2_word_clock.cpp index 5100da180d..1e327b4af6 100644 --- a/usermods/usermod_v2_word_clock/usermod_v2_word_clock.cpp +++ b/usermods/usermod_v2_word_clock/usermod_v2_word_clock.cpp @@ -15,6 +15,7 @@ class WordClockUsermod : public Usermod { private: + static const char _name[]; unsigned long lastTime = 0; int lastTimeMinutes = -1; @@ -500,9 +501,15 @@ class WordClockUsermod : public Usermod return USERMOD_ID_WORDCLOCK; } + const char* getName() override { + return _name; + } + //More methods can be added in the future, this example will then be extended. //Your usermod will remain compatible as it does not need to implement all methods from the Usermod base class! }; +const char WordClockUsermod::_name[] PROGMEM = "Word Clock"; + static WordClockUsermod usermod_v2_word_clock; REGISTER_USERMOD(usermod_v2_word_clock); \ No newline at end of file diff --git a/usermods/wireguard/wireguard.cpp b/usermods/wireguard/wireguard.cpp index f88bfeb32b..06c63b1666 100644 --- a/usermods/wireguard/wireguard.cpp +++ b/usermods/wireguard/wireguard.cpp @@ -111,7 +111,12 @@ class WireguardUsermod : public Usermod { uint16_t getId() { return USERMOD_ID_WIREGUARD; } + const char* getName() override { + return _name; + } + private: + static const char _name[]; WireGuard wg; char preshared_key[45]; char private_key[45]; @@ -124,5 +129,7 @@ class WireguardUsermod : public Usermod { unsigned long lastTime = 0; }; +const char WireguardUsermod::_name[] PROGMEM = "Wireguard"; + static WireguardUsermod wireguard; REGISTER_USERMOD(wireguard); \ No newline at end of file diff --git a/usermods/wizlights/wizlights.cpp b/usermods/wizlights/wizlights.cpp index 3ac756b12a..e79a5166d2 100644 --- a/usermods/wizlights/wizlights.cpp +++ b/usermods/wizlights/wizlights.cpp @@ -12,6 +12,7 @@ WiFiUDP UDP; class WizLightsUsermod : public Usermod { private: + static const char _name[]; unsigned long lastTime = 0; long updateInterval; long sendDelay; @@ -153,8 +154,14 @@ class WizLightsUsermod : public Usermod { String getJsonLabel(uint8_t i) {return "WiZ Light IP #" + String(i+1);} uint16_t getId(){return USERMOD_ID_WIZLIGHTS;} + + const char* getName() override { + return _name; + } }; +const char WizLightsUsermod::_name[] PROGMEM = "Wiz Lights"; + static WizLightsUsermod wizlights; REGISTER_USERMOD(wizlights); \ No newline at end of file diff --git a/usermods/word-clock-matrix/word-clock-matrix.cpp b/usermods/word-clock-matrix/word-clock-matrix.cpp index 24f69aadb7..9c5fece385 100644 --- a/usermods/word-clock-matrix/word-clock-matrix.cpp +++ b/usermods/word-clock-matrix/word-clock-matrix.cpp @@ -10,6 +10,7 @@ class WordClockMatrix : public Usermod { private: + static const char _name[]; unsigned long lastTime = 0; uint8_t minuteLast = 99; int dayBrightness = 128; @@ -332,9 +333,15 @@ class WordClockMatrix : public Usermod return 500; } + const char* getName() override { + return _name; + } + }; +const char WordClockMatrix::_name[] PROGMEM = "Word Clock Matrix"; + static WordClockMatrix word_clock_matrix; REGISTER_USERMOD(word_clock_matrix); \ No newline at end of file diff --git a/wled00/fcn_declare.h b/wled00/fcn_declare.h index 4bbedfacb0..788e61dec0 100644 --- a/wled00/fcn_declare.h +++ b/wled00/fcn_declare.h @@ -321,6 +321,7 @@ class Usermod { 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;} + virtual const char* getName() { return nullptr; } // get usermod name // API shims private: @@ -361,6 +362,7 @@ namespace UsermodManager { void onUpdateBegin(bool); void onStateChange(uint8_t); Usermod* lookup(uint16_t mod_id); + const char* getName(uint16_t mod_id); size_t getModCount(); }; diff --git a/wled00/um_manager.cpp b/wled00/um_manager.cpp index 647757ad6f..ff602ff40c 100644 --- a/wled00/um_manager.cpp +++ b/wled00/um_manager.cpp @@ -87,6 +87,17 @@ Usermod* UsermodManager::lookup(uint16_t mod_id) { return nullptr; } +/* + * Get usermod name by ID. + */ +const char* UsermodManager::getName(uint16_t mod_id) { + Usermod* mod = lookup(mod_id); + if (mod != nullptr) { + return mod->getName(); + } + return nullptr; +} + size_t UsermodManager::getModCount() { return getCount(); }; /* Usermod v2 interface shim for oappend */