Skip to content

Commit 63ea575

Browse files
committed
fix buffer size calculation for ESP8266
also adds proper global buffer calculation and RMT/I2S channel calculation thx to @blazoncek
1 parent 68a8534 commit 63ea575

File tree

2 files changed

+103
-106
lines changed

2 files changed

+103
-106
lines changed

wled00/bus_wrapper.h

Lines changed: 102 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -469,20 +469,20 @@ class PolyBus {
469469
}
470470

471471
static void* create(uint8_t busType, uint8_t* pins, uint16_t len, uint8_t channel) {
472+
#if defined(ARDUINO_ARCH_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32C3)
472473
// NOTE: "channel" is only used on ESP32 (and its variants) for RMT channel allocation
473-
474-
#if defined(ARDUINO_ARCH_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32C3)
475-
if (_useParallelI2S && (channel >= 8)) {
476-
// Parallel I2S channels are to be used first, so subtract 8 to get the RMT channel number
477-
channel -= 8;
478-
}
479-
#endif
480-
481-
#if defined(ARDUINO_ARCH_ESP32) && !(defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C3))
482474
// since 0.15.0-b3 I2S1 is favoured for classic ESP32 and moved to position 0 (channel 0) so we need to subtract 1 for correct RMT allocation
483-
if (!_useParallelI2S && channel > 0) channel--; // accommodate I2S1 which is used as 1st bus on classic ESP32
475+
#if defined(CONFIG_IDF_TARGET_ESP32)
476+
if (channel > 0) {
477+
channel--;
478+
if (_useParallelI2S && channel > 6) channel -= 7; // accommodate I2S1 which is used as 1st bus
479+
}
480+
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
481+
if (_useParallelI2S && channel > 7) channel -= 8; // accommodate I2S1 which is used as 1st bus
482+
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
483+
if (_useParallelI2S && channel > 7) channel -= 8; // accommodate I2S1 which is used as 1st bus
484484
#endif
485-
485+
#endif
486486
void* busPtr = nullptr;
487487
switch (busType) {
488488
case I_NONE: break;
@@ -1209,54 +1209,54 @@ class PolyBus {
12091209
switch (busType) {
12101210
case I_NONE: break;
12111211
#ifdef ESP8266
1212-
case I_8266_U0_NEO_3: size = (static_cast<B_8266_U0_NEO_3*>(busPtr))->PixelsSize()*2; break;
1213-
case I_8266_U1_NEO_3: size = (static_cast<B_8266_U1_NEO_3*>(busPtr))->PixelsSize()*2; break;
1212+
case I_8266_U0_NEO_3: size = (static_cast<B_8266_U0_NEO_3*>(busPtr))->PixelsSize(); break;
1213+
case I_8266_U1_NEO_3: size = (static_cast<B_8266_U1_NEO_3*>(busPtr))->PixelsSize(); break;
12141214
case I_8266_DM_NEO_3: size = (static_cast<B_8266_DM_NEO_3*>(busPtr))->PixelsSize()*5; break;
1215-
case I_8266_BB_NEO_3: size = (static_cast<B_8266_BB_NEO_3*>(busPtr))->PixelsSize()*2; break;
1216-
case I_8266_U0_NEO_4: size = (static_cast<B_8266_U0_NEO_4*>(busPtr))->PixelsSize()*2; break;
1217-
case I_8266_U1_NEO_4: size = (static_cast<B_8266_U1_NEO_4*>(busPtr))->PixelsSize()*2; break;
1215+
case I_8266_BB_NEO_3: size = (static_cast<B_8266_BB_NEO_3*>(busPtr))->PixelsSize(); break;
1216+
case I_8266_U0_NEO_4: size = (static_cast<B_8266_U0_NEO_4*>(busPtr))->PixelsSize(); break;
1217+
case I_8266_U1_NEO_4: size = (static_cast<B_8266_U1_NEO_4*>(busPtr))->PixelsSize(); break;
12181218
case I_8266_DM_NEO_4: size = (static_cast<B_8266_DM_NEO_4*>(busPtr))->PixelsSize()*5; break;
1219-
case I_8266_BB_NEO_4: size = (static_cast<B_8266_BB_NEO_4*>(busPtr))->PixelsSize()*2; break;
1220-
case I_8266_U0_400_3: size = (static_cast<B_8266_U0_400_3*>(busPtr))->PixelsSize()*2; break;
1221-
case I_8266_U1_400_3: size = (static_cast<B_8266_U1_400_3*>(busPtr))->PixelsSize()*2; break;
1219+
case I_8266_BB_NEO_4: size = (static_cast<B_8266_BB_NEO_4*>(busPtr))->PixelsSize(); break;
1220+
case I_8266_U0_400_3: size = (static_cast<B_8266_U0_400_3*>(busPtr))->PixelsSize(); break;
1221+
case I_8266_U1_400_3: size = (static_cast<B_8266_U1_400_3*>(busPtr))->PixelsSize(); break;
12221222
case I_8266_DM_400_3: size = (static_cast<B_8266_DM_400_3*>(busPtr))->PixelsSize()*5; break;
1223-
case I_8266_BB_400_3: size = (static_cast<B_8266_BB_400_3*>(busPtr))->PixelsSize()*2; break;
1224-
case I_8266_U0_TM1_4: size = (static_cast<B_8266_U0_TM1_4*>(busPtr))->PixelsSize()*2; break;
1225-
case I_8266_U1_TM1_4: size = (static_cast<B_8266_U1_TM1_4*>(busPtr))->PixelsSize()*2; break;
1223+
case I_8266_BB_400_3: size = (static_cast<B_8266_BB_400_3*>(busPtr))->PixelsSize(); break;
1224+
case I_8266_U0_TM1_4: size = (static_cast<B_8266_U0_TM1_4*>(busPtr))->PixelsSize(); break;
1225+
case I_8266_U1_TM1_4: size = (static_cast<B_8266_U1_TM1_4*>(busPtr))->PixelsSize(); break;
12261226
case I_8266_DM_TM1_4: size = (static_cast<B_8266_DM_TM1_4*>(busPtr))->PixelsSize()*5; break;
1227-
case I_8266_BB_TM1_4: size = (static_cast<B_8266_BB_TM1_4*>(busPtr))->PixelsSize()*2; break;
1228-
case I_8266_U0_TM2_3: size = (static_cast<B_8266_U0_TM2_3*>(busPtr))->PixelsSize()*2; break;
1229-
case I_8266_U1_TM2_3: size = (static_cast<B_8266_U1_TM2_3*>(busPtr))->PixelsSize()*2; break;
1227+
case I_8266_BB_TM1_4: size = (static_cast<B_8266_BB_TM1_4*>(busPtr))->PixelsSize(); break;
1228+
case I_8266_U0_TM2_3: size = (static_cast<B_8266_U0_TM2_3*>(busPtr))->PixelsSize(); break;
1229+
case I_8266_U1_TM2_3: size = (static_cast<B_8266_U1_TM2_3*>(busPtr))->PixelsSize(); break;
12301230
case I_8266_DM_TM2_3: size = (static_cast<B_8266_DM_TM2_3*>(busPtr))->PixelsSize()*5; break;
1231-
case I_8266_BB_TM2_3: size = (static_cast<B_8266_BB_TM2_3*>(busPtr))->PixelsSize()*2; break;
1232-
case I_8266_U0_UCS_3: size = (static_cast<B_8266_U0_UCS_3*>(busPtr))->PixelsSize()*2; break;
1233-
case I_8266_U1_UCS_3: size = (static_cast<B_8266_U1_UCS_3*>(busPtr))->PixelsSize()*2; break;
1231+
case I_8266_BB_TM2_3: size = (static_cast<B_8266_BB_TM2_3*>(busPtr))->PixelsSize(); break;
1232+
case I_8266_U0_UCS_3: size = (static_cast<B_8266_U0_UCS_3*>(busPtr))->PixelsSize(); break;
1233+
case I_8266_U1_UCS_3: size = (static_cast<B_8266_U1_UCS_3*>(busPtr))->PixelsSize(); break;
12341234
case I_8266_DM_UCS_3: size = (static_cast<B_8266_DM_UCS_3*>(busPtr))->PixelsSize()*5; break;
1235-
case I_8266_BB_UCS_3: size = (static_cast<B_8266_BB_UCS_3*>(busPtr))->PixelsSize()*2; break;
1236-
case I_8266_U0_UCS_4: size = (static_cast<B_8266_U0_UCS_4*>(busPtr))->PixelsSize()*2; break;
1237-
case I_8266_U1_UCS_4: size = (static_cast<B_8266_U1_UCS_4*>(busPtr))->PixelsSize()*2; break;
1235+
case I_8266_BB_UCS_3: size = (static_cast<B_8266_BB_UCS_3*>(busPtr))->PixelsSize(); break;
1236+
case I_8266_U0_UCS_4: size = (static_cast<B_8266_U0_UCS_4*>(busPtr))->PixelsSize(); break;
1237+
case I_8266_U1_UCS_4: size = (static_cast<B_8266_U1_UCS_4*>(busPtr))->PixelsSize(); break;
12381238
case I_8266_DM_UCS_4: size = (static_cast<B_8266_DM_UCS_4*>(busPtr))->PixelsSize()*5; break;
1239-
case I_8266_BB_UCS_4: size = (static_cast<B_8266_BB_UCS_4*>(busPtr))->PixelsSize()*2; break;
1240-
case I_8266_U0_APA106_3: size = (static_cast<B_8266_U0_APA106_3*>(busPtr))->PixelsSize()*2; break;
1241-
case I_8266_U1_APA106_3: size = (static_cast<B_8266_U1_APA106_3*>(busPtr))->PixelsSize()*2; break;
1239+
case I_8266_BB_UCS_4: size = (static_cast<B_8266_BB_UCS_4*>(busPtr))->PixelsSize(); break;
1240+
case I_8266_U0_APA106_3: size = (static_cast<B_8266_U0_APA106_3*>(busPtr))->PixelsSize(); break;
1241+
case I_8266_U1_APA106_3: size = (static_cast<B_8266_U1_APA106_3*>(busPtr))->PixelsSize(); break;
12421242
case I_8266_DM_APA106_3: size = (static_cast<B_8266_DM_APA106_3*>(busPtr))->PixelsSize()*5; break;
1243-
case I_8266_BB_APA106_3: size = (static_cast<B_8266_BB_APA106_3*>(busPtr))->PixelsSize()*2; break;
1244-
case I_8266_U0_FW6_5: size = (static_cast<B_8266_U0_FW6_5*>(busPtr))->PixelsSize()*2; break;
1245-
case I_8266_U1_FW6_5: size = (static_cast<B_8266_U1_FW6_5*>(busPtr))->PixelsSize()*2; break;
1243+
case I_8266_BB_APA106_3: size = (static_cast<B_8266_BB_APA106_3*>(busPtr))->PixelsSize(); break;
1244+
case I_8266_U0_FW6_5: size = (static_cast<B_8266_U0_FW6_5*>(busPtr))->PixelsSize(); break;
1245+
case I_8266_U1_FW6_5: size = (static_cast<B_8266_U1_FW6_5*>(busPtr))->PixelsSize(); break;
12461246
case I_8266_DM_FW6_5: size = (static_cast<B_8266_DM_FW6_5*>(busPtr))->PixelsSize()*5; break;
1247-
case I_8266_BB_FW6_5: size = (static_cast<B_8266_BB_FW6_5*>(busPtr))->PixelsSize()*2; break;
1248-
case I_8266_U0_2805_5: size = (static_cast<B_8266_U0_2805_5*>(busPtr))->PixelsSize()*2; break;
1249-
case I_8266_U1_2805_5: size = (static_cast<B_8266_U1_2805_5*>(busPtr))->PixelsSize()*2; break;
1247+
case I_8266_BB_FW6_5: size = (static_cast<B_8266_BB_FW6_5*>(busPtr))->PixelsSize(); break;
1248+
case I_8266_U0_2805_5: size = (static_cast<B_8266_U0_2805_5*>(busPtr))->PixelsSize(); break;
1249+
case I_8266_U1_2805_5: size = (static_cast<B_8266_U1_2805_5*>(busPtr))->PixelsSize(); break;
12501250
case I_8266_DM_2805_5: size = (static_cast<B_8266_DM_2805_5*>(busPtr))->PixelsSize()*5; break;
1251-
case I_8266_BB_2805_5: size = (static_cast<B_8266_BB_2805_5*>(busPtr))->PixelsSize()*2; break;
1252-
case I_8266_U0_TM1914_3: size = (static_cast<B_8266_U0_TM1914_3*>(busPtr))->PixelsSize()*2; break;
1253-
case I_8266_U1_TM1914_3: size = (static_cast<B_8266_U1_TM1914_3*>(busPtr))->PixelsSize()*2; break;
1251+
case I_8266_BB_2805_5: size = (static_cast<B_8266_BB_2805_5*>(busPtr))->PixelsSize(); break;
1252+
case I_8266_U0_TM1914_3: size = (static_cast<B_8266_U0_TM1914_3*>(busPtr))->PixelsSize(); break;
1253+
case I_8266_U1_TM1914_3: size = (static_cast<B_8266_U1_TM1914_3*>(busPtr))->PixelsSize(); break;
12541254
case I_8266_DM_TM1914_3: size = (static_cast<B_8266_DM_TM1914_3*>(busPtr))->PixelsSize()*5; break;
1255-
case I_8266_BB_TM1914_3: size = (static_cast<B_8266_BB_TM1914_3*>(busPtr))->PixelsSize()*2; break;
1256-
case I_8266_U0_SM16825_5: size = (static_cast<B_8266_U0_SM16825_5*>(busPtr))->PixelsSize()*2; break;
1257-
case I_8266_U1_SM16825_5: size = (static_cast<B_8266_U1_SM16825_5*>(busPtr))->PixelsSize()*2; break;
1255+
case I_8266_BB_TM1914_3: size = (static_cast<B_8266_BB_TM1914_3*>(busPtr))->PixelsSize(); break;
1256+
case I_8266_U0_SM16825_5: size = (static_cast<B_8266_U0_SM16825_5*>(busPtr))->PixelsSize(); break;
1257+
case I_8266_U1_SM16825_5: size = (static_cast<B_8266_U1_SM16825_5*>(busPtr))->PixelsSize(); break;
12581258
case I_8266_DM_SM16825_5: size = (static_cast<B_8266_DM_SM16825_5*>(busPtr))->PixelsSize()*5; break;
1259-
case I_8266_BB_SM16825_5: size = (static_cast<B_8266_BB_SM16825_5*>(busPtr))->PixelsSize()*2; break;
1259+
case I_8266_BB_SM16825_5: size = (static_cast<B_8266_BB_SM16825_5*>(busPtr))->PixelsSize(); break;
12601260
#endif
12611261
#ifdef ARDUINO_ARCH_ESP32
12621262
// RMT buses (front + back + small system managed RMT)
@@ -1308,68 +1308,65 @@ class PolyBus {
13081308
case I_NONE: size = 0; break;
13091309
#ifdef ESP8266
13101310
// UART methods have front + back buffers + small UART
1311-
case I_8266_U0_NEO_4: size = (size + count)*2; break; // 4 channels
1312-
case I_8266_U1_NEO_4: size = (size + count)*2; break; // 4 channels
1313-
case I_8266_BB_NEO_4: size = (size + count)*2; break; // 4 channels
1314-
case I_8266_U0_TM1_4: size = (size + count)*2; break; // 4 channels
1315-
case I_8266_U1_TM1_4: size = (size + count)*2; break; // 4 channels
1316-
case I_8266_BB_TM1_4: size = (size + count)*2; break; // 4 channels
1317-
case I_8266_U0_UCS_3: size *= 4; break; // 16 bit
1318-
case I_8266_U1_UCS_3: size *= 4; break; // 16 bit
1319-
case I_8266_BB_UCS_3: size *= 4; break; // 16 bit
1320-
case I_8266_U0_UCS_4: size = (size + count)*2*2; break; // 16 bit 4 channels
1321-
case I_8266_U1_UCS_4: size = (size + count)*2*2; break; // 16 bit 4 channels
1322-
case I_8266_BB_UCS_4: size = (size + count)*2*2; break; // 16 bit 4 channels
1323-
case I_8266_U0_FW6_5: size = (size + 2*count)*2; break; // 5 channels
1324-
case I_8266_U1_FW6_5: size = (size + 2*count)*2; break; // 5channels
1325-
case I_8266_BB_FW6_5: size = (size + 2*count)*2; break; // 5 channels
1326-
case I_8266_U0_2805_5: size = (size + 2*count)*2; break; // 5 channels
1327-
case I_8266_U1_2805_5: size = (size + 2*count)*2; break; // 5 channels
1328-
case I_8266_BB_2805_5: size = (size + 2*count)*2; break; // 5 channels
1329-
case I_8266_U0_SM16825_5: size = (size + 2*count)*2*2; break; // 16 bit 5 channels
1330-
case I_8266_U1_SM16825_5: size = (size + 2*count)*2*2; break; // 16 bit 5 channels
1331-
case I_8266_BB_SM16825_5: size = (size + 2*count)*2*2; break; // 16 bit 5 channels
1332-
// DMA methods have front + DMA buffer = ((1+(3+1)) * channels)
1333-
case I_8266_DM_NEO_3: size *= 5; break;
1334-
case I_8266_DM_NEO_4: size = (size + count)*5; break;
1335-
case I_8266_DM_400_3: size *= 5; break;
1336-
case I_8266_DM_TM1_4: size = (size + count)*5; break;
1337-
case I_8266_DM_TM2_3: size *= 5; break;
1338-
case I_8266_DM_UCS_3: size *= 2*5; break;
1339-
case I_8266_DM_UCS_4: size = (size + count)*2*5; break;
1340-
case I_8266_DM_APA106_3: size *= 5; break;
1341-
case I_8266_DM_FW6_5: size = (size + 2*count)*5; break;
1342-
case I_8266_DM_2805_5: size = (size + 2*count)*5; break;
1343-
case I_8266_DM_TM1914_3: size *= 5; break;
1311+
case I_8266_U0_NEO_4 : // fallthrough
1312+
case I_8266_U1_NEO_4 : // fallthrough
1313+
case I_8266_BB_NEO_4 : // fallthrough
1314+
case I_8266_U0_TM1_4 : // fallthrough
1315+
case I_8266_U1_TM1_4 : // fallthrough
1316+
case I_8266_BB_TM1_4 : size = (size + count); break; // 4 channels
1317+
case I_8266_U0_UCS_3 : // fallthrough
1318+
case I_8266_U1_UCS_3 : // fallthrough
1319+
case I_8266_BB_UCS_3 : size *= 2; break; // 16 bit
1320+
case I_8266_U0_UCS_4 : // fallthrough
1321+
case I_8266_U1_UCS_4 : // fallthrough
1322+
case I_8266_BB_UCS_4 : size = (size + count)*2; break; // 16 bit 4 channels
1323+
case I_8266_U0_FW6_5 : // fallthrough
1324+
case I_8266_U1_FW6_5 : // fallthrough
1325+
case I_8266_BB_FW6_5 : // fallthrough
1326+
case I_8266_U0_2805_5 : // fallthrough
1327+
case I_8266_U1_2805_5 : // fallthrough
1328+
case I_8266_BB_2805_5 : size = (size + 2*count); break; // 5 channels
1329+
case I_8266_U0_SM16825_5: // fallthrough
1330+
case I_8266_U1_SM16825_5: // fallthrough
1331+
case I_8266_BB_SM16825_5: size = (size + 2*count)*2; break; // 16 bit 5 channels
1332+
// DMA methods have front + DMA buffer = ((1+(3+1)) * channels; exact value is a bit of mistery - needs a dig into NPB)
1333+
case I_8266_DM_NEO_3 : // fallthrough
1334+
case I_8266_DM_400_3 : // fallthrough
1335+
case I_8266_DM_TM2_3 : // fallthrough
1336+
case I_8266_DM_APA106_3 : // fallthrough
1337+
case I_8266_DM_TM1914_3 : size *= 5; break;
1338+
case I_8266_DM_NEO_4 : // fallthrough
1339+
case I_8266_DM_TM1_4 : size = (size + count)*5; break;
1340+
case I_8266_DM_UCS_3 : size *= 2*5; break;
1341+
case I_8266_DM_UCS_4 : size = (size + count)*2*5; break;
1342+
case I_8266_DM_FW6_5 : // fallthrough
1343+
case I_8266_DM_2805_5 : size = (size + 2*count)*5; break;
13441344
case I_8266_DM_SM16825_5: size = (size + 2*count)*2*5; break;
1345-
#endif
1346-
#ifdef ARDUINO_ARCH_ESP32
1347-
// RMT buses (1x front and 1x back buffer)
1348-
case I_32_RN_NEO_4: size = (size + count)*2; break;
1349-
case I_32_RN_TM1_4: size = (size + count)*2; break;
1350-
case I_32_RN_UCS_3: size *= 2*2; break;
1351-
case I_32_RN_UCS_4: size = (size + count)*2*2; break;
1352-
case I_32_RN_FW6_5: size = (size + 2*count)*2; break;
1353-
case I_32_RN_2805_5: size = (size + 2*count)*2; break;
1354-
case I_32_RN_SM16825_5: size = (size + 2*count)*2*2; break;
1355-
// I2S1 bus or paralell buses (individual 1x front and 1 DMA (3x or 4x pixel count) or common back DMA buffers)
1345+
#else
1346+
// RMT buses (1x front and 1x back buffer, does not include small RMT buffer)
1347+
case I_32_RN_NEO_4 : // fallthrough
1348+
case I_32_RN_TM1_4 : size = (size + count)*2; break; // 4 channels
1349+
case I_32_RN_UCS_3 : size *= 2*2; break; // 16bit
1350+
case I_32_RN_UCS_4 : size = (size + count)*2*2; break; // 16bit, 4 channels
1351+
case I_32_RN_FW6_5 : // fallthrough
1352+
case I_32_RN_2805_5 : size = (size + 2*count)*2; break; // 5 channels
1353+
case I_32_RN_SM16825_5: size = (size + 2*count)*2*2; break; // 16bit, 5 channels
1354+
// I2S1 bus or paralell I2S1 buses (1x front, does not include DMA buffer which is front*cadence, a bit(?) more for LCD)
13561355
#ifndef CONFIG_IDF_TARGET_ESP32C3
1357-
case I_32_I2_NEO_3: size *= 4; break;
1358-
case I_32_I2_NEO_4: size = (size + count)*4; break;
1359-
case I_32_I2_400_3: size *= 4; break;
1360-
case I_32_I2_TM1_4: size = (size + count)*4; break;
1361-
case I_32_I2_TM2_3: size *= 4; break;
1362-
case I_32_I2_UCS_3: size *= 2*4; break;
1363-
case I_32_I2_UCS_4: size = (size + count)*2*4; break;
1364-
case I_32_I2_APA106_3: size *= 4; break;
1365-
case I_32_I2_FW6_5: size = (size + 2*count)*4; break;
1366-
case I_32_I2_2805_5: size = (size + 2*count)*4; break;
1367-
case I_32_I2_TM1914_3: size *= 4; break;
1368-
case I_32_I2_SM16825_5: size = (size + 2*count)*2*4; break;
1356+
case I_32_I2_NEO_3 : // fallthrough
1357+
case I_32_I2_400_3 : // fallthrough
1358+
case I_32_I2_TM2_3 : // fallthrough
1359+
case I_32_I2_APA106_3 : break; // do nothing, I2S uses single buffer + DMA buffer
1360+
case I_32_I2_NEO_4 : // fallthrough
1361+
case I_32_I2_TM1_4 : size = (size + count); break; // 4 channels
1362+
case I_32_I2_UCS_3 : size *= 2; break; // 16 bit
1363+
case I_32_I2_UCS_4 : size = (size + count)*2; break; // 16 bit, 4 channels
1364+
case I_32_I2_FW6_5 : // fallthrough
1365+
case I_32_I2_2805_5 : size = (size + 2*count); break; // 5 channels
1366+
case I_32_I2_SM16825_5: size = (size + 2*count)*2; break; // 16 bit, 5 channels
13691367
#endif
1368+
default : size *= 2; break; // everything else uses 2 buffers
13701369
#endif
1371-
// everything else uses 2 buffers
1372-
default: size *= 2; break;
13731370
}
13741371
return size;
13751372
}

wled00/data/settings_leds.htm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@
206206
if (maxM >= 10000) { //ESP32 RMT uses double buffer?
207207
mul = 2;
208208
}
209-
if (d.Sf.LD.checked) dbl = len * ch; // double buffering
209+
if (d.Sf.LD.checked) dbl = len * 4; // global buffer: 4 bytes per LED
210210
}
211211
return len * ch * mul + dbl;
212212
}

0 commit comments

Comments
 (0)