Multiple additions:
- transparent leds[] for getPixelColor() - sample 2D Black Hole for trnasparent leds[] - conditional audio compile (WLED_NO_AUDIO) Bugfix: - effect filtering
This commit is contained in:
parent
118bcbd6a6
commit
7ca1d99412
@ -403,7 +403,7 @@ uint16_t scan(bool dual)
|
|||||||
uint16_t mode_scan(void) {
|
uint16_t mode_scan(void) {
|
||||||
return scan(false);
|
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) {
|
uint16_t mode_dual_scan(void) {
|
||||||
return scan(true);
|
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";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -4565,41 +4565,48 @@ uint16_t mode_2DBlackHole(void) { // By: Stepko https://editor.soulma
|
|||||||
|
|
||||||
const uint16_t cols = SEGMENT.virtualWidth();
|
const uint16_t cols = SEGMENT.virtualWidth();
|
||||||
const uint16_t rows = SEGMENT.virtualHeight();
|
const uint16_t rows = SEGMENT.virtualHeight();
|
||||||
const uint16_t dataSize = sizeof(CRGB) * SEGMENT.length(); // using width*height prevents reallocation if mirroring is enabled
|
//const uint16_t dataSize = sizeof(CRGB) * SEGMENT.length(); // using width*height prevents reallocation if mirroring is enabled
|
||||||
|
|
||||||
if (!SEGENV.allocateData(dataSize)) return mode_static(); //allocation failed
|
//if (!SEGENV.allocateData(dataSize)) return mode_static(); //allocation failed
|
||||||
CRGB *leds = reinterpret_cast<CRGB*>(SEGENV.data);
|
//CRGB *leds = reinterpret_cast<CRGB*>(SEGENV.data);
|
||||||
|
|
||||||
uint16_t x, y;
|
uint16_t x, y;
|
||||||
|
|
||||||
// initialize on first call
|
// initialize on first call
|
||||||
if (SEGENV.call == 0) {
|
if (SEGENV.call == 0) {
|
||||||
SEGMENT.fill_solid(leds, CRGB::Black);
|
SEGMENT.setUpLeds();
|
||||||
|
SEGMENT.fill(BLACK);
|
||||||
|
//SEGMENT.fill_solid(leds, CRGB::Black);
|
||||||
}
|
}
|
||||||
|
|
||||||
SEGMENT.fadeToBlackBy(leds, 16 + (SEGMENT.speed>>3)); // create fading trails
|
SEGMENT.fadeToBlackBy(16 + (SEGMENT.speed>>3)); // create fading trails
|
||||||
|
//SEGMENT.fadeToBlackBy(leds, 16 + (SEGMENT.speed>>3)); // create fading trails
|
||||||
float t = (float)(millis())/128; // timebase
|
float t = (float)(millis())/128; // timebase
|
||||||
// outer stars
|
// outer stars
|
||||||
for (size_t i = 0; i < 8; i++) {
|
for (size_t i = 0; i < 8; i++) {
|
||||||
x = beatsin8(SEGMENT.custom1>>3, 0, cols - 1, 0, ((i % 2) ? 128 : 0) + t * i);
|
x = beatsin8(SEGMENT.custom1>>3, 0, cols - 1, 0, ((i % 2) ? 128 : 0) + t * i);
|
||||||
y = beatsin8(SEGMENT.intensity>>3, 0, rows - 1, 0, ((i % 2) ? 192 : 64) + t * i);
|
y = beatsin8(SEGMENT.intensity>>3, 0, rows - 1, 0, ((i % 2) ? 192 : 64) + t * i);
|
||||||
leds[XY(x,y)] += CHSV(i*32, 255, 255);
|
SEGMENT.setPixelColorXY(x, y, CHSV(i*32, 255, 255));
|
||||||
|
//leds[XY(x,y)] += CHSV(i*32, 255, 255);
|
||||||
}
|
}
|
||||||
// inner stars
|
// inner stars
|
||||||
for (size_t i = 0; i < 4; i++) {
|
for (size_t i = 0; i < 4; i++) {
|
||||||
x = beatsin8(SEGMENT.custom2>>3, cols/4, cols - 1 - cols/4, 0, ((i % 2) ? 128 : 0) + t * i);
|
x = beatsin8(SEGMENT.custom2>>3, cols/4, cols - 1 - cols/4, 0, ((i % 2) ? 128 : 0) + t * i);
|
||||||
y = beatsin8(SEGMENT.custom3>>3, rows/4, rows - 1 - rows/4, 0, ((i % 2) ? 192 : 64) + t * i);
|
y = beatsin8(SEGMENT.custom3>>3, rows/4, rows - 1 - rows/4, 0, ((i % 2) ? 192 : 64) + t * i);
|
||||||
leds[XY(x,y)] += CHSV(i*32, 255, 255);
|
SEGMENT.setPixelColorXY(x, y, CHSV(i*32, 255, 255));
|
||||||
|
//leds[XY(x,y)] += CHSV(i*32, 255, 255);
|
||||||
}
|
}
|
||||||
// central white dot
|
// central white dot
|
||||||
leds[XY(cols/2,rows/2)] = CHSV(0,0,255);
|
SEGMENT.setPixelColorXY(cols/2, rows/2, CHSV(0, 0, 255));
|
||||||
|
//leds[XY()] = CHSV(0,0,255);
|
||||||
// blur everything a bit
|
// blur everything a bit
|
||||||
SEGMENT.blur2d(leds, 16);
|
SEGMENT.blur(16);
|
||||||
|
//SEGMENT.blur2d(leds, 16);
|
||||||
|
|
||||||
SEGMENT.setPixels(leds);
|
//SEGMENT.setPixels(leds);
|
||||||
return FRAMETIME;
|
return FRAMETIME;
|
||||||
} // mode_2DBlackHole()
|
} // 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";
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
@ -5957,6 +5964,7 @@ static const char *_data_FX_MODE_2DDRIFTROSE PROGMEM = "Drift Rose@Fade,Blur;;;2
|
|||||||
#endif // WLED_DISABLE_2D
|
#endif // WLED_DISABLE_2D
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef WLED_NO_AUDIO
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
/******************** audio enhanced routines ************************/
|
/******************** audio enhanced routines ************************/
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
@ -6019,7 +6027,9 @@ uint16_t mode_ripplepeak(void) { // * Ripple peak. By Andrew Tuli
|
|||||||
um_data = simulateSound(SEGMENT.soundSim);
|
um_data = simulateSound(SEGMENT.soundSim);
|
||||||
}
|
}
|
||||||
uint8_t samplePeak = *(uint8_t*)um_data->u_data[5];
|
uint8_t samplePeak = *(uint8_t*)um_data->u_data[5];
|
||||||
|
#ifdef ESP32
|
||||||
float FFT_MajorPeak = *(float*) um_data->u_data[6];
|
float FFT_MajorPeak = *(float*) um_data->u_data[6];
|
||||||
|
#endif
|
||||||
uint8_t *maxVol = (uint8_t*)um_data->u_data[9];
|
uint8_t *maxVol = (uint8_t*)um_data->u_data[9];
|
||||||
uint8_t *binNum = (uint8_t*)um_data->u_data[10];
|
uint8_t *binNum = (uint8_t*)um_data->u_data[10];
|
||||||
|
|
||||||
@ -7418,6 +7428,7 @@ uint16_t mode_2DAkemi(void) {
|
|||||||
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_DISABLE_2D
|
||||||
|
|
||||||
|
#endif // WLED_NO_AUDIO
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// mode data
|
// mode data
|
||||||
@ -7583,12 +7594,16 @@ void WS2812FX::setupEffectData() {
|
|||||||
addEffect(FX_MODE_2DMETABALLS, &mode_2Dmetaballs, _data_FX_MODE_2DMETABALLS);
|
addEffect(FX_MODE_2DMETABALLS, &mode_2Dmetaballs, _data_FX_MODE_2DMETABALLS);
|
||||||
addEffect(FX_MODE_2DPULSER, &mode_2DPulser, _data_FX_MODE_2DPULSER);
|
addEffect(FX_MODE_2DPULSER, &mode_2DPulser, _data_FX_MODE_2DPULSER);
|
||||||
addEffect(FX_MODE_2DSUNRADIATION, &mode_2DSunradiation, _data_FX_MODE_2DSUNRADIATION);
|
addEffect(FX_MODE_2DSUNRADIATION, &mode_2DSunradiation, _data_FX_MODE_2DSUNRADIATION);
|
||||||
|
#ifndef WLED_NO_AUDIO
|
||||||
addEffect(FX_MODE_2DWAVERLY, &mode_2DWaverly, _data_FX_MODE_2DWAVERLY);
|
addEffect(FX_MODE_2DWAVERLY, &mode_2DWaverly, _data_FX_MODE_2DWAVERLY);
|
||||||
|
#endif
|
||||||
addEffect(FX_MODE_2DDRIFT, &mode_2DDrift, _data_FX_MODE_2DDRIFT);
|
addEffect(FX_MODE_2DDRIFT, &mode_2DDrift, _data_FX_MODE_2DDRIFT);
|
||||||
addEffect(FX_MODE_2DCOLOREDBURSTS, &mode_2DColoredBursts, _data_FX_MODE_2DCOLOREDBURSTS);
|
addEffect(FX_MODE_2DCOLOREDBURSTS, &mode_2DColoredBursts, _data_FX_MODE_2DCOLOREDBURSTS);
|
||||||
addEffect(FX_MODE_2DTARTAN, &mode_2Dtartan, _data_FX_MODE_2DTARTAN);
|
addEffect(FX_MODE_2DTARTAN, &mode_2Dtartan, _data_FX_MODE_2DTARTAN);
|
||||||
addEffect(FX_MODE_2DPOLARLIGHTS, &mode_2DPolarLights, _data_FX_MODE_2DPOLARLIGHTS);
|
addEffect(FX_MODE_2DPOLARLIGHTS, &mode_2DPolarLights, _data_FX_MODE_2DPOLARLIGHTS);
|
||||||
|
#ifndef WLED_NO_AUDIO
|
||||||
addEffect(FX_MODE_2DSWIRL, &mode_2DSwirl, _data_FX_MODE_2DSWIRL);
|
addEffect(FX_MODE_2DSWIRL, &mode_2DSwirl, _data_FX_MODE_2DSWIRL);
|
||||||
|
#endif
|
||||||
addEffect(FX_MODE_2DLISSAJOUS, &mode_2DLissajous, _data_FX_MODE_2DLISSAJOUS);
|
addEffect(FX_MODE_2DLISSAJOUS, &mode_2DLissajous, _data_FX_MODE_2DLISSAJOUS);
|
||||||
addEffect(FX_MODE_2DFRIZZLES, &mode_2DFrizzles, _data_FX_MODE_2DFRIZZLES);
|
addEffect(FX_MODE_2DFRIZZLES, &mode_2DFrizzles, _data_FX_MODE_2DFRIZZLES);
|
||||||
addEffect(FX_MODE_2DPLASMABALL, &mode_2DPlasmaball, _data_FX_MODE_2DPLASMABALL);
|
addEffect(FX_MODE_2DPLASMABALL, &mode_2DPlasmaball, _data_FX_MODE_2DPLASMABALL);
|
||||||
@ -7596,8 +7611,11 @@ void WS2812FX::setupEffectData() {
|
|||||||
addEffect(FX_MODE_2DSINDOTS, &mode_2DSindots, _data_FX_MODE_2DSINDOTS);
|
addEffect(FX_MODE_2DSINDOTS, &mode_2DSindots, _data_FX_MODE_2DSINDOTS);
|
||||||
addEffect(FX_MODE_2DDNASPIRAL, &mode_2DDNASpiral, _data_FX_MODE_2DDNASPIRAL);
|
addEffect(FX_MODE_2DDNASPIRAL, &mode_2DDNASpiral, _data_FX_MODE_2DDNASPIRAL);
|
||||||
addEffect(FX_MODE_2DBLACKHOLE, &mode_2DBlackHole, _data_FX_MODE_2DBLACKHOLE);
|
addEffect(FX_MODE_2DBLACKHOLE, &mode_2DBlackHole, _data_FX_MODE_2DBLACKHOLE);
|
||||||
|
#ifndef WLED_NO_AUDIO
|
||||||
addEffect(FX_MODE_2DAKEMI, &mode_2DAkemi, _data_FX_MODE_2DAKEMI);
|
addEffect(FX_MODE_2DAKEMI, &mode_2DAkemi, _data_FX_MODE_2DAKEMI);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_AUDIO
|
||||||
addEffect(FX_MODE_PIXELWAVE, &mode_pixelwave, _data_FX_MODE_PIXELWAVE);
|
addEffect(FX_MODE_PIXELWAVE, &mode_pixelwave, _data_FX_MODE_PIXELWAVE);
|
||||||
addEffect(FX_MODE_JUGGLES, &mode_juggles, _data_FX_MODE_JUGGLES);
|
addEffect(FX_MODE_JUGGLES, &mode_juggles, _data_FX_MODE_JUGGLES);
|
||||||
addEffect(FX_MODE_MATRIPIX, &mode_matripix, _data_FX_MODE_MATRIPIX);
|
addEffect(FX_MODE_MATRIPIX, &mode_matripix, _data_FX_MODE_MATRIPIX);
|
||||||
@ -7611,10 +7629,14 @@ void WS2812FX::setupEffectData() {
|
|||||||
addEffect(FX_MODE_MIDNOISE, &mode_midnoise, _data_FX_MODE_MIDNOISE);
|
addEffect(FX_MODE_MIDNOISE, &mode_midnoise, _data_FX_MODE_MIDNOISE);
|
||||||
addEffect(FX_MODE_NOISEMETER, &mode_noisemeter, _data_FX_MODE_NOISEMETER);
|
addEffect(FX_MODE_NOISEMETER, &mode_noisemeter, _data_FX_MODE_NOISEMETER);
|
||||||
addEffect(FX_MODE_NOISEFIRE, &mode_noisefire, _data_FX_MODE_NOISEFIRE);
|
addEffect(FX_MODE_NOISEFIRE, &mode_noisefire, _data_FX_MODE_NOISEFIRE);
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
// WLED-SR
|
// WLED-SR
|
||||||
|
#ifdef WLED_NO_AUDIO
|
||||||
|
#error Incompatible options: WLED_NO_AUDIO and USERMOD_AUDIOREACTIVE
|
||||||
|
#endif
|
||||||
#ifdef WLED_DISABLE_2D
|
#ifdef WLED_DISABLE_2D
|
||||||
#error AUDIOREACTIVE requires 2D support.
|
#error AUDIOREACTIVE requires 2D support.
|
||||||
#endif
|
#endif
|
||||||
addEffect(FX_MODE_2DJULIA, &mode_2DJulia, _data_FX_MODE_2DJULIA);
|
addEffect(FX_MODE_2DJULIA, &mode_2DJulia, _data_FX_MODE_2DJULIA);
|
||||||
addEffect(FX_MODE_2DGAMEOFLIFE, &mode_2Dgameoflife, _data_FX_MODE_2DGAMEOFLIFE);
|
addEffect(FX_MODE_2DGAMEOFLIFE, &mode_2Dgameoflife, _data_FX_MODE_2DGAMEOFLIFE);
|
||||||
@ -7672,5 +7694,5 @@ void WS2812FX::setupEffectData() {
|
|||||||
addEffect(FX_MODE_ROCKTAVES, &mode_rocktaves, _data_FX_MODE_ROCKTAVES);
|
addEffect(FX_MODE_ROCKTAVES, &mode_rocktaves, _data_FX_MODE_ROCKTAVES);
|
||||||
addEffect(FX_MODE_2DAKEMI, &mode_2DAkemi, _data_FX_MODE_2DAKEMI);
|
addEffect(FX_MODE_2DAKEMI, &mode_2DAkemi, _data_FX_MODE_2DAKEMI);
|
||||||
//addEffect(FX_MODE_CUSTOMEFFECT, &mode_customEffect, _data_FX_MODE_CUSTOMEFFECT); //WLEDSR Custom Effects
|
//addEffect(FX_MODE_CUSTOMEFFECT, &mode_customEffect, _data_FX_MODE_CUSTOMEFFECT); //WLEDSR Custom Effects
|
||||||
#endif
|
#endif // USERMOD_AUDIOREACTIVE
|
||||||
}
|
}
|
||||||
|
@ -410,6 +410,7 @@ typedef struct Segment {
|
|||||||
uint16_t aux0; // custom var
|
uint16_t aux0; // custom var
|
||||||
uint16_t aux1; // custom var
|
uint16_t aux1; // custom var
|
||||||
byte* data;
|
byte* data;
|
||||||
|
CRGB* leds;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
union {
|
union {
|
||||||
@ -468,6 +469,7 @@ typedef struct Segment {
|
|||||||
aux0(0),
|
aux0(0),
|
||||||
aux1(0),
|
aux1(0),
|
||||||
data(nullptr),
|
data(nullptr),
|
||||||
|
leds(nullptr),
|
||||||
_capabilities(0),
|
_capabilities(0),
|
||||||
_dataLen(0),
|
_dataLen(0),
|
||||||
_t(nullptr)
|
_t(nullptr)
|
||||||
@ -484,6 +486,7 @@ typedef struct Segment {
|
|||||||
Segment(Segment &&orig) noexcept; // move constructor
|
Segment(Segment &&orig) noexcept; // move constructor
|
||||||
|
|
||||||
~Segment() {
|
~Segment() {
|
||||||
|
if (leds) { free(leds); Serial.println(F("Freeing leds.")); }
|
||||||
#ifdef WLED_DEBUG
|
#ifdef WLED_DEBUG
|
||||||
Serial.print(F("Destroying segment."));
|
Serial.print(F("Destroying segment."));
|
||||||
if (name) Serial.printf(" %s (%p)", name, name);
|
if (name) Serial.printf(" %s (%p)", name, name);
|
||||||
@ -530,6 +533,7 @@ typedef struct Segment {
|
|||||||
* Safe to call from interrupts and network requests.
|
* Safe to call from interrupts and network requests.
|
||||||
*/
|
*/
|
||||||
inline void markForReset(void) { reset = true; } // setOption(SEG_OPTION_RESET, true)
|
inline void markForReset(void) { reset = true; } // setOption(SEG_OPTION_RESET, true)
|
||||||
|
inline void setUpLeds() { if (!leds) leds = (CRGB*)malloc(sizeof(CRGB)*length()); }
|
||||||
|
|
||||||
// transition functions
|
// transition functions
|
||||||
void startTransition(uint16_t dur); // transition has to start before actual segment values change
|
void startTransition(uint16_t dur); // transition has to start before actual segment values change
|
||||||
|
@ -154,6 +154,8 @@ void IRAM_ATTR Segment::setPixelColorXY(int x, int y, uint32_t col)
|
|||||||
#ifndef WLED_DISABLE_2D
|
#ifndef WLED_DISABLE_2D
|
||||||
if (!strip.isMatrix) return; // not a matrix set-up
|
if (!strip.isMatrix) return; // not a matrix set-up
|
||||||
|
|
||||||
|
if (leds) leds[XY(x,y)] = col;
|
||||||
|
|
||||||
uint8_t _bri_t = currentBri(getOption(SEG_OPTION_ON) ? opacity : 0);
|
uint8_t _bri_t = currentBri(getOption(SEG_OPTION_ON) ? opacity : 0);
|
||||||
if (_bri_t < 255) {
|
if (_bri_t < 255) {
|
||||||
byte r = scale8(R(col), _bri_t);
|
byte r = scale8(R(col), _bri_t);
|
||||||
@ -245,6 +247,7 @@ void Segment::setPixelColorXY(float x, float y, uint32_t col, bool aa)
|
|||||||
// returns RGBW values of pixel
|
// returns RGBW values of pixel
|
||||||
uint32_t Segment::getPixelColorXY(uint16_t x, uint16_t y) {
|
uint32_t Segment::getPixelColorXY(uint16_t x, uint16_t y) {
|
||||||
#ifndef WLED_DISABLE_2D
|
#ifndef WLED_DISABLE_2D
|
||||||
|
if (leds) return RGBW32(leds[XY(x,y)].r, leds[XY(x,y)].g, leds[XY(x,y)].b, 0);
|
||||||
if (getOption(SEG_OPTION_REVERSED) ) x = virtualWidth() - x - 1;
|
if (getOption(SEG_OPTION_REVERSED) ) x = virtualWidth() - x - 1;
|
||||||
if (getOption(SEG_OPTION_REVERSED_Y)) y = virtualHeight() - y - 1;
|
if (getOption(SEG_OPTION_REVERSED_Y)) y = virtualHeight() - y - 1;
|
||||||
if (getOption(SEG_OPTION_TRANSPOSED)) { uint16_t t = x; x = y; y = t; } // swap X & Y if segment transposed
|
if (getOption(SEG_OPTION_TRANSPOSED)) { uint16_t t = x; x = y; y = t; } // swap X & Y if segment transposed
|
||||||
|
@ -86,6 +86,7 @@ Segment::Segment(const Segment &orig) {
|
|||||||
if (orig.name) { name = new char[strlen(orig.name)+1]; if (name) strcpy(name, orig.name); }
|
if (orig.name) { name = new char[strlen(orig.name)+1]; if (name) strcpy(name, orig.name); }
|
||||||
if (orig.data) { if (allocateData(orig._dataLen)) memcpy(data, orig.data, orig._dataLen); }
|
if (orig.data) { if (allocateData(orig._dataLen)) memcpy(data, orig.data, orig._dataLen); }
|
||||||
if (orig._t) { _t = new Transition(orig._t->_dur, orig._t->_briT, orig._t->_cctT, orig._t->_colorT); }
|
if (orig._t) { _t = new Transition(orig._t->_dur, orig._t->_briT, orig._t->_cctT, orig._t->_colorT); }
|
||||||
|
if (orig.leds) { leds = (CRGB*)malloc(sizeof(CRGB)*length()); }
|
||||||
DEBUG_PRINTF(" Original data: %p (%d)\n", orig.data, (int)orig._dataLen);
|
DEBUG_PRINTF(" Original data: %p (%d)\n", orig.data, (int)orig._dataLen);
|
||||||
DEBUG_PRINTF(" Constructed data: %p (%d)\n", data, (int)_dataLen);
|
DEBUG_PRINTF(" Constructed data: %p (%d)\n", data, (int)_dataLen);
|
||||||
}
|
}
|
||||||
@ -98,6 +99,7 @@ Segment::Segment(Segment &&orig) noexcept {
|
|||||||
orig.data = nullptr;
|
orig.data = nullptr;
|
||||||
orig._dataLen = 0;
|
orig._dataLen = 0;
|
||||||
orig._t = nullptr;
|
orig._t = nullptr;
|
||||||
|
orig.leds = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// copy assignment
|
// copy assignment
|
||||||
@ -109,15 +111,18 @@ Segment& Segment::operator= (const Segment &orig) {
|
|||||||
delete[] name;
|
delete[] name;
|
||||||
}
|
}
|
||||||
if (_t) delete _t;
|
if (_t) delete _t;
|
||||||
|
if (leds) free(leds);
|
||||||
deallocateData();
|
deallocateData();
|
||||||
memcpy(this, &orig, sizeof(Segment));
|
memcpy(this, &orig, sizeof(Segment));
|
||||||
name = nullptr;
|
name = nullptr;
|
||||||
data = nullptr;
|
data = nullptr;
|
||||||
_dataLen = 0;
|
_dataLen = 0;
|
||||||
_t = nullptr;
|
_t = nullptr;
|
||||||
|
leds = nullptr;
|
||||||
if (orig.name) { name = new char[strlen(orig.name)+1]; if (name) strcpy(name, orig.name); }
|
if (orig.name) { name = new char[strlen(orig.name)+1]; if (name) strcpy(name, orig.name); }
|
||||||
if (orig.data) { if (allocateData(orig._dataLen)) memcpy(data, orig.data, orig._dataLen); }
|
if (orig.data) { if (allocateData(orig._dataLen)) memcpy(data, orig.data, orig._dataLen); }
|
||||||
if (orig._t) { _t = new Transition(orig._t->_dur, orig._t->_briT, orig._t->_cctT, orig._t->_colorT); }
|
if (orig._t) { _t = new Transition(orig._t->_dur, orig._t->_briT, orig._t->_cctT, orig._t->_colorT); }
|
||||||
|
if (orig.leds) { leds = (CRGB*)malloc(sizeof(CRGB)*length()); if (leds) memcpy(leds, orig.leds, sizeof(CRGB)*length()); }
|
||||||
DEBUG_PRINTF(" Original data: %p (%d)\n", orig.data, (int)orig._dataLen);
|
DEBUG_PRINTF(" Original data: %p (%d)\n", orig.data, (int)orig._dataLen);
|
||||||
DEBUG_PRINTF(" Copied data: %p (%d)\n", data, (int)_dataLen);
|
DEBUG_PRINTF(" Copied data: %p (%d)\n", data, (int)_dataLen);
|
||||||
}
|
}
|
||||||
@ -134,11 +139,13 @@ Segment& Segment::operator= (Segment &&orig) noexcept {
|
|||||||
}
|
}
|
||||||
deallocateData(); // free old runtime data
|
deallocateData(); // free old runtime data
|
||||||
if (_t) delete _t;
|
if (_t) delete _t;
|
||||||
|
if (leds) free(leds);
|
||||||
memcpy(this, &orig, sizeof(Segment));
|
memcpy(this, &orig, sizeof(Segment));
|
||||||
orig.name = nullptr;
|
orig.name = nullptr;
|
||||||
orig.data = nullptr;
|
orig.data = nullptr;
|
||||||
orig._dataLen = 0;
|
orig._dataLen = 0;
|
||||||
orig._t = nullptr;
|
orig._t = nullptr;
|
||||||
|
orig.leds = nullptr;
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@ -182,6 +189,7 @@ void Segment::deallocateData() {
|
|||||||
*/
|
*/
|
||||||
void Segment::resetIfRequired() {
|
void Segment::resetIfRequired() {
|
||||||
if (reset) { // (getOption(SEG_OPTION_RESET))
|
if (reset) { // (getOption(SEG_OPTION_RESET))
|
||||||
|
if (leds) { free(leds); leds = nullptr; DEBUG_PRINTLN(F("Freeing leds.")); }
|
||||||
next_time = 0; step = 0; call = 0; aux0 = 0; aux1 = 0;
|
next_time = 0; step = 0; call = 0; aux0 = 0; aux1 = 0;
|
||||||
reset = false; // setOption(SEG_OPTION_RESET, false);
|
reset = false; // setOption(SEG_OPTION_RESET, false);
|
||||||
}
|
}
|
||||||
@ -442,6 +450,8 @@ void IRAM_ATTR Segment::setPixelColor(int i, uint32_t col)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (leds) leds[i] = col;
|
||||||
|
|
||||||
uint16_t len = length();
|
uint16_t len = length();
|
||||||
uint8_t _bri_t = currentBri(getOption(SEG_OPTION_ON) ? opacity : 0);
|
uint8_t _bri_t = currentBri(getOption(SEG_OPTION_ON) ? opacity : 0);
|
||||||
if (_bri_t < 255) {
|
if (_bri_t < 255) {
|
||||||
@ -532,6 +542,8 @@ uint32_t Segment::getPixelColor(uint16_t i)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (leds) return RGBW32(leds[i].r, leds[i].g, leds[i].b, 0);
|
||||||
|
|
||||||
if (getOption(SEG_OPTION_REVERSED)) i = virtualLength() - i - 1;
|
if (getOption(SEG_OPTION_REVERSED)) i = virtualLength() - i - 1;
|
||||||
i *= groupLength();
|
i *= groupLength();
|
||||||
i += start;
|
i += start;
|
||||||
|
@ -607,9 +607,13 @@ function parseInfo(i) {
|
|||||||
isM = mw>0 && mh>0;
|
isM = mw>0 && mh>0;
|
||||||
if (!isM) {
|
if (!isM) {
|
||||||
gId("filter1D").classList.add("hide");
|
gId("filter1D").classList.add("hide");
|
||||||
gId("filter2D").classList.add("hide");
|
//gId("filter2D").classList.add("hide");
|
||||||
hideModes("2D");
|
hideModes("2D");
|
||||||
}
|
}
|
||||||
|
if (i.noaudio) {
|
||||||
|
gId("filterVol").classList.add("hide");
|
||||||
|
gId("filterFreq").classList.add("hide");
|
||||||
|
}
|
||||||
// if (!i.u || !i.u.AudioReactive) {
|
// if (!i.u || !i.u.AudioReactive) {
|
||||||
//gId("filterVol").classList.add("hide"); hideModes(" ♪"); // hide volume reactive effects
|
//gId("filterVol").classList.add("hide"); hideModes(" ♪"); // hide volume reactive effects
|
||||||
//gId("filterFreq").classList.add("hide"); hideModes(" ♫"); // hide frequency reactive effects
|
//gId("filterFreq").classList.add("hide"); hideModes(" ♫"); // hide frequency reactive effects
|
||||||
@ -2475,7 +2479,11 @@ function getPalettesData(page, callback)
|
|||||||
function hideModes(txt)
|
function hideModes(txt)
|
||||||
{
|
{
|
||||||
for (let e of (gId('fxlist').querySelectorAll('.lstI')||[])) {
|
for (let e of (gId('fxlist').querySelectorAll('.lstI')||[])) {
|
||||||
if (e.querySelector('.lstIname').innerText.indexOf(txt) >= 0) e.classList.add("hide"); //else e.classList.remove("hide");
|
let iT = e.querySelector('.lstIname').innerText;
|
||||||
|
let f = false;
|
||||||
|
if (txt==="2D") f = iT.indexOf("\u25A6") >= 0 && iT.indexOf("\u22EE") < 0; // 2D && !1D
|
||||||
|
else f = iT.indexOf(txt) >= 0;
|
||||||
|
if (f) e.classList.add("hide"); //else e.classList.remove("hide");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2488,7 +2496,7 @@ function search(f,l=null)
|
|||||||
for (i = (l==='pcont'?0:1); i < el.length; i++) {
|
for (i = (l==='pcont'?0:1); i < el.length; i++) {
|
||||||
var it = el[i];
|
var it = el[i];
|
||||||
var itT = it.querySelector('.lstIname').innerText.toUpperCase();
|
var itT = it.querySelector('.lstIname').innerText.toUpperCase();
|
||||||
it.style.display = (itT.indexOf(f.value.toUpperCase())<0 || (!isM && l==='fxlist' && itT.indexOf("2D")>=0)) ? 'none' : '';
|
it.style.display = (itT.indexOf(f.value.toUpperCase())<0) ? 'none' : '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1649
wled00/html_ui.h
1649
wled00/html_ui.h
File diff suppressed because it is too large
Load Diff
@ -627,6 +627,10 @@ void serializeInfo(JsonObject root)
|
|||||||
leds[F("wv")] = totalLC & 0x02; // deprecated, true if white slider should be displayed for any segment
|
leds[F("wv")] = totalLC & 0x02; // deprecated, true if white slider should be displayed for any segment
|
||||||
leds["cct"] = totalLC & 0x04; // deprecated, use info.leds.lc
|
leds["cct"] = totalLC & 0x04; // deprecated, use info.leds.lc
|
||||||
|
|
||||||
|
#ifdef WLED_NO_AUDIO
|
||||||
|
root[F("noaudio")] = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
root[F("str")] = syncToggleReceive;
|
root[F("str")] = syncToggleReceive;
|
||||||
|
|
||||||
root[F("name")] = serverDescription;
|
root[F("name")] = serverDescription;
|
||||||
|
@ -133,6 +133,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_AUDIOREACTIVE
|
#ifdef USERMOD_AUDIOREACTIVE
|
||||||
|
#ifdef WLED_NO_AUDIO
|
||||||
|
#error Incompatible options: WLED_NO_AUDIO and USERMOD_AUDIOREACTIVE
|
||||||
|
#endif
|
||||||
#include "../usermods/audioreactive/audio_reactive.h"
|
#include "../usermods/audioreactive/audio_reactive.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -257,6 +260,9 @@ void registerUsermods()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_AUDIOREACTIVE
|
#ifdef USERMOD_AUDIOREACTIVE
|
||||||
|
#ifdef WLED_NO_AUDIO
|
||||||
|
#error Incompatible options: WLED_NO_AUDIO and USERMOD_AUDIOREACTIVE
|
||||||
|
#endif
|
||||||
usermods.add(new AudioReactive());
|
usermods.add(new AudioReactive());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -383,6 +383,7 @@ uint16_t crc16(const unsigned char* data_p, size_t length) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef WLED_NO_AUDIO
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// Begin simulateSound (to enable audio enhanced effects to display something)
|
// Begin simulateSound (to enable audio enhanced effects to display something)
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
@ -532,3 +533,4 @@ um_data_t* simulateSound(uint8_t simulationId)
|
|||||||
|
|
||||||
return um_data;
|
return um_data;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// version code in format yymmddb (b = daily build)
|
// version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 2207303
|
#define VERSION 2208011
|
||||||
|
|
||||||
//uncomment this if you have a "my_config.h" file you'd like to use
|
//uncomment this if you have a "my_config.h" file you'd like to use
|
||||||
//#define WLED_USE_MY_CONFIG
|
//#define WLED_USE_MY_CONFIG
|
||||||
|
Loading…
Reference in New Issue
Block a user