diff --git a/platformio.ini b/platformio.ini index 764343fd..710c942e 100644 --- a/platformio.ini +++ b/platformio.ini @@ -41,16 +41,15 @@ ; MoonModules entries ; =================== -default_envs = min_esp32_4MB, max_esp32_4MB, wemos_shield_esp32_4MB, max_esp32_16MB, wemos_shield_esp32_16MB, min_esp32_4MB_PSRAM ; , min_esp32S3_8MB, min_esp8266_4MB -; default_envs = min_esp32_4MB_PSRAM, min_esp32S3_8MB ;min_esp8266_4MB -; default_envs = min_esp32_4MB -; default_envs = max_esp32_4MB -; default_envs = wemos_shield_esp32_4MB -; default_envs = max_esp32_16MB -; default_envs = wemos_shield_esp32_16MB -; default_envs = min_esp32_4MB_PSRAM -; default_envs = min_esp32S3_8MB ;Error: BoardConfig: Board is not defined -; default_envs = min_esp8266_4MB ;error: section `.text1' will not fit in region `iram1_0_seg' +; default_envs = esp32_4MB_min, esp32_4MB_max, esp32_16MB_max, esp8266_4MB_min, esp32_4MB_PSRAM_max, esp32S3_8MB_max, wemos_shield_esp32_4MB_max, wemos_shield_esp32_16MB_max +; default_envs = esp32_4MB_min +default_envs = esp32_4MB_max ; recommended +; default_envs = esp32_16MB_max +; default_envs = esp8266_4MB_min +; default_envs = esp32_4MB_PSRAM_max +; default_envs = esp32S3_8MB_max +; default_envs = wemos_shield_esp32_4MB_max +; default_envs = wemos_shield_esp32_16MB_max src_dir = ./wled00 @@ -539,13 +538,9 @@ lib_deps = ${esp32s2.lib_deps} # MoonModules configs # ------------------------------------------------------------------------------ -[env:min_esp32_4MB_base] -board = esp32dev -platform = ${esp32.platform} -upload_speed = 460800 ; or 921600 -platform_packages = ${esp32.platform_packages} -build_unflags = ${common.build_unflags} -build_flags = ${common.build_flags_esp32} +; shared build flags and lib deps for minimum and maximum config +[common_mm] +build_flags_min = -Wall -Wformat -Woverflow -Wuninitialized -Winit-self -Warray-bounds ; enables more warnings -Wno-attributes -Wno-unused-variable -Wno-unused-function -Wno-deprecated-declarations ;disables some stupid warnings ; -Wno-misleading-indentation ; warning: unrecognized command line option '-Wno-misleading-indentation' @@ -555,24 +550,15 @@ build_flags = ${common.build_flags_esp32} -D WLED_USE_MY_CONFIG -D USERMOD_AUDIOREACTIVE -D UM_AUDIOREACTIVE_USE_NEW_FFT ; use latest (upstream) FFTLib, instead of older library midified by blazoncek. Slightly faster, more accurate, needs 2KB RAM extra - -D USERMOD_CUSTOMEFFECTS + -D USERMOD_CUSTOMEFFECTS ; WLEDSR usermod ; -D WLED_DEBUG ; lots of generic debug messages ; -D SR_DEBUG ; some extra debug messages from audioreactive -lib_deps = ${esp32.lib_deps} + +lib_deps_min = https://github.com/kosme/arduinoFFT#develop @ 1.9.2 ; used for USERMOD_AUDIOREACTIVE ; monitor_filters = esp32_exception_decoder ; used to show crash details -board_build.partitions = ${esp32.default_partitions} -board_build.f_flash = 80000000L ; use full 80MHz speed for flash (default = 40Mhz) -board_build.flash_mode = dio ; (dio = dual i/o; more compatible than qio = quad i/o) -[env:min_esp32_4MB] -extends = env:min_esp32_4MB_base -build_flags = ${env:min_esp32_4MB_base.build_flags} - -D WLED_RELEASE_NAME=min_esp32_4MB ; This will be included in the firmware.bin filename - -[env:max_esp32_4MB_base] -extends = env:min_esp32_4MB_base -build_flags = ${env:min_esp32_4MB_base.build_flags} +build_flags_max = -D WLED_MAX_USERMODS=9 ; default only 4-6 -D ARDUINO_USB_CDC_ON_BOOT=0 ; needed for arduino-esp32 >=2.0.4 -D WLED_USE_MY_CONFIG ; include custom my_config.h @@ -581,43 +567,100 @@ build_flags = ${env:min_esp32_4MB_base.build_flags} -D USERMOD_FOUR_LINE_DISPLAY -D USERMOD_ROTARY_ENCODER_UI -D USERMOD_AUTO_SAVE - ; -D USERMOD_CUSTOMEFFECTS ; WLEDSR usermod -D USERMOD_WEATHER ; WLEDSR usermod -D USERMOD_MPU6050_IMU ; gyro/accelero for USERMOD_GAMES (ONLY WORKS IF USERMOD_FOUR_LINE_DISPLAY NOT INCLUDED - I2C SHARING BUG) -D USERMOD_GAMES ; WLEDSR usermod -lib_deps = ${env:min_esp32_4MB_base.lib_deps} + +lib_deps_max = OneWire@~2.3.5 ; used for USERMOD_FOUR_LINE_DISPLAY and USERMOD_DALLASTEMPERATURE olikraus/U8g2 @ ^2.28.8 ; used for USERMOD_FOUR_LINE_DISPLAY ElectronicCats/MPU6050 @ 0.6.0 ; used for USERMOD_MPU6050_IMU -board_build.partitions = ${env:min_esp32_4MB_base.board_build.partitions} + +; end of common + +; base entries (without WLED_RELEASE_NAME) + +; esp32_4MB_min_base: basis for min entries and for max_base +[env:esp32_4MB_min_base] +board = esp32dev +platform = ${esp32.platform} +upload_speed = 460800 ; or 921600 +platform_packages = ${esp32.platform_packages} +build_unflags = ${common.build_unflags} +build_flags = ${common.build_flags_esp32} ${common_mm.build_flags_min} +lib_deps = ${esp32.lib_deps} ${common_mm.lib_deps_min} +board_build.partitions = ${esp32.default_partitions} +board_build.f_flash = 80000000L ; use full 80MHz speed for flash (default = 40Mhz) +board_build.flash_mode = dio ; (dio = dual i/o; more compatible than qio = quad i/o) + +;esp32_4MB_max_base: basis for max entries, uses esp32_4MB_min_base, build_flags_max and lib_deps_max +[env:esp32_4MB_max_base] +extends = env:esp32_4MB_min_base +build_flags = ${env:esp32_4MB_min_base.build_flags} ${common_mm.build_flags_max} +lib_deps = ${env:esp32_4MB_min_base.lib_deps} ${common_mm.lib_deps_max} +board_build.partitions = ${env:esp32_4MB_min_base.board_build.partitions} ; board_build.partitions = tools/WLED_ESP32-wrover_4MB.csv -[env:max_esp32_4MB] -extends = env:max_esp32_4MB_base -build_flags = ${env:max_esp32_4MB_base.build_flags} - -D WLED_RELEASE_NAME=max_esp32_4MB ; This will be included in the firmware.bin filename +;esp32_4MB_V4_max_base: basis for V4 entries, uses build_flags_min, build_flags_max, lib_deps_min and lib_deps_max +[env:esp32_4MB_V4_max_base] +board = esp32dev +upload_speed = 460800 ; or 921600 +platform = ${esp32.platformV4} +platform_packages = ${esp32.platformV4_packages} +build_unflags = ${common.build_unflags} +build_flags = ${common.build_flags} ${esp32.build_flagsV4} ${common_mm.build_flags_min} ${common_mm.build_flags_max} + -Wno-misleading-indentation +lib_deps = ${esp32.lib_depsV4} ${common_mm.lib_deps_min} ${common_mm.lib_deps_max} +board_build.partitions = ${esp32.default_partitions} +board_build.f_flash = 80000000L ; use full 80MHz speed for flash (default = 40Mhz) +board_build.flash_mode = dio ; (dio = dual i/o; more compatible than qio = quad i/o) -[env:max_esp32_16MB] -extends = env:max_esp32_4MB_base +; end of base entries + +; bin entries (with WLED_RELEASE_NAME) + +; esp32_4MB_min: bin entry, uses esp32_4MB_min_base +[env:esp32_4MB_min] +extends = env:esp32_4MB_min_base +build_flags = ${env:esp32_4MB_min_base.build_flags} + -D WLED_RELEASE_NAME=esp32_4MB_min ; This will be included in the firmware.bin filename +; RAM: [== ] 24.1% (used 78900 bytes from 327680 bytes) +; Flash: [======== ] 83.7% (used 1315729 bytes from 1572864 bytes) + +; esp32_4MB_max: bin entry, uses esp32_4MB_max_base +[env:esp32_4MB_max] +extends = env:esp32_4MB_max_base +build_flags = ${env:esp32_4MB_max_base.build_flags} + -D WLED_RELEASE_NAME=esp32_4MB_max ; This will be included in the firmware.bin filename +; RAM: [== ] 24.4% (used 79812 bytes from 327680 bytes) +; Flash: [========= ] 88.6% (used 1393397 bytes from 1572864 bytes) + +; esp32_16MB_max: bin entry, uses esp32_4MB_max_base and adds 16MB settings +[env:esp32_16MB_max] +extends = env:esp32_4MB_max_base board = esp32_twilord ; "TwilightLord" ESP32 with 16MB Flash board_build.partitions = tools/WLED_ESP32_16MB.csv ; for esp32_twilord with 16MB flash -build_flags = ${env:max_esp32_4MB_base.build_flags} - -D WLED_RELEASE_NAME=max_esp32_16MB ; This will be included in the firmware.bin filename +build_flags = ${env:esp32_4MB_max_base.build_flags} + -D WLED_RELEASE_NAME=esp32_16MB_max ; This will be included in the firmware.bin filename +; RAM: [== ] 24.4% (used 79812 bytes from 327680 bytes) +; Flash: [======= ] 66.4% (used 1393397 bytes from 2097152 bytes) -[env:min_esp8266_4MB] +; esp8266_4MB_min: bin entry for 8266, with 2D (WIP) +[env:esp8266_4MB_min] extends = env:d1_mini upload_speed = 460800 ;115200 build_flags = ${common.build_flags_esp8266} - -D WLED_RELEASE_NAME=min_esp8266_4MB ; This will be included in the firmware.bin filename + -D WLED_RELEASE_NAME=esp8266_4MB_min ; This will be included in the firmware.bin filename ; -D WLED_DEBUG -D WLED_DISABLE_ALEXA -D WLED_DISABLE_BLYNK -D WLED_DISABLE_HUESYNC ; -D WLED_DISABLE_2D - ; -D WLED_DISABLE_AUDIO ; -D USERMOD_AUDIOREACTIVE -UWLED_USE_MY_CONFIG ; monitor_filters = esp8266_exception_decoder +; RAM: [====== ] 58.7% (used 48056 bytes from 81920 bytes) +; Flash: [======== ] 75.7% (used 790428 bytes from 1044464 bytes) # ------------------------------------------------------------------------------ # MoonModules configs for IDF V4.4.x @@ -627,57 +670,29 @@ build_flags = ${common.build_flags_esp8266} ;; Warning: the build-in LittleFS seems to be "slightly different" from Lorol LittleFS. ;; When upgrading to the new framework, it might be necessary to first do a chip erase (make sure you have a backup of cfg.json and presets.json) ;; also SpiffsEditor (Async Webserver) has known problems in IDF4.4.x -[env:min_esp32_4MB_PSRAM] -extends = env:min_esp32_4MB_base + +; esp32_4MB_PSRAM_max: bin entry, uses esp32_4MB_V4_max_base and adds specific settings +[env:esp32_4MB_PSRAM_max] +extends = env:esp32_4MB_V4_max_base board = lolin_d32_pro ;board = esp32cam -; platform = ${esp32.platform} -; platform_packages = ${esp32.platform_packages} -platform = ${esp32.platformV4} -platform_packages = ${esp32.platformV4_packages} - -; upload_speed = 460800 ; or 921600 -; build_unflags = ${common.build_unflags} -;build_flags = ${common.build_flags} ${esp32.build_flags} -build_flags = ${common.build_flags} ${esp32.build_flagsV4} - -D WLED_RELEASE_NAME=min_esp32_4MB_PSRAM +build_flags = ${env:esp32_4MB_V4_max_base.build_flags} + -D WLED_RELEASE_NAME=esp32_4MB_PSRAM_max -D WLED_WATCHDOG_TIMEOUT=0 #-D WLED_DISABLE_BLYNK #-D WLED_DISABLE_BROWNOUT_DET -D ARDUINO_USB_CDC_ON_BOOT=0 ; needed for arduino-esp32 >=2.0.4; avoids errors on startup - ; -Wall -Wformat -Woverflow -Wuninitialized -Winit-self -Warray-bounds ; enables more warnings - ; -Wno-attributes -Wno-misleading-indentation -Wno-unused-variable -Wno-unused-function -Wno-deprecated-declarations ; disables some stupid warnings -D WLED_USE_PSRAM - ; -D ABL_MILLIAMPS_DEFAULT=1500 ; 850 not enough for 1024 leds - ; -D WLED_USE_MY_CONFIG - ; -D USERMOD_CUSTOMEFFECTS - ; -D USERMOD_AUDIOREACTIVE - ; -D UM_AUDIOREACTIVE_USE_NEW_FFT - ; -D WLED_DEBUG - ; -D SR_DEBUG +; RAM: [== ] 24.8% (used 81424 bytes from 327680 bytes) +; Flash: [==========] 99.8% (used 1570457 bytes from 1572864 bytes) +; 99.8% !!!! -;lib_deps = ${esp32.lib_deps} -lib_deps = ${esp32.lib_depsV4} - ; https://github.com/kosme/arduinoFFT#develop @ 1.9.2 - -; monitor_filters = esp32_exception_decoder -; board_build.partitions = ${esp32.default_partitions} -; board_build.f_flash = 80000000L -; board_build.flash_mode = dio - -[env:min_esp32S3_8MB] -extends = env:min_esp32_4MB_base +; esp32S3_8MB_max: bin entry, uses esp32_4MB_V4_max_base and adds specific settings. Override of lib_deps using lib_deps_min and lib_deps_max +[env:esp32S3_8MB_max] +extends = env:esp32_4MB_V4_max_base board = esp32-s3-devkitc-1 -platform = ${esp32.platformV4} -platform_packages = ${esp32.platformV4_packages} -; upload_speed = 460800 ; or 921600 -build_unflags = ${common.build_unflags} -build_flags = ${common.build_flags} ${esp32s3.build_flags} - -D WLED_RELEASE_NAME=min_esp32S3_8MB - #-D WLED_DISABLE_BLYNK #-D WLED_DISABLE_BROWNOUT_DET +build_flags = ${env:esp32_4MB_V4_max_base.build_flags} + -D WLED_RELEASE_NAME=esp32S3_8MB_max -D ARDUINO_USB_MODE=1 -D ARDUINO_USB_CDC_ON_BOOT=0 -D ARDUINO_USB_MSC_ON_BOOT=0 -D ARDUINO_USB_DFU_ON_BOOT=0 - ; -Wall -Wformat -Woverflow -Wuninitialized -Winit-self -Warray-bounds ; enables more warnings - ; -Wno-attributes -Wno-misleading-indentation -Wno-unused-variable -Wno-unused-function -Wno-deprecated-declarations ; disables some stupid warnings -D WLED_WATCHDOG_TIMEOUT=0 - ; -D ABL_MILLIAMPS_DEFAULT=1500 ; 850 not enough for 1024 leds -D LEDPIN=4 -D STATUSLED=39 -D BTNPIN=-1 @@ -685,36 +700,26 @@ build_flags = ${common.build_flags} ${esp32s3.build_flags} -D IRPIN=-1 -D HW_PIN_SDA=40 -D HW_PIN_SCL=41 - ; -D WLED_USE_MY_CONFIG - ; -D USERMOD_CUSTOMEFFECTS - ;; for audioreactive usermod - ; -D USERMOD_AUDIOREACTIVE - ; -D UM_AUDIOREACTIVE_USE_NEW_FFT -D AUDIOPIN=-1 -D I2S_SDPIN=16 -D I2S_CKPIN=17 -D I2S_WSPIN=47 -D ES7243_SDAPIN=8 -D ES7243_SCLPIN=18 - -lib_deps = ${esp32s3.lib_deps} - ;; for audioreactive usermod - ; https://github.com/kosme/arduinoFFT#develop @ 1.9.2 - +lib_deps = ${esp32s3.lib_deps} ${common_mm.lib_deps_min} ${common_mm.lib_deps_max} board_build.partitions = tools/WLED_ESP32_8MB.csv -; board_build.flash_mode = dio -; board_build.flash_mode = qio -; board_build.f_flash = 80000000L -; board_build.f_flash = 120000000L -; monitor_filters = esp32_exception_decoder +board_build.flash_mode = qio +; RAM: [== ] 24.7% (used 80984 bytes from 327680 bytes) +; Flash: [======= ] 69.0% (used 1447873 bytes from 2097152 bytes) # ------------------------------------------------------------------------------ # custom board configurations # ------------------------------------------------------------------------------ -[env:wemos_shield_esp32_4MB_base] -extends = env:max_esp32_4MB_base -build_flags = ${env:max_esp32_4MB_base.build_flags} +;wemos_shield_esp32_4MB_max_base: base entry, uses esp32_4MB_max_base +[env:wemos_shield_esp32_4MB_max_base] +extends = env:esp32_4MB_max_base +build_flags = ${env:esp32_4MB_max_base.build_flags} -D LEDPIN=16 -D RLYPIN=19 -D BTNPIN=17 @@ -724,17 +729,23 @@ build_flags = ${env:max_esp32_4MB_base.build_flags} -D FLD_PIN_SCL=22 -D FLD_PIN_SDA=21 ; -D ENCODER_DT_PIN=18 -D ENCODER_CLK_PIN=5 -D ENCODER_SW_PIN=19 -[env:wemos_shield_esp32_4MB] -extends = env:wemos_shield_esp32_4MB_base -build_flags = ${env:wemos_shield_esp32_4MB_base.build_flags} - -D WLED_RELEASE_NAME=wemos_shield_esp32_4MB ; This will be included in the firmware.bin filename +;wemos_shield_esp32_4MB_max: bin entry, uses wemos_shield_esp32_4MB_max_base +[env:wemos_shield_esp32_4MB_max] +extends = env:wemos_shield_esp32_4MB_max_base +build_flags = ${env:wemos_shield_esp32_4MB_max_base.build_flags} + -D WLED_RELEASE_NAME=wemos_shield_esp32_4MB_max ; This will be included in the firmware.bin filename +; RAM: [== ] 24.4% (used 79820 bytes from 327680 bytes) +; Flash: [========= ] 88.6% (used 1393421 bytes from 1572864 bytes) -[env:wemos_shield_esp32_16MB] -extends = env:wemos_shield_esp32_4MB_base +;wemos_shield_esp32_16MB_max: bin entry, uses wemos_shield_esp32_4MB_max_base and adds 16MB settings +[env:wemos_shield_esp32_16MB_max] +extends = env:wemos_shield_esp32_4MB_max_base board = esp32_twilord ; "TwilightLord" ESP32 with 16MB Flash board_build.partitions = tools/WLED_ESP32_16MB.csv ; for esp32_twilord with 16MB flash -build_flags = ${env:wemos_shield_esp32_4MB_base.build_flags} - -D WLED_RELEASE_NAME=wemos_shield_esp32_16MB ; This will be included in the firmware.bin filename +build_flags = ${env:wemos_shield_esp32_4MB_max_base.build_flags} + -D WLED_RELEASE_NAME=wemos_shield_esp32_16MB_max ; This will be included in the firmware.bin filename +; RAM: [== ] 24.4% (used 79820 bytes from 327680 bytes) +; Flash: [======= ] 66.4% (used 1393421 bytes from 2097152 bytes) [env:m5atom] board = esp32dev diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index e94efd5f..12a4acd0 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -109,7 +109,7 @@ void WS2812FX::setUpMatrix() { } // absolute matrix version of setPixelColor() -void IRAM_ATTR WS2812FX::setPixelColorXY(int x, int y, uint32_t col) +void IRAM_ATTR_YN WS2812FX::setPixelColorXY(int x, int y, uint32_t col) //WLEDSR: IRAM_ATTR conditionaly { #ifndef WLED_DISABLE_2D if (!isMatrix) return; // not a matrix set-up @@ -141,13 +141,13 @@ uint32_t WS2812FX::getPixelColorXY(uint16_t x, uint16_t y) { #ifndef WLED_DISABLE_2D // XY(x,y) - gets pixel index within current segment (often used to reference leds[] array element) -uint16_t IRAM_ATTR Segment::XY(uint16_t x, uint16_t y) { +uint16_t IRAM_ATTR_YN Segment::XY(uint16_t x, uint16_t y) { //WLEDSR: IRAM_ATTR conditionaly uint16_t width = virtualWidth(); // segment width in logical pixels uint16_t height = virtualHeight(); // segment height in logical pixels return (x%width) + (y%height) * width; } -void IRAM_ATTR Segment::setPixelColorXY(int x, int y, uint32_t col) +void IRAM_ATTR_YN Segment::setPixelColorXY(int x, int y, uint32_t col) //WLEDSR: IRAM_ATTR conditionaly { if (!strip.isMatrix) return; // not a matrix set-up if (x >= virtualWidth() || y >= virtualHeight() || x<0 || y<0) return; // if pixel would fall out of virtual segment just exit diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 3a3c0a88..ec8f808c 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -691,7 +691,7 @@ void xyFromBlock(uint16_t &x,uint16_t &y, uint16_t i, uint16_t vW, uint16_t vH, } -void IRAM_ATTR Segment::setPixelColor(int i, uint32_t col) +void IRAM_ATTR_YN Segment::setPixelColor(int i, uint32_t col) //WLEDSR: IRAM_ATTR conditionaly { int vStrip = i>>16; // hack to allow running on virtual strips (2D segment columns/rows) i &= 0xFFFF; diff --git a/wled00/const.h b/wled00/const.h index fbf510b4..369c1d41 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -431,4 +431,12 @@ #define HW_PIN_CSSPI SS #endif +// WLEDSR: IRAM_ATTR for 8266 causes error: section `.text1' will not fit in region `iram1_0_seg' +// error only in MM, not in upstream... tbd: find out why +#ifdef ARDUINO_ARCH_ESP32 + #define IRAM_ATTR_YN IRAM_ATTR +#else + #define IRAM_ATTR_YN +#endif + #endif diff --git a/wled00/json.cpp b/wled00/json.cpp index be619989..4749becb 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -35,7 +35,8 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId) if (id >= strip.getMaxSegments()) return; //WLEDSR: add compatibility for SR presets - // Serial.printf("before %d: %s %s %s %s\n", id, elem["start"].as().c_str(), elem["stop"].as().c_str(), elem["startY"].as().c_str(), elem["stopY"].as().c_str()); + #ifndef WLED_DISABLE_2D + // Serial.printf("before %d: %s %s %s %s\n", id, elem["start"].as().c_str(), elem["stop"].as().c_str(), elem["startY"].as().c_str(), elem["stopY"].as().c_str()); if (strip.isMatrix && !elem["start"].isNull() && !elem["stop"].isNull() && elem["startY"].isNull() && elem["stopY"].isNull()) { uint16_t start1=elem["start"], stop1=elem["stop"]; elem["start"] = start1%strip.matrixWidth; @@ -44,6 +45,7 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId) elem["stopY"]= strip.matrixWidth?((stop1-1) / strip.matrixWidth) + 1:0; // Serial.printf("after %s %s %s %s\n", elem["start"].as().c_str(), elem["stop"].as().c_str(), elem["startY"].as().c_str(), elem["stopY"].as().c_str()); } + #endif if (!elem["c1x"].isNull()) elem["c1"] = elem["c1x"]; if (!elem["c2x"].isNull()) elem["c2"] = elem["c2x"]; if (!elem["c3x"].isNull()) elem["c3"] = elem["c3x"];