Disable global buffer on ESP8266 by default
Remove global dependency from Bus class and subclasses Remove timings
This commit is contained in:
parent
ad825b80b0
commit
59a144baed
@ -1219,9 +1219,11 @@ uint8_t WS2812FX::estimateCurrentAndLimitBri() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void WS2812FX::show(void) {
|
void WS2812FX::show(void) {
|
||||||
|
#ifdef WLED_DEBUG
|
||||||
static unsigned long sumMicros = 0, sumCurrent = 0;
|
static unsigned long sumMicros = 0, sumCurrent = 0;
|
||||||
static size_t calls = 0;
|
static size_t calls = 0;
|
||||||
unsigned long microsStart = micros();
|
unsigned long microsStart = micros();
|
||||||
|
#endif
|
||||||
|
|
||||||
// avoid race condition, caputre _callback value
|
// avoid race condition, caputre _callback value
|
||||||
show_callback callback = _callback;
|
show_callback callback = _callback;
|
||||||
@ -1229,7 +1231,9 @@ void WS2812FX::show(void) {
|
|||||||
|
|
||||||
uint8_t busBrightness = estimateCurrentAndLimitBri();
|
uint8_t busBrightness = estimateCurrentAndLimitBri();
|
||||||
busses.setBrightness(busBrightness);
|
busses.setBrightness(busBrightness);
|
||||||
|
#ifdef WLED_DEBUG
|
||||||
sumCurrent += micros() - microsStart;
|
sumCurrent += micros() - microsStart;
|
||||||
|
#endif
|
||||||
|
|
||||||
// some buses send asynchronously and this method will return before
|
// some buses send asynchronously and this method will return before
|
||||||
// all of the data has been sent.
|
// all of the data has been sent.
|
||||||
@ -1242,12 +1246,14 @@ void WS2812FX::show(void) {
|
|||||||
_cumulativeFps = (3 * _cumulativeFps + fpsCurr) >> 2;
|
_cumulativeFps = (3 * _cumulativeFps + fpsCurr) >> 2;
|
||||||
_lastShow = now;
|
_lastShow = now;
|
||||||
|
|
||||||
|
#ifdef WLED_DEBUG
|
||||||
sumMicros += micros() - microsStart;
|
sumMicros += micros() - microsStart;
|
||||||
if (++calls == 100) {
|
if (++calls == 100) {
|
||||||
DEBUG_PRINTF("show calls: %d micros: %lu avg: %lu (current: %lu avg: %lu)\n", calls, sumMicros, sumMicros/calls, sumCurrent, sumCurrent/calls);
|
DEBUG_PRINTF("show calls: %d micros: %lu avg: %lu (current: %lu avg: %lu)\n", calls, sumMicros, sumMicros/calls, sumCurrent, sumCurrent/calls);
|
||||||
sumMicros = sumCurrent = 0;
|
sumMicros = sumCurrent = 0;
|
||||||
calls = 0;
|
calls = 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -116,7 +116,8 @@ BusDigital::BusDigital(BusConfig &bc, uint8_t nr, const ColorOrderMap &com) : Bu
|
|||||||
_colorOrder = bc.colorOrder;
|
_colorOrder = bc.colorOrder;
|
||||||
_iType = PolyBus::getI(bc.type, _pins, nr);
|
_iType = PolyBus::getI(bc.type, _pins, nr);
|
||||||
if (_iType == I_NONE) return;
|
if (_iType == I_NONE) return;
|
||||||
if (useGlobalLedBuffer && !allocData(_len * (Bus::hasWhite(_type) + 3*Bus::hasRGB(_type)))) return; //warning: hardcoded channel count
|
if (bc.doubleBuffer && !allocData(_len * (Bus::hasWhite(_type) + 3*Bus::hasRGB(_type)))) return; //warning: hardcoded channel count
|
||||||
|
buffering = bc.doubleBuffer;
|
||||||
uint16_t lenToCreate = _len;
|
uint16_t lenToCreate = _len;
|
||||||
if (bc.type == TYPE_WS2812_1CH_X3) lenToCreate = NUM_ICS_WS2812_1CH_3X(_len); // only needs a third of "RGB" LEDs for NeoPixelBus
|
if (bc.type == TYPE_WS2812_1CH_X3) lenToCreate = NUM_ICS_WS2812_1CH_3X(_len); // only needs a third of "RGB" LEDs for NeoPixelBus
|
||||||
_busPtr = PolyBus::create(_iType, _pins, lenToCreate + _skip, nr, _frequencykHz);
|
_busPtr = PolyBus::create(_iType, _pins, lenToCreate + _skip, nr, _frequencykHz);
|
||||||
@ -126,11 +127,13 @@ BusDigital::BusDigital(BusConfig &bc, uint8_t nr, const ColorOrderMap &com) : Bu
|
|||||||
|
|
||||||
void BusDigital::show() {
|
void BusDigital::show() {
|
||||||
if (!_valid) return;
|
if (!_valid) return;
|
||||||
|
#ifdef WLED_DEBUG
|
||||||
static unsigned long sumMicros = 0;
|
static unsigned long sumMicros = 0;
|
||||||
static size_t calls = 0;
|
static size_t calls = 0;
|
||||||
unsigned long microsStart = micros();
|
unsigned long microsStart = micros();
|
||||||
|
#endif
|
||||||
PolyBus::setBrightness(_busPtr, _iType, _bri);
|
PolyBus::setBrightness(_busPtr, _iType, _bri);
|
||||||
if (useGlobalLedBuffer) {
|
if (buffering) { // should be _data != nullptr, but that causes ~20% FPS drop
|
||||||
size_t channels = Bus::hasWhite(_type) + 3*Bus::hasRGB(_type);
|
size_t channels = Bus::hasWhite(_type) + 3*Bus::hasRGB(_type);
|
||||||
for (size_t i=0; i<_len; i++) {
|
for (size_t i=0; i<_len; i++) {
|
||||||
size_t offset = i*channels;
|
size_t offset = i*channels;
|
||||||
@ -155,12 +158,14 @@ void BusDigital::show() {
|
|||||||
}
|
}
|
||||||
PolyBus::show(_busPtr, _iType);
|
PolyBus::show(_busPtr, _iType);
|
||||||
PolyBus::setBrightness(_busPtr, _iType, 255); // restore full brightness at bus level (setting unscaled pixel color)
|
PolyBus::setBrightness(_busPtr, _iType, 255); // restore full brightness at bus level (setting unscaled pixel color)
|
||||||
|
#ifdef WLED_DEBUG
|
||||||
sumMicros += micros() - microsStart;
|
sumMicros += micros() - microsStart;
|
||||||
if (++calls == 100) {
|
if (++calls == 100) {
|
||||||
DEBUG_PRINTF("Bus calls: %d micros: %lu avg: %lu\n", calls, sumMicros, sumMicros/calls);
|
DEBUG_PRINTF("Bus calls: %d micros: %lu avg: %lu\n", calls, sumMicros, sumMicros/calls);
|
||||||
sumMicros = 0;
|
sumMicros = 0;
|
||||||
calls = 0;
|
calls = 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BusDigital::canShow() {
|
bool BusDigital::canShow() {
|
||||||
@ -191,7 +196,7 @@ void IRAM_ATTR BusDigital::setPixelColor(uint16_t pix, uint32_t c) {
|
|||||||
if (!_valid) return;
|
if (!_valid) return;
|
||||||
if (Bus::hasWhite(_type)) c = autoWhiteCalc(c);
|
if (Bus::hasWhite(_type)) c = autoWhiteCalc(c);
|
||||||
if (_cct >= 1900) c = colorBalanceFromKelvin(_cct, c); //color correction from CCT
|
if (_cct >= 1900) c = colorBalanceFromKelvin(_cct, c); //color correction from CCT
|
||||||
if (useGlobalLedBuffer) {
|
if (buffering) { // should be _data != nullptr, but that causes ~20% FPS drop
|
||||||
size_t channels = Bus::hasWhite(_type) + 3*Bus::hasRGB(_type);
|
size_t channels = Bus::hasWhite(_type) + 3*Bus::hasRGB(_type);
|
||||||
size_t offset = pix*channels;
|
size_t offset = pix*channels;
|
||||||
if (Bus::hasRGB(_type)) {
|
if (Bus::hasRGB(_type)) {
|
||||||
@ -220,7 +225,7 @@ void IRAM_ATTR BusDigital::setPixelColor(uint16_t pix, uint32_t c) {
|
|||||||
|
|
||||||
uint32_t BusDigital::getPixelColor(uint16_t pix) {
|
uint32_t BusDigital::getPixelColor(uint16_t pix) {
|
||||||
if (!_valid) return 0;
|
if (!_valid) return 0;
|
||||||
if (useGlobalLedBuffer) {
|
if (buffering) { // should be _data != nullptr, but that causes ~20% FPS drop
|
||||||
size_t channels = Bus::hasWhite(_type) + 3*Bus::hasRGB(_type);
|
size_t channels = Bus::hasWhite(_type) + 3*Bus::hasRGB(_type);
|
||||||
size_t offset = pix*channels;
|
size_t offset = pix*channels;
|
||||||
uint32_t c;
|
uint32_t c;
|
||||||
@ -272,7 +277,7 @@ void BusDigital::cleanup() {
|
|||||||
_iType = I_NONE;
|
_iType = I_NONE;
|
||||||
_valid = false;
|
_valid = false;
|
||||||
_busPtr = nullptr;
|
_busPtr = nullptr;
|
||||||
if (useGlobalLedBuffer) freeData();
|
if (_data != nullptr) freeData();
|
||||||
pinManager.deallocatePin(_pins[1], PinOwner::BusDigital);
|
pinManager.deallocatePin(_pins[1], PinOwner::BusDigital);
|
||||||
pinManager.deallocatePin(_pins[0], PinOwner::BusDigital);
|
pinManager.deallocatePin(_pins[0], PinOwner::BusDigital);
|
||||||
}
|
}
|
||||||
|
@ -34,10 +34,11 @@ struct BusConfig {
|
|||||||
uint8_t autoWhite;
|
uint8_t autoWhite;
|
||||||
uint8_t pins[5] = {LEDPIN, 255, 255, 255, 255};
|
uint8_t pins[5] = {LEDPIN, 255, 255, 255, 255};
|
||||||
uint16_t frequency;
|
uint16_t frequency;
|
||||||
BusConfig(uint8_t busType, uint8_t* ppins, uint16_t pstart, uint16_t len = 1, uint8_t pcolorOrder = COL_ORDER_GRB, bool rev = false, uint8_t skip = 0, byte aw=RGBW_MODE_MANUAL_ONLY, uint16_t clock_kHz=0U) {
|
bool doubleBuffer;
|
||||||
|
BusConfig(uint8_t busType, uint8_t* ppins, uint16_t pstart, uint16_t len = 1, uint8_t pcolorOrder = COL_ORDER_GRB, bool rev = false, uint8_t skip = 0, byte aw=RGBW_MODE_MANUAL_ONLY, uint16_t clock_kHz=0U, bool dblBfr=false) {
|
||||||
refreshReq = (bool) GET_BIT(busType,7);
|
refreshReq = (bool) GET_BIT(busType,7);
|
||||||
type = busType & 0x7F; // bit 7 may be/is hacked to include refresh info (1=refresh in off state, 0=no refresh)
|
type = busType & 0x7F; // bit 7 may be/is hacked to include refresh info (1=refresh in off state, 0=no refresh)
|
||||||
count = len; start = pstart; colorOrder = pcolorOrder; reversed = rev; skipAmount = skip; autoWhite = aw; frequency = clock_kHz;
|
count = len; start = pstart; colorOrder = pcolorOrder; reversed = rev; skipAmount = skip; autoWhite = aw; frequency = clock_kHz; doubleBuffer = dblBfr;
|
||||||
uint8_t nPins = 1;
|
uint8_t nPins = 1;
|
||||||
if (type >= TYPE_NET_DDP_RGB && type < 96) nPins = 4; //virtual network bus. 4 "pins" store IP address
|
if (type >= TYPE_NET_DDP_RGB && type < 96) nPins = 4; //virtual network bus. 4 "pins" store IP address
|
||||||
else if (type > 47) nPins = 2;
|
else if (type > 47) nPins = 2;
|
||||||
@ -181,7 +182,7 @@ class Bus {
|
|||||||
|
|
||||||
uint32_t autoWhiteCalc(uint32_t c);
|
uint32_t autoWhiteCalc(uint32_t c);
|
||||||
uint8_t *allocData(size_t size = 1);
|
uint8_t *allocData(size_t size = 1);
|
||||||
void freeData() { if (_data) free(_data); _data = nullptr; }
|
void freeData() { if (_data != nullptr) free(_data); _data = nullptr; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -235,6 +236,7 @@ class BusDigital : public Bus {
|
|||||||
uint16_t _frequencykHz = 0U;
|
uint16_t _frequencykHz = 0U;
|
||||||
void * _busPtr = nullptr;
|
void * _busPtr = nullptr;
|
||||||
const ColorOrderMap &_colorOrderMap;
|
const ColorOrderMap &_colorOrderMap;
|
||||||
|
bool buffering = false; // temporary until we figure out why comparison "_data != nullptr" causes severe FPS drop
|
||||||
|
|
||||||
inline uint32_t restoreColorLossy(uint32_t c, uint_fast8_t _restaurationBri) {
|
inline uint32_t restoreColorLossy(uint32_t c, uint_fast8_t _restaurationBri) {
|
||||||
if (_bri == 255) return c;
|
if (_bri == 255) return c;
|
||||||
|
@ -161,7 +161,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
|
|||||||
ledType |= refresh << 7; // hack bit 7 to indicate strip requires off refresh
|
ledType |= refresh << 7; // hack bit 7 to indicate strip requires off refresh
|
||||||
uint8_t AWmode = elm[F("rgbwm")] | autoWhiteMode;
|
uint8_t AWmode = elm[F("rgbwm")] | autoWhiteMode;
|
||||||
if (fromFS) {
|
if (fromFS) {
|
||||||
BusConfig bc = BusConfig(ledType, pins, start, length, colorOrder, reversed, skipFirst, AWmode, freqkHz);
|
BusConfig bc = BusConfig(ledType, pins, start, length, colorOrder, reversed, skipFirst, AWmode, freqkHz, useGlobalLedBuffer);
|
||||||
mem += BusManager::memUsage(bc);
|
mem += BusManager::memUsage(bc);
|
||||||
if (useGlobalLedBuffer && start + length > maxlen) {
|
if (useGlobalLedBuffer && start + length > maxlen) {
|
||||||
maxlen = start + length;
|
maxlen = start + length;
|
||||||
@ -170,7 +170,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
|
|||||||
if (mem + globalBufMem <= MAX_LED_MEMORY) if (busses.add(bc) == -1) break; // finalization will be done in WLED::beginStrip()
|
if (mem + globalBufMem <= MAX_LED_MEMORY) if (busses.add(bc) == -1) break; // finalization will be done in WLED::beginStrip()
|
||||||
} else {
|
} else {
|
||||||
if (busConfigs[s] != nullptr) delete busConfigs[s];
|
if (busConfigs[s] != nullptr) delete busConfigs[s];
|
||||||
busConfigs[s] = new BusConfig(ledType, pins, start, length, colorOrder, reversed, skipFirst, AWmode);
|
busConfigs[s] = new BusConfig(ledType, pins, start, length, colorOrder, reversed, skipFirst, AWmode, freqkHz, useGlobalLedBuffer);
|
||||||
busesChanged = true;
|
busesChanged = true;
|
||||||
}
|
}
|
||||||
s++;
|
s++;
|
||||||
|
@ -153,7 +153,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
|||||||
// actual finalization is done in WLED::loop() (removing old busses and adding new)
|
// actual finalization is done in WLED::loop() (removing old busses and adding new)
|
||||||
// this may happen even before this loop is finished so we do "doInitBusses" after the loop
|
// this may happen even before this loop is finished so we do "doInitBusses" after the loop
|
||||||
if (busConfigs[s] != nullptr) delete busConfigs[s];
|
if (busConfigs[s] != nullptr) delete busConfigs[s];
|
||||||
busConfigs[s] = new BusConfig(type, pins, start, length, colorOrder | (channelSwap<<4), request->hasArg(cv), skip, awmode, freqHz);
|
busConfigs[s] = new BusConfig(type, pins, start, length, colorOrder | (channelSwap<<4), request->hasArg(cv), skip, awmode, freqHz, useGlobalLedBuffer);
|
||||||
busesChanged = true;
|
busesChanged = true;
|
||||||
}
|
}
|
||||||
//doInitBusses = busesChanged; // we will do that below to ensure all input data is processed
|
//doInitBusses = busesChanged; // we will do that below to ensure all input data is processed
|
||||||
|
@ -35,19 +35,12 @@ void WLED::reset()
|
|||||||
void WLED::loop()
|
void WLED::loop()
|
||||||
{
|
{
|
||||||
#ifdef WLED_DEBUG
|
#ifdef WLED_DEBUG
|
||||||
static unsigned serviceCount = 0;
|
|
||||||
static unsigned long maxUsermodMillis = 0;
|
static unsigned long maxUsermodMillis = 0;
|
||||||
static size_t avgUsermodMillis = 0;
|
static size_t avgUsermodMillis = 0;
|
||||||
static unsigned long maxStripMillis = 0;
|
static unsigned long maxStripMillis = 0;
|
||||||
static size_t avgStripMillis = 0;
|
static size_t avgStripMillis = 0;
|
||||||
static size_t avgHandlingMillis = 0;
|
|
||||||
static size_t avgHandling2Millis = 0;
|
|
||||||
static size_t avgHandling3Millis = 0;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WLED_DEBUG
|
|
||||||
unsigned long handlingMillis = millis();
|
|
||||||
#endif
|
|
||||||
handleTime();
|
handleTime();
|
||||||
#ifndef WLED_DISABLE_INFRARED
|
#ifndef WLED_DISABLE_INFRARED
|
||||||
handleIR(); // 2nd call to function needed for ESP32 to return valid results -- should be good for ESP8266, too
|
handleIR(); // 2nd call to function needed for ESP32 to return valid results -- should be good for ESP8266, too
|
||||||
@ -59,10 +52,6 @@ void WLED::loop()
|
|||||||
handleTransitions();
|
handleTransitions();
|
||||||
#ifdef WLED_ENABLE_DMX
|
#ifdef WLED_ENABLE_DMX
|
||||||
handleDMX();
|
handleDMX();
|
||||||
#endif
|
|
||||||
#ifdef WLED_DEBUG
|
|
||||||
handlingMillis = millis() - handlingMillis;
|
|
||||||
avgHandlingMillis += handlingMillis;
|
|
||||||
#endif
|
#endif
|
||||||
userLoop();
|
userLoop();
|
||||||
|
|
||||||
@ -76,9 +65,6 @@ void WLED::loop()
|
|||||||
if (usermodMillis > maxUsermodMillis) maxUsermodMillis = usermodMillis;
|
if (usermodMillis > maxUsermodMillis) maxUsermodMillis = usermodMillis;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WLED_DEBUG
|
|
||||||
unsigned long handling2Millis = millis();
|
|
||||||
#endif
|
|
||||||
yield();
|
yield();
|
||||||
handleIO();
|
handleIO();
|
||||||
#ifndef WLED_DISABLE_INFRARED
|
#ifndef WLED_DISABLE_INFRARED
|
||||||
@ -87,10 +73,6 @@ void WLED::loop()
|
|||||||
#ifndef WLED_DISABLE_ALEXA
|
#ifndef WLED_DISABLE_ALEXA
|
||||||
handleAlexa();
|
handleAlexa();
|
||||||
#endif
|
#endif
|
||||||
#ifdef WLED_DEBUG
|
|
||||||
handling2Millis = millis() - handling2Millis;
|
|
||||||
avgHandling2Millis += handling2Millis;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (doCloseFile) {
|
if (doCloseFile) {
|
||||||
closeFile();
|
closeFile();
|
||||||
@ -195,16 +177,9 @@ void WLED::loop()
|
|||||||
yield();
|
yield();
|
||||||
if (doSerializeConfig) serializeConfig();
|
if (doSerializeConfig) serializeConfig();
|
||||||
|
|
||||||
#ifdef WLED_DEBUG
|
|
||||||
unsigned long handling3Millis = millis();
|
|
||||||
#endif
|
|
||||||
yield();
|
yield();
|
||||||
handleWs();
|
handleWs();
|
||||||
handleStatusLED();
|
handleStatusLED();
|
||||||
#ifdef WLED_DEBUG
|
|
||||||
handling3Millis = millis() - handling3Millis;
|
|
||||||
avgHandling3Millis += handling3Millis;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// DEBUG serial logging (every 30s)
|
// DEBUG serial logging (every 30s)
|
||||||
#ifdef WLED_DEBUG
|
#ifdef WLED_DEBUG
|
||||||
@ -232,9 +207,6 @@ void WLED::loop()
|
|||||||
DEBUG_PRINT(F("Loops/sec: ")); DEBUG_PRINTLN(loops / 30);
|
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("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);
|
DEBUG_PRINT(F("Strip time[ms]: ")); DEBUG_PRINT(avgStripMillis/loops); DEBUG_PRINT("/"); DEBUG_PRINTLN(maxStripMillis);
|
||||||
DEBUG_PRINT(F("Handling 1 time[ms]: ")); DEBUG_PRINTLN(avgHandlingMillis/loops);
|
|
||||||
DEBUG_PRINT(F("Handling 2 time[ms]: ")); DEBUG_PRINTLN(avgHandling2Millis/loops);
|
|
||||||
DEBUG_PRINT(F("Handling 3 time[ms]: ")); DEBUG_PRINTLN(avgHandling3Millis/loops);
|
|
||||||
}
|
}
|
||||||
strip.printSize();
|
strip.printSize();
|
||||||
loops = 0;
|
loops = 0;
|
||||||
@ -242,9 +214,6 @@ void WLED::loop()
|
|||||||
maxStripMillis = 0;
|
maxStripMillis = 0;
|
||||||
avgUsermodMillis = 0;
|
avgUsermodMillis = 0;
|
||||||
avgStripMillis = 0;
|
avgStripMillis = 0;
|
||||||
avgHandlingMillis = 0;
|
|
||||||
avgHandling2Millis = 0;
|
|
||||||
avgHandling3Millis = 0;
|
|
||||||
debugTime = millis();
|
debugTime = millis();
|
||||||
}
|
}
|
||||||
loops++;
|
loops++;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// version code in format yymmddb (b = daily build)
|
// version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 2307020
|
#define VERSION 2307050
|
||||||
|
|
||||||
//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
|
||||||
@ -332,7 +332,11 @@ WLED_GLOBAL byte bootPreset _INIT(0); // save preset to load
|
|||||||
//if false, only one segment spanning the total LEDs is created,
|
//if false, only one segment spanning the total LEDs is created,
|
||||||
//but not on LED settings save if there is more than one segment currently
|
//but not on LED settings save if there is more than one segment currently
|
||||||
WLED_GLOBAL bool autoSegments _INIT(false);
|
WLED_GLOBAL bool autoSegments _INIT(false);
|
||||||
WLED_GLOBAL bool useGlobalLedBuffer _INIT(true);
|
#ifdef ESP8266
|
||||||
|
WLED_GLOBAL bool useGlobalLedBuffer _INIT(false); // double buffering disabled on ESP8266
|
||||||
|
#else
|
||||||
|
WLED_GLOBAL bool useGlobalLedBuffer _INIT(true); // double buffering enabled on ESP32
|
||||||
|
#endif
|
||||||
WLED_GLOBAL bool correctWB _INIT(false); // CCT color correction of RGB color
|
WLED_GLOBAL bool correctWB _INIT(false); // CCT color correction of RGB color
|
||||||
WLED_GLOBAL bool cctFromRgb _INIT(false); // CCT is calculated from RGB instead of using seg.cct
|
WLED_GLOBAL bool cctFromRgb _INIT(false); // CCT is calculated from RGB instead of using seg.cct
|
||||||
WLED_GLOBAL bool gammaCorrectCol _INIT(true); // use gamma correction on colors
|
WLED_GLOBAL bool gammaCorrectCol _INIT(true); // use gamma correction on colors
|
||||||
|
Loading…
Reference in New Issue
Block a user