From 65a76c512e51a2c000c60005552ce7cd5347c88b Mon Sep 17 00:00:00 2001 From: Sam Guyer Date: Thu, 29 Apr 2021 08:50:22 -0400 Subject: Fix for issue where program calls setLEDs to change the number of LEDs --- src/platforms/esp/32/clockless_rmt_esp32.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/platforms/esp/32/clockless_rmt_esp32.cpp b/src/platforms/esp/32/clockless_rmt_esp32.cpp index 1b3b7d3f..c7691f69 100644 --- a/src/platforms/esp/32/clockless_rmt_esp32.cpp +++ b/src/platforms/esp/32/clockless_rmt_esp32.cpp @@ -84,10 +84,17 @@ ESP32RMTController::ESP32RMTController(int DATA_PIN, int T1, int T2, int T3, int // the PixelController object until show is called. uint8_t * ESP32RMTController::getPixelBuffer(int size_in_bytes) { + // -- Free the old buffer if it will be too small + if (mPixelData != 0 and mSize < size_in_bytes) { + free(mPixelData); + mPixelData = 0; + } + if (mPixelData == 0) { mSize = size_in_bytes; mPixelData = (uint8_t *) malloc(mSize); } + return mPixelData; } -- cgit v1.2.3 From ca13e105a28965459c133eb70634095a4ba07cc0 Mon Sep 17 00:00:00 2001 From: Sam Guyer Date: Thu, 29 Apr 2021 10:53:51 -0400 Subject: Make sure we don't reallocate the buffer unnecessarily --- src/platforms/esp/32/clockless_rmt_esp32.cpp | 11 +++++++---- src/platforms/esp/32/clockless_rmt_esp32.h | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/platforms/esp/32/clockless_rmt_esp32.cpp b/src/platforms/esp/32/clockless_rmt_esp32.cpp index 0c729ff4..90ca046f 100644 --- a/src/platforms/esp/32/clockless_rmt_esp32.cpp +++ b/src/platforms/esp/32/clockless_rmt_esp32.cpp @@ -42,7 +42,8 @@ int ESP32RMTController::gMemBlocks; ESP32RMTController::ESP32RMTController(int DATA_PIN, int T1, int T2, int T3, int maxChannel, int memBlocks) : mPixelData(0), mSize(0), - mCur(0), + mCur(0), + mBufSize(0), mWhichHalf(0), mBuffer(0), mBufferSize(0), @@ -87,16 +88,18 @@ ESP32RMTController::ESP32RMTController(int DATA_PIN, int T1, int T2, int T3, int uint8_t * ESP32RMTController::getPixelBuffer(int size_in_bytes) { // -- Free the old buffer if it will be too small - if (mPixelData != 0 and mSize < size_in_bytes) { + if (mPixelData != 0 and mBufSize < size_in_bytes) { free(mPixelData); mPixelData = 0; } if (mPixelData == 0) { - mSize = size_in_bytes; - mPixelData = (uint8_t *) malloc(mSize); + mBufSize = size_in_bytes; + mPixelData = (uint8_t *) malloc(mBufSize); } + mSize = size_in_bytes; + return mPixelData; } diff --git a/src/platforms/esp/32/clockless_rmt_esp32.h b/src/platforms/esp/32/clockless_rmt_esp32.h index 2a8555ab..8f5690bb 100644 --- a/src/platforms/esp/32/clockless_rmt_esp32.h +++ b/src/platforms/esp/32/clockless_rmt_esp32.h @@ -221,6 +221,7 @@ private: uint8_t * mPixelData; int mSize; int mCur; + int mBufSize; // -- RMT memory volatile uint32_t * mRMT_mem_ptr; -- cgit v1.2.3