diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 7fba6bacb..0a9b075ea 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -77,7 +77,7 @@ uint16_t mode_static(void) { SEGMENT.fill(SEGCOLOR(0)); return /*(SEGMENT.getOption(SEG_OPTION_TRANSITIONAL)) ? FRAMETIME :*/ 350; //update faster if in transition } -static const char *_data_FX_MODE_STATIC PROGMEM = "Solid"; +static const char _data_FX_MODE_STATIC[] PROGMEM = "Solid"; /* @@ -119,7 +119,7 @@ uint16_t blink(uint32_t color1, uint32_t color2, bool strobe, bool do_palette) { uint16_t mode_blink(void) { return blink(SEGCOLOR(0), SEGCOLOR(1), false, true); } -static const char *_data_FX_MODE_BLINK PROGMEM = "Blink@!,;!,!,;!;1d"; +static const char _data_FX_MODE_BLINK[] PROGMEM = "Blink@!,;!,!,;!;1d"; /* @@ -128,7 +128,7 @@ static const char *_data_FX_MODE_BLINK PROGMEM = "Blink@!,;!,!,;!;1d"; uint16_t mode_blink_rainbow(void) { return blink(SEGMENT.color_wheel(SEGENV.call & 0xFF), SEGCOLOR(1), false, false); } -static const char *_data_FX_MODE_BLINK_RAINBOW PROGMEM = "Blink Rainbow@Frequency,Blink duration;!,!,;!;1d"; +static const char _data_FX_MODE_BLINK_RAINBOW[] PROGMEM = "Blink Rainbow@Frequency,Blink duration;!,!,;!;1d"; /* @@ -137,7 +137,7 @@ static const char *_data_FX_MODE_BLINK_RAINBOW PROGMEM = "Blink Rainbow@Frequenc uint16_t mode_strobe(void) { return blink(SEGCOLOR(0), SEGCOLOR(1), true, true); } -static const char *_data_FX_MODE_STROBE PROGMEM = "Strobe@!,;!,!,;!;1d"; +static const char _data_FX_MODE_STROBE[] PROGMEM = "Strobe@!,;!,!,;!;1d"; /* @@ -146,7 +146,7 @@ static const char *_data_FX_MODE_STROBE PROGMEM = "Strobe@!,;!,!,;!;1d"; uint16_t mode_strobe_rainbow(void) { return blink(SEGMENT.color_wheel(SEGENV.call & 0xFF), SEGCOLOR(1), true, false); } -static const char *_data_FX_MODE_STROBE_RAINBOW PROGMEM = "Strobe Rainbow@!,;,!,;!;1d"; +static const char _data_FX_MODE_STROBE_RAINBOW[] PROGMEM = "Strobe Rainbow@!,;,!,;!;1d"; /* @@ -212,7 +212,7 @@ uint16_t color_wipe(bool rev, bool useRandomColors) { uint16_t mode_color_wipe(void) { return color_wipe(false, false); } -static const char *_data_FX_MODE_COLOR_WIPE PROGMEM = "Wipe@!,!;!,!,;!;1d"; +static const char _data_FX_MODE_COLOR_WIPE[] PROGMEM = "Wipe@!,!;!,!,;!;1d"; /* @@ -221,7 +221,7 @@ static const char *_data_FX_MODE_COLOR_WIPE PROGMEM = "Wipe@!,!;!,!,;!;1d"; uint16_t mode_color_sweep(void) { return color_wipe(true, false); } -static const char *_data_FX_MODE_COLOR_SWEEP PROGMEM = "Sweep@!,!;!,!,;!;1d"; +static const char _data_FX_MODE_COLOR_SWEEP[] PROGMEM = "Sweep@!,!;!,!,;!;1d"; /* @@ -231,7 +231,7 @@ static const char *_data_FX_MODE_COLOR_SWEEP PROGMEM = "Sweep@!,!;!,!,;!;1d"; uint16_t mode_color_wipe_random(void) { return color_wipe(false, true); } -static const char *_data_FX_MODE_COLOR_WIPE_RANDOM PROGMEM = "Wipe Random@!,;1,2,3;!;1d"; +static const char _data_FX_MODE_COLOR_WIPE_RANDOM[] PROGMEM = "Wipe Random@!,;1,2,3;!;1d"; /* @@ -240,7 +240,7 @@ static const char *_data_FX_MODE_COLOR_WIPE_RANDOM PROGMEM = "Wipe Random@!,;1,2 uint16_t mode_color_sweep_random(void) { return color_wipe(true, true); } -static const char *_data_FX_MODE_COLOR_SWEEP_RANDOM PROGMEM = "Sweep Random"; +static const char _data_FX_MODE_COLOR_SWEEP_RANDOM[] PROGMEM = "Sweep Random"; /* @@ -273,7 +273,7 @@ uint16_t mode_random_color(void) { SEGMENT.fill(color_blend(SEGMENT.color_wheel(SEGENV.aux1), SEGMENT.color_wheel(SEGENV.aux0), fade)); return FRAMETIME; } -static const char *_data_FX_MODE_RANDOM_COLOR PROGMEM = "Random Colors@!,Fade time;1,2,3;!;1d"; +static const char _data_FX_MODE_RANDOM_COLOR[] PROGMEM = "Random Colors@!,Fade time;1,2,3;!;1d"; /* @@ -316,7 +316,7 @@ uint16_t dynamic(boolean smooth=false) { uint16_t mode_dynamic(void) { return dynamic(false); } -static const char *_data_FX_MODE_DYNAMIC PROGMEM = "Dynamic@!,!;1,2,3;!;1d"; +static const char _data_FX_MODE_DYNAMIC[] PROGMEM = "Dynamic@!,!;1,2,3;!;1d"; /* @@ -325,7 +325,7 @@ static const char *_data_FX_MODE_DYNAMIC PROGMEM = "Dynamic@!,!;1,2,3;!;1d"; uint16_t mode_dynamic_smooth(void) { return dynamic(true); } -static const char *_data_FX_MODE_DYNAMIC_SMOOTH PROGMEM = "Dynamic Smooth"; +static const char _data_FX_MODE_DYNAMIC_SMOOTH[] PROGMEM = "Dynamic Smooth"; /* @@ -347,7 +347,7 @@ uint16_t mode_breath(void) { return FRAMETIME; } -static const char *_data_FX_MODE_BREATH PROGMEM = "Breathe@!,;!,!;!;1d"; +static const char _data_FX_MODE_BREATH[] PROGMEM = "Breathe@!,;!,!;!;1d"; /* @@ -363,7 +363,7 @@ uint16_t mode_fade(void) { return FRAMETIME; } -static const char *_data_FX_MODE_FADE PROGMEM = "Fade@!,;!,!,;!;1d"; +static const char _data_FX_MODE_FADE[] PROGMEM = "Fade@!,;!,!,;!;1d"; /* @@ -403,7 +403,7 @@ uint16_t scan(bool dual) uint16_t mode_scan(void) { return scan(false); } -static const char *_data_FX_MODE_SCAN PROGMEM = "Scan@!,# of dots;!,!,!;!;1d"; +static const char _data_FX_MODE_SCAN[] PROGMEM = "Scan@!,# of dots;!,!,!;!;1d"; /* @@ -412,7 +412,7 @@ static const char *_data_FX_MODE_SCAN PROGMEM = "Scan@!,# of dots;!,!,!;!;1d"; uint16_t mode_dual_scan(void) { return scan(true); } -static const char *_data_FX_MODE_DUAL_SCAN PROGMEM = "Scan Dual@!,# of dots;!,!,!;!;1d"; +static const char _data_FX_MODE_DUAL_SCAN[] PROGMEM = "Scan Dual@!,# of dots;!,!,!;!;1d"; /* @@ -430,7 +430,7 @@ uint16_t mode_rainbow(void) { return FRAMETIME; } -static const char *_data_FX_MODE_RAINBOW PROGMEM = "Colorloop@!,Saturation;1,2,3;!;1d"; +static const char _data_FX_MODE_RAINBOW[] PROGMEM = "Colorloop@!,Saturation;1,2,3;!;1d"; /* @@ -448,7 +448,7 @@ uint16_t mode_rainbow_cycle(void) { return FRAMETIME; } -static const char *_data_FX_MODE_RAINBOW_CYCLE PROGMEM = "Rainbow@!,Size;1,2,3;!;1d"; +static const char _data_FX_MODE_RAINBOW_CYCLE[] PROGMEM = "Rainbow@!,Size;1,2,3;!;1d"; /* @@ -487,7 +487,7 @@ uint16_t running(uint32_t color1, uint32_t color2, bool theatre = false) { uint16_t mode_theater_chase(void) { return running(SEGCOLOR(0), SEGCOLOR(1), true); } -static const char *_data_FX_MODE_THEATER_CHASE PROGMEM = "Theater@!,Gap size;!,!,;!;1d"; +static const char _data_FX_MODE_THEATER_CHASE[] PROGMEM = "Theater@!,Gap size;!,!,;!;1d"; /* @@ -497,7 +497,7 @@ static const char *_data_FX_MODE_THEATER_CHASE PROGMEM = "Theater@!,Gap size;!,! uint16_t mode_theater_chase_rainbow(void) { return running(SEGMENT.color_wheel(SEGENV.step), SEGCOLOR(1), true); } -static const char *_data_FX_MODE_THEATER_CHASE_RAINBOW PROGMEM = "Theater Rainbow@!,Gap size;1,2,3;!;1d"; +static const char _data_FX_MODE_THEATER_CHASE_RAINBOW[] PROGMEM = "Theater Rainbow@!,Gap size;1,2,3;!;1d"; /* @@ -540,7 +540,7 @@ uint16_t running_base(bool saw, bool dual=false) { uint16_t mode_running_dual(void) { return running_base(false, true); } -static const char *_data_FX_MODE_RUNNING_DUAL PROGMEM = "Running Dual"; +static const char _data_FX_MODE_RUNNING_DUAL[] PROGMEM = "Running Dual"; /* @@ -549,7 +549,7 @@ static const char *_data_FX_MODE_RUNNING_DUAL PROGMEM = "Running Dual"; uint16_t mode_running_lights(void) { return running_base(false); } -static const char *_data_FX_MODE_RUNNING_LIGHTS PROGMEM = "Running@!,Wave width;!,!,;!;1d"; +static const char _data_FX_MODE_RUNNING_LIGHTS[] PROGMEM = "Running@!,Wave width;!,!,;!;1d"; /* @@ -558,7 +558,7 @@ static const char *_data_FX_MODE_RUNNING_LIGHTS PROGMEM = "Running@!,Wave width; uint16_t mode_saw(void) { return running_base(true); } -static const char *_data_FX_MODE_SAW PROGMEM = "Saw@!,Width;!,!,;!;1d"; +static const char _data_FX_MODE_SAW[] PROGMEM = "Saw@!,Width;!,!,;!;1d"; /* @@ -600,7 +600,7 @@ uint16_t mode_twinkle(void) { return FRAMETIME; } -static const char *_data_FX_MODE_TWINKLE PROGMEM = "Twinkle@!,;!,!,;!;1d,2d"; //pixels +static const char _data_FX_MODE_TWINKLE[] PROGMEM = "Twinkle@!,;!,!,;!;1d,2d"; //pixels /* @@ -646,7 +646,7 @@ uint16_t dissolve(uint32_t color) { uint16_t mode_dissolve(void) { return dissolve(SEGCOLOR(0)); } -static const char *_data_FX_MODE_DISSOLVE PROGMEM = "Dissolve@Repeat speed,Dissolve speed;!,!,;!;1d"; +static const char _data_FX_MODE_DISSOLVE[] PROGMEM = "Dissolve@Repeat speed,Dissolve speed;!,!,;!;1d"; /* @@ -655,7 +655,7 @@ static const char *_data_FX_MODE_DISSOLVE PROGMEM = "Dissolve@Repeat speed,Disso uint16_t mode_dissolve_random(void) { return dissolve(SEGMENT.color_wheel(random8())); } -static const char *_data_FX_MODE_DISSOLVE_RANDOM PROGMEM = "Dissolve Rnd@Repeat speed,Dissolve speed;,!,;!;1d"; +static const char _data_FX_MODE_DISSOLVE_RANDOM[] PROGMEM = "Dissolve Rnd@Repeat speed,Dissolve speed;,!,;!;1d"; /* @@ -679,7 +679,7 @@ uint16_t mode_sparkle(void) { else SEGMENT.setPixelColor(SEGENV.aux0, SEGCOLOR(0)); return FRAMETIME; } -static const char *_data_FX_MODE_SPARKLE PROGMEM = "Sparkle@!,;!,!,;!;1d,2d"; +static const char _data_FX_MODE_SPARKLE[] PROGMEM = "Sparkle@!,;!,!,;!;1d,2d"; /* @@ -701,7 +701,7 @@ uint16_t mode_flash_sparkle(void) { } return FRAMETIME; } -static const char *_data_FX_MODE_FLASH_SPARKLE PROGMEM = "Sparkle Dark@!,!;Bg,Fx,;!;1d,2d"; +static const char _data_FX_MODE_FLASH_SPARKLE[] PROGMEM = "Sparkle Dark@!,!;Bg,Fx,;!;1d,2d"; /* @@ -725,7 +725,7 @@ uint16_t mode_hyper_sparkle(void) { } return FRAMETIME; } -static const char *_data_FX_MODE_HYPER_SPARKLE PROGMEM = "Sparkle+@!,!;Bg,Fx,;!;1d,2d"; +static const char _data_FX_MODE_HYPER_SPARKLE[] PROGMEM = "Sparkle+@!,!;Bg,Fx,;!;1d,2d"; /* @@ -755,7 +755,7 @@ uint16_t mode_multi_strobe(void) { return FRAMETIME; } -static const char *_data_FX_MODE_MULTI_STROBE PROGMEM = "Strobe Mega@!,!;!,!,;!;1d"; +static const char _data_FX_MODE_MULTI_STROBE[] PROGMEM = "Strobe Mega@!,!;!,!,;!;1d"; /* @@ -807,7 +807,7 @@ uint16_t mode_android(void) { return 3 + ((8 * (uint32_t)(255 - SEGMENT.speed)) / SEGLEN); } -static const char *_data_FX_MODE_ANDROID PROGMEM = "Android@!,Width;!,!,;!;mp12=1,1d"; //vertical +static const char _data_FX_MODE_ANDROID[] PROGMEM = "Android@!,Width;!,!,;!;mp12=1,1d"; //vertical /* @@ -888,7 +888,7 @@ uint16_t chase(uint32_t color1, uint32_t color2, uint32_t color3, bool do_palett uint16_t mode_chase_color(void) { return chase(SEGCOLOR(1), (SEGCOLOR(2)) ? SEGCOLOR(2) : SEGCOLOR(0), SEGCOLOR(0), true); } -static const char *_data_FX_MODE_CHASE_COLOR PROGMEM = "Chase@!,Width;!,!,!;!;1d"; +static const char _data_FX_MODE_CHASE_COLOR[] PROGMEM = "Chase@!,Width;!,!,!;!;1d"; /* @@ -897,7 +897,7 @@ static const char *_data_FX_MODE_CHASE_COLOR PROGMEM = "Chase@!,Width;!,!,!;!;1d uint16_t mode_chase_random(void) { return chase(SEGCOLOR(1), (SEGCOLOR(2)) ? SEGCOLOR(2) : SEGCOLOR(0), SEGCOLOR(0), false); } -static const char *_data_FX_MODE_CHASE_RANDOM PROGMEM = "Chase Random@!,Width;!,,!;!;1d"; +static const char _data_FX_MODE_CHASE_RANDOM[] PROGMEM = "Chase Random@!,Width;!,,!;!;1d"; /* @@ -911,7 +911,7 @@ uint16_t mode_chase_rainbow(void) { return chase(color, SEGCOLOR(0), SEGCOLOR(1), false); } -static const char *_data_FX_MODE_CHASE_RAINBOW PROGMEM = "Chase Rainbow@!,Width;!,!,;;1d"; +static const char _data_FX_MODE_CHASE_RAINBOW[] PROGMEM = "Chase Rainbow@!,Width;!,!,;;1d"; /* @@ -925,7 +925,7 @@ uint16_t mode_chase_rainbow_white(void) { return chase(SEGCOLOR(0), color2, color3, false); } -static const char *_data_FX_MODE_CHASE_RAINBOW_WHITE PROGMEM = "Rainbow Runner@!,Size;Bg,,;;1d"; +static const char _data_FX_MODE_CHASE_RAINBOW_WHITE[] PROGMEM = "Rainbow Runner@!,Size;Bg,,;;1d"; /* @@ -970,7 +970,7 @@ uint16_t mode_colorful(void) { return FRAMETIME; } -static const char *_data_FX_MODE_COLORFUL PROGMEM = "Colorful@!,Saturation;1,2,3;!;1d"; +static const char _data_FX_MODE_COLORFUL[] PROGMEM = "Colorful@!,Saturation;1,2,3;!;1d"; /* @@ -1001,7 +1001,7 @@ uint16_t mode_traffic_light(void) { return FRAMETIME; } -static const char *_data_FX_MODE_TRAFFIC_LIGHT PROGMEM = "Traffic Light@!,;,!,;!;1d"; +static const char _data_FX_MODE_TRAFFIC_LIGHT[] PROGMEM = "Traffic Light@!,;,!,;!;1d"; /* @@ -1031,7 +1031,7 @@ uint16_t mode_chase_flash(void) { } return delay; } -static const char *_data_FX_MODE_CHASE_FLASH PROGMEM = "Chase Flash@!,;Bg,Fx,!;!;1d"; +static const char _data_FX_MODE_CHASE_FLASH[] PROGMEM = "Chase Flash@!,;Bg,Fx,!;!;1d"; /* @@ -1066,7 +1066,7 @@ uint16_t mode_chase_flash_random(void) { } return delay; } -static const char *_data_FX_MODE_CHASE_FLASH_RANDOM PROGMEM = "Chase Flash Rnd@!,;,Fx,;0;1d"; +static const char _data_FX_MODE_CHASE_FLASH_RANDOM[] PROGMEM = "Chase Flash Rnd@!,;,Fx,;0;1d"; /* @@ -1075,7 +1075,7 @@ static const char *_data_FX_MODE_CHASE_FLASH_RANDOM PROGMEM = "Chase Flash Rnd@! uint16_t mode_running_color(void) { return running(SEGCOLOR(0), SEGCOLOR(1)); } -static const char *_data_FX_MODE_RUNNING_COLOR PROGMEM = "Chase 2@!,Width;!,!,;!;1d"; +static const char _data_FX_MODE_RUNNING_COLOR[] PROGMEM = "Chase 2@!,Width;!,!,;!;1d"; /* @@ -1112,7 +1112,7 @@ uint16_t mode_running_random(void) { SEGENV.aux1 = it; return FRAMETIME; } -static const char *_data_FX_MODE_RUNNING_RANDOM PROGMEM = "Stream"; +static const char _data_FX_MODE_RUNNING_RANDOM[] PROGMEM = "Stream"; uint16_t larson_scanner(bool dual) { @@ -1154,7 +1154,7 @@ uint16_t larson_scanner(bool dual) { uint16_t mode_larson_scanner(void){ return larson_scanner(false); } -static const char *_data_FX_MODE_LARSON_SCANNER PROGMEM = "Scanner@!,Fade rate;!,!,;!;mp12=0,1d"; +static const char _data_FX_MODE_LARSON_SCANNER[] PROGMEM = "Scanner@!,Fade rate;!,!,;!;mp12=0,1d"; /* @@ -1164,7 +1164,7 @@ static const char *_data_FX_MODE_LARSON_SCANNER PROGMEM = "Scanner@!,Fade rate;! uint16_t mode_dual_larson_scanner(void){ return larson_scanner(true); } -static const char *_data_FX_MODE_DUAL_LARSON_SCANNER PROGMEM = "Scanner Dual@!,Fade rate;!,!,;!;mp12=0,1d"; +static const char _data_FX_MODE_DUAL_LARSON_SCANNER[] PROGMEM = "Scanner Dual@!,Fade rate;!,!,;!;mp12=0,1d"; /* @@ -1191,7 +1191,7 @@ uint16_t mode_comet(void) { return FRAMETIME; } -static const char *_data_FX_MODE_COMET PROGMEM = "Lighthouse@!,Fade rate;!,!,!;!;1d"; +static const char _data_FX_MODE_COMET[] PROGMEM = "Lighthouse@!,Fade rate;!,!,!;!;1d"; /* @@ -1229,7 +1229,7 @@ uint16_t mode_fireworks() { } return FRAMETIME; } -static const char *_data_FX_MODE_FIREWORKS PROGMEM = "Fireworks@,Frequency;!,!,;!;ix=192,pal=11,1d,2d"; +static const char _data_FX_MODE_FIREWORKS[] PROGMEM = "Fireworks@,Frequency;!,!,;!;ix=192,pal=11,1d,2d"; //Twinkling LEDs running. Inspired by https://github.com/kitesurfer1404/WS2812FX/blob/master/src/custom/Rain.h @@ -1261,7 +1261,7 @@ uint16_t mode_rain() } return mode_fireworks(); } -static const char *_data_FX_MODE_RAIN PROGMEM = "Rain@!,Spawning rate;!,!,;;ix=128,pal=0,1d,2d"; +static const char _data_FX_MODE_RAIN[] PROGMEM = "Rain@!,Spawning rate;!,!,;;ix=128,pal=0,1d,2d"; /* @@ -1290,7 +1290,7 @@ uint16_t mode_fire_flicker(void) { SEGENV.step = it; return FRAMETIME; } -static const char *_data_FX_MODE_FIRE_FLICKER PROGMEM = "Fire Flicker@!,!;!,,;!;1d"; +static const char _data_FX_MODE_FIRE_FLICKER[] PROGMEM = "Fire Flicker@!,!;!,,;!;1d"; /* @@ -1328,7 +1328,7 @@ uint16_t gradient_base(bool loading) { uint16_t mode_gradient(void) { return gradient_base(false); } -static const char *_data_FX_MODE_GRADIENT PROGMEM = "Gradient@!,Spread=16;!,!,;!;1d"; +static const char _data_FX_MODE_GRADIENT[] PROGMEM = "Gradient@!,Spread=16;!,!,;!;1d"; /* @@ -1337,7 +1337,7 @@ static const char *_data_FX_MODE_GRADIENT PROGMEM = "Gradient@!,Spread=16;!,!,;! uint16_t mode_loading(void) { return gradient_base(true); } -static const char *_data_FX_MODE_LOADING PROGMEM = "Loading@!,Fade=16;!,!,;!;1d"; +static const char _data_FX_MODE_LOADING[] PROGMEM = "Loading@!,Fade=16;!,!,;!;1d"; //American Police Light with all LEDs Red and Blue @@ -1365,7 +1365,7 @@ uint16_t police_base(uint32_t color1, uint32_t color2) // SEGMENT.fill(SEGCOLOR(1)); // return police_base(RED, BLUE); //} -//static const char *_data_FX_MODE_POLICE PROGMEM = "Police@!,Width;,Bg,;0"; +//static const char _data_FX_MODE_POLICE[] PROGMEM = "Police@!,Width;,Bg,;0"; //Police Lights with custom colors @@ -1376,7 +1376,7 @@ uint16_t mode_two_dots() return police_base(SEGCOLOR(0), color2); } -static const char *_data_FX_MODE_TWO_DOTS PROGMEM = "Two Dots@!,Dot size;1,2,Bg;!;1d"; +static const char _data_FX_MODE_TWO_DOTS[] PROGMEM = "Two Dots@!,Dot size;1,2,Bg;!;1d"; /* @@ -1463,7 +1463,7 @@ uint16_t mode_fairy() { } return FRAMETIME; } -static const char *_data_FX_MODE_FAIRY PROGMEM = "Fairy"; +static const char _data_FX_MODE_FAIRY[] PROGMEM = "Fairy"; /* @@ -1513,7 +1513,7 @@ uint16_t mode_fairytwinkle() { } return FRAMETIME; } -static const char *_data_FX_MODE_FAIRYTWINKLE PROGMEM = "Fairy Twinkle@;;;mp12=0,1d"; //pixels +static const char _data_FX_MODE_FAIRYTWINKLE[] PROGMEM = "Fairy Twinkle@;;;mp12=0,1d"; //pixels /* @@ -1544,7 +1544,7 @@ uint16_t tricolor_chase(uint32_t color1, uint32_t color2) { uint16_t mode_tricolor_chase(void) { return tricolor_chase(SEGCOLOR(2), SEGCOLOR(0)); } -static const char *_data_FX_MODE_TRICOLOR_CHASE PROGMEM = "Chase 3@!,Size;1,2,3;0;1d"; +static const char _data_FX_MODE_TRICOLOR_CHASE[] PROGMEM = "Chase 3@!,Size;1,2,3;0;1d"; /* @@ -1585,7 +1585,7 @@ uint16_t mode_icu(void) { return SPEED_FORMULA_L; } -static const char *_data_FX_MODE_ICU PROGMEM = "ICU"; +static const char _data_FX_MODE_ICU[] PROGMEM = "ICU"; /* @@ -1626,7 +1626,7 @@ uint16_t mode_tricolor_wipe(void) return FRAMETIME; } -static const char *_data_FX_MODE_TRICOLOR_WIPE PROGMEM = "Tri Wipe@!,;1,2,3;0;1d"; +static const char _data_FX_MODE_TRICOLOR_WIPE[] PROGMEM = "Tri Wipe@!,;1,2,3;0;1d"; /* @@ -1671,7 +1671,7 @@ uint16_t mode_tricolor_fade(void) return FRAMETIME; } -static const char *_data_FX_MODE_TRICOLOR_FADE PROGMEM = "Tri Fade"; +static const char _data_FX_MODE_TRICOLOR_FADE[] PROGMEM = "Tri Fade"; /* @@ -1710,7 +1710,7 @@ uint16_t mode_multi_comet(void) SEGENV.step = it; return FRAMETIME; } -static const char *_data_FX_MODE_MULTI_COMET PROGMEM = "Multi Comet"; +static const char _data_FX_MODE_MULTI_COMET[] PROGMEM = "Multi Comet"; /* @@ -1746,7 +1746,7 @@ uint16_t mode_random_chase(void) random16_set_seed(prevSeed); // restore original seed so other effects can use "random" PRNG return FRAMETIME; } -static const char *_data_FX_MODE_RANDOM_CHASE PROGMEM = "Stream 2"; +static const char _data_FX_MODE_RANDOM_CHASE[] PROGMEM = "Stream 2"; //7 bytes @@ -1809,7 +1809,7 @@ uint16_t mode_oscillate(void) SEGENV.step = it; return FRAMETIME; } -static const char *_data_FX_MODE_OSCILLATE PROGMEM = "Oscillate"; +static const char _data_FX_MODE_OSCILLATE[] PROGMEM = "Oscillate"; //TODO @@ -1853,7 +1853,7 @@ uint16_t mode_lightning(void) } return FRAMETIME; } -static const char *_data_FX_MODE_LIGHTNING PROGMEM = "Lightning"; +static const char _data_FX_MODE_LIGHTNING[] PROGMEM = "Lightning"; // Pride2015 @@ -1899,7 +1899,7 @@ uint16_t mode_pride_2015(void) SEGENV.aux0 = sHue16; return FRAMETIME; } -static const char *_data_FX_MODE_PRIDE_2015 PROGMEM = "Pride 2015@!,;;;1d"; +static const char _data_FX_MODE_PRIDE_2015[] PROGMEM = "Pride 2015@!,;;;1d"; //eight colored dots, weaving in and out of sync with each other @@ -1916,7 +1916,7 @@ uint16_t mode_juggle(void){ } return FRAMETIME; } -static const char *_data_FX_MODE_JUGGLE PROGMEM = "Juggle@!,Trail;!,!,;!;sx=16,ix=240,1d"; +static const char _data_FX_MODE_JUGGLE[] PROGMEM = "Juggle@!,Trail;!,!,;!;sx=16,ix=240,1d"; uint16_t mode_palette() @@ -1939,7 +1939,7 @@ uint16_t mode_palette() } return FRAMETIME; } -static const char *_data_FX_MODE_PALETTE PROGMEM = "Palette@Cycle speed,;1,2,3;!;1d"; +static const char _data_FX_MODE_PALETTE[] PROGMEM = "Palette@Cycle speed,;1,2,3;!;1d"; // WLED limitation: Analog Clock overlay will NOT work when Fire2012 is active @@ -2024,7 +2024,7 @@ uint16_t mode_fire_2012() } return FRAMETIME; } -static const char *_data_FX_MODE_FIRE_2012 PROGMEM = "Fire 2012@Cooling,Spark rate;1,2,3;!;sx=120,ix=64,1d,2d"; +static const char _data_FX_MODE_FIRE_2012[] PROGMEM = "Fire 2012@Cooling,Spark rate;1,2,3;!;sx=120,ix=64,1d,2d"; // ColorWavesWithPalettes by Mark Kriegsman: https://gist.github.com/kriegsman/8281905786e8b2632aeb @@ -2078,7 +2078,7 @@ uint16_t mode_colorwaves() SEGENV.aux0 = sHue16; return FRAMETIME; } -static const char *_data_FX_MODE_COLORWAVES PROGMEM = "Colorwaves@!,!;!,!,!;!;1d"; +static const char _data_FX_MODE_COLORWAVES[] PROGMEM = "Colorwaves@!,!;!,!,!;!;1d"; // colored stripes pulsing at a defined Beats-Per-Minute (BPM) @@ -2093,7 +2093,7 @@ uint16_t mode_bpm() } return FRAMETIME; } -static const char *_data_FX_MODE_BPM PROGMEM = "Bpm@!,;1,2,3;!;sx=64,1d"; +static const char _data_FX_MODE_BPM[] PROGMEM = "Bpm@!,;1,2,3;!;sx=64,1d"; uint16_t mode_fillnoise8() @@ -2109,7 +2109,7 @@ uint16_t mode_fillnoise8() return FRAMETIME; } -static const char *_data_FX_MODE_FILLNOISE8 PROGMEM = "Fill Noise@!,!;!,!,!;!;1d"; +static const char _data_FX_MODE_FILLNOISE8[] PROGMEM = "Fill Noise@!,!;!,!,!;!;1d"; uint16_t mode_noise16_1() @@ -2138,7 +2138,7 @@ uint16_t mode_noise16_1() return FRAMETIME; } -static const char *_data_FX_MODE_NOISE16_1 PROGMEM = "Noise 1@!,!;!,!,!;!;1d"; +static const char _data_FX_MODE_NOISE16_1[] PROGMEM = "Noise 1@!,!;!,!,!;!;1d"; uint16_t mode_noise16_2() @@ -2163,7 +2163,7 @@ uint16_t mode_noise16_2() return FRAMETIME; } -static const char *_data_FX_MODE_NOISE16_2 PROGMEM = "Noise 2@!,!;!,!,!;!;1d"; +static const char _data_FX_MODE_NOISE16_2[] PROGMEM = "Noise 2@!,!;!,!,!;!;1d"; uint16_t mode_noise16_3() @@ -2191,7 +2191,7 @@ uint16_t mode_noise16_3() return FRAMETIME; } -static const char *_data_FX_MODE_NOISE16_3 PROGMEM = "Noise 3@!,!;!,!,!;!;1d"; +static const char _data_FX_MODE_NOISE16_3[] PROGMEM = "Noise 3@!,!;!,!,!;!;1d"; //https://github.com/aykevl/ledstrip-spark/blob/master/ledstrip.ino @@ -2206,7 +2206,7 @@ uint16_t mode_noise16_4() } return FRAMETIME; } -static const char *_data_FX_MODE_NOISE16_4 PROGMEM = "Noise 4@!,!;!,!,!;!;1d"; +static const char _data_FX_MODE_NOISE16_4[] PROGMEM = "Noise 4@!,!;!,!,!;!;1d"; //based on https://gist.github.com/kriegsman/5408ecd397744ba0393e @@ -2275,7 +2275,7 @@ uint16_t mode_colortwinkle() } return FRAMETIME_FIXED; } -static const char *_data_FX_MODE_COLORTWINKLE PROGMEM = "Colortwinkles@Fade speed,Spawn speed;1,2,3;!;1d,2d"; //pixels +static const char _data_FX_MODE_COLORTWINKLE[] PROGMEM = "Colortwinkles@Fade speed,Spawn speed;1,2,3;!;1d,2d"; //pixels //Calm effect, like a lake at night @@ -2295,7 +2295,7 @@ uint16_t mode_lake() { } return FRAMETIME; } -static const char *_data_FX_MODE_LAKE PROGMEM = "Lake@!,;1,2,3;!;1d"; +static const char _data_FX_MODE_LAKE[] PROGMEM = "Lake@!,;1,2,3;!;1d"; // meteor effect @@ -2333,7 +2333,7 @@ uint16_t mode_meteor() { return FRAMETIME; } -static const char *_data_FX_MODE_METEOR PROGMEM = "Meteor@!,Trail length;!,!,;!;1d"; +static const char _data_FX_MODE_METEOR[] PROGMEM = "Meteor@!,Trail length;!,!,;!;1d"; // smooth meteor effect @@ -2372,7 +2372,7 @@ uint16_t mode_meteor_smooth() { SEGENV.step += SEGMENT.speed +1; return FRAMETIME; } -static const char *_data_FX_MODE_METEOR_SMOOTH PROGMEM = "Meteor Smooth@!,Trail length;!,!,;!;1d"; +static const char _data_FX_MODE_METEOR_SMOOTH[] PROGMEM = "Meteor Smooth@!,Trail length;!,!,;!;1d"; //Railway Crossing / Christmas Fairy lights @@ -2404,7 +2404,7 @@ uint16_t mode_railway() SEGENV.step += FRAMETIME; return FRAMETIME; } -static const char *_data_FX_MODE_RAILWAY PROGMEM = "Railway"; +static const char _data_FX_MODE_RAILWAY[] PROGMEM = "Railway"; //Water ripple @@ -2499,13 +2499,13 @@ uint16_t ripple_base(bool rainbow) uint16_t mode_ripple(void) { return ripple_base(false); } -static const char *_data_FX_MODE_RIPPLE PROGMEM = "Ripple"; +static const char _data_FX_MODE_RIPPLE[] PROGMEM = "Ripple"; uint16_t mode_ripple_rainbow(void) { return ripple_base(true); } -static const char *_data_FX_MODE_RIPPLE_RAINBOW PROGMEM = "Ripple Rainbow"; +static const char _data_FX_MODE_RIPPLE_RAINBOW[] PROGMEM = "Ripple Rainbow"; // TwinkleFOX by Mark Kriegsman: https://gist.github.com/kriegsman/756ea6dcae8e30845b5a @@ -2642,14 +2642,14 @@ uint16_t mode_twinklefox() { return twinklefox_base(false); } -static const char *_data_FX_MODE_TWINKLEFOX PROGMEM = "Twinklefox"; +static const char _data_FX_MODE_TWINKLEFOX[] PROGMEM = "Twinklefox"; uint16_t mode_twinklecat() { return twinklefox_base(true); } -static const char *_data_FX_MODE_TWINKLECAT PROGMEM = "Twinklecat"; +static const char _data_FX_MODE_TWINKLECAT[] PROGMEM = "Twinklecat"; //inspired by https://www.tweaking4all.com/hardware/arduino/adruino-led-strip-effects/#LEDStripEffectBlinkingHalloweenEyes @@ -2711,7 +2711,7 @@ uint16_t mode_halloween_eyes() return FRAMETIME; } -static const char *_data_FX_MODE_HALLOWEEN_EYES PROGMEM = "Halloween Eyes@Duration,Eye fade time;!,!,;!;1d,2d"; +static const char _data_FX_MODE_HALLOWEEN_EYES[] PROGMEM = "Halloween Eyes@Duration,Eye fade time;!,!,;!;1d,2d"; //Speed slider sets amount of LEDs lit, intensity sets unlit @@ -2733,7 +2733,7 @@ uint16_t mode_static_pattern() return FRAMETIME; } -static const char *_data_FX_MODE_STATIC_PATTERN PROGMEM = "Solid Pattern@Fg size,Bg size;Fg,Bg,;!;pal=0,1d"; +static const char _data_FX_MODE_STATIC_PATTERN[] PROGMEM = "Solid Pattern@Fg size,Bg size;Fg,Bg,;!;pal=0,1d"; uint16_t mode_tri_static_pattern() @@ -2759,7 +2759,7 @@ uint16_t mode_tri_static_pattern() return FRAMETIME; } -static const char *_data_FX_MODE_TRI_STATIC_PATTERN PROGMEM = "Solid Pattern Tri@,Size;1,2,3;!;1d,pal=0"; +static const char _data_FX_MODE_TRI_STATIC_PATTERN[] PROGMEM = "Solid Pattern Tri@,Size;1,2,3;!;1d,pal=0"; uint16_t spots_base(uint16_t threshold) @@ -2794,7 +2794,7 @@ uint16_t mode_spots() { return spots_base((255 - SEGMENT.speed) << 8); } -static const char *_data_FX_MODE_SPOTS PROGMEM = "Spots@Spread,Width;!,!,;!;1d"; +static const char _data_FX_MODE_SPOTS[] PROGMEM = "Spots@Spread,Width;!,!,;!;1d"; //Intensity slider sets number of "lights", LEDs per light fade in and out @@ -2805,7 +2805,7 @@ uint16_t mode_spots_fade() uint16_t tr = (t >> 1) + (t >> 2); return spots_base(tr); } -static const char *_data_FX_MODE_SPOTS_FADE PROGMEM = "Spots Fade@Spread,Width;!,!,;!;1d"; +static const char _data_FX_MODE_SPOTS_FADE[] PROGMEM = "Spots Fade@Spread,Width;!,!,;!;1d"; //each needs 12 bytes @@ -2871,7 +2871,7 @@ uint16_t mode_bouncing_balls(void) { return FRAMETIME; } -static const char *_data_FX_MODE_BOUNCINGBALLS PROGMEM = "Bouncing Balls@Gravity,# of balls;!,!,;!;mp12=2,1d"; //circle +static const char _data_FX_MODE_BOUNCINGBALLS[] PROGMEM = "Bouncing Balls@Gravity,# of balls;!,!,;!;mp12=2,1d"; //circle /* @@ -2914,19 +2914,19 @@ uint16_t sinelon_base(bool dual, bool rainbow=false) { uint16_t mode_sinelon(void) { return sinelon_base(false); } -static const char *_data_FX_MODE_SINELON PROGMEM = "Sinelon"; +static const char _data_FX_MODE_SINELON[] PROGMEM = "Sinelon"; uint16_t mode_sinelon_dual(void) { return sinelon_base(true); } -static const char *_data_FX_MODE_SINELON_DUAL PROGMEM = "Sinelon Dual"; +static const char _data_FX_MODE_SINELON_DUAL[] PROGMEM = "Sinelon Dual"; uint16_t mode_sinelon_rainbow(void) { return sinelon_base(false, true); } -static const char *_data_FX_MODE_SINELON_RAINBOW PROGMEM = "Sinelon Rainbow"; +static const char _data_FX_MODE_SINELON_RAINBOW[] PROGMEM = "Sinelon Rainbow"; //Rainbow with glitter, inspired by https://gist.github.com/kriegsman/062e10f7f07ba8518af6 @@ -2945,7 +2945,7 @@ uint16_t mode_glitter() return FRAMETIME; } -static const char *_data_FX_MODE_GLITTER PROGMEM = "Glitter@,!;!,!,!;!;1d,2d"; //pixels +static const char _data_FX_MODE_GLITTER[] PROGMEM = "Glitter@,!;!,!,!;!;1d,2d"; //pixels //each needs 19 bytes @@ -3018,7 +3018,7 @@ uint16_t mode_popcorn(void) { return FRAMETIME; } -static const char *_data_FX_MODE_POPCORN PROGMEM = "Popcorn@!,!;!,!,!;!;1d,2d"; +static const char _data_FX_MODE_POPCORN[] PROGMEM = "Popcorn@!,!;!,!,!;!;1d,2d"; //values close to 100 produce 5Hz flicker, which looks very candle-y @@ -3105,14 +3105,14 @@ uint16_t mode_candle() { return candle(false); } -static const char *_data_FX_MODE_CANDLE PROGMEM = "Candle@Flicker rate,Flicker intensity;!,!,;;sx=96,ix=224,pal=0,1d"; +static const char _data_FX_MODE_CANDLE[] PROGMEM = "Candle@Flicker rate,Flicker intensity;!,!,;;sx=96,ix=224,pal=0,1d"; uint16_t mode_candle_multi() { return candle(true); } -static const char *_data_FX_MODE_CANDLE_MULTI PROGMEM = "Candle Multi@Flicker rate,Flicker intensity;!,!,;;sx=96,ix=224,pal=0,1d"; +static const char _data_FX_MODE_CANDLE_MULTI[] PROGMEM = "Candle Multi@Flicker rate,Flicker intensity;!,!,;;sx=96,ix=224,pal=0,1d"; /* @@ -3245,7 +3245,7 @@ uint16_t mode_starburst(void) { return FRAMETIME; } #undef STARBURST_MAX_FRAG -static const char *_data_FX_MODE_STARBURST PROGMEM = "Fireworks Starburst@Chance,Fragments;,!,;!;pal=11,mp12=0,1d"; +static const char _data_FX_MODE_STARBURST[] PROGMEM = "Fireworks Starburst@Chance,Fragments;,!,;!;pal=11,mp12=0,1d"; /* @@ -3381,7 +3381,7 @@ uint16_t mode_exploding_fireworks(void) return FRAMETIME; } #undef MAX_SPARKS -static const char *_data_FX_MODE_EXPLODING_FIREWORKS PROGMEM = "Fireworks 1D@Gravity,Firing side;!,!,;!=11;ix=128,1d,2d"; +static const char _data_FX_MODE_EXPLODING_FIREWORKS[] PROGMEM = "Fireworks 1D@Gravity,Firing side;!,!,;!=11;ix=128,1d,2d"; /* @@ -3474,7 +3474,7 @@ uint16_t mode_drip(void) } return FRAMETIME; } -static const char *_data_FX_MODE_DRIP PROGMEM = "Drip@Gravity,# of drips;!,!;!;1d,2d"; +static const char _data_FX_MODE_DRIP[] PROGMEM = "Drip@Gravity,# of drips;!,!;!;1d,2d"; /* @@ -3529,7 +3529,7 @@ uint16_t mode_tetrix(void) { } return FRAMETIME; } -static const char *_data_FX_MODE_TETRIX PROGMEM = "Tetrix@!,Width;!,!,;!;sx=224,ix=0,pal=11,mp12=1,1d"; //vertical +static const char _data_FX_MODE_TETRIX[] PROGMEM = "Tetrix@!,Width;!,!,;!;sx=224,ix=0,pal=11,mp12=1,1d"; //vertical /* @@ -3554,7 +3554,7 @@ uint16_t mode_plasma(void) { return FRAMETIME; } -static const char *_data_FX_MODE_PLASMA PROGMEM = "Plasma@Phase,;1,2,3;!;1d"; +static const char _data_FX_MODE_PLASMA[] PROGMEM = "Plasma@Phase,;1,2,3;!;1d"; /* @@ -3600,7 +3600,7 @@ uint16_t mode_percent(void) { return FRAMETIME; } -static const char *_data_FX_MODE_PERCENT PROGMEM = "Percent@,% of fill;!,!,;!;1d"; +static const char _data_FX_MODE_PERCENT[] PROGMEM = "Percent@,% of fill;!,!,;!;1d"; /* @@ -3633,7 +3633,7 @@ uint16_t mode_heartbeat(void) { return FRAMETIME; } -static const char *_data_FX_MODE_HEARTBEAT PROGMEM = "Heartbeat@!,!;!,!,;!;mp12=1,1d"; +static const char _data_FX_MODE_HEARTBEAT[] PROGMEM = "Heartbeat@!,!;!,!,;!;mp12=1,1d"; // "Pacifica" @@ -3750,7 +3750,7 @@ uint16_t mode_pacifica() strip.now = nowOld; return FRAMETIME; } -static const char *_data_FX_MODE_PACIFICA PROGMEM = "Pacifica"; +static const char _data_FX_MODE_PACIFICA[] PROGMEM = "Pacifica"; //Solid colour background with glitter @@ -3769,7 +3769,7 @@ uint16_t mode_solid_glitter() return FRAMETIME; } -static const char *_data_FX_MODE_SOLID_GLITTER PROGMEM = "Solid Glitter@,!;!,,;0;1d,2d"; +static const char _data_FX_MODE_SOLID_GLITTER[] PROGMEM = "Solid Glitter@,!;!,,;0;1d,2d"; /* @@ -3822,7 +3822,7 @@ uint16_t mode_sunrise() { return FRAMETIME; } -static const char *_data_FX_MODE_SUNRISE PROGMEM = "Sunrise@Time [min],;;!;sx=60,1d"; +static const char _data_FX_MODE_SUNRISE[] PROGMEM = "Sunrise@Time [min],;;!;sx=60,1d"; /* @@ -3857,13 +3857,13 @@ uint16_t phased_base(uint8_t moder) { // We're making sine wave uint16_t mode_phased(void) { return phased_base(0); } -static const char *_data_FX_MODE_PHASED PROGMEM = "Phased"; +static const char _data_FX_MODE_PHASED[] PROGMEM = "Phased"; uint16_t mode_phased_noise(void) { return phased_base(1); } -static const char *_data_FX_MODE_PHASEDNOISE PROGMEM = "Phased Noise"; +static const char _data_FX_MODE_PHASEDNOISE[] PROGMEM = "Phased Noise"; uint16_t mode_twinkleup(void) { // A very short twinkle routine with fade-in and dual controls. By Andrew Tuline. @@ -3884,7 +3884,7 @@ uint16_t mode_twinkleup(void) { // A very short twinkle routine return FRAMETIME; } -static const char *_data_FX_MODE_TWINKLEUP PROGMEM = "Twinkleup@!,Intensity;!,!,;!;1d,2d"; +static const char _data_FX_MODE_TWINKLEUP[] PROGMEM = "Twinkleup@!,Intensity;!,!,;!;1d,2d"; // Peaceful noise that's slow and with gradually changing palettes. Does not support WLED palettes or default colours or controls. @@ -3923,7 +3923,7 @@ uint16_t mode_noisepal(void) { // Slow noise return FRAMETIME; } -static const char *_data_FX_MODE_NOISEPAL PROGMEM = "Noise Pal"; +static const char _data_FX_MODE_NOISEPAL[] PROGMEM = "Noise Pal"; // Sine waves that have controllable phase change speed, frequency and cutoff. By Andrew Tuline. @@ -3945,7 +3945,7 @@ uint16_t mode_sinewave(void) { // Adjustable sinewave. By Andrew Tul return FRAMETIME; } -static const char *_data_FX_MODE_SINEWAVE PROGMEM = "Sine"; +static const char _data_FX_MODE_SINEWAVE[] PROGMEM = "Sine"; /* @@ -3983,7 +3983,7 @@ uint16_t mode_flow(void) return FRAMETIME; } -static const char *_data_FX_MODE_FLOW PROGMEM = "Flow@!,!;!,!,!;!;mp12=1,1d"; //vertical +static const char _data_FX_MODE_FLOW[] PROGMEM = "Flow@!,!;!,!,!;!;mp12=1,1d"; //vertical /* @@ -4007,7 +4007,7 @@ uint16_t mode_chunchun(void) } return FRAMETIME; } -static const char *_data_FX_MODE_CHUNCHUN PROGMEM = "Chunchun@!,Gap size;!,!,;!;1d"; +static const char _data_FX_MODE_CHUNCHUN[] PROGMEM = "Chunchun@!,Gap size;!,!,;!;1d"; //13 bytes @@ -4154,7 +4154,7 @@ uint16_t mode_dancing_shadows(void) return FRAMETIME; } -static const char *_data_FX_MODE_DANCING_SHADOWS PROGMEM = "Dancing Shadows@!,# of shadows;!,,;!;1d"; +static const char _data_FX_MODE_DANCING_SHADOWS[] PROGMEM = "Dancing Shadows@!,# of shadows;!,,;!;1d"; /* @@ -4175,7 +4175,7 @@ uint16_t mode_washing_machine(void) { return FRAMETIME; } -static const char *_data_FX_MODE_WASHING_MACHINE PROGMEM = "Washing Machine"; +static const char _data_FX_MODE_WASHING_MACHINE[] PROGMEM = "Washing Machine"; /* @@ -4203,7 +4203,7 @@ uint16_t mode_blends(void) { return FRAMETIME; } -static const char *_data_FX_MODE_BLENDS PROGMEM = "Blends@Shift speed,Blend speed;1,2,3;!;1d"; +static const char _data_FX_MODE_BLENDS[] PROGMEM = "Blends@Shift speed,Blend speed;1,2,3;!;1d"; /* @@ -4332,7 +4332,7 @@ uint16_t mode_tv_simulator(void) { return FRAMETIME; } -static const char *_data_FX_MODE_TV_SIMULATOR PROGMEM = "TV Simulator"; +static const char _data_FX_MODE_TV_SIMULATOR[] PROGMEM = "TV Simulator"; /* @@ -4495,7 +4495,7 @@ uint16_t mode_aurora(void) { return FRAMETIME; } -static const char *_data_FX_MODE_AURORA PROGMEM = "Aurora@!,!;1,2,3;!;sx=24,pal=50,1d"; +static const char _data_FX_MODE_AURORA[] PROGMEM = "Aurora@!,!;1,2,3;!;sx=24,pal=50,1d"; // WLED-SR effects @@ -4515,7 +4515,7 @@ uint16_t mode_perlinmove(void) { return FRAMETIME; } // mode_perlinmove() -static const char *_data_FX_MODE_PERLINMOVE PROGMEM = "Perlin Move@!,# of pixels,fade rate;,!;!;1d"; +static const char _data_FX_MODE_PERLINMOVE[] PROGMEM = "Perlin Move@!,# of pixels,fade rate;,!;!;1d"; ///////////////////////// @@ -4531,7 +4531,7 @@ uint16_t mode_wavesins(void) { return FRAMETIME; } // mode_waveins() -static const char *_data_FX_MODE_WAVESINS PROGMEM = "Wavesins@Speed,Brightness variation,Starting Color,Range of Colors,Color variation;;!;1d"; +static const char _data_FX_MODE_WAVESINS[] PROGMEM = "Wavesins@Speed,Brightness variation,Starting Color,Range of Colors,Color variation;;!;1d"; ////////////////////////////// @@ -4554,7 +4554,7 @@ uint16_t mode_FlowStripe(void) { return FRAMETIME; } // mode_FlowStripe() -static const char *_data_FX_MODE_FLOWSTRIPE PROGMEM = "Flow Stripe@Hue speed,Effect speed;;;1d"; +static const char _data_FX_MODE_FLOWSTRIPE[] PROGMEM = "Flow Stripe@Hue speed,Effect speed;;;1d"; #ifndef WLED_DISABLE_2D @@ -4598,7 +4598,7 @@ uint16_t mode_2DBlackHole(void) { // By: Stepko https://editor.soulma return FRAMETIME; } // mode_2DBlackHole() -static const char *_data_FX_MODE_2DBLACKHOLE PROGMEM = "Black Hole@Fade rate,Outer Y freq.,Outer X freq.,Inner X freq.,Inner Y freq.;;;2d"; +static const char _data_FX_MODE_2DBLACKHOLE[] PROGMEM = "Black Hole@Fade rate,Outer Y freq.,Outer X freq.,Inner X freq.,Inner Y freq.;;;2d"; //////////////////////////// @@ -4650,7 +4650,7 @@ uint16_t mode_2DColoredBursts() { // By: ldirko https://editor.so return FRAMETIME; } // mode_2DColoredBursts() -static const char *_data_FX_MODE_2DCOLOREDBURSTS PROGMEM = "Colored Bursts@Speed,# of lines;;!;2d"; +static const char _data_FX_MODE_2DCOLOREDBURSTS[] PROGMEM = "Colored Bursts@Speed,# of lines;;!;2d"; ///////////////////// @@ -4677,7 +4677,7 @@ uint16_t mode_2Ddna(void) { // dna originally by by ldirko at https://pa return FRAMETIME; } // mode_2Ddna() -static const char *_data_FX_MODE_2DDNA PROGMEM = "DNA@Scroll speed,Blur;1,2,3;!;2d"; +static const char _data_FX_MODE_2DDNA[] PROGMEM = "DNA@Scroll speed,Blur;1,2,3;!;2d"; ///////////////////////// @@ -4720,7 +4720,7 @@ uint16_t mode_2DDNASpiral() { // By: ldirko https://editor.soulma return FRAMETIME; } // mode_2DDNASpiral() -static const char *_data_FX_MODE_2DDNASPIRAL PROGMEM = "DNA Spiral@Scroll speed,Y frequency;;!;2d"; +static const char _data_FX_MODE_2DDNASPIRAL[] PROGMEM = "DNA Spiral@Scroll speed,Y frequency;;!;2d"; ///////////////////////// @@ -4751,7 +4751,7 @@ uint16_t mode_2DDrift() { // By: Stepko https://editor.soulmateli return FRAMETIME; } // mode_2DDrift() -static const char *_data_FX_MODE_2DDRIFT PROGMEM = "Drift@Rotation speed,Blur amount;;!;2d"; +static const char _data_FX_MODE_2DDRIFT[] PROGMEM = "Drift@Rotation speed,Blur amount;;!;2d"; ////////////////////////// @@ -4786,7 +4786,7 @@ uint16_t mode_2Dfirenoise(void) { // firenoise2d. By Andrew Tuline return FRAMETIME; } // mode_2Dfirenoise() -static const char *_data_FX_MODE_2DFIRENOISE PROGMEM = "Firenoise@X scale,Y scale;;;2d"; +static const char _data_FX_MODE_2DFIRENOISE[] PROGMEM = "Firenoise@X scale,Y scale;;;2d"; ////////////////////////////// @@ -4813,7 +4813,7 @@ uint16_t mode_2DFrizzles(void) { // By: Stepko https://editor.so return FRAMETIME; } // mode_2DFrizzles() -static const char *_data_FX_MODE_2DFRIZZLES PROGMEM = "Frizzles@X frequency,Y frequency,Blur;;!;2d"; +static const char _data_FX_MODE_2DFRIZZLES[] PROGMEM = "Frizzles@X frequency,Y frequency,Blur;;!;2d"; /////////////////////////////////////////// @@ -4916,7 +4916,7 @@ uint16_t mode_2Dgameoflife(void) { // Written by Ewoud Wijma, inspired by https: SEGMENT.setPixels(leds); return (SEGMENT.getOption(SEG_OPTION_TRANSITIONAL)) ? FRAMETIME : FRAMETIME_FIXED * (128-(SEGMENT.speed>>1)); // update only when appropriate time passes (in 42 FPS slots) } // mode_2Dgameoflife() -static const char *_data_FX_MODE_2DGAMEOFLIFE PROGMEM = "Game Of Life@!,;!,!;!;2d"; +static const char _data_FX_MODE_2DGAMEOFLIFE[] PROGMEM = "Game Of Life@!,;!,!;!;2d"; ///////////////////////// @@ -4937,7 +4937,7 @@ uint16_t mode_2DHiphotic() { // By: ldirko https://edit return FRAMETIME; } // mode_2DHiphotic() -static const char *_data_FX_MODE_2DHIPHOTIC PROGMEM = "Hiphotic@X scale,Y scale;;!;2d"; +static const char _data_FX_MODE_2DHIPHOTIC[] PROGMEM = "Hiphotic@X scale,Y scale;;!;2d"; ///////////////////////// @@ -5054,7 +5054,7 @@ uint16_t mode_2DJulia(void) { // An animated Julia set return FRAMETIME; } // mode_2DJulia() -static const char *_data_FX_MODE_2DJULIA PROGMEM = "Julia@,Max iterations per pixel,X center,Y center,Area size;;!;2d"; +static const char _data_FX_MODE_2DJULIA[] PROGMEM = "Julia@,Max iterations per pixel,X center,Y center,Area size;;!;2d"; ////////////////////////////// @@ -5081,7 +5081,7 @@ uint16_t mode_2DLissajous(void) { // By: Andrew Tuline return FRAMETIME; } // mode_2DLissajous() -static const char *_data_FX_MODE_2DLISSAJOUS PROGMEM = "Lissajous@X frequency,Fade rate;!,!,!;!;2d"; +static const char _data_FX_MODE_2DLISSAJOUS[] PROGMEM = "Lissajous@X frequency,Fade rate;!,!,!;!;2d"; /////////////////////// @@ -5144,7 +5144,7 @@ uint16_t mode_2Dmatrix(void) { // Matrix2D. By Jeremy Williams. return FRAMETIME; } // mode_2Dmatrix() -static const char *_data_FX_MODE_2DMATRIX PROGMEM = "Matrix@Falling speed,Spawning rate,Trail,Custom color;Spawn,Trail;;pal=0,2d"; +static const char _data_FX_MODE_2DMATRIX[] PROGMEM = "Matrix@Falling speed,Spawning rate,Trail,Custom color;Spawn,Trail;;pal=0,2d"; ///////////////////////// @@ -5204,7 +5204,7 @@ uint16_t mode_2Dmetaballs(void) { // Metaballs by Stefan Petrick. Cannot have //setPixels(leds); return FRAMETIME; } // mode_2Dmetaballs() -static const char *_data_FX_MODE_2DMETABALLS PROGMEM = "Metaballs@Speed;!,!,!;!;2d"; +static const char _data_FX_MODE_2DMETABALLS[] PROGMEM = "Metaballs@Speed;!,!,!;!;2d"; ////////////////////// @@ -5227,7 +5227,7 @@ uint16_t mode_2Dnoise(void) { // By Andrew Tuline return FRAMETIME; } // mode_2Dnoise() -static const char *_data_FX_MODE_2DNOISE PROGMEM = "Noise2D@Speed,Scale;!,!,!;!;2d"; +static const char _data_FX_MODE_2DNOISE[] PROGMEM = "Noise2D@Speed,Scale;!,!,!;!;2d"; ////////////////////////////// @@ -5270,7 +5270,7 @@ uint16_t mode_2DPlasmaball(void) { // By: Stepko https://edito return FRAMETIME; } // mode_2DPlasmaball() -static const char *_data_FX_MODE_2DPLASMABALL PROGMEM = "Plasma Ball@Speed,,Fade,Blur;!,!,!;!;2d"; +static const char _data_FX_MODE_2DPLASMABALL[] PROGMEM = "Plasma Ball@Speed,,Fade,Blur;!,!,!;!;2d"; //////////////////////////////// @@ -5325,7 +5325,7 @@ uint16_t mode_2DPolarLights(void) { // By: Kostyantyn Matviyevskyy https return FRAMETIME; } // mode_2DPolarLights() -static const char *_data_FX_MODE_2DPOLARLIGHTS PROGMEM = "Polar Lights@Speed,Scale;;;2d"; +static const char _data_FX_MODE_2DPOLARLIGHTS[] PROGMEM = "Polar Lights@Speed,Scale;;;2d"; ///////////////////////// @@ -5353,7 +5353,7 @@ uint16_t mode_2DPulser(void) { // By: ldirko https://edi return FRAMETIME; } // mode_2DPulser() -static const char *_data_FX_MODE_2DPULSER PROGMEM = "Pulser@Speed,Blur;;!;2d"; +static const char _data_FX_MODE_2DPULSER[] PROGMEM = "Pulser@Speed,Blur;;!;2d"; ///////////////////////// @@ -5383,7 +5383,7 @@ uint16_t mode_2DSindots(void) { // By: ldirko http return FRAMETIME; } // mode_2DSindots() -static const char *_data_FX_MODE_2DSINDOTS PROGMEM = "Sindots@Speed,Dot distance,Fade rate,Blur;;!;2d"; +static const char _data_FX_MODE_2DSINDOTS[] PROGMEM = "Sindots@Speed,Dot distance,Fade rate,Blur;;!;2d"; ////////////////////////////// @@ -5425,7 +5425,7 @@ uint16_t mode_2Dsquaredswirl(void) { // By: Mark Kriegsman. https://g return FRAMETIME; } // mode_2Dsquaredswirl() -static const char *_data_FX_MODE_2DSQUAREDSWIRL PROGMEM = "Squared Swirl@,,,,Blur;,,;!;2d"; +static const char _data_FX_MODE_2DSQUAREDSWIRL[] PROGMEM = "Squared Swirl@,,,,Blur;,,;!;2d"; ////////////////////////////// @@ -5476,7 +5476,7 @@ uint16_t mode_2DSunradiation(void) { // By: ldirko https://edi return FRAMETIME; } // mode_2DSunradiation() -static const char *_data_FX_MODE_2DSUNRADIATION PROGMEM = "Sun Radiation@Variance,Brightness;;;2d"; +static const char _data_FX_MODE_2DSUNRADIATION[] PROGMEM = "Sun Radiation@Variance,Brightness;;;2d"; ///////////////////////// @@ -5508,7 +5508,7 @@ uint16_t mode_2Dtartan(void) { // By: Elliott Kember https://editor.so return FRAMETIME; } // mode_2DTartan() -static const char *_data_FX_MODE_2DTARTAN PROGMEM = "Tartan@X scale,Y scale;;!;2d"; +static const char _data_FX_MODE_2DTARTAN[] PROGMEM = "Tartan@X scale,Y scale;;!;2d"; ///////////////////////// @@ -5554,7 +5554,7 @@ uint16_t mode_2Dspaceships(void) { //// Space ships by stepko (c)05.02.21 [ht return FRAMETIME; } -static const char *_data_FX_MODE_2DSPACESHIPS PROGMEM = "Spaceships@!,Blur;!,!,!;!;2d"; +static const char _data_FX_MODE_2DSPACESHIPS[] PROGMEM = "Spaceships@!,Blur;!,!,!;!;2d"; ///////////////////////// @@ -5628,7 +5628,7 @@ uint16_t mode_2Dcrazybees(void) { } return FRAMETIME; } -static const char *_data_FX_MODE_2DCRAZYBEES PROGMEM = "Crazy Bees@!,Blur;;;2d"; +static const char _data_FX_MODE_2DCRAZYBEES[] PROGMEM = "Crazy Bees@!,Blur;;;2d"; ///////////////////////// @@ -5718,7 +5718,7 @@ uint16_t mode_2Dghostrider(void) { return FRAMETIME; } -static const char *_data_FX_MODE_2DGHOSTRIDER PROGMEM = "Ghost Rider@Fade rate,Blur;!,!,!;!;2d"; +static const char _data_FX_MODE_2DGHOSTRIDER[] PROGMEM = "Ghost Rider@Fade rate,Blur;!,!,!;!;2d"; //////////////////////////// @@ -5820,7 +5820,7 @@ uint16_t mode_2Dfloatingblobs(void) { return FRAMETIME; } #undef MAX_BLOBS -static const char *_data_FX_MODE_2DBLOBS PROGMEM = "Blobs@!,# blobs,Blur;!,!,!;!;c1=8,2d"; +static const char _data_FX_MODE_2DBLOBS[] PROGMEM = "Blobs@!,# blobs,Blur;!,!,!;!;c1=8,2d"; //////////////////////////// @@ -5870,7 +5870,7 @@ uint16_t mode_2Dscrollingtext(void) { return FRAMETIME; } -static const char *_data_FX_MODE_2DSCROLLTEXT PROGMEM = "Scrolling Text@!,Y Offset,Trail,Font size;!,!;!;ix=128,c1=0,rev=0,mi=0,rY=0,mY=0,2d"; +static const char _data_FX_MODE_2DSCROLLTEXT[] PROGMEM = "Scrolling Text@!,Y Offset,Trail,Font size;!,!;!;ix=128,c1=0,rev=0,mi=0,rY=0,mY=0,2d"; //////////////////////////// @@ -5903,7 +5903,7 @@ uint16_t mode_2Ddriftrose(void) { return FRAMETIME; } -static const char *_data_FX_MODE_2DDRIFTROSE PROGMEM = "Drift Rose@Fade,Blur;;;2d"; +static const char _data_FX_MODE_2DDRIFTROSE[] PROGMEM = "Drift Rose@Fade,Blur;;;2d"; #endif // WLED_DISABLE_2D @@ -6027,7 +6027,7 @@ uint16_t mode_ripplepeak(void) { // * Ripple peak. By Andrew Tuli return FRAMETIME; } // mode_ripplepeak() -static const char *_data_FX_MODE_RIPPLEPEAK PROGMEM = "Ripple Peak@Fade rate,Max # of ripples,,Select bin,Volume (minimum);!,!;!;c3=0,mp12=0,ssim=0,1d,vo"; // Pixel, Beatsin +static const char _data_FX_MODE_RIPPLEPEAK[] PROGMEM = "Ripple Peak@Fade rate,Max # of ripples,,Select bin,Volume (minimum);!,!;!;c3=0,mp12=0,ssim=0,1d,vo"; // Pixel, Beatsin #ifndef WLED_DISABLE_2D @@ -6081,7 +6081,7 @@ uint16_t mode_2DSwirl(void) { SEGMENT.setPixels(leds); return FRAMETIME; } // mode_2DSwirl() -static const char *_data_FX_MODE_2DSWIRL PROGMEM = "Swirl@!,Sensitivity,Blur;,Bg Swirl;!;ix=64ssim=0,2d,vo"; // Beatsin +static const char _data_FX_MODE_2DSWIRL[] PROGMEM = "Swirl@!,Sensitivity,Blur;,Bg Swirl;!;ix=64ssim=0,2d,vo"; // Beatsin ///////////////////////// @@ -6133,7 +6133,7 @@ uint16_t mode_2DWaverly(void) { SEGMENT.setPixels(leds); return FRAMETIME; } // mode_2DWaverly() -static const char *_data_FX_MODE_2DWAVERLY PROGMEM = "Waverly@Amplification,Sensitivity;;!;ix=64,ssim=0,2d,vo"; // Beatsin +static const char _data_FX_MODE_2DWAVERLY[] PROGMEM = "Waverly@Amplification,Sensitivity;;!;ix=64,ssim=0,2d,vo"; // Beatsin #endif // WLED_DISABLE_2D @@ -6196,7 +6196,7 @@ uint16_t mode_gravcenter(void) { // Gravcenter. By Andrew Tuline. return FRAMETIME; } // mode_gravcenter() -static const char *_data_FX_MODE_GRAVCENTER PROGMEM = "Gravcenter@Rate of fall,Sensitivity;,!;!;ix=128,mp12=2,ssim=0,1d,vo"; // Circle, Beatsin +static const char _data_FX_MODE_GRAVCENTER[] PROGMEM = "Gravcenter@Rate of fall,Sensitivity;,!;!;ix=128,mp12=2,ssim=0,1d,vo"; // Circle, Beatsin /////////////////////// @@ -6250,7 +6250,7 @@ uint16_t mode_gravcentric(void) { // Gravcentric. By Andrew return FRAMETIME; } // mode_gravcentric() -static const char *_data_FX_MODE_GRAVCENTRIC PROGMEM = "Gravcentric@Rate of fall,Sensitivity=128;!;!;ix=128,mp12=2,ssim=0,1d,vo"; // Circle, Beatsin +static const char _data_FX_MODE_GRAVCENTRIC[] PROGMEM = "Gravcentric@Rate of fall,Sensitivity=128;!;!;ix=128,mp12=2,ssim=0,1d,vo"; // Circle, Beatsin /////////////////////// @@ -6299,7 +6299,7 @@ uint16_t mode_gravimeter(void) { // Gravmeter. By Andrew Tuline. return FRAMETIME; } // mode_gravimeter() -static const char *_data_FX_MODE_GRAVIMETER PROGMEM = "Gravimeter@Rate of fall,Sensitivity;!,!;!;ix=128,mp12=2,ssim=0,1d,vo"; // Circle, Beatsin +static const char _data_FX_MODE_GRAVIMETER[] PROGMEM = "Gravimeter@Rate of fall,Sensitivity;!,!;!;ix=128,mp12=2,ssim=0,1d,vo"; // Circle, Beatsin ////////////////////// @@ -6322,7 +6322,7 @@ uint16_t mode_juggles(void) { // Juggles. By Andrew Tuline. return FRAMETIME; } // mode_juggles() -static const char *_data_FX_MODE_JUGGLES PROGMEM = "Juggles@!,# of balls;,!;!;mp12=0,ssim=0,1d,vo"; // Pixels, Beatsin +static const char _data_FX_MODE_JUGGLES[] PROGMEM = "Juggles@!,# of balls;,!;!;mp12=0,ssim=0,1d,vo"; // Pixels, Beatsin ////////////////////// @@ -6358,7 +6358,7 @@ uint16_t mode_matripix(void) { // Matripix. By Andrew Tuline. return FRAMETIME; } // mode_matripix() -static const char *_data_FX_MODE_MATRIPIX PROGMEM = "Matripix@!,Brightness;!,!;!;ix=64,mp12=2,ssim=1,1d,vo"; //,rev=1,mi=1,rY=1,mY=1 Circle, WeWillRockYou, reverseX +static const char _data_FX_MODE_MATRIPIX[] PROGMEM = "Matripix@!,Brightness;!,!;!;ix=64,mp12=2,ssim=1,1d,vo"; //,rev=1,mi=1,rY=1,mY=1 Circle, WeWillRockYou, reverseX ////////////////////// @@ -6396,7 +6396,7 @@ uint16_t mode_midnoise(void) { // Midnoise. By Andrew Tuline. return FRAMETIME; } // mode_midnoise() -static const char *_data_FX_MODE_MIDNOISE PROGMEM = "Midnoise@Fade rate,Maximum length=128;,!;!;ix=128,mp12=2,ssim=0,1d,vo"; // Circle, Beatsin +static const char _data_FX_MODE_MIDNOISE[] PROGMEM = "Midnoise@Fade rate,Maximum length=128;,!;!;ix=128,mp12=2,ssim=0,1d,vo"; // Circle, Beatsin ////////////////////// @@ -6432,7 +6432,7 @@ uint16_t mode_noisefire(void) { // Noisefire. By Andrew Tuline. return FRAMETIME; } // mode_noisefire() -static const char *_data_FX_MODE_NOISEFIRE PROGMEM = "Noisefire@!,!;;;mp12=2,ssim=0,1d,vo"; // Circle, Beatsin +static const char _data_FX_MODE_NOISEFIRE[] PROGMEM = "Noisefire@!,!;;;mp12=2,ssim=0,1d,vo"; // Circle, Beatsin /////////////////////// @@ -6470,7 +6470,7 @@ uint16_t mode_noisemeter(void) { // Noisemeter. By Andrew Tuline. return FRAMETIME; } // mode_noisemeter() -static const char *_data_FX_MODE_NOISEMETER PROGMEM = "Noisemeter@Fade rate,Width;!,!;!;ix=128,mp12=2,ssim=0,1d,vo"; // Circle, Beatsin +static const char _data_FX_MODE_NOISEMETER[] PROGMEM = "Noisemeter@Fade rate,Width;!,!;!;ix=128,mp12=2,ssim=0,1d,vo"; // Circle, Beatsin ////////////////////// @@ -6511,7 +6511,7 @@ uint16_t mode_pixelwave(void) { // Pixelwave. By Andrew Tuline. return FRAMETIME; } // mode_pixelwave() -static const char *_data_FX_MODE_PIXELWAVE PROGMEM = "Pixelwave@!,Sensitivity;!,!;!;ix=64,mp12=2,ssim=0,1d,vo"; // Circle, Beatsin +static const char _data_FX_MODE_PIXELWAVE[] PROGMEM = "Pixelwave@!,Sensitivity;!,!;!;ix=64,mp12=2,ssim=0,1d,vo"; // Circle, Beatsin ////////////////////// @@ -6558,7 +6558,7 @@ uint16_t mode_plasmoid(void) { // Plasmoid. By Andrew Tuline. return FRAMETIME; } // mode_plasmoid() -static const char *_data_FX_MODE_PLASMOID PROGMEM = "Plasmoid@Phase,# of pixels;!,!;!;sx=128,ix=128,mp12=0,ssim=0,1d,vo"; // Pixels, Beatsin +static const char _data_FX_MODE_PLASMOID[] PROGMEM = "Plasmoid@Phase,# of pixels;!,!;!;sx=128,ix=128,mp12=0,ssim=0,1d,vo"; // Pixels, Beatsin /////////////////////// @@ -6602,7 +6602,7 @@ uint16_t mode_puddlepeak(void) { // Puddlepeak. By Andrew Tuline. return FRAMETIME; } // mode_puddlepeak() -static const char *_data_FX_MODE_PUDDLEPEAK PROGMEM = "Puddlepeak@Fade rate,Puddle size,,Select bin,Volume (minimum);!,!;!;c3=0,mp12=0,ssim=0,1d,vo"; // Pixels, Beatsin +static const char _data_FX_MODE_PUDDLEPEAK[] PROGMEM = "Puddlepeak@Fade rate,Puddle size,,Select bin,Volume (minimum);!,!;!;c3=0,mp12=0,ssim=0,1d,vo"; // Pixels, Beatsin ////////////////////// @@ -6637,7 +6637,7 @@ uint16_t mode_puddles(void) { // Puddles. By Andrew Tuline. return FRAMETIME; } // mode_puddles() -static const char *_data_FX_MODE_PUDDLES PROGMEM = "Puddles@Fade rate,Puddle size;!,!;!;mp12=0,ssim=0,1d,vo"; // Pixels, Beatsin +static const char _data_FX_MODE_PUDDLES[] PROGMEM = "Puddles@Fade rate,Puddle size;!,!;!;mp12=0,ssim=0,1d,vo"; // Pixels, Beatsin /////////////////////////////////////////////////////////////////////////////// @@ -6667,7 +6667,7 @@ uint16_t mode_pixels(void) { // Pixels. By Andrew Tuline. return FRAMETIME; } // mode_pixels() -static const char *_data_FX_MODE_PIXELS PROGMEM = "Pixels@Fade rate,# of pixels;,!;!;mp12=0,ssim=0,1d,vo"; // Pixels, Beatsin +static const char _data_FX_MODE_PIXELS[] PROGMEM = "Pixels@Fade rate,# of pixels;,!;!;mp12=0,ssim=0,1d,vo"; // Pixels, Beatsin /////////////////////////////// @@ -6714,7 +6714,7 @@ uint16_t mode_blurz(void) { // Blurz. By Andrew Tuline. return FRAMETIME; } // mode_blurz() -static const char *_data_FX_MODE_BLURZ PROGMEM = "Blurz@Fade rate,Blur amount;!,Color mix;!;mp12=0,ssim=0,1d,fr"; // Pixels, Beatsin +static const char _data_FX_MODE_BLURZ[] PROGMEM = "Blurz@Fade rate,Blur amount;!,Color mix;!;mp12=0,ssim=0,1d,fr"; // Pixels, Beatsin ///////////////////////// @@ -6751,7 +6751,7 @@ uint16_t mode_DJLight(void) { // Written by ??? Adapted by Wil return FRAMETIME; } // mode_DJLight() -static const char *_data_FX_MODE_DJLIGHT PROGMEM = "DJ Light@Speed;;;mp12=2,ssim=0,1d,fr"; // Circle, Beatsin +static const char _data_FX_MODE_DJLIGHT[] PROGMEM = "DJ Light@Speed;;;mp12=2,ssim=0,1d,fr"; // Circle, Beatsin //////////////////// @@ -6788,7 +6788,7 @@ uint16_t mode_freqmap(void) { // Map FFT_MajorPeak to SEGLEN. return FRAMETIME; } // mode_freqmap() -static const char *_data_FX_MODE_FREQMAP PROGMEM = "Freqmap@Fade rate,Starting color;,!;!;mp12=2,ssim=0,1d,fr"; // Circle, Beatsin +static const char _data_FX_MODE_FREQMAP[] PROGMEM = "Freqmap@Fade rate,Starting color;,!;!;mp12=2,ssim=0,1d,fr"; // Circle, Beatsin /////////////////////// @@ -6844,7 +6844,7 @@ uint16_t mode_freqmatrix(void) { // Freqmatrix. By Andreas Plesch return FRAMETIME; } // mode_freqmatrix() -static const char *_data_FX_MODE_FREQMATRIX PROGMEM = "Freqmatrix@Time delay,Sound effect,Low bin,High bin,Sensivity;;;mp12=0,ssim=0,1d,fr"; // Pixels, Beatsin +static const char _data_FX_MODE_FREQMATRIX[] PROGMEM = "Freqmatrix@Time delay,Sound effect,Low bin,High bin,Sensivity;;;mp12=0,ssim=0,1d,fr"; // Pixels, Beatsin ////////////////////// @@ -6881,7 +6881,7 @@ uint16_t mode_freqpixels(void) { // Freqpixel. By Andrew Tuline. return FRAMETIME; } // mode_freqpixels() -static const char *_data_FX_MODE_FREQPIXELS PROGMEM = "Freqpixels@Fade rate,Starting colour and # of pixels;;;mp12=0,ssim=0,1d,fr"; // Pixels, Beatsin +static const char _data_FX_MODE_FREQPIXELS[] PROGMEM = "Freqpixels@Fade rate,Starting colour and # of pixels;;;mp12=0,ssim=0,1d,fr"; // Pixels, Beatsin ////////////////////// @@ -6960,7 +6960,7 @@ uint16_t mode_freqwave(void) { // Freqwave. By Andreas Pleschun return FRAMETIME; } // mode_freqwave() -static const char *_data_FX_MODE_FREQWAVE PROGMEM = "Freqwave@Time delay,Sound effect,Low bin,High bin,Pre-amp;;;mp12=2,ssim=0,1d,fr"; // Circle, Beatsin +static const char _data_FX_MODE_FREQWAVE[] PROGMEM = "Freqwave@Time delay,Sound effect,Low bin,High bin,Pre-amp;;;mp12=2,ssim=0,1d,fr"; // Circle, Beatsin /////////////////////// @@ -7013,7 +7013,7 @@ uint16_t mode_gravfreq(void) { // Gravfreq. By Andrew Tuline. return FRAMETIME; } // mode_gravfreq() -static const char *_data_FX_MODE_GRAVFREQ PROGMEM = "Gravfreq@Rate of fall,Sensivity=128;,!;!;mp12=2,ssim=0,1d,fr"; // Circle, Beatsin +static const char _data_FX_MODE_GRAVFREQ[] PROGMEM = "Gravfreq@Rate of fall,Sensivity=128;,!;!;mp12=2,ssim=0,1d,fr"; // Circle, Beatsin ////////////////////// @@ -7039,7 +7039,7 @@ uint16_t mode_noisemove(void) { // Noisemove. By: Andrew Tuli return FRAMETIME; } // mode_noisemove() -static const char *_data_FX_MODE_NOISEMOVE PROGMEM = "Noisemove@Speed of perlin movement,Fade rate;,!;!;mp12=0,ssim=0,1d,fr"; // Pixels, Beatsin +static const char _data_FX_MODE_NOISEMOVE[] PROGMEM = "Noisemove@Speed of perlin movement,Fade rate;,!;!;mp12=0,ssim=0,1d,fr"; // Pixels, Beatsin ////////////////////// @@ -7089,7 +7089,7 @@ uint16_t mode_rocktaves(void) { // Rocktaves. Same note from eac return FRAMETIME; } // mode_rocktaves() -static const char *_data_FX_MODE_ROCKTAVES PROGMEM = "Rocktaves@;,!;!;mp12=0,ssim=0,1d,fr"; // Pixels, Beatsin +static const char _data_FX_MODE_ROCKTAVES[] PROGMEM = "Rocktaves@;,!;!;mp12=0,ssim=0,1d,fr"; // Pixels, Beatsin /////////////////////// @@ -7142,7 +7142,7 @@ uint16_t mode_waterfall(void) { // Waterfall. By: Andrew Tulin return FRAMETIME; } // mode_waterfall() -static const char *_data_FX_MODE_WATERFALL PROGMEM = "Waterfall@!,Adjust color,,Select bin, Volume (minimum);!,!;!;c3=0,mp12=2,ssim=0,1d,fr"; // Circles, Beatsin +static const char _data_FX_MODE_WATERFALL[] PROGMEM = "Waterfall@!,Adjust color,,Select bin, Volume (minimum);!,!;!;c3=0,mp12=2,ssim=0,1d,fr"; // Circles, Beatsin #ifndef WLED_DISABLE_2D @@ -7199,7 +7199,7 @@ uint16_t mode_2DGEQ(void) { // By Will Tatam. Code reduction by Ewoud Wijma. return FRAMETIME; } // mode_2DGEQ() -static const char *_data_FX_MODE_2DGEQ PROGMEM = "GEQ@Fade speed,Ripple decay,# of bands,Color bars;!,,Peak Color;!;c1=255,c2=64,pal=11,ssim=0,2d,fr"; // Beatsin +static const char _data_FX_MODE_2DGEQ[] PROGMEM = "GEQ@Fade speed,Ripple decay,# of bands,Color bars;!,,Peak Color;!;c1=255,c2=64,pal=11,ssim=0,2d,fr"; // Beatsin ///////////////////////// @@ -7259,7 +7259,7 @@ uint16_t mode_2DFunkyPlank(void) { // Written by ??? Adapted by Wil SEGMENT.setPixels(leds); return FRAMETIME; } // mode_2DFunkyPlank -static const char *_data_FX_MODE_2DFUNKYPLANK PROGMEM = "Funky Plank@Scroll speed,,# of bands;;;ssim=0,2d,fr"; // Beatsin +static const char _data_FX_MODE_2DFUNKYPLANK[] PROGMEM = "Funky Plank@Scroll speed,,# of bands;;;ssim=0,2d,fr"; // Beatsin #endif // WLED_DISABLE_2D @@ -7272,7 +7272,7 @@ static const char *_data_FX_MODE_2DFUNKYPLANK PROGMEM = "Funky Plank@Scroll spee ///////////////////////// // 2D Akemi // ///////////////////////// -static uint8_t akemi[] PROGMEM = { +static uint8_t akemi[][] PROGMEM = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,2,2,3,3,3,3,3,3,2,2,0,0,0,0,0,0,0,0,0,0,0, @@ -7369,14 +7369,14 @@ uint16_t mode_2DAkemi(void) { return FRAMETIME; } // mode_2DAkemi -static const char *_data_FX_MODE_2DAKEMI PROGMEM = "Akemi@Color speed,Dance;Head palette,Arms & Legs,Eyes & Mouth;Face palette;ssim=0,2d,fr"; //beatsin +static const char _data_FX_MODE_2DAKEMI[] PROGMEM = "Akemi@Color speed,Dance;Head palette,Arms & Legs,Eyes & Mouth;Face palette;ssim=0,2d,fr"; //beatsin #endif // WLED_DISABLE_2D #endif // WLED_NO_AUDIO ////////////////////////////////////////////////////////////////////////////////////////// // mode data -static const char *_data_RESERVED PROGMEM = "Reserved"; +static const char _data_RESERVED[] PROGMEM = "Reserved"; void WS2812FX::addEffect(uint8_t id, mode_ptr mode_fn, const char *mode_name) { /* diff --git a/wled00/FX.h b/wled00/FX.h index c0ec5aaf2..5bfdd1930 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -245,58 +245,78 @@ #define FX_MODE_BLENDS 115 #define FX_MODE_TV_SIMULATOR 116 #define FX_MODE_DYNAMIC_SMOOTH 117 -// new 2D effects -#define FX_MODE_2DSPACESHIPS 118 -#define FX_MODE_2DCRAZYBEES 119 -#define FX_MODE_2DGHOSTRIDER 120 -#define FX_MODE_2DBLOBS 121 -#define FX_MODE_2DSCROLLTEXT 122 -#define FX_MODE_2DDRIFTROSE 123 -// WLED-SR effects (non SR compatible IDs) -#define FX_MODE_2DBLACKHOLE 124 // non audio -#define FX_MODE_2DDNASPIRAL 125 // non audio -#define FX_MODE_2DHIPHOTIC 126 // non audio -#define FX_MODE_2DPLASMABALL 127 // non audio -#define FX_MODE_2DSINDOTS 128 // non audio -#define FX_MODE_2DFRIZZLES 129 // non audio -#define FX_MODE_2DLISSAJOUS 130 // non audio -#define FX_MODE_2DPOLARLIGHTS 131 // non audio -#define FX_MODE_2DTARTAN 132 // non audio -#define FX_MODE_2DGAMEOFLIFE 133 // non audio -#define FX_MODE_2DJULIA 134 // non audio -#define FX_MODE_2DCOLOREDBURSTS 135 // non audio -#define FX_MODE_2DSUNRADIATION 136 // non audio -#define FX_MODE_2DNOISE 137 // non audio -#define FX_MODE_2DFIRENOISE 138 // non audio -#define FX_MODE_2DSQUAREDSWIRL 139 // non audio -#define FX_MODE_2DDNA 140 // non audio -#define FX_MODE_2DMATRIX 141 // non audio -#define FX_MODE_2DMETABALLS 142 // non audio -#define FX_MODE_2DPULSER 143 // non audio -#define FX_MODE_2DDRIFT 144 // non audio -#define FX_MODE_2DWAVERLY 145 // audio enhanced -#define FX_MODE_2DSWIRL 146 // audio enhanced -#define FX_MODE_2DAKEMI 147 // audio enhanced -#define FX_MODE_PIXELWAVE 160 // audio enhanced -#define FX_MODE_JUGGLES 161 // audio enhanced -#define FX_MODE_MATRIPIX 162 // audio enhanced -#define FX_MODE_GRAVIMETER 163 // audio enhanced -#define FX_MODE_PLASMOID 164 // audio enhanced -#define FX_MODE_PUDDLES 165 // audio enhanced -#define FX_MODE_MIDNOISE 166 // audio enhanced -#define FX_MODE_NOISEMETER 167 // audio enhanced -#define FX_MODE_NOISEFIRE 168 // audio enhanced -#define FX_MODE_PUDDLEPEAK 169 // audio enhanced -#define FX_MODE_RIPPLEPEAK 170 // audio enhanced -#define FX_MODE_GRAVCENTER 171 // audio enhanced -#define FX_MODE_GRAVCENTRIC 172 // audio enhanced +#ifndef WLED_DISABLE_2D + // new 2D effects + #define FX_MODE_2DSPACESHIPS 118 + #define FX_MODE_2DCRAZYBEES 119 + #define FX_MODE_2DGHOSTRIDER 120 + #define FX_MODE_2DBLOBS 121 + #define FX_MODE_2DSCROLLTEXT 122 + #define FX_MODE_2DDRIFTROSE 123 + // WLED-SR effects (non SR compatible IDs) + #define FX_MODE_2DBLACKHOLE 124 // non audio + #define FX_MODE_2DDNASPIRAL 125 // non audio + #define FX_MODE_2DHIPHOTIC 126 // non audio + #define FX_MODE_2DPLASMABALL 127 // non audio + #define FX_MODE_2DSINDOTS 128 // non audio + #define FX_MODE_2DFRIZZLES 129 // non audio + #define FX_MODE_2DLISSAJOUS 130 // non audio + #define FX_MODE_2DPOLARLIGHTS 131 // non audio + #define FX_MODE_2DTARTAN 132 // non audio + #define FX_MODE_2DGAMEOFLIFE 133 // non audio + #define FX_MODE_2DJULIA 134 // non audio + #define FX_MODE_2DCOLOREDBURSTS 135 // non audio + #define FX_MODE_2DSUNRADIATION 136 // non audio + #define FX_MODE_2DNOISE 137 // non audio + #define FX_MODE_2DFIRENOISE 138 // non audio + #define FX_MODE_2DSQUAREDSWIRL 139 // non audio + #define FX_MODE_2DDNA 140 // non audio + #define FX_MODE_2DMATRIX 141 // non audio + #define FX_MODE_2DMETABALLS 142 // non audio + #define FX_MODE_2DPULSER 143 // non audio + #define FX_MODE_2DDRIFT 144 // non audio +#endif +#ifndef WLED_NO_AUDIO + #ifndef WLED_DISABLE_2D + #define FX_MODE_2DWAVERLY 145 // audio enhanced + #define FX_MODE_2DSWIRL 146 // audio enhanced + #define FX_MODE_2DAKEMI 147 // audio enhanced + #endif + #define FX_MODE_PIXELWAVE 160 // audio enhanced + #define FX_MODE_JUGGLES 161 // audio enhanced + #define FX_MODE_MATRIPIX 162 // audio enhanced + #define FX_MODE_GRAVIMETER 163 // audio enhanced + #define FX_MODE_PLASMOID 164 // audio enhanced + #define FX_MODE_PUDDLES 165 // audio enhanced + #define FX_MODE_MIDNOISE 166 // audio enhanced + #define FX_MODE_NOISEMETER 167 // audio enhanced + #define FX_MODE_NOISEFIRE 168 // audio enhanced + #define FX_MODE_PUDDLEPEAK 169 // audio enhanced + #define FX_MODE_RIPPLEPEAK 170 // audio enhanced + #define FX_MODE_GRAVCENTER 171 // audio enhanced + #define FX_MODE_GRAVCENTRIC 172 // audio enhanced +#endif #ifndef USERMOD_AUDIOREACTIVE - #define MODE_COUNT 173 + #ifndef WLED_NO_AUDIO + #define MODE_COUNT 173 + #else + #ifndef WLED_DISABLE_2D + #define MODE_COUNT 145 + #else + #define MODE_COUNT 118 + #endif + #endif #else + #ifdef WLED_DISABLE_2D + #error Audioreactive usermod requires 2D support. + #endif + #ifdef WLED_NO_AUDIO + #error Audioreactive usermod requires audio support. + #endif #define FX_MODE_PIXELS 173 // #define FX_MODE_PIXELWAVE 129 // audio enhanced // #define FX_MODE_JUGGLES 130 // audio enhanced @@ -488,13 +508,14 @@ typedef struct Segment { Segment(Segment &&orig) noexcept; // move constructor ~Segment() { - if (leds) { free(leds); Serial.println(F("Freeing leds.")); } #ifdef WLED_DEBUG - Serial.print(F("Destroying segment.")); + Serial.print(F("Destroying segment:")); if (name) Serial.printf(" %s (%p)", name, name); - if (data) Serial.printf(" %p", data); + if (data) Serial.printf(" %d (%p)", (int)_dataLen, data); + if (leds) Serial.printf(" [%u]", length()*sizeof(CRGB)); Serial.println(); #endif + if (leds) free(leds); if (name) delete[] name; if (_t) delete _t; deallocateData(); @@ -503,6 +524,10 @@ typedef struct Segment { Segment& operator= (const Segment &orig); // copy assignment Segment& operator= (Segment &&orig) noexcept; // move assignment +#ifdef WLED_DEBUG + size_t getSize() { return sizeof(Segment) + (data?_dataLen:0) + (name?strlen(name):0) + (_t?sizeof(Transition):0) + (leds?sizeof(CRGB)*length():0); } +#endif + inline bool getOption(uint8_t n) { return ((options >> n) & 0x01); } inline bool isSelected(void) { return getOption(0); } inline bool isActive(void) { return stop > start; } @@ -717,6 +742,9 @@ class WS2812FX { // 96 bytes static WS2812FX* getInstance(void) { return instance; } void +#ifdef WLED_DEBUG + printSize(), +#endif finalizeInit(), service(void), setMode(uint8_t segid, uint8_t m), @@ -726,7 +754,7 @@ class WS2812FX { // 96 bytes setBrightness(uint8_t b, bool direct = false), setRange(uint16_t i, uint16_t i2, uint32_t col), setTransitionMode(bool t), - purgeSegments(void), + purgeSegments(bool force = false), setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t grouping = 1, uint8_t spacing = 0, uint16_t offset = UINT16_MAX, uint16_t startY=0, uint16_t stopY=1), setMainSegmentId(uint8_t n), restartRuntime(), diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index c81052561..33a451069 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -766,7 +766,7 @@ uint8_t Segment::get_random_wheel_index(uint8_t pos) { * @param pbri Value to scale the brightness of the returned color by. Default is 255. (no scaling) * @returns Single color from palette */ -uint32_t IRAM_ATTR Segment::color_from_palette(uint16_t i, bool mapping, bool wrap, uint8_t mcol, uint8_t pbri) +uint32_t Segment::color_from_palette(uint16_t i, bool mapping, bool wrap, uint8_t mcol, uint8_t pbri) { // default palette or no RGB support on segment if ((palette == 0 && mcol < NUM_COLORS) || !(_capabilities & 0x01)) { @@ -908,99 +908,16 @@ void WS2812FX::service() { _isServicing = false; } -void WS2812FX::setPixelColor(int i, uint32_t col) +void IRAM_ATTR WS2812FX::setPixelColor(int i, uint32_t col) { if (i >= _length) return; - - // if realtime mode is active and applying to main segment - if (realtimeMode && useMainSegmentOnly) { - Segment &seg = _segments[_mainSegment]; - uint16_t len = seg.length(); // length of segment in number of pixels - if (i >= seg.virtualLength()) return; - -#ifndef WLED_DISABLE_2D - // adjust pixel index if within 2D segment - if (isMatrix) { - uint16_t vH = seg.virtualHeight(); // segment height in logical pixels - uint16_t vW = seg.virtualWidth(); - switch (seg.map1D2D) { - case M12_Pixels: - // use all available pixels as a long strip - setPixelColorXY(seg.start + i % vW, seg.startY + i / vW, col); - break; - case M12_VerticalBar: - // expand 1D effect vertically - for (int y = 0; y < vH; y++) setPixelColorXY(seg.start + i, seg.startY + y, col); - break; - case M12_Circle: - // expand in circular fashion from center - for (float degrees = 0.0f; degrees <= 90.0f; degrees += 89.99f / (sqrtf((float)max(vH,vW))*i+1)) { // this may prove too many iterations on larger matrices - // may want to try float version as well (with or without antialiasing) - int x = roundf(sin_t(degrees*DEG_TO_RAD) * i); - int y = roundf(cos_t(degrees*DEG_TO_RAD) * i); - setPixelColorXY(seg.start + x, seg.startY + y, col); - } - break; - case M12_Block: - for (int x = 0; x <= i; x++) setPixelColorXY(seg.start + x, seg.startY + i, col); - for (int y = 0; y < i; y++) setPixelColorXY(seg.start + i, seg.startY + y, col); - break; - } - return; - } -#endif - - if (seg.opacity < 255) { - byte r = scale8(R(col), seg.opacity); - byte g = scale8(G(col), seg.opacity); - byte b = scale8(B(col), seg.opacity); - byte w = scale8(W(col), seg.opacity); - col = RGBW32(r, g, b, w); - } - - // get physical pixel address (taking into account start, grouping, spacing [and offset]) - i = i * seg.groupLength(); - if (seg.getOption(SEG_OPTION_REVERSED)) { // is segment reversed? - if (seg.getOption(SEG_OPTION_MIRROR)) { // is segment mirrored? - i = (len - 1) / 2 - i; //only need to index half the pixels - } else { - i = (len - 1) - i; - } - } - i += seg.start; // starting pixel in a group - - // set all the pixels in the group - for (uint16_t j = 0; j < seg.grouping; j++) { - uint16_t indexSet = i + ((seg.getOption(SEG_OPTION_REVERSED)) ? -j : j); - if (indexSet >= seg.start && indexSet < seg.stop) { - - if (seg.getOption(SEG_OPTION_MIRROR)) { //set the corresponding mirrored pixel - uint16_t indexMir = seg.stop - indexSet + seg.start - 1; - indexMir += seg.offset; // offset/phase - if (indexMir >= seg.stop) indexMir -= len; // wrap - if (indexMir < customMappingSize) indexMir = customMappingTable[indexMir]; - - busses.setPixelColor(indexMir, col); - } - indexSet += seg.offset; // offset/phase - if (indexSet >= seg.stop) indexSet -= len; // wrap - if (indexSet < customMappingSize) indexSet = customMappingTable[indexSet]; - - busses.setPixelColor(indexSet, col); - } - } - } else { - if (i < customMappingSize) i = customMappingTable[i]; - busses.setPixelColor(i, col); - } + if (i < customMappingSize) i = customMappingTable[i]; + busses.setPixelColor(i, col); } uint32_t WS2812FX::getPixelColor(uint16_t i) { if (i >= _length) return 0; - //#ifndef WLED_DISABLE_2D - //if (isMatrix) return getPixelColorXY(i%matrixWidth, i/matrixWidth); // compatibility w/ non-effect fn - //#endif if (i < customMappingSize) i = customMappingTable[i]; return busses.getPixelColor(i); } @@ -1276,13 +1193,13 @@ bool WS2812FX::hasCCTBus(void) { return false; } -void WS2812FX::purgeSegments(void) { +void WS2812FX::purgeSegments(bool force) { // remove all inactive segments (from the back) int deleted = 0; - if (_segments.size() <= 1 || _isServicing) return; + if (_segments.size() <= 1) return; for (int i = _segments.size()-1; i > 0; i--) - if (_segments[i].stop == 0) { - DEBUG_PRINT(F("-- Removing segment: ")); DEBUG_PRINTLN(i); + if (_segments[i].stop == 0 || force) { + DEBUG_PRINT(F("Purging segment segment: ")); DEBUG_PRINTLN(i); deleted++; _segments.erase(_segments.begin() + i); } @@ -1535,6 +1452,18 @@ void WS2812FX::setTransitionMode(bool t) // } } +#ifdef WLED_DEBUG +void WS2812FX::printSize() +{ + size_t size = 0; + for (Segment seg : _segments) size += seg.getSize(); + DEBUG_PRINTF("Segments: %d -> %uB\n", sizeof(Segment), _segments.size(), size); + DEBUG_PRINTF("Modes: %d*%d=%uB\n", sizeof(mode_ptr), _mode.size(), (_mode.capacity()*sizeof(mode_ptr))); + DEBUG_PRINTF("Data: %d*%d=%uB\n", sizeof(const char *), _modeData.size(), (_modeData.capacity()*sizeof(const char *))); + DEBUG_PRINTF("Map: %d*%d=%uB\n", sizeof(uint16_t), (int)customMappingSize, customMappingSize*sizeof(uint16_t)); +} +#endif + void WS2812FX::loadCustomPalettes() { byte tcp[72]; //support gradient palettes with up to 18 entries diff --git a/wled00/colors.cpp b/wled00/colors.cpp index e82961358..c42c9076b 100644 --- a/wled00/colors.cpp +++ b/wled00/colors.cpp @@ -7,7 +7,7 @@ /* * color blend function */ -uint32_t IRAM_ATTR color_blend(uint32_t color1, uint32_t color2, uint16_t blend, bool b16) { +uint32_t color_blend(uint32_t color1, uint32_t color2, uint16_t blend, bool b16) { if(blend == 0) return color1; uint16_t blendmax = b16 ? 0xFFFF : 0xFF; if(blend == blendmax) return color2; diff --git a/wled00/html_other.h b/wled00/html_other.h index b3ca25cd0..8e884c58d 100644 --- a/wled00/html_other.h +++ b/wled00/html_other.h @@ -284,7 +284,7 @@ const uint8_t PAGE_liveviewws[] PROGMEM = { // Autogenerated from wled00/data/liveviewws2D.htm, do not edit!! const uint16_t PAGE_liveviewws2D_length = 878; const uint8_t PAGE_liveviewws2D[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x6d, 0x54, 0x6d, 0x73, 0xda, 0x46, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x6d, 0x54, 0x6d, 0x73, 0xda, 0x46, 0x10, 0xfe, 0xce, 0xaf, 0x90, 0xaf, 0x69, 0xa2, 0x33, 0x42, 0xc2, 0xd8, 0x6e, 0x5d, 0xe0, 0xc8, 0x34, 0x0e, 0x33, 0xce, 0x8c, 0x13, 0x33, 0x83, 0x5b, 0xa6, 0xc3, 0x78, 0x26, 0x87, 0xb4, 0xa0, 0x6b, 0xa4, 0x3b, 0xe6, 0x6e, 0x41, 0xa6, 0x44, 0xff, 0xbd, 0x2b, 0x09, 0x13, 0xd2, 0x94, 0x0f, diff --git a/wled00/json.cpp b/wled00/json.cpp index 5d8dbbe85..c8b5941ea 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -927,8 +927,7 @@ void serializeNodes(JsonObject root) void serializeModeData(JsonArray fxdata) { for (size_t i = 0; i < strip.getModeCount(); i++) { - //String lineBuffer = (const char*)pgm_read_dword(&(WS2812FX::_modeData[i])); - String lineBuffer = strip.getModeData(i); + String lineBuffer = FPSTR(strip.getModeData(i)); if (lineBuffer.length() > 0) { uint8_t endPos = lineBuffer.indexOf('@'); if (endPos>0) fxdata.add(lineBuffer.substring(endPos)); @@ -941,8 +940,7 @@ void serializeModeData(JsonArray fxdata) // also removes WLED-SR extensions (@...) from deserialised names void serializeModeNames(JsonArray arr) { for (size_t i = 0; i < strip.getModeCount(); i++) { - //String lineBuffer = (const char*)pgm_read_dword(&(WS2812FX::_modeData[i])); - String lineBuffer = strip.getModeData(i); + String lineBuffer = FPSTR(strip.getModeData(i)); if (lineBuffer.length() > 0) { uint8_t endPos = lineBuffer.indexOf('@'); if (endPos>0) arr.add(lineBuffer.substring(0, endPos)); diff --git a/wled00/udp.cpp b/wled00/udp.cpp index de28d4dac..aeef791c7 100644 --- a/wled00/udp.cpp +++ b/wled00/udp.cpp @@ -155,7 +155,7 @@ void realtimeLock(uint32_t timeoutMs, byte md) stop = strip.getLengthTotal(); } // clear strip/segment - for (size_t i = start; i < stop; i++) strip.setPixelColor(i,0,0,0,0); + for (size_t i = start; i < stop; i++) strip.setPixelColor(i,BLACK); // if WLED was off and using main segment only, freeze non-main segments so they stay off if (useMainSegmentOnly && bri == 0) { for (size_t s=0; s < strip.getSegmentsNum(); s++) { @@ -563,11 +563,16 @@ void handleNotifications() void setRealtimePixel(uint16_t i, byte r, byte g, byte b, byte w) { uint16_t pix = i + arlsOffset; - if (pix < strip.getLengthTotal()) - { - if (!arlsDisableGammaCorrection && strip.gammaCorrectCol) - { - strip.setPixelColor(pix, gamma8(r), gamma8(g), gamma8(b), gamma8(w)); + if (pix < strip.getLengthTotal()) { + if (!arlsDisableGammaCorrection && strip.gammaCorrectCol) { + r = gamma8(r); + g = gamma8(g); + b = gamma8(b); + w = gamma8(w); + } + if (useMainSegmentOnly) { + Segment &seg = strip.getMainSegment(); + if (pix 0) { int16_t start = lineBuffer.indexOf('@'); int16_t stop = lineBuffer.indexOf(';', start); @@ -356,7 +356,7 @@ uint8_t extractModeSlider(uint8_t mode, uint8_t slider, char *dest, uint8_t maxL int16_t extractModeDefaults(uint8_t mode, const char *segVar) { if (mode < strip.getModeCount()) { - String lineBuffer = strip.getModeData(mode); + String lineBuffer = FPSTR(strip.getModeData(mode)); if (lineBuffer.length() > 0) { int16_t start = lineBuffer.lastIndexOf(';'); if (start<0) return -1; diff --git a/wled00/wled.cpp b/wled00/wled.cpp index 4640270c9..65e093f58 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -205,6 +205,7 @@ void WLED::loop() DEBUG_PRINT(F("Loops/sec: ")); DEBUG_PRINTLN(loops / 30); DEBUG_PRINT(F("UM time[ms]: ")); DEBUG_PRINT(avgUsermodMillis/loops); DEBUG_PRINT("/");DEBUG_PRINTLN(maxUsermodMillis); DEBUG_PRINT(F("Strip time[ms]: ")); DEBUG_PRINT(avgStripMillis/loops); DEBUG_PRINT("/"); DEBUG_PRINTLN(maxStripMillis); + strip.printSize(); loops = 0; maxUsermodMillis = 0; maxStripMillis = 0; @@ -697,7 +698,7 @@ void WLED::handleConnection() DEBUG_PRINT(F("Heap too low! ")); DEBUG_PRINTLN(heap); forceReconnect = true; - strip.purgeSegments(); // remove inactive segments from memory + strip.purgeSegments(true); // remove all but one segments from memory } lastHeap = heap; heapTime = now; diff --git a/wled00/wled.h b/wled00/wled.h index 1269b819b..934a18d9a 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2208031 +#define VERSION 2208032 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG