diff --git a/wled00/FX.h b/wled00/FX.h index 80abca559..c186fdeb2 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -660,8 +660,6 @@ class WS2812FX { deserializeMap(uint8_t n=0); bool - isRgbw = false, - isOffRefreshRequred = false, //periodic refresh is required for the strip to remain off. gammaCorrectBri = false, gammaCorrectCol = true, applyToAllSelected = true, @@ -864,6 +862,8 @@ class WS2812FX { uint16_t _cumulativeFps = 2; bool + _isOffRefreshRequired = false, //periodic refresh is required for the strip to remain off. + _hasWhiteChannel = false, _triggered; mode_ptr _mode[MODE_COUNT]; // SRAM footprint: 4 bytes per element @@ -925,6 +925,10 @@ class WS2812FX { uint16_t realPixelIndex(uint16_t i), transitionProgress(uint8_t tNr); + + public: + inline bool hasWhiteChannel(void) {return _hasWhiteChannel;} + inline bool isOffRefreshRequired(void) {return _isOffRefreshRequired;} }; //10 names per line diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index d091dbdb5..42a183a7c 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -68,7 +68,7 @@ void WS2812FX::finalizeInit(void) { RESET_RUNTIME; - isRgbw = isOffRefreshRequred = false; + _hasWhiteChannel = _isOffRefreshRequired = false; //if busses failed to load, add default (fresh install, FS issue, ...) if (busses.getNumBusses() == 0) { @@ -93,9 +93,9 @@ void WS2812FX::finalizeInit(void) if (bus == nullptr) continue; if (bus->getStart() + bus->getLength() > MAX_LEDS) break; //RGBW mode is enabled if at least one of the strips is RGBW - isRgbw |= bus->isRgbw(); + _hasWhiteChannel |= bus->isRgbw(); //refresh is required to remain off if at least one of the strips requires the refresh. - isOffRefreshRequred |= bus->isOffRefreshRequired(); + _isOffRefreshRequired |= bus->isOffRefreshRequired(); uint16_t busEnd = bus->getStart() + bus->getLength(); if (busEnd > _length) _length = busEnd; #ifdef ESP8266 diff --git a/wled00/alexa.cpp b/wled00/alexa.cpp index 097ef2ac7..1f85f7ab1 100644 --- a/wled00/alexa.cpp +++ b/wled00/alexa.cpp @@ -83,7 +83,7 @@ void onAlexaChange(EspalexaDevice* dev) seg.setCCT(k, segid); if (seg.cct != cctPrev) effectChanged = true; //send UDP col[0]= 0; col[1]= 0; col[2]= 0; col[3]= 255; - } else if (strip.isRgbw) { + } else if (strip.hasWhiteChannel()) { switch (ct) { //these values empirically look good on RGBW case 199: col[0]=255; col[1]=255; col[2]=255; col[3]=255; break; case 234: col[0]=127; col[1]=127; col[2]=127; col[3]=255; break; diff --git a/wled00/button.cpp b/wled00/button.cpp index 3dd616132..b55df8d0b 100644 --- a/wled00/button.cpp +++ b/wled00/button.cpp @@ -302,7 +302,7 @@ void handleIO() // turn off built-in LED if strip is turned off // this will break digital bus so will need to be reinitialised on On PinOwner ledPinOwner = pinManager.getPinOwner(LED_BUILTIN); - if (!strip.isOffRefreshRequred && (ledPinOwner == PinOwner::None || ledPinOwner == PinOwner::BusDigital)) { + if (!strip.isOffRefreshRequired() && (ledPinOwner == PinOwner::None || ledPinOwner == PinOwner::BusDigital)) { pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); } diff --git a/wled00/ir.cpp b/wled00/ir.cpp index 79ebdbe4e..321b72bc2 100644 --- a/wled00/ir.cpp +++ b/wled00/ir.cpp @@ -363,20 +363,20 @@ void decodeIR40(uint32_t code) case IR40_MAGENTA : colorFromUint24(COLOR_MAGENTA); break; case IR40_PINK : colorFromUint24(COLOR_PINK); break; case IR40_WARMWHITE2 : { - if (strip.isRgbw) { colorFromUint32(COLOR2_WARMWHITE2); effectCurrent = 0; } - else colorFromUint24(COLOR_WARMWHITE2); } break; + if (strip.hasWhiteChannel()) {colorFromUint32(COLOR2_WARMWHITE2); effectCurrent = 0; } + else colorFromUint24(COLOR_WARMWHITE2); } break; case IR40_WARMWHITE : { - if (strip.isRgbw) { colorFromUint32(COLOR2_WARMWHITE); effectCurrent = 0; } - else colorFromUint24(COLOR_WARMWHITE); } break; + if (strip.hasWhiteChannel()) {colorFromUint32(COLOR2_WARMWHITE); effectCurrent = 0; } + else colorFromUint24(COLOR_WARMWHITE); } break; case IR40_WHITE : { - if (strip.isRgbw) { colorFromUint32(COLOR2_NEUTRALWHITE); effectCurrent = 0; } - else colorFromUint24(COLOR_NEUTRALWHITE); } break; + if (strip.hasWhiteChannel()) {colorFromUint32(COLOR2_NEUTRALWHITE); effectCurrent = 0; } + else colorFromUint24(COLOR_NEUTRALWHITE); } break; case IR40_COLDWHITE : { - if (strip.isRgbw) { colorFromUint32(COLOR2_COLDWHITE); effectCurrent = 0; } - else colorFromUint24(COLOR_COLDWHITE); } break; + if (strip.hasWhiteChannel()) {colorFromUint32(COLOR2_COLDWHITE); effectCurrent = 0; } + else colorFromUint24(COLOR_COLDWHITE); } break; case IR40_COLDWHITE2 : { - if (strip.isRgbw) { colorFromUint32(COLOR2_COLDWHITE2); effectCurrent = 0; } - else colorFromUint24(COLOR_COLDWHITE2); } break; + if (strip.hasWhiteChannel()) {colorFromUint32(COLOR2_COLDWHITE2); effectCurrent = 0; } + else colorFromUint24(COLOR_COLDWHITE2); } break; case IR40_WPLUS : relativeChangeWhite(10); break; case IR40_WMINUS : relativeChangeWhite(-10, 5); break; case IR40_WOFF : whiteLast = col[3]; col[3] = 0; break; @@ -420,22 +420,22 @@ void decodeIR44(uint32_t code) case IR44_MAGENTA : colorFromUint24(COLOR_MAGENTA); break; case IR44_PINK : colorFromUint24(COLOR_PINK); break; case IR44_WHITE : { - if (strip.isRgbw) { + if (strip.hasWhiteChannel()) { if (col[3] > 0) col[3] = 0; else { colorFromUint32(COLOR2_NEUTRALWHITE); effectCurrent = 0; } } else colorFromUint24(COLOR_NEUTRALWHITE); } break; case IR44_WARMWHITE2 : { - if (strip.isRgbw) { colorFromUint32(COLOR2_WARMWHITE2); effectCurrent = 0; } - else colorFromUint24(COLOR_WARMWHITE2); } break; + if (strip.hasWhiteChannel()) {colorFromUint32(COLOR2_WARMWHITE2); effectCurrent = 0; } + else colorFromUint24(COLOR_WARMWHITE2); } break; case IR44_WARMWHITE : { - if (strip.isRgbw) { colorFromUint32(COLOR2_WARMWHITE); effectCurrent = 0; } - else colorFromUint24(COLOR_WARMWHITE); } break; + if (strip.hasWhiteChannel()) {colorFromUint32(COLOR2_WARMWHITE); effectCurrent = 0; } + else colorFromUint24(COLOR_WARMWHITE); } break; case IR44_COLDWHITE : { - if (strip.isRgbw) { colorFromUint32(COLOR2_COLDWHITE); effectCurrent = 0; } - else colorFromUint24(COLOR_COLDWHITE); } break; + if (strip.hasWhiteChannel()) {colorFromUint32(COLOR2_COLDWHITE); effectCurrent = 0; } + else colorFromUint24(COLOR_COLDWHITE); } break; case IR44_COLDWHITE2 : { - if (strip.isRgbw) { colorFromUint32(COLOR2_COLDWHITE2); effectCurrent = 0; } - else colorFromUint24(COLOR_COLDWHITE2); } break; + if (strip.hasWhiteChannel()) {colorFromUint32(COLOR2_COLDWHITE2); effectCurrent = 0; } + else colorFromUint24(COLOR_COLDWHITE2); } break; case IR44_REDPLUS : relativeChange(&effectCurrent, 1, 0, MODE_COUNT); break; case IR44_REDMINUS : relativeChange(&effectCurrent, -1, 0); break; case IR44_GREENPLUS : relativeChange(&effectPalette, 1, 0, strip.getPaletteCount() -1); break; diff --git a/wled00/json.cpp b/wled00/json.cpp index eb3c092c7..e7453612c 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -418,7 +418,7 @@ void serializeSegment(JsonObject& root, WS2812FX::Segment& seg, byte id, bool fo // to conserve RAM we will serialize the col array manually // this will reduce RAM footprint from ~300 bytes to 84 bytes per segment char colstr[70]; colstr[0] = '['; colstr[1] = '\0'; //max len 68 (5 chan, all 255) - const char *format = strip.isRgbw ? PSTR("[%u,%u,%u,%u]") : PSTR("[%u,%u,%u]"); + const char *format = strip.hasWhiteChannel() ? PSTR("[%u,%u,%u,%u]") : PSTR("[%u,%u,%u]"); for (uint8_t i = 0; i < 3; i++) { byte segcol[4]; byte* c = segcol; @@ -524,13 +524,13 @@ void serializeInfo(JsonObject root) JsonObject leds = root.createNestedObject("leds"); leds[F("count")] = strip.getLengthTotal(); - leds[F("rgbw")] = strip.isRgbw; + leds[F("rgbw")] = strip.hasWhiteChannel(); leds[F("wv")] = false; leds["cct"] = correctWB || strip.hasCCTBus(); switch (Bus::getAutoWhiteMode()) { case RGBW_MODE_MANUAL_ONLY: case RGBW_MODE_DUAL: - if (strip.isRgbw) leds[F("wv")] = true; + if (strip.hasWhiteChannel()) leds[F("wv")] = true; break; } diff --git a/wled00/wled.cpp b/wled00/wled.cpp index f273bfed3..acc96d537 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -177,7 +177,7 @@ void WLED::loop() yield(); - if (!offMode || strip.isOffRefreshRequred) + if (!offMode || strip.isOffRefreshRequired()) strip.service(); #ifdef ESP8266 else if (!noWifiSleep) diff --git a/wled00/wled_eeprom.cpp b/wled00/wled_eeprom.cpp index dd9a5c95b..0596351d3 100644 --- a/wled00/wled_eeprom.cpp +++ b/wled00/wled_eeprom.cpp @@ -414,7 +414,7 @@ void deEEP() { JsonArray colarr = segObj.createNestedArray("col"); - byte numChannels = (strip.isRgbw)? 4:3; + byte numChannels = (strip.hasWhiteChannel())? 4:3; for (uint8_t k = 0; k < 3; k++) //k=0 primary (i+2) k=1 secondary (i+6) k=2 tertiary color (i+12) { diff --git a/wled00/xml.cpp b/wled00/xml.cpp index ed32a0538..d126b3beb 100644 --- a/wled00/xml.cpp +++ b/wled00/xml.cpp @@ -52,7 +52,7 @@ void XML_response(AsyncWebServerRequest *request, char* dest) oappend(SET_F("")); oappendi(effectPalette); oappend(SET_F("")); - if (strip.isRgbw) { + if (strip.hasWhiteChannel()) { oappendi(col[3]); } else { oappend("-1");