Commit Graph

121 Commits

Author SHA1 Message Date
Frank
e519b4190b add d_malloc_only() for AsyncJSON
major stability improvement, especially on classic esp32.
2026-02-20 01:09:52 +01:00
Frank Möhle
cce3c0b5d3 psram-aware malloc functions (backport of upstream #4895) (#342)
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.
2026-02-18 17:57:47 +01:00
Frank
57d63b7362 ESPDMX robustness improvements
* clamp channel to dmxMaxChannel (write)
* ensure that all data get sent, including start byte
2026-01-25 17:45:08 +01:00
Frank Möhle
e6e2348483 protect start byte
If Channel is less than 0, it's clamped to 0 on line 134. Then on line 138, dmxData[0] is written with the value, overwriting the start byte that was just set on line 137. DMX Channel numbers should be 1-based (1-512). The bounds check should clamp Channel to a minimum of 1, not 0, to prevent corrupting the start byte

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-25 17:29:10 +01:00
Frank
8faa88e05b chanSize expansion must account for start byte 2026-01-25 17:02:06 +01:00
Frank
f0753d6cf6 robustness improvement
bounds check before changing global variables
2026-01-25 16:18:30 +01:00
Frank
2628e9167d fix max number of bytes to be sent 2026-01-25 16:15:24 +01:00
Frank
82f713093e indentation 2026-01-25 15:46:57 +01:00
Frank
fb738883fa safeguards against array bounds violation 2026-01-25 15:43:53 +01:00
Frank
900178cd70 only build DMX drivers when WLED_ENABLE_DMX
both ESPDMX and SparkFunDMX have their own global buffers. Conditional compile prevents that these buffers are consuming RAM when not needed.
2026-01-25 15:08:40 +01:00
Frank
6ad6acfe08 align DMX output drivers with upstream
imports a few DMX serial output improvement from upstream
2026-01-25 15:06:27 +01:00
Frank
e6676372d8 refactor / cleanup font selection logic
* centralize font selection logic into  getFontInfo()
* removed unneeded parameter "numberOfChars" from drawText()
* new file: wled_fonts.hpp to centralize font management logic (inline)
* only compile wchar16ToCodepage437 when WLED_ENABLE_FULL_FONTS
* minor cleanup
2025-11-21 17:04:08 +01:00
Frank
213cd185b5 explanations for CP437 translations, some cleanups, bugfix for drawString
* explanation for CP437 glyph groups
* translation for MonnModules symbol
* "smiley" replacement for 4-bytes and overlong unicode codes
* always compile unicodetool.cpp (codepage translation still depends on WLED_ENABLE_UNICODE)
* bugfix: DrawString now skips over glyphs that would be rejected by DrawCharacter
* minor cleanup
2025-11-21 13:48:38 +01:00
Frank
527acefdea improvement for UTF-8 safe string trucation of segment name
did I mention already that this is complicated stuff? oh yes, it is.
2025-11-21 02:52:01 +01:00
Frank
2f48f03e44 truncate long segment name, instead of discarding
UX improvement: when segment names are too long (esp. with unicode), truncate it instead of deleting the name completely
2025-11-20 22:33:42 +01:00
Frank
3738735c84 engage
make it so
2025-11-20 18:28:42 +01:00
Frank
4a4887aaba scrolling text scrolling, unicode-aware strlen 2025-11-20 18:05:53 +01:00
Frank
0a593b4d39 codepage update 2025-11-20 11:41:26 +01:00
Frank
29e0afc0d7 align error characters
always use "small dot" for unsupported char, "bigger dot" to indicate unicode error
2025-11-20 01:42:04 +01:00
Frank
c2b87f863f minor update 2025-11-20 00:54:25 +01:00
Frank
e4f4294233 strlen => strnlen 2025-11-20 00:41:21 +01:00
Frank
0b1d22b8f1 error codes 2025-11-20 00:34:33 +01:00
Frank
6a4716e490 decoder robustness improvements, and some nitpick 2025-11-20 00:12:26 +01:00
Frank
5597695865 UFT-8 to UTF-16 decoder
* should properly decode all unicodes that fit into 2bytes UTF-16
* with error handling for well-known "malformed UTF-8" expoits
* puh, this stuff looks simple but the details are CRAZY 😝
2025-11-19 23:48:30 +01:00
Frank
8219feb41e more dummies
just to sketch out the final implementation
2025-11-19 18:04:09 +01:00
Frank
55c9741f01 new functions prototypes, minor fixes
* prototypes for UTF-8 ==> wchar16 conversion
* minor fixes
2025-11-19 17:40:11 +01:00
Frank
43ab0dd468 Full Codepage 437 support
part1:

* enable all bitmaps already defined in the font files (increases firmware by ~7KB)
* add traslation for unicode -> codepage437 (as used by font files)
2025-11-19 17:07:30 +01:00
Svennte
b13b44a1fa Fix alexa devices invisible/uncontrollable (#4214)
Fix for LED and Scenes uncontrollable using Alexa.
Weird behavior regarding to the device names and shared scenes fixed with this.

Seen in issue Aircoookie/Espalexa#228 and fixed from @ams-hh
Tested by myself and works just fine. Created second pull request here because the library seems to be a bit different from the official Espalexa repo.

---------
Co-authored-by: Frank <91616163+softhack007@users.noreply.github.com>
Co-authored-by: Blaz Kristan <blaz@kristan-sp.si>
2024-10-25 09:46:15 +02:00
Frank
7f9da309c9 const const const
adding hints for the compiler for optimization.
In case your custom build complains about "const", just remove the keyword. based on e82f38e277, but going further :-)

* "const" class functions : function does not modify any class attributes ( --> "this" becomes const)

* __attribute__((pure)) :  function return value depends only on the parameters and/or global variables. The function does not modify any global or static variables.
* __attribute__((const)) : function only examines arguments (no globals), and has no effects except the return value. This slightly more strict than "pure"
* hot: tells the compiler "this functions is called very often"
* cold: the opposite of hot
2024-08-07 14:58:38 +02:00
Frank
4995faf594 code spell checking - part2 (dependencies) 2023-12-14 22:09:28 +01:00
Ewoud
b95ff2d74f Merge remote-tracking branch 'upstream/main' into mdev 2023-06-07 20:54:04 +02:00
coral
7d84de6690 Fix errors in DDP implementation (#3193)
* fix DDP spec

* Adjust DDP type byte to latest spec

Allow receiving of RGBW DDP with either old or new bits per channel value

---------

Co-authored-by: Aircoookie <21045690+Aircoookie@users.noreply.github.com>
2023-05-26 14:58:40 +02:00
Frank
2cbdc55a85 Merge remote-tracking branch 'upstream/main' into mdev 2023-05-21 14:53:49 +02:00
Frank
a717238f76 espalexa robustness improvements
* prevent string buffer overflows (stack corruption)
* avoid division by zero (program might crash)
* avoid log(0) which is undefined, too
* use faster math routines for float (logf, powf)
2023-05-21 13:21:38 +02:00
Frank
94a7f5623d handling of Serial on CDC USB board
... like the typical -C3
* Replaced a few direct Serial.printf with macros
* Always check if Serial is connected before printing (CDC sometimes hangs  when trying to send/receive without connection)
2023-04-13 22:59:09 +02:00
Ewoud
4a5cbc9879 Merge remote-tracking branch 'upstream/main' into mdev
Some additions:

pio.ini: add debug entries
cfg.cpp, set.cpp, xml/cpp: keep storing basic 2D setup

index.js: use ledmapFileNames

settings_2D.htm: keep using basic and advanced

FX_2Dfcn.cpp: use gaptable and also MM ledmaps

FX_fcn.cpp: extend enumerateledmaps with AC ledmapNames (but not used in UI)
2023-02-22 16:09:27 +01:00
mx
0d3debf9b9 sACN/E1.31 Port Priority (#3052)
* Added E1.31 port priority handling #768

* Ignore E1.31 data when priority doesn't match #768

* Enable E1.31 priority handling for WLED_ENABLE_DMX

* Only handle e131Priority for P_E131 protocol

* Corrected comments

* Highest priority package first handling

* Removed obsolete code & comments

* Improved comments

* Reduce priority timeout to be uint8_t

* Optimized code & comments

* E1.31: Ignore non-zero start code and preview data
These are not level data, they have other purposes

* Style change cca41508 preview & ignore non-zero start code

---------

Co-authored-by: RichardTea <31507749+RichardTea@users.noreply.github.com>
2023-02-21 17:13:15 +01:00
Christian Schwinne
220718cb58 Remove Blynk support (#3102)
Change default palette for Railway to Colors 1 and 2
2023-02-21 17:07:32 +01:00
Frank
9b3e419281 small fix
compiler complained that it cannot find the right "abs()" implementation. So let's help 'em.
2023-01-11 15:40:23 +01:00
Frank
dae6de76f1 Improve co-existence of usermods sharing I2C
Improve co-existence of several popular usermods with respect to shared I2C bus.
- ensure that i2c_sda and i2c_scl are used when defined
- ensure that HW_PIN_SDA / HW_PIN_SCL are not overwritten
- ensure that Wire.begin()nis always called with user-defined pins (remove rogue Wire.begin() without parameters)
- ensure that set.cpp / cfg.cpp use esp32-specific global Wire objects.
2022-12-17 19:45:45 +01:00
Frank
cafa78c3f3 fixing CI build. really now.
-check IDF target after including arduino.h
-add missing build flags in [env:esp32s2_saola]
2022-12-10 19:00:48 +01:00
Frank
e808f7655c fix CI build
make sure SparkFunDMX driver is not compiled on -S2 and -C3
2022-12-10 18:20:00 +01:00
Frank
4f28bf7ab4 missing word in comment 2022-12-10 18:00:48 +01:00
Frank
9380b2b4e8 SparkFunDMX: fix for issue #2928
* make SparlFunDMX driver more robust:
- made variables static (so they don't overlap with other global variables)
- made sure all valriables are properly initialized
- do not apply pinMode and digitalRead to invalid pins (as this creates problems on -S3, -C3 and -S2)
* disable DMX sending code (unneeded code that may case troubles)
2022-12-10 17:55:14 +01:00
siggel
82af52a0bc Feature/nine additional alexa devices for presets (#2787)
* add 9 further alexa devices for calling presets 1-9

* use preset names from WLED for Alexa preset device names instead of hardcoded names

* update readme and version

* call alexaInit() at end of savePreset() to keep Alexa in sync with the preset IDs and names

* This reverts commit f8db06c7c5cfe159f9fc03ebc08547fa3c9e9ebd.

* change order to configured Alexa WLED name first, preset names afterwards

* fix status of devices when shown within Alexa, i.e. switching one preset on switches others off (except for alexaInvocationName)

* re-add getPresetName() after merge with master

* restore original readme for pull request

* restore original platformio.ini for pull request

* Logic simplification

* Pass string by reference

* Added number of presets check

* fix alexaInit() in case of alexaNumPresets==0

Co-authored-by: Christian Schwinne <dev.aircoookie@gmail.com>
2022-10-25 23:42:26 +02:00
4lloyd
d0189b0719 Add ArtPoll support (#2615)
* Add ArtPoll support

* Improved calculations

* Add support for legacy DMX start address 0

* Small efficiency improvement

* ESP8266 doesn't like yield

* Optimized ArtPoll memory use

Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
2022-09-22 20:34:46 +02:00
cschwinne
a0c90d4ba3 Disable unused characters in fonts
saves 5kB flash
Added 4x6 font
2022-09-05 03:18:59 +02:00
cschwinne
3270605b4f DDP network bus RGBW support 2022-09-02 03:12:03 +02:00
Blaz Kristan
957948f906 Code optimisations in effects.
Remove Wire initialisation from RTC.
Peek fix.
2022-08-09 21:14:37 +02:00
Luke Plassman
bef9c68f81 Working DMX Libraries (#2652)
* added SparkFunDMX library dependencies

* changed variable names to avoid conflicts with SparkFunDMX library

* board version checks

* minor changes to DMX

* fix brightness when no shutter DMX channel is set

* fix compile issue on newer ESP32 variants
2022-05-05 02:28:09 +02:00