diff --git a/platformio.ini b/platformio.ini index 4fc858e2a..7ad66723e 100644 --- a/platformio.ini +++ b/platformio.ini @@ -147,8 +147,8 @@ lib_deps = https://github.com/Aircoookie/ESPAsyncWebServer.git @ ~2.0.7 # for I2C interface ;Wire - # ESP-NOW library (includes mandatory QuickDebug library) - ;gmag11/QuickESPNow @ 0.6.2 + # ESP-NOW library + ;gmag11/QuickESPNow @ ~0.7.0 https://github.com/blazoncek/QuickESPNow.git#optional-debug #For use of the TTGO T-Display ESP32 Module with integrated TFT display uncomment the following line #TFT_eSPI diff --git a/usermods/Temperature/usermod_temperature.h b/usermods/Temperature/usermod_temperature.h index 4d4f04368..f7586e444 100644 --- a/usermods/Temperature/usermod_temperature.h +++ b/usermods/Temperature/usermod_temperature.h @@ -110,9 +110,9 @@ float UsermodTemperature::readDallas() { #ifdef WLED_DEBUG if (OneWire::crc8(data,8) != data[8]) { DEBUG_PRINTLN(F("CRC error reading temperature.")); - for (byte i=0; i < 9; i++) DEBUG_PRINTF("0x%02X ", data[i]); + for (byte i=0; i < 9; i++) DEBUG_PRINTF_P(PSTR("0x%02X "), data[i]); DEBUG_PRINT(F(" => ")); - DEBUG_PRINTF("0x%02X\n", OneWire::crc8(data,8)); + DEBUG_PRINTF_P(PSTR("0x%02X\n"), OneWire::crc8(data,8)); } #endif switch(sensorFound) { @@ -149,7 +149,7 @@ void UsermodTemperature::readTemperature() { temperature = readDallas(); lastMeasurement = millis(); waitingForConversion = false; - //DEBUG_PRINTF("Read temperature %2.1f.\n", temperature); // does not work properly on 8266 + //DEBUG_PRINTF_P(PSTR("Read temperature %2.1f.\n"), temperature); // does not work properly on 8266 DEBUG_PRINT(F("Read temperature ")); DEBUG_PRINTLN(temperature); } @@ -171,7 +171,7 @@ bool UsermodTemperature::findSensor() { case 0x42: // DS28EA00 DEBUG_PRINTLN(F("Sensor found.")); sensorFound = deviceAddress[0]; - DEBUG_PRINTF("0x%02X\n", sensorFound); + DEBUG_PRINTF_P(PSTR("0x%02X\n"), sensorFound); return true; } } diff --git a/usermods/audioreactive/audio_reactive.h b/usermods/audioreactive/audio_reactive.h index 4e433ba99..7c1c30eec 100644 --- a/usermods/audioreactive/audio_reactive.h +++ b/usermods/audioreactive/audio_reactive.h @@ -1283,7 +1283,7 @@ class AudioReactive : public Usermod { #ifdef WLED_DEBUG if ((disableSoundProcessing == false) && (audioSyncEnabled == 0)) { // we just switched to "disabled" DEBUG_PRINTLN(F("[AR userLoop] realtime mode active - audio processing suspended.")); - DEBUG_PRINTF(" RealtimeMode = %d; RealtimeOverride = %d\n", int(realtimeMode), int(realtimeOverride)); + DEBUG_PRINTF_P(PSTR(" RealtimeMode = %d; RealtimeOverride = %d\n"), int(realtimeMode), int(realtimeOverride)); } #endif disableSoundProcessing = true; @@ -1291,7 +1291,7 @@ class AudioReactive : public Usermod { #ifdef WLED_DEBUG if ((disableSoundProcessing == true) && (audioSyncEnabled == 0) && audioSource->isInitialized()) { // we just switched to "enabled" DEBUG_PRINTLN(F("[AR userLoop] realtime mode ended - audio processing resumed.")); - DEBUG_PRINTF(" RealtimeMode = %d; RealtimeOverride = %d\n", int(realtimeMode), int(realtimeOverride)); + DEBUG_PRINTF_P(PSTR(" RealtimeMode = %d; RealtimeOverride = %d\n"), int(realtimeMode), int(realtimeOverride)); } #endif if ((disableSoundProcessing == true) && (audioSyncEnabled == 0)) lastUMRun = millis(); // just left "realtime mode" - update timekeeping @@ -1315,7 +1315,7 @@ class AudioReactive : public Usermod { // complain when audio userloop has been delayed for long time. Currently we need userloop running between 500 and 1500 times per second. // softhack007 disabled temporarily - avoid serial console spam with MANY leds and low FPS //if ((userloopDelay > 65) && !disableSoundProcessing && (audioSyncEnabled == 0)) { - //DEBUG_PRINTF("[AR userLoop] hiccup detected -> was inactive for last %d millis!\n", userloopDelay); + // DEBUG_PRINTF_P(PSTR("[AR userLoop] hiccup detected -> was inactive for last %d millis!\n"), userloopDelay); //} #endif diff --git a/usermods/boblight/boblight.h b/usermods/boblight/boblight.h index 6744d87e5..32208a4fa 100644 --- a/usermods/boblight/boblight.h +++ b/usermods/boblight/boblight.h @@ -174,9 +174,9 @@ class BobLightUsermod : public Usermod { #if WLED_DEBUG DEBUG_PRINTLN(F("Fill light data: ")); - DEBUG_PRINTF(" lights %d\n", numLights); + DEBUG_PRINTF_P(PSTR(" lights %d\n"), numLights); for (int i=0; i strip.getLengthTotal() ) { DEBUG_PRINTLN(F("BobLight: Too many lights.")); - DEBUG_PRINTF("%d+%d+%d+%d>%d\n", bottom, left, top, right, strip.getLengthTotal()); + DEBUG_PRINTF_P(PSTR("%d+%d+%d+%d>%d\n"), bottom, left, top, right, strip.getLengthTotal()); totalLights = strip.getLengthTotal(); top = bottom = (uint16_t) roundf((float)totalLights * 16.0f / 50.0f); left = right = (uint16_t) roundf((float)totalLights * 9.0f / 50.0f); diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index 6f5075d08..7aecd2271 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -133,7 +133,7 @@ void WS2812FX::setUpMatrix() { DEBUG_PRINT(F("Matrix ledmap:")); for (unsigned i=0; i %p\n", &orig, this); + //DEBUG_PRINTF_P(PSTR("-- Copy segment constructor: %p -> %p\n"), &orig, this); memcpy((void*)this, (void*)&orig, sizeof(Segment)); _t = nullptr; // copied segment cannot be in transition name = nullptr; @@ -100,7 +100,7 @@ Segment::Segment(const Segment &orig) { // move constructor Segment::Segment(Segment &&orig) noexcept { - //DEBUG_PRINTF("-- Move segment constructor: %p -> %p\n", &orig, this); + //DEBUG_PRINTF_P(PSTR("-- Move segment constructor: %p -> %p\n"), &orig, this); memcpy((void*)this, (void*)&orig, sizeof(Segment)); orig._t = nullptr; // old segment cannot be in transition any more orig.name = nullptr; @@ -110,7 +110,7 @@ Segment::Segment(Segment &&orig) noexcept { // copy assignment Segment& Segment::operator= (const Segment &orig) { - //DEBUG_PRINTF("-- Copying segment: %p -> %p\n", &orig, this); + //DEBUG_PRINTF_P(PSTR("-- Copying segment: %p -> %p\n"), &orig, this); if (this != &orig) { // clean destination if (name) { delete[] name; name = nullptr; } @@ -130,7 +130,7 @@ Segment& Segment::operator= (const Segment &orig) { // move assignment Segment& Segment::operator= (Segment &&orig) noexcept { - //DEBUG_PRINTF("-- Moving segment: %p -> %p\n", &orig, this); + //DEBUG_PRINTF_P(PSTR("-- Moving segment: %p -> %p\n"), &orig, this); if (this != &orig) { if (name) { delete[] name; name = nullptr; } // free old name stopTransition(); @@ -151,12 +151,12 @@ bool IRAM_ATTR Segment::allocateData(size_t len) { if (call == 0) memset(data, 0, len); // erase buffer if called during effect initialisation return true; } - //DEBUG_PRINTF("-- Allocating data (%d): %p\n", len, this); + //DEBUG_PRINTF_P(PSTR("-- Allocating data (%d): %p\n", len, this); deallocateData(); // if the old buffer was smaller release it first if (Segment::getUsedSegmentData() + len > MAX_SEGMENT_DATA) { // not enough memory DEBUG_PRINT(F("!!! Effect RAM depleted: ")); - DEBUG_PRINTF("%d/%d !!!\n", len, Segment::getUsedSegmentData()); + DEBUG_PRINTF_P(PSTR("%d/%d !!!\n"), len, Segment::getUsedSegmentData()); errorFlag = ERR_NORAM; return false; } @@ -164,21 +164,21 @@ bool IRAM_ATTR Segment::allocateData(size_t len) { data = (byte*)calloc(len, sizeof(byte)); if (!data) { DEBUG_PRINTLN(F("!!! Allocation failed. !!!")); return false; } // allocation failed Segment::addUsedSegmentData(len); - //DEBUG_PRINTF("--- Allocated data (%p): %d/%d -> %p\n", this, len, Segment::getUsedSegmentData(), data); + //DEBUG_PRINTF_P(PSTR("--- Allocated data (%p): %d/%d -> %p\n"), this, len, Segment::getUsedSegmentData(), data); _dataLen = len; return true; } void IRAM_ATTR Segment::deallocateData() { if (!data) { _dataLen = 0; return; } - //DEBUG_PRINTF("--- Released data (%p): %d/%d -> %p\n", this, _dataLen, Segment::getUsedSegmentData(), data); + //DEBUG_PRINTF_P(PSTR("--- Released data (%p): %d/%d -> %p\n"), this, _dataLen, Segment::getUsedSegmentData(), data); if ((Segment::getUsedSegmentData() > 0) && (_dataLen > 0)) { // check that we don't have a dangling / inconsistent data pointer free(data); } else { DEBUG_PRINT(F("---- Released data ")); - DEBUG_PRINTF("(%p): ", this); + DEBUG_PRINTF_P(PSTR("(%p): "), this); DEBUG_PRINT(F("inconsistent UsedSegmentData ")); - DEBUG_PRINTF("(%d/%d)", _dataLen, Segment::getUsedSegmentData()); + DEBUG_PRINTF_P(PSTR("(%d/%d)"), _dataLen, Segment::getUsedSegmentData()); DEBUG_PRINTLN(F(", cowardly refusing to free nothing.")); } data = nullptr; @@ -195,7 +195,7 @@ void IRAM_ATTR Segment::deallocateData() { */ void Segment::resetIfRequired() { if (!reset) return; - //DEBUG_PRINTF("-- Segment reset: %p\n", this); + //DEBUG_PRINTF_P(PSTR("-- Segment reset: %p\n"), this); if (data && _dataLen > 0) memset(data, 0, _dataLen); // prevent heap fragmentation (just erase buffer instead of deallocateData()) next_time = 0; step = 0; call = 0; aux0 = 0; aux1 = 0; reset = false; @@ -284,7 +284,7 @@ void Segment::startTransition(uint16_t dur) { _t = new Transition(dur); // no previous transition running if (!_t) return; // failed to allocate data - //DEBUG_PRINTF("-- Started transition: %p (%p)\n", this, _t); + //DEBUG_PRINTF_P(PSTR("-- Started transition: %p (%p)\n"), this, _t); loadPalette(_t->_palT, palette); _t->_briT = on ? opacity : 0; _t->_cctT = cct; @@ -297,7 +297,7 @@ void Segment::startTransition(uint16_t dur) { if (_dataLen > 0 && data) { _t->_segT._dataT = (byte *)malloc(_dataLen); if (_t->_segT._dataT) { - //DEBUG_PRINTF("-- Allocated duplicate data (%d) for %p: %p\n", _dataLen, this, _t->_segT._dataT); + //DEBUG_PRINTF_P(PSTR("-- Allocated duplicate data (%d) for %p: %p\n"), _dataLen, this, _t->_segT._dataT); memcpy(_t->_segT._dataT, data, _dataLen); _t->_segT._dataLenT = _dataLen; } @@ -312,10 +312,10 @@ void Segment::startTransition(uint16_t dur) { void Segment::stopTransition() { if (isInTransition()) { - //DEBUG_PRINTF("-- Stopping transition: %p\n", this); + //DEBUG_PRINTF_P(PSTR("-- Stopping transition: %p\n"), this); #ifndef WLED_DISABLE_MODE_BLEND if (_t->_segT._dataT && _t->_segT._dataLenT > 0) { - //DEBUG_PRINTF("-- Released duplicate data (%d) for %p: %p\n", _t->_segT._dataLenT, this, _t->_segT._dataT); + //DEBUG_PRINTF_P(PSTR("-- Released duplicate data (%d) for %p: %p\n"), _t->_segT._dataLenT, this, _t->_segT._dataT); free(_t->_segT._dataT); _t->_segT._dataT = nullptr; _t->_segT._dataLenT = 0; @@ -342,7 +342,7 @@ uint16_t IRAM_ATTR Segment::progress() { #ifndef WLED_DISABLE_MODE_BLEND void Segment::swapSegenv(tmpsegd_t &tmpSeg) { - //DEBUG_PRINTF("-- Saving temp seg: %p->(%p) [%d->%p]\n", this, &tmpSeg, _dataLen, data); + //DEBUG_PRINTF_P(PSTR("-- Saving temp seg: %p->(%p) [%d->%p]\n"), this, &tmpSeg, _dataLen, data); tmpSeg._optionsT = options; for (size_t i=0; i(%p) [%d->%p]\n", &tmpSeg, this, _dataLen, data); + //DEBUG_PRINTF_P(PSTR("-- Restoring temp seg: %p->(%p) [%d->%p]\n"), &tmpSeg, this, _dataLen, data); if (_t && &(_t->_segT) != &tmpSeg) { // update possibly changed variables to keep old effect running correctly _t->_segT._aux0T = aux0; _t->_segT._aux1T = aux1; _t->_segT._stepT = step; _t->_segT._callT = call; - //if (_t->_segT._dataT != data) DEBUG_PRINTF("--- data re-allocated: (%p) %p -> %p\n", this, _t->_segT._dataT, data); + //if (_t->_segT._dataT != data) DEBUG_PRINTF_P(PSTR("--- data re-allocated: (%p) %p -> %p\n"), this, _t->_segT._dataT, data); _t->_segT._dataT = data; _t->_segT._dataLenT = _dataLen; } @@ -1587,12 +1587,12 @@ void WS2812FX::setRange(uint16_t i, uint16_t i2, uint32_t col) { void WS2812FX::printSize() { size_t size = 0; for (const Segment &seg : _segments) size += seg.getSize(); - DEBUG_PRINTF("Segments: %d -> %uB\n", _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)); + DEBUG_PRINTF_P(PSTR("Segments: %d -> %uB\n"), _segments.size(), size); + DEBUG_PRINTF_P(PSTR("Modes: %d*%d=%uB\n"), sizeof(mode_ptr), _mode.size(), (_mode.capacity()*sizeof(mode_ptr))); + DEBUG_PRINTF_P(PSTR("Data: %d*%d=%uB\n"), sizeof(const char *), _modeData.size(), (_modeData.capacity()*sizeof(const char *))); + DEBUG_PRINTF_P(PSTR("Map: %d*%d=%uB\n"), sizeof(uint16_t), (int)customMappingSize, customMappingSize*sizeof(uint16_t)); size = getLengthTotal(); - if (useGlobalLedBuffer) DEBUG_PRINTF("Buffer: %d*%u=%uB\n", sizeof(CRGB), size, size*sizeof(CRGB)); + if (useGlobalLedBuffer) DEBUG_PRINTF_P(PSTR("Buffer: %d*%u=%uB\n"), sizeof(CRGB), size, size*sizeof(CRGB)); } #endif @@ -1621,7 +1621,7 @@ void WS2812FX::loadCustomPalettes() { tcp[ j ] = (uint8_t) pal[ i ].as(); // index colorFromHexString(rgbw, pal[i+1].as()); // will catch non-string entires for (size_t c=0; c<3; c++) tcp[j+1+c] = gamma8(rgbw[c]); // only use RGB component - DEBUG_PRINTF("%d(%d) : %d %d %d\n", i, int(tcp[j]), int(tcp[j+1]), int(tcp[j+2]), int(tcp[j+3])); + DEBUG_PRINTF_P(PSTR("%d(%d) : %d %d %d\n"), i, int(tcp[j]), int(tcp[j+1]), int(tcp[j+2]), int(tcp[j+3])); } } else { size_t palSize = MIN(pal.size(), 72); @@ -1631,7 +1631,7 @@ void WS2812FX::loadCustomPalettes() { tcp[i+1] = gamma8((uint8_t) pal[i+1].as()); // R tcp[i+2] = gamma8((uint8_t) pal[i+2].as()); // G tcp[i+3] = gamma8((uint8_t) pal[i+3].as()); // B - DEBUG_PRINTF("%d(%d) : %d %d %d\n", i, int(tcp[i]), int(tcp[i+1]), int(tcp[i+2]), int(tcp[i+3])); + DEBUG_PRINTF_P(PSTR("%d(%d) : %d %d %d\n"), i, int(tcp[i]), int(tcp[i+1]), int(tcp[i+2]), int(tcp[i+3])); } } customPalettes.push_back(targetPalette.loadDynamicGradientPalette(tcp)); diff --git a/wled00/bus_manager.cpp b/wled00/bus_manager.cpp index 822ff49db..16701bbb7 100755 --- a/wled00/bus_manager.cpp +++ b/wled00/bus_manager.cpp @@ -32,10 +32,12 @@ uint8_t realtimeBroadcast(uint8_t type, IPAddress client, uint16_t length, byte #define DEBUG_PRINT(x) DEBUGOUT.print(x) #define DEBUG_PRINTLN(x) DEBUGOUT.println(x) #define DEBUG_PRINTF(x...) DEBUGOUT.printf(x) + #define DEBUG_PRINTF_P(x...) DEBUGOUT.printf_P(x) #else #define DEBUG_PRINT(x) #define DEBUG_PRINTLN(x) #define DEBUG_PRINTF(x...) + #define DEBUG_PRINTF_P(x...) #endif //color mangling macros diff --git a/wled00/json.cpp b/wled00/json.cpp index b4bb38715..b5652f264 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -33,9 +33,9 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId) //DEBUG_PRINTLN(F("-- JSON deserialize segment.")); Segment& seg = strip.getSegment(id); - //DEBUG_PRINTF("-- Original segment: %p (%p)\n", &seg, seg.data); + //DEBUG_PRINTF_P(PSTR("-- Original segment: %p (%p)\n"), &seg, seg.data); Segment prev = seg; //make a backup so we can tell if something changed (calling copy constructor) - //DEBUG_PRINTF("-- Duplicate segment: %p (%p)\n", &prev, prev.data); + //DEBUG_PRINTF_P(PSTR("-- Duplicate segment: %p (%p)\n"), &prev, prev.data); uint16_t start = elem["start"] | seg.start; if (stop < 0) { @@ -1103,7 +1103,7 @@ void serveJson(AsyncWebServerRequest* request) //lDoc["m"] = lDoc.memoryUsage(); // JSON buffer usage, for remote debugging } - DEBUG_PRINTF("JSON buffer size: %u for request: %d\n", lDoc.memoryUsage(), subJson); + DEBUG_PRINTF_P(PSTR("JSON buffer size: %u for request: %d\n"), lDoc.memoryUsage(), subJson); #ifdef WLED_DEBUG size_t len = diff --git a/wled00/ntp.cpp b/wled00/ntp.cpp index 2e95eae23..68d1decde 100644 --- a/wled00/ntp.cpp +++ b/wled00/ntp.cpp @@ -398,7 +398,7 @@ void checkTimers() // re-calculate sunrise and sunset just after midnight if (!hour(localTime) && minute(localTime)==1) calculateSunriseAndSunset(); - DEBUG_PRINTF("Local time: %02d:%02d\n", hour(localTime), minute(localTime)); + DEBUG_PRINTF_P(PSTR("Local time: %02d:%02d\n"), hour(localTime), minute(localTime)); for (uint8_t i = 0; i < 8; i++) { if (timerMacro[i] != 0 @@ -416,7 +416,7 @@ void checkTimers() // sunrise macro if (sunrise) { time_t tmp = sunrise + timerMinutes[8]*60; // NOTE: may not be ok - DEBUG_PRINTF("Trigger time: %02d:%02d\n", hour(tmp), minute(tmp)); + DEBUG_PRINTF_P(PSTR("Trigger time: %02d:%02d\n"), hour(tmp), minute(tmp)); if (timerMacro[8] != 0 && hour(tmp) == hour(localTime) && minute(tmp) == minute(localTime) @@ -425,13 +425,13 @@ void checkTimers() { unloadPlaylist(); applyPreset(timerMacro[8]); - DEBUG_PRINTF("Sunrise macro %d triggered.",timerMacro[8]); + DEBUG_PRINTF_P(PSTR("Sunrise macro %d triggered."),timerMacro[8]); } } // sunset macro if (sunset) { time_t tmp = sunset + timerMinutes[9]*60; // NOTE: may not be ok - DEBUG_PRINTF("Trigger time: %02d:%02d\n", hour(tmp), minute(tmp)); + DEBUG_PRINTF_P(PSTR("Trigger time: %02d:%02d\n"), hour(tmp), minute(tmp)); if (timerMacro[9] != 0 && hour(tmp) == hour(localTime) && minute(tmp) == minute(localTime) @@ -440,7 +440,7 @@ void checkTimers() { unloadPlaylist(); applyPreset(timerMacro[9]); - DEBUG_PRINTF("Sunset macro %d triggered.",timerMacro[9]); + DEBUG_PRINTF_P(PSTR("Sunset macro %d triggered."),timerMacro[9]); } } } @@ -528,7 +528,7 @@ void calculateSunriseAndSunset() { tim_0.tm_hour = minUTC / 60; tim_0.tm_min = minUTC % 60; sunrise = tz->toLocal(mktime(&tim_0) + utcOffsetSecs); - DEBUG_PRINTF("Sunrise: %02d:%02d\n", hour(sunrise), minute(sunrise)); + DEBUG_PRINTF_P(PSTR("Sunrise: %02d:%02d\n"), hour(sunrise), minute(sunrise)); } else { sunrise = 0; } @@ -547,7 +547,7 @@ void calculateSunriseAndSunset() { tim_0.tm_hour = minUTC / 60; tim_0.tm_min = minUTC % 60; sunset = tz->toLocal(mktime(&tim_0) + utcOffsetSecs); - DEBUG_PRINTF("Sunset: %02d:%02d\n", hour(sunset), minute(sunset)); + DEBUG_PRINTF_P(PSTR("Sunset: %02d:%02d\n"), hour(sunset), minute(sunset)); } else { sunset = 0; } diff --git a/wled00/pin_manager.cpp b/wled00/pin_manager.cpp index a2c3567cb..b9ec2d2b8 100644 --- a/wled00/pin_manager.cpp +++ b/wled00/pin_manager.cpp @@ -6,7 +6,7 @@ static void DebugPrintOwnerTag(PinOwner tag) { uint32_t q = static_cast(tag); if (q) { - DEBUG_PRINTF("0x%02x (%d)", q, q); + DEBUG_PRINTF_P(PSTR("0x%02x (%d)"), q, q); } else { DEBUG_PRINT(F("(no owner)")); } diff --git a/wled00/set.cpp b/wled00/set.cpp index 5996c4380..7137e0cd8 100755 --- a/wled00/set.cpp +++ b/wled00/set.cpp @@ -248,14 +248,14 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage) if (((buttonType[i] == BTN_TYPE_ANALOG) || (buttonType[i] == BTN_TYPE_ANALOG_INVERTED)) && (digitalPinToAnalogChannel(btnPin[i]) < 0)) { // not an ADC analog pin - DEBUG_PRINTF("PIN ALLOC error: GPIO%d for analog button #%d is not an analog pin!\n", btnPin[i], i); + DEBUG_PRINTF_P(PSTR("PIN ALLOC error: GPIO%d for analog button #%d is not an analog pin!\n"), btnPin[i], i); btnPin[i] = -1; pinManager.deallocatePin(hw_btn_pin,PinOwner::Button); } else if ((buttonType[i] == BTN_TYPE_TOUCH || buttonType[i] == BTN_TYPE_TOUCH_SWITCH) && digitalPinToTouchChannel(btnPin[i]) < 0) { // not a touch pin - DEBUG_PRINTF("PIN ALLOC error: GPIO%d for touch button #%d is not an touch pin!\n", btnPin[i], i); + DEBUG_PRINTF_P(PSTR("PIN ALLOC error: GPIO%d for touch button #%d is not an touch pin!\n"), btnPin[i], i); btnPin[i] = -1; pinManager.deallocatePin(hw_btn_pin,PinOwner::Button); } @@ -669,7 +669,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage) // if the resulting name still contains ":" this means nested object JsonObject subObj; int umSubObj = name.indexOf(":"); - DEBUG_PRINTF("(%d):",umSubObj); + DEBUG_PRINTF_P(PSTR("(%d):"),umSubObj); if (umSubObj>0) { subObj = mod[name.substring(0,umSubObj)]; if (subObj.isNull()) diff --git a/wled00/udp.cpp b/wled00/udp.cpp index 4ef643236..100ace166 100644 --- a/wled00/udp.cpp +++ b/wled00/udp.cpp @@ -177,14 +177,14 @@ void notify(byte callMode, bool followUp) memcpy(buffer.data + packetSize, &udpOut[41+i*UDP_SEG_SIZE], UDP_SEG_SIZE); packetSize += UDP_SEG_SIZE; if (packetSize + UDP_SEG_SIZE < bufferSize) continue; - DEBUG_PRINTF("ESP-NOW sending packet: %d (%d)\n", (int)buffer.packet, packetSize+3); + DEBUG_PRINTF_P(PSTR("ESP-NOW sending packet: %d (%d)\n"), (int)buffer.packet, packetSize+3); err = quickEspNow.send(ESPNOW_BROADCAST_ADDRESS, reinterpret_cast(&buffer), packetSize+3); buffer.packet++; packetSize = 0; if (err) break; } if (!err && packetSize > 0) { - DEBUG_PRINTF("ESP-NOW sending last packet: %d (%d)\n", (int)buffer.packet, packetSize+3); + DEBUG_PRINTF_P(PSTR("ESP-NOW sending last packet: %d (%d)\n"), (int)buffer.packet, packetSize+3); err = quickEspNow.send(ESPNOW_BROADCAST_ADDRESS, reinterpret_cast(&buffer), packetSize+3); } } @@ -298,7 +298,7 @@ void parseNotifyPacket(uint8_t *udpIn) { uint16_t stopY = version > 11 ? (udpIn[34+ofs] << 8 | udpIn[35+ofs]) : 1; uint16_t offset = (udpIn[7+ofs] << 8 | udpIn[8+ofs]); if (!receiveSegmentOptions) { - DEBUG_PRINTF("Set segment w/o options: %d [%d,%d;%d,%d]\n", id, (int)start, (int)stop, (int)startY, (int)stopY); + DEBUG_PRINTF_P(PSTR("Set segment w/o options: %d [%d,%d;%d,%d]\n"), id, (int)start, (int)stop, (int)startY, (int)stopY); strip.suspend(); //should not be needed as UDP handling is not done in ISR callbacks but still added "just in case" selseg.setUp(start, stop, selseg.grouping, selseg.spacing, offset, startY, stopY); strip.resume(); @@ -337,12 +337,12 @@ void parseNotifyPacket(uint8_t *udpIn) { } } if (receiveSegmentBounds) { - DEBUG_PRINTF("Set segment w/ options: %d [%d,%d;%d,%d]\n", id, (int)start, (int)stop, (int)startY, (int)stopY); + DEBUG_PRINTF_P(PSTR("Set segment w/ options: %d [%d,%d;%d,%d]\n"), id, (int)start, (int)stop, (int)startY, (int)stopY); strip.suspend(); //should not be needed as UDP handling is not done in ISR callbacks but still added "just in case" selseg.setUp(start, stop, udpIn[5+ofs], udpIn[6+ofs], offset, startY, stopY); strip.resume(); } else { - DEBUG_PRINTF("Set segment grouping: %d [%d,%d]\n", id, (int)udpIn[5+ofs], (int)udpIn[6+ofs]); + DEBUG_PRINTF_P(PSTR("Set segment grouping: %d [%d,%d]\n"), id, (int)udpIn[5+ofs], (int)udpIn[6+ofs]); strip.suspend(); //should not be needed as UDP handling is not done in ISR callbacks but still added "just in case" selseg.setUp(selseg.start, selseg.stop, udpIn[5+ofs], udpIn[6+ofs], selseg.offset, selseg.startY, selseg.stopY); strip.resume(); @@ -956,7 +956,7 @@ uint8_t realtimeBroadcast(uint8_t type, IPAddress client, uint16_t length, uint8 #ifndef WLED_DISABLE_ESPNOW // ESP-NOW message sent callback function void espNowSentCB(uint8_t* address, uint8_t status) { - DEBUG_PRINTF("Message sent to " MACSTR ", status: %d\n", MAC2STR(address), status); + DEBUG_PRINTF_P(PSTR("Message sent to " MACSTR ", status: %d\n"), MAC2STR(address), status); } // ESP-NOW message receive callback function @@ -965,7 +965,7 @@ void espNowReceiveCB(uint8_t* address, uint8_t* data, uint8_t len, signed int rs #ifdef WLED_DEBUG DEBUG_PRINT(F("ESP-NOW: ")); DEBUG_PRINT(last_signal_src); DEBUG_PRINT(F(" -> ")); DEBUG_PRINTLN(len); - for (int i=0; ipacket, (int)len-3, (int)UDP_SEG_SIZE); + DEBUG_PRINTF_P(PSTR("ESP-NOW incorrect packet: %d (%d) [%d]\n"), (int)buffer->packet, (int)len-3, (int)UDP_SEG_SIZE); if (udpIn) free(udpIn); udpIn = nullptr; packetsReceived = 0; @@ -1025,7 +1025,7 @@ void espNowReceiveCB(uint8_t* address, uint8_t* data, uint8_t len, signed int rs if (!udpIn) return; packetsReceived++; - DEBUG_PRINTF("ESP-NOW packet received: %d (%d/%d) s:[%d/%d]\n", (int)buffer->packet, (int)packetsReceived, (int)buffer->noOfPackets, (int)segsReceived, MAX_NUM_SEGMENTS); + DEBUG_PRINTF_P(PSTR("ESP-NOW packet received: %d (%d/%d) s:[%d/%d]\n"), (int)buffer->packet, (int)packetsReceived, (int)buffer->noOfPackets, (int)segsReceived, MAX_NUM_SEGMENTS); if (packetsReceived >= buffer->noOfPackets) { // last packet received if (millis() - lastProcessed > 250) { diff --git a/wled00/wled.cpp b/wled00/wled.cpp index c6f5f247f..3c5669215 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -41,7 +41,7 @@ void WLED::loop() unsigned long loopMillis = millis(); size_t loopDelay = loopMillis - lastRun; if (lastRun == 0) loopDelay=0; // startup - don't have valid data from last run. - if (loopDelay > 2) DEBUG_PRINTF("Loop delayed more than %ums.\n", loopDelay); + if (loopDelay > 2) DEBUG_PRINTF_P(PSTR("Loop delayed more than %ums.\n"), loopDelay); static unsigned long maxLoopMillis = 0; static size_t avgLoopMillis = 0; static unsigned long maxUsermodMillis = 0; @@ -229,9 +229,9 @@ void WLED::loop() #ifdef WLED_DEBUG loopMillis = millis() - loopMillis; if (loopMillis > 30) { - DEBUG_PRINTF("Loop took %lums.\n", loopMillis); - DEBUG_PRINTF("Usermods took %lums.\n", usermodMillis); - DEBUG_PRINTF("Strip took %lums.\n", stripMillis); + DEBUG_PRINTF_P(PSTR("Loop took %lums.\n"), loopMillis); + DEBUG_PRINTF_P(PSTR("Usermods took %lums.\n"), usermodMillis); + DEBUG_PRINTF_P(PSTR("Strip took %lums.\n"), stripMillis); } avgLoopMillis += loopMillis; if (loopMillis > maxLoopMillis) maxLoopMillis = loopMillis; @@ -335,8 +335,8 @@ void WLED::setup() DEBUG_PRINT(F("esp32 ")); DEBUG_PRINTLN(ESP.getSdkVersion()); #if defined(ESP_ARDUINO_VERSION) - //DEBUG_PRINTF(F("arduino-esp32 0x%06x\n"), ESP_ARDUINO_VERSION); - DEBUG_PRINTF("arduino-esp32 v%d.%d.%d\n", int(ESP_ARDUINO_VERSION_MAJOR), int(ESP_ARDUINO_VERSION_MINOR), int(ESP_ARDUINO_VERSION_PATCH)); // availeable since v2.0.0 + //DEBUG_PRINTF_P(PSTR("arduino-esp32 0x%06x\n"), ESP_ARDUINO_VERSION); + DEBUG_PRINTF_P(PSTR("arduino-esp32 v%d.%d.%d\n"), int(ESP_ARDUINO_VERSION_MAJOR), int(ESP_ARDUINO_VERSION_MINOR), int(ESP_ARDUINO_VERSION_PATCH)); // availeable since v2.0.0 #else DEBUG_PRINTLN(F("arduino-esp32 v1.0.x\n")); // we can't say in more detail. #endif diff --git a/wled00/wled.h b/wled00/wled.h index 3859ea41a..571d4f54b 100755 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2402090 +#define VERSION 2402170 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG @@ -811,10 +811,12 @@ WLED_GLOBAL volatile uint8_t jsonBufferLock _INIT(0); #define DEBUG_PRINT(x) DEBUGOUT.print(x) #define DEBUG_PRINTLN(x) DEBUGOUT.println(x) #define DEBUG_PRINTF(x...) DEBUGOUT.printf(x) + #define DEBUG_PRINTF_P(x...) DEBUGOUT.printf_P(x) #else #define DEBUG_PRINT(x) #define DEBUG_PRINTLN(x) #define DEBUG_PRINTF(x...) + #define DEBUG_PRINTF_P(x...) #endif #ifdef WLED_DEBUG_FS