From ed26b8d1be17dd02551154fe3c0bad333fb31097 Mon Sep 17 00:00:00 2001 From: Nuet0815 <78226842+Nuet0815@users.noreply.github.com> Date: Sat, 24 Jan 2026 18:00:22 +0100 Subject: [PATCH] Fixed bug of ESP32 crashing when using DMX out Fixed bug of ESP32 crashing when using DMX out: -When exceeding the DMX channel limit, the SparkFunDMX.cpp tried to write to static chanSize because the variables where swapped. -When exceeding the channel upper & lower limit now, the value is ignored, previous implementation "idea" was to set as channel 512 value, which is not correct. -There are still some non-optimal parts in the lib, but it at least works for now. --- wled00/src/dependencies/dmx/SparkFunDMX.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/wled00/src/dependencies/dmx/SparkFunDMX.cpp b/wled00/src/dependencies/dmx/SparkFunDMX.cpp index 064b9ff620..fadd168807 100644 --- a/wled00/src/dependencies/dmx/SparkFunDMX.cpp +++ b/wled00/src/dependencies/dmx/SparkFunDMX.cpp @@ -23,7 +23,6 @@ Distributed as-is; no warranty is given. #include #define dmxMaxChannel 512 -#define defaultMax 32 #define DMXSPEED 250000 #define DMXFORMAT SERIAL_8N2 @@ -90,7 +89,7 @@ void SparkFunDMX::initRead(int chanQuant) { _READWRITE = _READ; if (chanQuant > dmxMaxChannel || chanQuant <= 0) { - chanQuant = defaultMax; + chanQuant = dmxMaxChannel; } chanSize = chanQuant; if (enablePin >= 0) { @@ -106,7 +105,7 @@ void SparkFunDMX::initWrite (int chanQuant) { _READWRITE = _WRITE; if (chanQuant > dmxMaxChannel || chanQuant <= 0) { - chanQuant = defaultMax; + chanQuant = dmxMaxChannel; } chanSize = chanQuant + 1; //Add 1 for start code @@ -121,17 +120,15 @@ void SparkFunDMX::initWrite (int chanQuant) { #if !defined(DMX_SEND_ONLY) // Function to read DMX data uint8_t SparkFunDMX::read(int Channel) { - if (Channel > chanSize) Channel = chanSize; + if ((Channel < 1) || (Channel > chanSize)) return 0; return(dmxData[Channel - 1]); //subtract one to account for start byte } #endif // Function to send DMX data void SparkFunDMX::write(int Channel, uint8_t value) { - if (Channel < 0) Channel = 0; - if (Channel > chanSize) chanSize = Channel; - dmxData[0] = 0; - dmxData[Channel] = value; //add one to account for start byte + if ((Channel < 1) || (Channel > chanSize)) return; + dmxData[Channel] = value; //start byte at dmxData[0] }