@coderabbitai caught the problem, but its fix suggestion was out to
lunch on this one. Passing an unsigned char to String.concat() appends
it as a number instead of appending the character.
Instead, mask the unneceeded bits.
Refactor file closing logic to improve concurrency handling: "Consuming" doCloseFile early reduces the risk that several tasks will try to close the same file.
* New Effect: Color Clouds
ColorClouds: Random start points for clouds and color
ColorClouds: new config option 'More red'
* ColorClouds: Incorporated review comments
- Support for color palettes
- Use perlin16() instead of inoise16()
- Use cos8_t() instead of cos8()
* ColorClouds: incorporated more review comments
* ColorClouds: incorporated final review comment
* Info page updates and minor re-styling
* added GitHub repo (link)
* added Total LEDs
* removed lwip major version on esp32
* two horizontal lines for better readability
* add rel="noopener noreferrer" for improved security
* When using target="_blank", it's a security best practice to include rel="noopener noreferrer" to prevent the new page from accessing window.opener.
* switch-cases that fall through
* potential buffer overflow in improv.cpp
* potentially uninitialized variables in FX.cpp
* potential array out-of-range on segment::col[]
* minor optimization: only apply gamma correction when result is needed
* tag some possibly unused variables with [[maybe_unused]]
* do not call strip.show(), just shedule a "show()" in the next main loop.
* experimental fix for inconsistent state when loading a preset (see upstream https://github.com/wled/WLED/issues/5200)
* relax checks in d_malloc_only, allow RTCRAM (avoids "unexpected end of JSON input) errors
* debug messages improved
* set errorflag when d_malloc() or d_calloc() failed
Introduces new memory allocation functions, based on wled#4895 by @DedeHai
* keep a minimum of 15KB RAM available to UI - improves stability
* S3/S2/C3 automatically use "fast RTC Ram" for small data (reduces fragmentation)
* auto-detects PSRAM (or no PSRAM) when firmware was built with -D BOARD_HAS_PSRAM
* d_malloc() and d_calloc() prefer DRAM if possible (faster), but fall back to PSRAM when free RAM gets low.