Skip to content
579 changes: 181 additions & 398 deletions wled00/FX.cpp

Large diffs are not rendered by default.

76 changes: 38 additions & 38 deletions wled00/FX.h
Original file line number Diff line number Diff line change
Expand Up @@ -157,29 +157,29 @@ extern byte realtimeMode; // used in getMappedPixelIndex()
#define FX_MODE_BLINK 1
#define FX_MODE_BREATH 2
#define FX_MODE_COLOR_WIPE 3
#define FX_MODE_COLOR_WIPE_RANDOM 4
//#define FX_MODE_COLOR_WIPE_RANDOM 4 // removed in 0.16, use Color Wipe with check 1
#define FX_MODE_RANDOM_COLOR 5
#define FX_MODE_COLOR_SWEEP 6
//#define FX_MODE_COLOR_SWEEP 6 // removed in 0.16, use Wipe with check 2
#define FX_MODE_DYNAMIC 7
#define FX_MODE_RAINBOW 8
#define FX_MODE_RAINBOW_CYCLE 9
#define FX_MODE_SCAN 10
#define FX_MODE_DUAL_SCAN 11 // candidate for removal (use Scan)
//#define FX_MODE_DUAL_SCAN 11 // removed in 0.16, use Scan with check 3
#define FX_MODE_FADE 12
#define FX_MODE_THEATER_CHASE 13
#define FX_MODE_THEATER_CHASE_RAINBOW 14 // candidate for removal (use Theater)
//#define FX_MODE_THEATER_CHASE_RAINBOW 14 // removed in 0.16, use Theater with check 1
#define FX_MODE_RUNNING_LIGHTS 15
#define FX_MODE_SAW 16
//#define FX_MODE_SAW 16 // removed in 0.16, use Running with check 3
#define FX_MODE_TWINKLE 17
#define FX_MODE_DISSOLVE 18
#define FX_MODE_DISSOLVE_RANDOM 19 // candidate for removal (use Dissolve with with check 3)
#define FX_MODE_SPARKLE 20
//#define FX_MODE_DISSOLVE_RANDOM 19 // removed in 0.16, use Dissolve with check 1
#define FX_MODE_SPARKLE 20 // alternative: PS Sparkler
#define FX_MODE_FLASH_SPARKLE 21
#define FX_MODE_HYPER_SPARKLE 22
#define FX_MODE_STROBE 23
#define FX_MODE_STROBE_RAINBOW 24
//#define FX_MODE_STROBE 23 // removed in 0.16, use Blink with intensity = 0
//#define FX_MODE_STROBE_RAINBOW 24 // removed in 0.16, use Blink with check 1 & intensity = 0
#define FX_MODE_MULTI_STROBE 25
#define FX_MODE_BLINK_RAINBOW 26
//#define FX_MODE_BLINK_RAINBOW 26 // removed in 0.16, use Blink with check 1
#define FX_MODE_ANDROID 27
#define FX_MODE_CHASE_COLOR 28
#define FX_MODE_CHASE_RANDOM 29
Expand All @@ -189,8 +189,8 @@ extern byte realtimeMode; // used in getMappedPixelIndex()
#define FX_MODE_CHASE_RAINBOW_WHITE 33
#define FX_MODE_COLORFUL 34
#define FX_MODE_TRAFFIC_LIGHT 35
#define FX_MODE_COLOR_SWEEP_RANDOM 36
#define FX_MODE_RUNNING_COLOR 37 // candidate for removal (use Theater)
//#define FX_MODE_COLOR_SWEEP_RANDOM 36 // removed in 0.16, use Wipe with check 1 and check 2
//#define FX_MODE_RUNNING_COLOR 37 // removed in 0.16, use Theater with check 3
#define FX_MODE_AURORA 38
#define FX_MODE_RUNNING_RANDOM 39
#define FX_MODE_LARSON_SCANNER 40
Expand All @@ -201,25 +201,25 @@ extern byte realtimeMode; // used in getMappedPixelIndex()
#define FX_MODE_FIRE_FLICKER 45
#define FX_MODE_GRADIENT 46
#define FX_MODE_LOADING 47
#define FX_MODE_ROLLINGBALLS 48 //was Police before 0.14
#define FX_MODE_ROLLINGBALLS 48 // alternative: PS Pinball with checkmark "rolling"
#define FX_MODE_FAIRY 49 //was Police All prior to 0.13.0-b6 (use "Two Dots" with Red/Blue and full intensity)
#define FX_MODE_TWO_DOTS 50
#define FX_MODE_FAIRYTWINKLE 51 //was Two Areas prior to 0.13.0-b6 (use "Two Dots" with full intensity)
#define FX_MODE_RUNNING_DUAL 52 // candidate for removal (use Running)
//#define FX_MODE_RUNNING_DUAL 52 // removed in 0.16, use Running with check 2
#define FX_MODE_IMAGE 53
#define FX_MODE_TRICOLOR_CHASE 54
#define FX_MODE_TRICOLOR_WIPE 55
#define FX_MODE_TRICOLOR_FADE 56
#define FX_MODE_LIGHTNING 57
#define FX_MODE_ICU 58
#define FX_MODE_MULTI_COMET 59
#define FX_MODE_DUAL_LARSON_SCANNER 60 // candidate for removal (use Scanner with with check 1)
#define FX_MODE_MULTI_COMET 59 // alternative: PS Pinball with gravity set to 0
//#define FX_MODE_DUAL_LARSON_SCANNER 60 // removed in 0.16, use Scanner with check 1
#define FX_MODE_RANDOM_CHASE 61
#define FX_MODE_OSCILLATE 62
#define FX_MODE_PRIDE_2015 63
#define FX_MODE_JUGGLE 64
#define FX_MODE_PALETTE 65
#define FX_MODE_FIRE_2012 66
#define FX_MODE_FIRE_2012 66 // alternative: PS Fire (1D and 2D)
#define FX_MODE_COLORWAVES 67
#define FX_MODE_BPM 68
#define FX_MODE_FILLNOISE8 69
Expand All @@ -230,7 +230,7 @@ extern byte realtimeMode; // used in getMappedPixelIndex()
#define FX_MODE_COLORTWINKLE 74
#define FX_MODE_LAKE 75
#define FX_MODE_METEOR 76
//#define FX_MODE_METEOR_SMOOTH 77 // replaced by Meteor
//#define FX_MODE_METEOR_SMOOTH 77 // removed in 0.16, use Meteor with check 3
#define FX_MODE_COPY 77
#define FX_MODE_RAILWAY 78
#define FX_MODE_RIPPLE 79
Expand All @@ -241,23 +241,23 @@ extern byte realtimeMode; // used in getMappedPixelIndex()
#define FX_MODE_TRI_STATIC_PATTERN 84
#define FX_MODE_SPOTS 85
#define FX_MODE_SPOTS_FADE 86
#define FX_MODE_GLITTER 87
#define FX_MODE_GLITTER 87 // optional in 0.16, use PS Sparkler with s=255, i=0, c1&c2=0, c3 = speed, add to background overlay
#define FX_MODE_CANDLE 88
#define FX_MODE_STARBURST 89
#define FX_MODE_EXPLODING_FIREWORKS 90
#define FX_MODE_STARBURST 89 // alternative: PS Starburst
#define FX_MODE_EXPLODING_FIREWORKS 90 // alternative: PS Fireworks (1D and 2D)
#define FX_MODE_BOUNCINGBALLS 91
#define FX_MODE_SINELON 92
#define FX_MODE_SINELON_DUAL 93 // candidate for removal (use sinelon)
#define FX_MODE_SINELON_RAINBOW 94 // candidate for removal (use sinelon)
//#define FX_MODE_SINELON_DUAL 93 // removed in 0.16, use Sinelon with check 2
//#define FX_MODE_SINELON_RAINBOW 94 // removed in 0.16, use Sinelon with check 1
#define FX_MODE_POPCORN 95
#define FX_MODE_DRIP 96
#define FX_MODE_PLASMA 97
#define FX_MODE_PERCENT 98
#define FX_MODE_RIPPLE_RAINBOW 99 // candidate for removal (use ripple)
//#define FX_MODE_RIPPLE_RAINBOW 99 // removed in 0.16, use Ripple with check 1 and no blur (c1=0)
#define FX_MODE_HEARTBEAT 100
#define FX_MODE_PACIFICA 101
#define FX_MODE_CANDLE_MULTI 102 // candidate for removal (use candle with multi select)
#define FX_MODE_SOLID_GLITTER 103 // candidate for removal (use glitter)
//#define FX_MODE_CANDLE_MULTI 102 // removed in 0.16, use Candle with check 3
//#define FX_MODE_SOLID_GLITTER 103 // removed in 0.16, use PS Sparkler with s=255, i=0, c1&c2=0, c3 = speed
#define FX_MODE_SUNRISE 104
#define FX_MODE_PHASED 105
#define FX_MODE_TWINKLEUP 106
Expand All @@ -266,24 +266,24 @@ extern byte realtimeMode; // used in getMappedPixelIndex()
#define FX_MODE_PHASEDNOISE 109
#define FX_MODE_FLOW 110
#define FX_MODE_CHUNCHUN 111
#define FX_MODE_DANCING_SHADOWS 112
#define FX_MODE_DANCING_SHADOWS 112 // alternative: PS Dancing Shadows
#define FX_MODE_WASHING_MACHINE 113
#define FX_MODE_2DPLASMAROTOZOOM 114 // was Candy Cane prior to 0.14 (use Chase 2)
#define FX_MODE_BLENDS 115
#define FX_MODE_TV_SIMULATOR 116
#define FX_MODE_DYNAMIC_SMOOTH 117 // candidate for removal (check3 in dynamic)
//#define FX_MODE_DYNAMIC_SMOOTH 117 // removed in 0.16, use Dynamic with check1

// new 0.14 2D effects
#define FX_MODE_2DSPACESHIPS 118 //gap fill
#define FX_MODE_2DCRAZYBEES 119 //gap fill
#define FX_MODE_2DGHOSTRIDER 120 //gap fill
#define FX_MODE_2DBLOBS 121 //gap fill
#define FX_MODE_2DSCROLLTEXT 122 //gap fill
#define FX_MODE_2DDRIFTROSE 123 //gap fill
#define FX_MODE_2DDISTORTIONWAVES 124 //gap fill
#define FX_MODE_2DSOAP 125 //gap fill
#define FX_MODE_2DOCTOPUS 126 //gap fill
#define FX_MODE_2DWAVINGCELL 127 //gap fill
#define FX_MODE_2DSPACESHIPS 118
#define FX_MODE_2DCRAZYBEES 119
#define FX_MODE_2DGHOSTRIDER 120 // alternative: PS Ghost Rider
#define FX_MODE_2DBLOBS 121 // alternative: PS Blobs
#define FX_MODE_2DSCROLLTEXT 122
#define FX_MODE_2DDRIFTROSE 123
#define FX_MODE_2DDISTORTIONWAVES 124
#define FX_MODE_2DSOAP 125
#define FX_MODE_2DOCTOPUS 126
#define FX_MODE_2DWAVINGCELL 127

// WLED-SR effects (SR compatible IDs !!!)
#define FX_MODE_PIXELS 128
Expand Down
119 changes: 119 additions & 0 deletions wled00/FX_fcn.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2046,6 +2046,125 @@ bool WS2812FX::deserializeMap(unsigned n) {
return (customMappingSize > 0);
}

void remapLegacyEffect(uint8_t effectId, Segment &seg)
{
// remap legacy effect IDs to current ones and set appropriate flags and sliders
// see FX.h and FX.cpp PR #4573
// set user warning if using legacy effect IDs
int warning = WARN_LEGACY_FX;
switch (effectId) {
// Wipe Random -> Wipe with check1
case 4: // FX_MODE_COLOR_WIPE_RANDOM
seg.setMode(3); // FX_MODE_COLOR_WIPE
seg.check1 = 1;
break;
// Sweep Random -> Wipe with check1 and check2
case 36: // FX_MODE_COLOR_SWEEP_RANDOM
seg.check1 = 1;
// fallthrough
// Sweep -> Wipe with check2
case 6: // FX_MODE_COLOR_SWEEP
seg.setMode(3); // FX_MODE_COLOR_WIPE
seg.check2 = 1;
break;
// Dual Scan -> Scan with check3
case 11: // FX_MODE_DUAL_SCAN
seg.setMode(10); // FX_MODE_SCAN
seg.check3 = 1;
break;
// Theater Chase Rainbow -> Theater with check1
case 14: // FX_MODE_THEATER_CHASE_RAINBOW
seg.setMode(13); // FX_MODE_THEATER_CHASE
seg.check1 = 1;
break;
// Saw -> Running Lights with check3
case 16: // FX_MODE_SAW
seg.setMode(15); // FX_MODE_RUNNING_LIGHTS
seg.check3 = 1;
break;
// Dissolve Random -> Dissolve with check3
case 19: // FX_MODE_DISSOLVE_RANDOM
seg.setMode(18); // FX_MODE_DISSOLVE
seg.check1 = 1;
break;
// Strobe Rainbow -> Blink with i=0, o1=1
case 24: // FX_MODE_STROBE_RAINBOW
seg.check1 = 1;
// fallthrough
// Strobe -> Blink with i=0
case 23: // FX_MODE_STROBE
seg.setMode(1); // FX_MODE_BLINK
seg.intensity = 0;
break;
// Strobe -> Blink with i=0
case 26: // FX_MODE_BLINK_RAINBOW
seg.setMode(1); // FX_MODE_BLINK
seg.check1 = 1;
break;
// Running Color (Chase 2) -> Theater with check3
case 37: // FX_MODE_RUNNING_COLOR
seg.setMode(13); // FX_MODE_THEATER_CHASE
seg.check3 = 1;
break;
// Running Dual -> Running Lights with check2
case 52: // FX_MODE_RUNNING_DUAL
seg.setMode(15); // FX_MODE_RUNNING_LIGHTS
seg.check2 = 1;
break;
// Dual Larson Scanner -> Larson Scanner with check1
case 60: // FX_MODE_DUAL_LARSON_SCANNER
seg.setMode(40); // FX_MODE_LARSON_SCANNER
seg.check1 = 1;
break;
// Meteor Smooth -> Meteor with check3
case 77: // FX_MODE_METEOR_SMOOTH
seg.setMode(76); // FX_MODE_METEOR
seg.check3 = 1;
break;
// Sinelon Dual -> Sinelon with check2
case 93: // FX_MODE_SINELON_DUAL
seg.setMode(92); // FX_MODE_SINELON
seg.check2 = 1;
break;
// Sinelon Rainbow -> Sinelon with check1
case 94: // FX_MODE_SINELON_RAINBOW
seg.setMode(92); // FX_MODE_SINELON
seg.check1 = 1;
break;
// Ripple Rainbow -> Ripple with check1
case 99: // FX_MODE_RIPPLE_RAINBOW
seg.setMode(79); // FX_MODE_RIPPLE
seg.check1 = 1;
seg.custom1 = 0;
break;
// Candle Multi -> Candle with check3
case 102: // FX_MODE_CANDLE_MULTI
seg.setMode(88); // FX_MODE_CANDLE
seg.check3 = 1;
break;
// Solid Glitter -> PS Sparkler with s=255, i=0, c1&c2=0, c3 = speed
case 103: // FX_MODE_SOLID_GLITTER
seg.setMode(206); // FX_MODE_PSSPARKLER
seg.custom1 = 0;
seg.custom2 = 0;
seg.custom3 = seg.speed; // copy set speed to custom3
seg.speed = 255; // now override speed
seg.intensity = 0;
break;
// Dynamic Smooth -> Dynamic with check1
case 117: // FX_MODE_DYNAMIC_SMOOTH
seg.setMode(7); // FX_MODE_DYNAMIC
seg.check1 = 1;
break;

default:
// no remapping needed
warning = ERR_NONE;
break;
}
if (warning)
errorFlag = warning; // inform user on UI
}

const char JSON_mode_names[] PROGMEM = R"=====(["FX names moved"])=====";
const char JSON_palette_names[] PROGMEM = R"=====([
Expand Down
2 changes: 2 additions & 0 deletions wled00/const.h
Original file line number Diff line number Diff line change
Expand Up @@ -438,6 +438,8 @@ static_assert(WLED_MAX_BUSSES <= 32, "WLED_MAX_BUSSES exceeds hard limit");
#define ERR_OVERTEMP 30 // An attached temperature sensor has measured above threshold temperature (not implemented)
#define ERR_OVERCURRENT 31 // An attached current sensor has measured a current above the threshold (not implemented)
#define ERR_UNDERVOLT 32 // An attached voltmeter has measured a voltage below the threshold (not implemented)
//warning codes (non-fatal)
#define WARN_LEGACY_FX 200 // Effect is legacy and mapped to a new ID

// Timer mode types
#define NL_MODE_SET 0 //After nightlight time elapsed, set to target brightness
Expand Down
3 changes: 3 additions & 0 deletions wled00/data/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -1550,6 +1550,9 @@ function readState(s,command=false)
case 19:
errstr = "A filesystem error has occured.";
break;
case 200:
errstr = "Using deprecated FX! Please update your preset.";
break;
}
showToast('Error ' + s.error + ": " + errstr, true);
}
Expand Down
2 changes: 2 additions & 0 deletions wled00/fcn_declare.h
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,8 @@ void savePreset(byte index, const char* pname = nullptr, JsonObject saveobj = Js
inline void saveTemporaryPreset() {savePreset(255);};
void deletePreset(byte index);
bool getPresetName(byte index, String& name);
// legacy effect remapping, can be removed in 0.17
void remapLegacyEffect(uint8_t effectId, Segment &seg);

//remote.cpp
void handleWiZdata(uint8_t *incomingData, size_t len);
Expand Down
2 changes: 2 additions & 0 deletions wled00/json.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,8 @@ static bool deserializeSegment(JsonObject elem, byte it, byte presetId = 0)
seg.check2 = getBoolVal(elem["o2"], seg.check2);
seg.check3 = getBoolVal(elem["o3"], seg.check3);

remapLegacyEffect(fx, seg); //TODO: check if this is working

uint8_t blend = seg.blendMode;
getVal(elem["bm"], blend, 0, 15); // we can't pass reference to bitfield
seg.blendMode = constrain(blend, 0, 15);
Expand Down
10 changes: 2 additions & 8 deletions wled00/util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -592,14 +592,8 @@ void enumerateLedmaps() {
* Returns a new, random color wheel index with a minimum distance of 42 from pos.
*/
uint8_t get_random_wheel_index(uint8_t pos) {
uint8_t r = 0, x = 0, y = 0, d = 0;
while (d < 42) {
r = hw_random8();
x = abs(pos - r);
y = 255 - x;
d = MIN(x, y);
}
return r;
uint8_t offset = hw_random8(172); // 256 - 2*42
return (pos + 42 + offset);
}

// float version of map()
Expand Down