Merge branch 'mdev' into audio_fastpath
This commit is contained in:
29
CHANGELOG.md
29
CHANGELOG.md
@@ -1,5 +1,34 @@
|
|||||||
## WLED changelog
|
## WLED changelog
|
||||||
|
|
||||||
|
#### Build 2306020
|
||||||
|
|
||||||
|
- Support for segment sets (PR #3171)
|
||||||
|
- Reduce sound simulation modes to 2 to facilitiate segment sets
|
||||||
|
- Trigger button immediately on press if all configured presets are the same (PR #3226)
|
||||||
|
- Changes for allowing Alexa to change light color to White when auto-calculating from RGB (PR #3211)
|
||||||
|
|
||||||
|
#### Build 2305280
|
||||||
|
- DDP protocol update (#3193)
|
||||||
|
- added PCF8574 I2C port expander support for Multi relay usermod
|
||||||
|
- MQTT multipacket (fragmented) message fix
|
||||||
|
- added option to retain MQTT brightness and color messages
|
||||||
|
- new ethernet board: @srg74 Ethernet Shield
|
||||||
|
- new 2D effects: Soap (#3184) & Octopus & Waving cell (credit @St3P40 https://github.com/80Stepko08)
|
||||||
|
- various fixes and enhancements
|
||||||
|
|
||||||
|
#### Build 2305090
|
||||||
|
- new ethernet board: @Wladi ABC! WLED Eth
|
||||||
|
- Battery usermod voltage calculation (#3116)
|
||||||
|
- custom palette editor (#3164)
|
||||||
|
- improvements in Dancing Shadows and Tartan effects
|
||||||
|
- UCS389x support
|
||||||
|
- switched to NeoPixelBus 2.7.5 (replaced NeoPixelBrightnessBus with NeoPixelBusLg)
|
||||||
|
- SPI bus clock selection (for LEDs) (#3173)
|
||||||
|
- DMX mode preset fix (#3134)
|
||||||
|
- iOS fix for scroll (#3182)
|
||||||
|
- Wordclock "Norddeutsch" fix (#3161)
|
||||||
|
- various fixes and enhancements
|
||||||
|
|
||||||
#### Build 2304090
|
#### Build 2304090
|
||||||
- updated Arduino ESP8266 core to 4.1.0 (newer compiler)
|
- updated Arduino ESP8266 core to 4.1.0 (newer compiler)
|
||||||
- updated NeoPixelBus to 2.7.3 (with support for UCS890x chipset)
|
- updated NeoPixelBus to 2.7.3 (with support for UCS890x chipset)
|
||||||
|
|||||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "wled",
|
"name": "wled",
|
||||||
"version": "0.14.0-b15.25",
|
"version": "0.14.0-b15.27",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "wled",
|
"name": "wled",
|
||||||
"version": "0.14.0-b15.25",
|
"version": "0.14.0-b15.27",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"clean-css": "^4.2.3",
|
"clean-css": "^4.2.3",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "wled",
|
"name": "wled",
|
||||||
"version": "0.14.0-b15.25",
|
"version": "0.14.0-b15.27",
|
||||||
"description": "Tools for WLED project",
|
"description": "Tools for WLED project",
|
||||||
"main": "tools/cdata.js",
|
"main": "tools/cdata.js",
|
||||||
"directories": {
|
"directories": {
|
||||||
|
|||||||
281
platformio.ini
281
platformio.ini
@@ -9,8 +9,9 @@
|
|||||||
# (use `platformio_override.ini` when building for your own board; see `platformio_override.ini.sample` for an example)
|
# (use `platformio_override.ini` when building for your own board; see `platformio_override.ini.sample` for an example)
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
# Release / CI binaries
|
# CI binaries
|
||||||
; default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth, esp32s2_saola, esp32c3, esp32s3dev_8MB
|
;; default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth # ESP32 variant builds are temporarily excluded from CI due to toolchain issues on the GitHub Actions Linux environment
|
||||||
|
; default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth, lolin_s2_mini, esp32c3dev, esp32s3dev_8MB
|
||||||
|
|
||||||
# Release binaries
|
# Release binaries
|
||||||
; default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth, lolin_s2_mini, esp32c3dev, esp32s3dev_8MB
|
; default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth, lolin_s2_mini, esp32c3dev, esp32s3dev_8MB
|
||||||
@@ -97,18 +98,28 @@ arduino_core_2_6_3 = espressif8266@2.3.3
|
|||||||
arduino_core_2_7_4 = espressif8266@2.6.2
|
arduino_core_2_7_4 = espressif8266@2.6.2
|
||||||
arduino_core_3_0_0 = espressif8266@3.0.0
|
arduino_core_3_0_0 = espressif8266@3.0.0
|
||||||
arduino_core_3_2_0 = espressif8266@3.2.0
|
arduino_core_3_2_0 = espressif8266@3.2.0
|
||||||
|
arduino_core_4_1_0 = espressif8266@4.1.0
|
||||||
|
|
||||||
# Development platforms
|
# Development platforms
|
||||||
arduino_core_develop = https://github.com/platformio/platform-espressif8266#develop
|
arduino_core_develop = https://github.com/platformio/platform-espressif8266#develop
|
||||||
arduino_core_git = https://github.com/platformio/platform-espressif8266#feature/stage
|
arduino_core_git = https://github.com/platformio/platform-espressif8266#feature/stage
|
||||||
|
|
||||||
# Platform to use for ESP8266
|
# Platform to use for ESP8266
|
||||||
platform_wled_default = ${common.arduino_core_3_2_0}
|
platform_wled_default = ${common.arduino_core_4_1_0}
|
||||||
# We use 2.7.4.7 for all, includes PWM flicker fix and Wstring optimization
|
# We use 2.7.4.7 for all, includes PWM flicker fix and Wstring optimization
|
||||||
platform_packages = tasmota/framework-arduinoespressif8266 @ 3.20704.7
|
#platform_packages = tasmota/framework-arduinoespressif8266 @ 3.20704.7
|
||||||
platformio/toolchain-xtensa @ ~2.40802.200502
|
platform_packages = platformio/framework-arduinoespressif8266
|
||||||
platformio/tool-esptool @ ~1.413.0
|
platformio/toolchain-xtensa @ ~2.100300.220621 #2.40802.200502
|
||||||
platformio/tool-esptoolpy @ ~1.30000.0
|
platformio/tool-esptool #@ ~1.413.0
|
||||||
|
platformio/tool-esptoolpy #@ ~1.30000.0
|
||||||
|
|
||||||
|
## previous platform for 8266, in case of problems with the new one
|
||||||
|
## you'll need makuna/NeoPixelBus@ 2.6.9 for arduino_core_3_2_0, which does not support Ucs890x
|
||||||
|
;; platform_wled_default = ${common.arduino_core_3_2_0}
|
||||||
|
;; platform_packages = tasmota/framework-arduinoespressif8266 @ 3.20704.7
|
||||||
|
;; platformio/toolchain-xtensa @ ~2.40802.200502
|
||||||
|
;; platformio/tool-esptool @ ~1.413.0
|
||||||
|
;; platformio/tool-esptoolpy @ ~1.30000.0
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# FLAGS: DEBUG
|
# FLAGS: DEBUG
|
||||||
@@ -147,6 +158,7 @@ build_flags =
|
|||||||
-DBEARSSL_SSL_BASIC
|
-DBEARSSL_SSL_BASIC
|
||||||
-D CORE_DEBUG_LEVEL=0
|
-D CORE_DEBUG_LEVEL=0
|
||||||
;-D NDEBUG ;; WLEDMM espressif docs say NDEBUG is not recommended. see https://docs.espressif.com/projects/esp-idf/en/v4.4.4/esp32/api-guides/performance/speed.html#not-recommended
|
;-D NDEBUG ;; WLEDMM espressif docs say NDEBUG is not recommended. see https://docs.espressif.com/projects/esp-idf/en/v4.4.4/esp32/api-guides/performance/speed.html#not-recommended
|
||||||
|
-Wno-attributes ;; silence warnings about unknown attribute 'maybe_unused' in NeoPixelBus
|
||||||
#build_flags for the IRremoteESP8266 library (enabled decoders have to appear here)
|
#build_flags for the IRremoteESP8266 library (enabled decoders have to appear here)
|
||||||
-D _IR_ENABLE_DEFAULT_=false
|
-D _IR_ENABLE_DEFAULT_=false
|
||||||
-D DECODE_HASH=true
|
-D DECODE_HASH=true
|
||||||
@@ -154,7 +166,7 @@ build_flags =
|
|||||||
-D DECODE_SONY=true
|
-D DECODE_SONY=true
|
||||||
-D DECODE_SAMSUNG=true
|
-D DECODE_SAMSUNG=true
|
||||||
-D DECODE_LG=true
|
-D DECODE_LG=true
|
||||||
; -Dregister= # remove warnings in C++17 due to use of deprecated register keyword by the FastLED library
|
;-Dregister= # remove warnings in C++17 due to use of deprecated register keyword by the FastLED library ;; warning: this breaks framework code on ESP32-C3 and ESP32-S2
|
||||||
-DWLED_USE_MY_CONFIG
|
-DWLED_USE_MY_CONFIG
|
||||||
; -D USERMOD_SENSORSTOMQTT
|
; -D USERMOD_SENSORSTOMQTT
|
||||||
#For ADS1115 sensor uncomment following
|
#For ADS1115 sensor uncomment following
|
||||||
@@ -164,6 +176,7 @@ build_unflags =
|
|||||||
|
|
||||||
build_flags_esp8266 = ${common.build_flags} ${esp8266.build_flags}
|
build_flags_esp8266 = ${common.build_flags} ${esp8266.build_flags}
|
||||||
build_flags_esp32 = ${common.build_flags} ${esp32.build_flags}
|
build_flags_esp32 = ${common.build_flags} ${esp32.build_flags}
|
||||||
|
build_flags_esp32_V4= ${common.build_flags} ${esp32_idf_V4.build_flags}
|
||||||
|
|
||||||
ldscript_1m128k = eagle.flash.1m128.ld
|
ldscript_1m128k = eagle.flash.1m128.ld
|
||||||
ldscript_2m512k = eagle.flash.2m512.ld
|
ldscript_2m512k = eagle.flash.2m512.ld
|
||||||
@@ -198,26 +211,25 @@ upload_speed = 115200
|
|||||||
# LIBRARIES: required dependencies
|
# LIBRARIES: required dependencies
|
||||||
# Please note that we don't always use the latest version of a library.
|
# Please note that we don't always use the latest version of a library.
|
||||||
#
|
#
|
||||||
# The following libraries have been included (and some of them changd) in the source:
|
# The following libraries have been included (and some of them changed) in the source:
|
||||||
# ArduinoJson@5.13.5, E131@1.0.0(changed), Time@1.5, Timezone@1.2.1
|
# ArduinoJson@5.13.5, E131@1.0.0(changed), Time@1.5, Timezone@1.2.1
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
lib_compat_mode = strict
|
lib_compat_mode = strict
|
||||||
lib_deps =
|
lib_deps =
|
||||||
;fastled/FastLED @ 3.6.0
|
fastled/FastLED @ 3.6.0 ;; 3.6.0 was release recently
|
||||||
https://github.com/FastLED/FastLED.git#master @3.6.0+sha.23c67b7 ;; up to 50% faster - using a "known good" hash, so we get predictable builds
|
;https://github.com/FastLED/FastLED.git#master @3.6.0+sha.23c67b7 ;; up to 50% faster - using a "known good" hash, so we get predictable builds
|
||||||
IRremoteESP8266 @ 2.8.2
|
IRremoteESP8266 @ 2.8.2
|
||||||
|
;;makuna/NeoPixelBus @ 2.7.5 ;; WLEDMM will be added in board specific sections
|
||||||
;;https://github.com/Aircoookie/ESPAsyncWebServer.git @ ~2.0.7
|
;;https://github.com/Aircoookie/ESPAsyncWebServer.git @ ~2.0.7
|
||||||
https://github.com/lost-hope/ESPAsyncWebServer.git#master ;; WLEDMM to display .log and .wled files in /edit
|
https://github.com/lost-hope/ESPAsyncWebServer.git#master ;; WLEDMM to display .log and .wled files in /edit
|
||||||
#For use of the TTGO T-Display ESP32 Module with integrated TFT display uncomment the following line
|
#For use of the TTGO T-Display ESP32 Module with integrated TFT display uncomment the following line
|
||||||
#TFT_eSPI
|
#TFT_eSPI
|
||||||
#For use SSD1306 OLED display uncomment following
|
#For compatible OLED display uncomment following
|
||||||
#U8g2@~2.28.8
|
#U8g2 #@ ~2.33.15
|
||||||
#U8g2@~2.32.10
|
#For Dallas sensor uncomment following
|
||||||
#For Dallas sensor uncomment following 2 lines
|
#OneWire @ ~2.3.7
|
||||||
#OneWire@~2.3.5
|
|
||||||
#milesburton/DallasTemperature@^3.9.0
|
|
||||||
#For BME280 sensor uncomment following
|
#For BME280 sensor uncomment following
|
||||||
#BME280@~3.0.0
|
#BME280 @ ~3.0.0
|
||||||
; adafruit/Adafruit BMP280 Library @ 2.1.0
|
; adafruit/Adafruit BMP280 Library @ 2.1.0
|
||||||
; adafruit/Adafruit CCS811 Library @ 1.0.4
|
; adafruit/Adafruit CCS811 Library @ 1.0.4
|
||||||
; adafruit/Adafruit Si7021 Library @ 1.4.0
|
; adafruit/Adafruit Si7021 Library @ 1.4.0
|
||||||
@@ -232,8 +244,9 @@ build_flags =
|
|||||||
-DESP8266
|
-DESP8266
|
||||||
-DFP_IN_IROM
|
-DFP_IN_IROM
|
||||||
;-Wno-deprecated-declarations
|
;-Wno-deprecated-declarations
|
||||||
;-Wno-register ;; leaves some warnings when compiling C files: command-line option '-Wno-register' is valid for C++/ObjC++ but not for C
|
-Wno-register ;; leaves some warnings when compiling C files: command-line option '-Wno-register' is valid for C++/ObjC++ but not for C
|
||||||
;-Wno-misleading-indentation
|
;-Dregister= # remove warnings in C++17 due to use of deprecated register keyword by the FastLED library ;; warning: this can be dangerous
|
||||||
|
-Wno-misleading-indentation
|
||||||
; NONOSDK22x_190703 = 2.2.2-dev(38a443e)
|
; NONOSDK22x_190703 = 2.2.2-dev(38a443e)
|
||||||
-DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_190703
|
-DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_190703
|
||||||
; lwIP 2 - Higher Bandwidth no Features
|
; lwIP 2 - Higher Bandwidth no Features
|
||||||
@@ -245,11 +258,12 @@ build_flags =
|
|||||||
; restrict to minimal mime-types
|
; restrict to minimal mime-types
|
||||||
-DMIMETYPE_MINIMAL
|
-DMIMETYPE_MINIMAL
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
#https://github.com/lorol/LITTLEFS.git
|
#https://github.com/lorol/LITTLEFS.git
|
||||||
ESPAsyncTCP @ 1.2.2
|
ESPAsyncTCP @ 1.2.2
|
||||||
ESPAsyncUDP
|
ESPAsyncUDP
|
||||||
makuna/NeoPixelBus @ 2.6.9
|
;; makuna/NeoPixelBus @ 2.6.9 ;; WLEDMM use if you have problems with 2.7.5
|
||||||
|
makuna/NeoPixelBus @ 2.7.5
|
||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
|
|
||||||
[esp32]
|
[esp32]
|
||||||
@@ -259,12 +273,12 @@ platform = espressif32@3.5.0
|
|||||||
platform_packages = framework-arduinoespressif32 @ https://github.com/Aircoookie/arduino-esp32.git#1.0.6.4
|
platform_packages = framework-arduinoespressif32 @ https://github.com/Aircoookie/arduino-esp32.git#1.0.6.4
|
||||||
|
|
||||||
build_flags = -g
|
build_flags = -g
|
||||||
-DARDUINO_ARCH_ESP32 -DESP32
|
-DARDUINO_ARCH_ESP32
|
||||||
#-DCONFIG_LITTLEFS_FOR_IDF_3_2
|
#-DCONFIG_LITTLEFS_FOR_IDF_3_2
|
||||||
-D CONFIG_ASYNC_TCP_USE_WDT=0
|
-D CONFIG_ASYNC_TCP_USE_WDT=0
|
||||||
#use LITTLEFS library by lorol in ESP32 core 1.x.x instead of built-in in 2.x.x
|
#use LITTLEFS library by lorol in ESP32 core 1.x.x instead of built-in in 2.x.x
|
||||||
-D LOROL_LITTLEFS
|
-D LOROL_LITTLEFS
|
||||||
; -DARDUINO_USB_CDC_ON_BOOT=0 ;; this flag is mandatory for "classic ESP32" when builing with arduino-esp32 >=2.0.3
|
; -DARDUINO_USB_CDC_ON_BOOT=0 ;; this flag is mandatory for "classic ESP32" when building with arduino-esp32 >=2.0.3
|
||||||
|
|
||||||
default_partitions = tools/WLED_ESP32_4MB_1MB_FS.csv ;; WLED standard for 4MB flash: 1.4MB firmware, 1MB filesystem
|
default_partitions = tools/WLED_ESP32_4MB_1MB_FS.csv ;; WLED standard for 4MB flash: 1.4MB firmware, 1MB filesystem
|
||||||
;default_partitions = tools/WLED_ESP32_4MB_256KB_FS.csv ;; Alternative for 4MB flash: 1.8MB firmware, 256KB filesystem (esptool erase_flash needed before changing)
|
;default_partitions = tools/WLED_ESP32_4MB_256KB_FS.csv ;; Alternative for 4MB flash: 1.8MB firmware, 256KB filesystem (esptool erase_flash needed before changing)
|
||||||
@@ -274,26 +288,26 @@ lib_deps =
|
|||||||
; https://github.com/lorol/LITTLEFS.git
|
; https://github.com/lorol/LITTLEFS.git
|
||||||
; WLEDMM specific: use patched version of lorol LittleFS
|
; WLEDMM specific: use patched version of lorol LittleFS
|
||||||
https://github.com/softhack007/LITTLEFS-threadsafe.git#master
|
https://github.com/softhack007/LITTLEFS-threadsafe.git#master
|
||||||
;;makuna/NeoPixelBus @ 2.6.9 ;; WLEDMM default
|
makuna/NeoPixelBus @ 2.7.5
|
||||||
makuna/NeoPixelBus @ 2.7.1
|
|
||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
|
|
||||||
|
;; WLEDMM begin
|
||||||
|
|
||||||
;; ** For compiling with latest Frameworks (IDF4.4.x and arduino-esp32 v2.0.x) **
|
;; ** For compiling with latest Frameworks (IDF4.4.x and arduino-esp32 v2.0.x) **
|
||||||
;;; standard V4 platform
|
;;; previous standard V4 platform
|
||||||
platformV4 = espressif32@ ~5.1.1
|
platformV4_pre = espressif32@ ~5.1.1
|
||||||
platformV4_packages =
|
platformV4_packages_pre =
|
||||||
platformio/framework-arduinoespressif32@ ~3.20004.0
|
platformio/framework-arduinoespressif32@ ~3.20004.0
|
||||||
toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 ; required for platform version < 5.3.0, remove this line when upgrading to platform >=5.3.0
|
toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 ; required for platform version < 5.3.0, remove this line when upgrading to platform >=5.3.0
|
||||||
|
;;; standard V4 platform
|
||||||
;;; newer V4 platform - may help in case you experience flash corruption and boot loops
|
platformV4 = espressif32@5.2.0
|
||||||
platformV4_new = espressif32@ ~5.2.0
|
platformV4_packages =
|
||||||
platformV4_new_packages =
|
|
||||||
toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 ; required for platform version < 5.3.0, remove this line when upgrading to platform >=5.3.0
|
toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 ; required for platform version < 5.3.0, remove this line when upgrading to platform >=5.3.0
|
||||||
|
|
||||||
;;; tasmota platform
|
;;; experimental: V4 platform with latest arduino-esp32 2.0.9 + ESP-IDF 4.4.4 (may or may not work)
|
||||||
;platformV4 = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.5.1/platform-espressif32-2.0.5.1.zip
|
platformV4_xp = espressif32@ ~6.3.0
|
||||||
;platformV4_packages =
|
platformV4_packages_xp = platformio/framework-arduinoespressif32 @ ~3.20009.0 ;; arduino-esp32 v2.0.9+
|
||||||
;;; V4.4.x build flags (without LOROL_LITTLEFS)
|
|
||||||
build_flagsV4 = -g
|
build_flagsV4 = -g
|
||||||
-DARDUINO_ARCH_ESP32 -DESP32
|
-DARDUINO_ARCH_ESP32 -DESP32
|
||||||
-DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE
|
-DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE
|
||||||
@@ -302,27 +316,59 @@ build_flagsV4 = -g
|
|||||||
;;; V4.4.x libraries (without LOROL_LITTLEFS; with newer NeoPixelBus)
|
;;; V4.4.x libraries (without LOROL_LITTLEFS; with newer NeoPixelBus)
|
||||||
lib_depsV4 =
|
lib_depsV4 =
|
||||||
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 ;; WLEDMM this must be first in the list, otherwise Aircoookie/ESPAsyncWebServer pulls in an older version of AsyncTCP !!
|
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 ;; WLEDMM this must be first in the list, otherwise Aircoookie/ESPAsyncWebServer pulls in an older version of AsyncTCP !!
|
||||||
makuna/NeoPixelBus @ 2.7.3
|
makuna/NeoPixelBus @ 2.7.5
|
||||||
|
${env.lib_deps}
|
||||||
|
|
||||||
|
;; WLEDMM end
|
||||||
|
|
||||||
|
[esp32_idf_V4]
|
||||||
|
;; experimental build environment for ESP32 using ESP-IDF 4.4.x / arduino-esp32 v2.0.5
|
||||||
|
;; very similar to the normal ESP32 flags, but omitting Lorol LittleFS, as littlefs is included in the new framework already.
|
||||||
|
;;
|
||||||
|
;; please note that you can NOT update existing ESP32 installs with a "V4" build. Also updating by OTA will not work properly.
|
||||||
|
;; You need to completely erase your device (esptool erase_flash) first, then install the "V4" build from VSCode+platformio.
|
||||||
|
platform = espressif32@5.2.0
|
||||||
|
platform_packages =
|
||||||
|
toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 ; required for platform version < 5.3.0, remove this line when upgrading to platform >=5.3.0
|
||||||
|
build_flags = -g
|
||||||
|
-Wshadow=compatible-local ;; emit warning in case a local variable "shadows" another local one
|
||||||
|
-DARDUINO_ARCH_ESP32 -DESP32
|
||||||
|
#-DCONFIG_LITTLEFS_FOR_IDF_3_2
|
||||||
|
-D CONFIG_ASYNC_TCP_USE_WDT=0
|
||||||
|
-DARDUINO_USB_CDC_ON_BOOT=0 ;; this flag is mandatory for "classic ESP32" when building with arduino-esp32 >=2.0.3
|
||||||
|
default_partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
|
||||||
|
lib_deps =
|
||||||
|
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
|
||||||
|
makuna/NeoPixelBus @ 2.7.5
|
||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
|
|
||||||
[esp32s2]
|
[esp32s2]
|
||||||
|
;; generic definitions for all ESP32-S2 boards
|
||||||
|
platform = espressif32@5.2.0
|
||||||
|
platform_packages =
|
||||||
|
toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 ; required for platform version < 5.3.0, remove this line when upgrading to platform >=5.3.0
|
||||||
build_flags = -g
|
build_flags = -g
|
||||||
-DARDUINO_ARCH_ESP32 -DESP32 ;; WLEDMM
|
-DARDUINO_ARCH_ESP32 -DESP32 ;; WLEDMM
|
||||||
-DARDUINO_ARCH_ESP32S2
|
-DARDUINO_ARCH_ESP32S2
|
||||||
-DCONFIG_IDF_TARGET_ESP32S2
|
-DCONFIG_IDF_TARGET_ESP32S2=1
|
||||||
-DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE ;; WLEDMM
|
-DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE ;; WLEDMM
|
||||||
-D CONFIG_ASYNC_TCP_USE_WDT=0
|
-D CONFIG_ASYNC_TCP_USE_WDT=0
|
||||||
|
-DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0
|
||||||
-DCO
|
-DCO
|
||||||
-DARDUINO_USB_MODE=0 ;; this flag is mandatory for ESP32-S2 !
|
-DARDUINO_USB_MODE=0 ;; this flag is mandatory for ESP32-S2 !
|
||||||
;; please make sure that the following flags are properly set (to 0 or 1) by your board.json, or included in your custom platformio_override.ini entry:
|
;; please make sure that the following flags are properly set (to 0 or 1) by your board.json, or included in your custom platformio_override.ini entry:
|
||||||
;; ARDUINO_USB_CDC_ON_BOOT, ARDUINO_USB_MSC_ON_BOOT, ARDUINO_USB_DFU_ON_BOOT
|
;; ARDUINO_USB_CDC_ON_BOOT
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0 ;; WLEDMM this must be first in the list, otherwise Aircoookie/ESPAsyncWebServer pulls in an older version of AsyncTCP !!
|
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
|
||||||
makuna/NeoPixelBus @ 2.7.3 ;; WLEDMM - new version is more stable on -S2
|
makuna/NeoPixelBus @ 2.7.5
|
||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
|
|
||||||
[esp32c3]
|
[esp32c3]
|
||||||
|
;; generic definitions for all ESP32-C3 boards
|
||||||
|
platform = espressif32@5.2.0
|
||||||
|
platform_packages =
|
||||||
|
toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 ; required for platform version < 5.3.0, remove this line when upgrading to platform >=5.3.0
|
||||||
build_flags = -g
|
build_flags = -g
|
||||||
-DARDUINO_ARCH_ESP32 -DESP32 ;; WLEDMM
|
-DARDUINO_ARCH_ESP32 -DESP32 ;; WLEDMM
|
||||||
-DARDUINO_ARCH_ESP32C3
|
-DARDUINO_ARCH_ESP32C3
|
||||||
@@ -335,20 +381,20 @@ build_flags = -g
|
|||||||
;; ARDUINO_USB_CDC_ON_BOOT
|
;; ARDUINO_USB_CDC_ON_BOOT
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
fastled/FastLED @ 3.5.0
|
|
||||||
IRremoteESP8266 @ ~2.8.2
|
|
||||||
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
|
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
|
||||||
;;https://github.com/Aircoookie/ESPAsyncWebServer.git @ ~2.0.7
|
makuna/NeoPixelBus @ 2.7.5
|
||||||
https://github.com/lost-hope/ESPAsyncWebServer.git#master ;; WLEDMM to display .log and .wled files in /edit
|
${env.lib_deps}
|
||||||
makuna/NeoPixelBus @ 2.7.3 ;; WLEDMM - new version is more stable on -C3
|
|
||||||
|
|
||||||
[esp32s3]
|
[esp32s3]
|
||||||
;; generic definitions for all ESP32-S3 boards
|
;; generic definitions for all ESP32-S3 boards
|
||||||
|
platform = espressif32@5.2.0
|
||||||
|
platform_packages =
|
||||||
|
toolchain-riscv32-esp @ 8.4.0+2021r2-patch5 ; required for platform version < 5.3.0, remove this line when upgrading to platform >=5.3.0
|
||||||
build_flags = -g
|
build_flags = -g
|
||||||
-DESP32
|
-DESP32
|
||||||
-DARDUINO_ARCH_ESP32
|
-DARDUINO_ARCH_ESP32
|
||||||
-DARDUINO_ARCH_ESP32S3
|
-DARDUINO_ARCH_ESP32S3
|
||||||
-DCONFIG_IDF_TARGET_ESP32S3
|
-DCONFIG_IDF_TARGET_ESP32S3=1
|
||||||
-DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE ;; WLEDMM
|
-DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE ;; WLEDMM
|
||||||
-D CONFIG_ASYNC_TCP_USE_WDT=0
|
-D CONFIG_ASYNC_TCP_USE_WDT=0
|
||||||
-DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_DFU_ON_BOOT=0
|
-DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_DFU_ON_BOOT=0
|
||||||
@@ -358,7 +404,7 @@ build_flags = -g
|
|||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
|
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
|
||||||
makuna/NeoPixelBus @ 2.7.3
|
makuna/NeoPixelBus @ 2.7.5
|
||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
|
|
||||||
|
|
||||||
@@ -455,6 +501,21 @@ board_build.partitions = ${esp32.default_partitions}
|
|||||||
board_build.f_flash = 80000000L
|
board_build.f_flash = 80000000L
|
||||||
board_build.flash_mode = qio
|
board_build.flash_mode = qio
|
||||||
|
|
||||||
|
[env:esp32dev_V4_dio80]
|
||||||
|
;; experimental ESP32 env using ESP-IDF V4.4.x
|
||||||
|
;; Warning: this build environment is not stable!!
|
||||||
|
;; please erase your device before installing.
|
||||||
|
board = esp32dev
|
||||||
|
platform = ${esp32_idf_V4.platform}
|
||||||
|
platform_packages = ${esp32_idf_V4.platform_packages}
|
||||||
|
build_unflags = ${common.build_unflags}
|
||||||
|
build_flags = ${common.build_flags} ${esp32_idf_V4.build_flags} -D WLED_RELEASE_NAME=ESP32_V4_qio80 #-D WLED_DISABLE_BROWNOUT_DET
|
||||||
|
lib_deps = ${esp32_idf_V4.lib_deps}
|
||||||
|
monitor_filters = esp32_exception_decoder
|
||||||
|
board_build.partitions = ${esp32_idf_V4.default_partitions}
|
||||||
|
board_build.f_flash = 80000000L
|
||||||
|
board_build.flash_mode = dio
|
||||||
|
|
||||||
[env:esp32_eth]
|
[env:esp32_eth]
|
||||||
board = esp32-poe
|
board = esp32-poe
|
||||||
platform = ${esp32.platform}
|
platform = ${esp32.platform}
|
||||||
@@ -467,51 +528,45 @@ board_build.partitions = ${esp32.default_partitions}
|
|||||||
|
|
||||||
[env:esp32s2_saola]
|
[env:esp32s2_saola]
|
||||||
board = esp32-s2-saola-1
|
board = esp32-s2-saola-1
|
||||||
;platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.2/platform-tasmota-espressif32-2.0.2.zip
|
platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.2/platform-tasmota-espressif32-2.0.2.zip
|
||||||
;platform_packages =
|
platform_packages =
|
||||||
platform = ${esp32.platformV4}
|
framework = arduino
|
||||||
platform_packages = ${esp32.platformV4_packages}
|
|
||||||
board_build.partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
|
board_build.partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
|
||||||
board_build.flash_mode = qio
|
board_build.flash_mode = qio
|
||||||
upload_speed = 460800
|
upload_speed = 460800
|
||||||
build_unflags = ${common.build_unflags}
|
build_unflags = ${common.build_unflags}
|
||||||
build_flags = ${common.build_flags} ${esp32s2.build_flags} #-D WLED_RELEASE_NAME=S2_saola
|
build_flags = ${common.build_flags} ${esp32s2.build_flags} #-D WLED_RELEASE_NAME=S2_saola
|
||||||
|
-DARDUINO_USB_CDC_ON_BOOT=1
|
||||||
lib_deps = ${esp32s2.lib_deps}
|
lib_deps = ${esp32s2.lib_deps}
|
||||||
|
|
||||||
[env:esp32c3dev] ;WLEDMM, merged with latest change on upstream (renamed from env:esp32c3)
|
[env:esp32c3dev]
|
||||||
|
extends = esp32c3
|
||||||
|
platform = ${esp32c3.platform}
|
||||||
|
platform_packages = ${esp32c3.platform_packages}
|
||||||
|
framework = arduino
|
||||||
board = esp32-c3-devkitm-1
|
board = esp32-c3-devkitm-1
|
||||||
platform = ${esp32.platformV4} ;; standard platform, well-tested on -C3, good compatibility with WLED
|
|
||||||
platform_packages = ${esp32.platformV4_packages} ;; use with standard platform
|
|
||||||
board_build.partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
|
board_build.partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
|
||||||
build_flags = ${common.build_flags} ${esp32c3.build_flags} -D WLED_RELEASE_NAME=ESP32-C3
|
build_flags = ${common.build_flags} ${esp32c3.build_flags} #-D WLED_RELEASE_NAME=ESP32-C3
|
||||||
-D WLED_WATCHDOG_TIMEOUT=0
|
-D WLED_WATCHDOG_TIMEOUT=0
|
||||||
; -DARDUINO_USB_CDC_ON_BOOT=1 ;; for virtual USB
|
; -DARDUINO_USB_CDC_ON_BOOT=1 ;; for virtual CDC USB
|
||||||
-DARDUINO_USB_CDC_ON_BOOT=0 ;; no virtual USB
|
-DARDUINO_USB_CDC_ON_BOOT=0 ;; for serial-to-USB chip
|
||||||
-D CONFIG_LITTLEFS_FOR_IDF_3_2 ; WLEDMM
|
|
||||||
-D WLED_USE_MY_CONFIG ; WLEDMM
|
|
||||||
; -D USERMOD_AUDIOREACTIVE ; WLEDMM
|
|
||||||
-D USERMOD_ARTIFX ; WLEDMM
|
|
||||||
upload_speed = 460800
|
upload_speed = 460800
|
||||||
build_unflags = ${common.build_unflags}
|
build_unflags = ${common.build_unflags}
|
||||||
lib_deps = ${esp32c3.lib_deps}
|
lib_deps = ${esp32c3.lib_deps}
|
||||||
; https://github.com/blazoncek/arduinoFFT.git
|
|
||||||
|
|
||||||
[env:esp32s3dev_8MB]
|
[env:esp32s3dev_8MB]
|
||||||
;; ESP32-S3-DevKitC-1 development board, with 8MB FLASH, no PSRAM (flash_mode: qio)
|
;; ESP32-S3-DevKitC-1 development board, with 8MB FLASH, no PSRAM (flash_mode: qio)
|
||||||
board = esp32-s3-devkitc-1
|
board = esp32-s3-devkitc-1
|
||||||
;platform = espressif32@5.1.1
|
platform = ${esp32s3.platform}
|
||||||
;platform_packages = platformio/framework-arduinoespressif32@3.20004.220825
|
platform_packages = ${esp32s3.platform_packages}
|
||||||
platform = ${esp32.platformV4}
|
upload_speed = 921600 ; or 460800
|
||||||
platform_packages = ${esp32.platformV4_packages}
|
|
||||||
upload_speed = 921600
|
|
||||||
build_unflags = ${common.build_unflags}
|
build_unflags = ${common.build_unflags}
|
||||||
build_flags = ${common.build_flags} ${esp32s3.build_flags} -D CONFIG_LITTLEFS_FOR_IDF_3_2 -D WLED_WATCHDOG_TIMEOUT=0 -D ARDUINO_USB_MODE=1 -D ARDUINO_USB_CDC_ON_BOOT=0 -D ARDUINO_USB_MSC_ON_BOOT=0
|
build_flags = ${common.build_flags} ${esp32s3.build_flags}
|
||||||
-D WLED_RELEASE_NAME=ESP32-S3
|
-D CONFIG_LITTLEFS_FOR_IDF_3_2 -D WLED_WATCHDOG_TIMEOUT=0
|
||||||
-D WLED_USE_MY_CONFIG
|
-D ARDUINO_USB_CDC_ON_BOOT=0 ;; -D ARDUINO_USB_MODE=1 ;; for boards with serial-to-USB chip
|
||||||
-D USERMOD_AUDIOREACTIVE
|
;-D ARDUINO_USB_CDC_ON_BOOT=1 ;; -D ARDUINO_USB_MODE=0 ;; for boards with USB-OTG connector only (USBCDC or "TinyUSB")
|
||||||
-D USERMOD_ARTIFX
|
;-D WLED_DEBUG
|
||||||
lib_deps = ${esp32s3.lib_deps}
|
lib_deps = ${esp32s3.lib_deps}
|
||||||
https://github.com/blazoncek/arduinoFFT.git
|
|
||||||
board_build.partitions = tools/WLED_ESP32_8MB.csv
|
board_build.partitions = tools/WLED_ESP32_8MB.csv
|
||||||
board_build.f_flash = 80000000L
|
board_build.f_flash = 80000000L
|
||||||
board_build.flash_mode = qio
|
board_build.flash_mode = qio
|
||||||
@@ -523,13 +578,14 @@ monitor_filters = esp32_exception_decoder
|
|||||||
;board = um_tinys3 ; -> needs workaround from https://github.com/Aircoookie/WLED/pull/2905#issuecomment-1328049860
|
;board = um_tinys3 ; -> needs workaround from https://github.com/Aircoookie/WLED/pull/2905#issuecomment-1328049860
|
||||||
;board = esp32s3box ; -> error: 'esp32_adc2gpio' was not declared in this scope
|
;board = esp32s3box ; -> error: 'esp32_adc2gpio' was not declared in this scope
|
||||||
board = esp32-s3-devkitc-1 ; -> compiles, but does not support PSRAM
|
board = esp32-s3-devkitc-1 ; -> compiles, but does not support PSRAM
|
||||||
platform = ${esp32.platformV4_new} ;; alternative platform, might help in case you experience bootloops due to corrupted flash filesystem
|
platform = ${esp32s3.platform}
|
||||||
platform_packages = ${esp32.platformV4_new_packages}
|
platform_packages = ${esp32s3.platform_packages}
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
build_unflags = ${common.build_unflags}
|
build_unflags = ${common.build_unflags}
|
||||||
build_flags = ${common.build_flags} ${esp32s3.build_flags}
|
build_flags = ${common.build_flags} ${esp32s3.build_flags}
|
||||||
-D CONFIG_LITTLEFS_FOR_IDF_3_2 -D WLED_WATCHDOG_TIMEOUT=0
|
-D CONFIG_LITTLEFS_FOR_IDF_3_2 -D WLED_WATCHDOG_TIMEOUT=0
|
||||||
-D ARDUINO_USB_MODE=1 -D ARDUINO_USB_MSC_ON_BOOT=0 ; -D ARDUINO_USB_CDC_ON_BOOT=0
|
;-D ARDUINO_USB_CDC_ON_BOOT=0 ;; -D ARDUINO_USB_MODE=1 ;; for boards with serial-to-USB chip
|
||||||
|
-D ARDUINO_USB_CDC_ON_BOOT=1 ;; -D ARDUINO_USB_MODE=0 ;; for boards with USB-OTG connector only (USBCDC or "TinyUSB")
|
||||||
; -D WLED_RELEASE_NAME=ESP32-S3_PSRAM
|
; -D WLED_RELEASE_NAME=ESP32-S3_PSRAM
|
||||||
-D WLED_USE_PSRAM -DBOARD_HAS_PSRAM ; tells WLED that PSRAM shall be used
|
-D WLED_USE_PSRAM -DBOARD_HAS_PSRAM ; tells WLED that PSRAM shall be used
|
||||||
lib_deps = ${esp32s3.lib_deps}
|
lib_deps = ${esp32s3.lib_deps}
|
||||||
@@ -601,16 +657,17 @@ build_flags = ${common.build_flags_esp8266} -D LEDPIN=12 -D IRPIN=-1 -D RLYPIN=2
|
|||||||
lib_deps = ${esp8266.lib_deps}
|
lib_deps = ${esp8266.lib_deps}
|
||||||
|
|
||||||
[env:lolin_s2_mini]
|
[env:lolin_s2_mini]
|
||||||
;platform = espressif32@5.1.1
|
platform = ${esp32s2.platform}
|
||||||
platform = ${esp32.platformV4}
|
platform_packages = ${esp32s2.platform_packages}
|
||||||
platform_packages = ${esp32.platformV4_packages}
|
|
||||||
board = lolin_s2_mini
|
board = lolin_s2_mini
|
||||||
board_build.partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
|
board_build.partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
|
||||||
build_unflags = ${common.build_unflags}
|
build_unflags = ${common.build_unflags} -DARDUINO_USB_CDC_ON_BOOT=1
|
||||||
build_flags = ${common.build_flags} ${esp32s2.build_flags} -D WLED_RELEASE_NAME=LolinS2
|
build_flags = ${common.build_flags} ${esp32s2.build_flags} #-D WLED_RELEASE_NAME=LolinS2
|
||||||
-DBOARD_HAS_PSRAM
|
-DBOARD_HAS_PSRAM
|
||||||
-D ARDUINO_USB_CDC_ON_BOOT
|
-DARDUINO_USB_CDC_ON_BOOT=0
|
||||||
;-D ARDUINO_USB_CDC_ON_BOOT=0
|
-DARDUINO_USB_MSC_ON_BOOT=0
|
||||||
|
-DARDUINO_USB_DFU_ON_BOOT=0
|
||||||
|
-DLOLIN_WIFI_FIX ; seems to work much better with this
|
||||||
-D WLED_USE_PSRAM
|
-D WLED_USE_PSRAM
|
||||||
-D WLED_WATCHDOG_TIMEOUT=0
|
-D WLED_WATCHDOG_TIMEOUT=0
|
||||||
-D CONFIG_ASYNC_TCP_USE_WDT=0
|
-D CONFIG_ASYNC_TCP_USE_WDT=0
|
||||||
@@ -623,22 +680,36 @@ build_flags = ${common.build_flags} ${esp32s2.build_flags} -D WLED_RELEASE_NAME
|
|||||||
-D HW_PIN_CLOCKSPI=7
|
-D HW_PIN_CLOCKSPI=7
|
||||||
-D HW_PIN_MOSISPI=11 ;WLEDMM renamed from HW_PIN_DATASPI
|
-D HW_PIN_MOSISPI=11 ;WLEDMM renamed from HW_PIN_DATASPI
|
||||||
-D HW_PIN_MISOSPI=9
|
-D HW_PIN_MISOSPI=9
|
||||||
; -D STATUSLED=15
|
; -D STATUSLED=15
|
||||||
-D WLED_USE_MY_CONFIG
|
|
||||||
-D USERMOD_AUDIOREACTIVE
|
|
||||||
-D USERMOD_ARTIFX
|
|
||||||
|
|
||||||
lib_deps = ${esp32s2.lib_deps}
|
lib_deps = ${esp32s2.lib_deps}
|
||||||
https://github.com/blazoncek/arduinoFFT.git
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# custom board configurations
|
# custom board configurations
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
; WLEDMM see below
|
[env:esp32c3dev_2MB]
|
||||||
|
;; for ESP32-C3 boards with 2MB flash (instead of 4MB).
|
||||||
|
;; this board need a specific partition file. OTA not possible.
|
||||||
|
extends = esp32c3
|
||||||
|
platform = ${esp32c3.platform}
|
||||||
|
platform_packages = ${esp32c3.platform_packages}
|
||||||
|
board = esp32-c3-devkitm-1
|
||||||
|
build_flags = ${common.build_flags} ${esp32c3.build_flags} #-D WLED_RELEASE_NAME=ESP32-C3
|
||||||
|
-D WLED_WATCHDOG_TIMEOUT=0
|
||||||
|
-D WLED_DISABLE_OTA
|
||||||
|
; -DARDUINO_USB_CDC_ON_BOOT=1 ;; for virtual CDC USB
|
||||||
|
-DARDUINO_USB_CDC_ON_BOOT=0 ;; for serial-to-USB chip
|
||||||
|
build_unflags = ${common.build_unflags}
|
||||||
|
upload_speed = 115200
|
||||||
|
lib_deps = ${esp32c3.lib_deps}
|
||||||
|
board_build.partitions = tools/WLED_ESP32_2MB_noOTA.csv
|
||||||
|
board_build.flash_mode = dio
|
||||||
|
|
||||||
|
;WLEDMM: see below
|
||||||
; [env:wemos_shield_esp32]
|
; [env:wemos_shield_esp32]
|
||||||
; board = esp32dev
|
; board = esp32dev
|
||||||
; platform = espressif32@3.2
|
; platform = ${esp32.platform}
|
||||||
|
; platform_packages = ${esp32.platform_packages}
|
||||||
; upload_speed = 460800
|
; upload_speed = 460800
|
||||||
; build_unflags = ${common.build_unflags}
|
; build_unflags = ${common.build_unflags}
|
||||||
; build_flags = ${common.build_flags_esp32}
|
; build_flags = ${common.build_flags_esp32}
|
||||||
@@ -663,7 +734,8 @@ board = esp32dev
|
|||||||
build_unflags = ${common.build_unflags}
|
build_unflags = ${common.build_unflags}
|
||||||
build_flags = ${common.build_flags_esp32} -D LEDPIN=27 -D BTNPIN=39
|
build_flags = ${common.build_flags_esp32} -D LEDPIN=27 -D BTNPIN=39
|
||||||
lib_deps = ${esp32.lib_deps}
|
lib_deps = ${esp32.lib_deps}
|
||||||
platform = espressif32@3.2
|
platform = ${esp32.platform}
|
||||||
|
platform_packages = ${esp32.platform_packages}
|
||||||
board_build.partitions = ${esp32.default_partitions}
|
board_build.partitions = ${esp32.default_partitions}
|
||||||
|
|
||||||
[env:sp501e]
|
[env:sp501e]
|
||||||
@@ -769,7 +841,8 @@ lib_deps = ${esp8266.lib_deps}
|
|||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
[env:elekstube_ips]
|
[env:elekstube_ips]
|
||||||
board = esp32dev
|
board = esp32dev
|
||||||
platform = espressif32@3.2
|
platform = ${esp32.platform}
|
||||||
|
platform_packages = ${esp32.platform_packages}
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
build_flags = ${common.build_flags_esp32} -D WLED_DISABLE_BROWNOUT_DET -D WLED_DISABLE_INFRARED
|
build_flags = ${common.build_flags_esp32} -D WLED_DISABLE_BROWNOUT_DET -D WLED_DISABLE_INFRARED
|
||||||
-D USERMOD_RTC
|
-D USERMOD_RTC
|
||||||
@@ -1493,8 +1566,8 @@ monitor_filters = esp32_exception_decoder
|
|||||||
;; MM environment for generic ESP32-S2, with PSRAM, 4MB flash (300kB filesystem to have more program space)
|
;; MM environment for generic ESP32-S2, with PSRAM, 4MB flash (300kB filesystem to have more program space)
|
||||||
[env:esp32s2_PSRAM_M]
|
[env:esp32s2_PSRAM_M]
|
||||||
extends = esp32_4MB_V4_M_base
|
extends = esp32_4MB_V4_M_base
|
||||||
platform = ${esp32.platformV4_new} ;; more stable on -S2 than 5.1.1
|
platform = ${esp32.platformV4} ;; more stable on -S2 than 5.1.1
|
||||||
platform_packages = ${esp32.platformV4_new_packages}
|
platform_packages = ${esp32.platformV4_packages}
|
||||||
|
|
||||||
board = lolin_s2_mini
|
board = lolin_s2_mini
|
||||||
board_build.partitions = tools/WLED_ESP32_4MB_256KB_FS.csv ;; 1.8MB firmware, 256KB filesystem (esptool erase_flash needed when changing from "standard WLED" partitions)
|
board_build.partitions = tools/WLED_ESP32_4MB_256KB_FS.csv ;; 1.8MB firmware, 256KB filesystem (esptool erase_flash needed when changing from "standard WLED" partitions)
|
||||||
@@ -1539,11 +1612,9 @@ monitor_filters = esp32_exception_decoder
|
|||||||
;; MM environment for generic ESP32-C3 -> 4MB flash, no PSRAM
|
;; MM environment for generic ESP32-C3 -> 4MB flash, no PSRAM
|
||||||
[env:esp32c3dev_4MB_M]
|
[env:esp32c3dev_4MB_M]
|
||||||
extends = esp32_4MB_V4_S_base
|
extends = esp32_4MB_V4_S_base
|
||||||
;platform = ${esp32.platformV4} ;; standard IDF 4.4.1 platform
|
|
||||||
;platform_packages = ${esp32.platformV4_packages}
|
|
||||||
;board_build.flash_mode = dout
|
;board_build.flash_mode = dout
|
||||||
platform = ${esp32.platformV4_new} ;; alternative platform, might help in case you experience bootloops due to corrupted flash filesystem
|
platform = ${esp32.platformV4} ;; alternative platform, might help in case you experience bootloops due to corrupted flash filesystem
|
||||||
platform_packages = ${esp32.platformV4_new_packages}
|
platform_packages = ${esp32.platformV4_packages}
|
||||||
board_build.flash_mode = qio
|
board_build.flash_mode = qio
|
||||||
board = esp32-c3-devkitm-1
|
board = esp32-c3-devkitm-1
|
||||||
;board_build.partitions = tools/WLED_ESP32_4MB_256KB_FS.csv ;; 1.8MB firmware, 256KB filesystem (esptool erase_flash needed when changing from "standard WLED" partitions)
|
;board_build.partitions = tools/WLED_ESP32_4MB_256KB_FS.csv ;; 1.8MB firmware, 256KB filesystem (esptool erase_flash needed when changing from "standard WLED" partitions)
|
||||||
@@ -1594,8 +1665,8 @@ lib_ignore =
|
|||||||
[env:seeed_esp32c3_4MB_S]
|
[env:seeed_esp32c3_4MB_S]
|
||||||
extends = env:esp32c3dev_4MB_M
|
extends = env:esp32c3dev_4MB_M
|
||||||
board = seeed_xiao_esp32c3
|
board = seeed_xiao_esp32c3
|
||||||
platform = ${esp32.platformV4} ;; standard IDF 4.4.1 platform
|
platform = ${esp32.platformV4_pre} ;; standard IDF 4.4.1 platform
|
||||||
platform_packages = ${esp32.platformV4_packages}
|
platform_packages = ${esp32.platformV4_packages_pre}
|
||||||
board_build.flash_mode = qio
|
board_build.flash_mode = qio
|
||||||
upload_speed = 460800
|
upload_speed = 460800
|
||||||
build_unflags = ${env:esp32c3dev_4MB_M.build_unflags}
|
build_unflags = ${env:esp32c3dev_4MB_M.build_unflags}
|
||||||
|
|||||||
10
readme.md
10
readme.md
@@ -14,15 +14,19 @@
|
|||||||
|
|
||||||
<img width="400" alt="image" src="https://user-images.githubusercontent.com/91013628/230378884-5a0f15ee-1aa2-4998-9df7-ade9f32a3d0f.png">
|
<img width="400" alt="image" src="https://user-images.githubusercontent.com/91013628/230378884-5a0f15ee-1aa2-4998-9df7-ade9f32a3d0f.png">
|
||||||
|
|
||||||
MoonModules/WLED is a fork from Aircoookie/WLED which contains latest merge of v0.14 of WLED with additional features.
|
MoonModules/WLED is a fork from [Aircoookie/WLED](https://github.com/Aircoookie/WLED) which contains latest merge of v0.14 of WLED with [additional features](https://mm.kno.wled.ge/moonmodules/what-is-moonmodules/).
|
||||||
|
|
||||||
This fork is created by members of the Atuline/WLED team to make development against v0.14 possible while still preserving Atuline/WLED v0.13 as a stable and supported version. The Atuline/WLED fork is also called WLED SR (Sound Reactive).
|
This fork is created by members of the [Atuline/WLED](https://github.com/atuline/WLED) team to make development against v0.14 possible while still preserving [Atuline/WLED v0.13.x](https://github.com/atuline/WLED/tree/dev) as a stable and supported version. The Atuline/WLED fork is also called WLED SR (Sound Reactive).
|
||||||
|
|
||||||
More info here: <a href="https://mm.kno.wled.ge/moonmodules/what-is-moonmodules/">what-is-moonmodules</a>
|
More info here: <a href="https://mm.kno.wled.ge/moonmodules/what-is-moonmodules/">what-is-moonmodules</a>
|
||||||
|
|
||||||
<a href="https://www.paypal.com/donate?business=moonmodules@icloud.com"><img src="https://img.shields.io/badge/send%20me%20a%20small%20gift-paypal-blue.svg" alt="HTML tutorial" style="max-width: 100%;"></a>
|
<a href="https://www.paypal.com/donate?business=moonmodules@icloud.com"><img src="https://img.shields.io/badge/send%20me%20a%20small%20gift-paypal-blue.svg" alt="HTML tutorial" style="max-width: 100%;"></a>
|
||||||
Donations will be used to buy WLED related hardware, software or drinks shared with the contributors of this repo.
|
Donations will be used to buy WLED related hardware, software or drinks shared with the contributors of this repo.
|
||||||
|
|
||||||
*Disclaimer:*
|
## Contributing
|
||||||
|
We welcome contributions to this project! See [contributing](https://github.com/MoonModules/WLED/blob/mdev/CONTRIBUTING.md) for more information.
|
||||||
|
> We would like to have this repository in a polite and friendly atmosphere, so please be kind and respectful to others. For more details, look at [Code of Conduct](https://github.com/MoonModules/WLED/blob/mdev/CODE_OF_CONDUCT.md).
|
||||||
|
|
||||||
|
## *Disclaimer:*
|
||||||
|
|
||||||
Using this software is the users responsibility as it is not bug free. Therefore contributors of this repo are not reliable for anything including but not limited to spontaneous combustion of the entire led strip, the house and the inevitable heat death of the universe
|
Using this software is the users responsibility as it is not bug free. Therefore contributors of this repo are not reliable for anything including but not limited to spontaneous combustion of the entire led strip, the house and the inevitable heat death of the universe
|
||||||
|
|||||||
@@ -21,9 +21,7 @@ click==8.1.3
|
|||||||
# platformio
|
# platformio
|
||||||
# uvicorn
|
# uvicorn
|
||||||
colorama==0.4.6
|
colorama==0.4.6
|
||||||
# via
|
# via platformio
|
||||||
# click
|
|
||||||
# platformio
|
|
||||||
h11==0.14.0
|
h11==0.14.0
|
||||||
# via
|
# via
|
||||||
# uvicorn
|
# uvicorn
|
||||||
@@ -42,7 +40,7 @@ pyelftools==0.29
|
|||||||
# via platformio
|
# via platformio
|
||||||
pyserial==3.5
|
pyserial==3.5
|
||||||
# via platformio
|
# via platformio
|
||||||
requests==2.28.2
|
requests==2.31.0
|
||||||
# via platformio
|
# via platformio
|
||||||
semantic-version==2.10.0
|
semantic-version==2.10.0
|
||||||
# via platformio
|
# via platformio
|
||||||
@@ -52,8 +50,6 @@ starlette==0.23.1
|
|||||||
# via platformio
|
# via platformio
|
||||||
tabulate==0.9.0
|
tabulate==0.9.0
|
||||||
# via platformio
|
# via platformio
|
||||||
typing-extensions==4.5.0
|
|
||||||
# via starlette
|
|
||||||
urllib3==1.26.15
|
urllib3==1.26.15
|
||||||
# via requests
|
# via requests
|
||||||
uvicorn==0.20.0
|
uvicorn==0.20.0
|
||||||
|
|||||||
@@ -133,13 +133,13 @@ private:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
read32(bmpFS); // filesize in bytes
|
(void) read32(bmpFS); // filesize in bytes
|
||||||
read32(bmpFS); // reserved
|
(void) read32(bmpFS); // reserved
|
||||||
seekOffset = read32(bmpFS); // start of bitmap
|
seekOffset = read32(bmpFS); // start of bitmap
|
||||||
headerSize = read32(bmpFS); // header size
|
headerSize = read32(bmpFS); // header size
|
||||||
w = read32(bmpFS); // width
|
w = read32(bmpFS); // width
|
||||||
h = read32(bmpFS); // height
|
h = read32(bmpFS); // height
|
||||||
read16(bmpFS); // color planes (must be 1)
|
(void) read16(bmpFS); // color planes (must be 1)
|
||||||
bitDepth = read16(bmpFS);
|
bitDepth = read16(bmpFS);
|
||||||
|
|
||||||
if (read32(bmpFS) != 0 || (bitDepth != 24 && bitDepth != 1 && bitDepth != 4 && bitDepth != 8)) {
|
if (read32(bmpFS) != 0 || (bitDepth != 24 && bitDepth != 1 && bitDepth != 4 && bitDepth != 8)) {
|
||||||
@@ -151,9 +151,9 @@ private:
|
|||||||
uint32_t palette[256];
|
uint32_t palette[256];
|
||||||
if (bitDepth <= 8) // 1,4,8 bit bitmap: read color palette
|
if (bitDepth <= 8) // 1,4,8 bit bitmap: read color palette
|
||||||
{
|
{
|
||||||
read32(bmpFS); read32(bmpFS); read32(bmpFS); // size, w resolution, h resolution
|
(void) read32(bmpFS); (void) read32(bmpFS); (void) read32(bmpFS); // size, w resolution, h resolution
|
||||||
paletteSize = read32(bmpFS);
|
paletteSize = read32(bmpFS);
|
||||||
if (paletteSize == 0) paletteSize = bitDepth * bitDepth; //if 0, size is 2^bitDepth
|
if (paletteSize == 0) paletteSize = 1 << bitDepth; //if 0, size is 2^bitDepth
|
||||||
bmpFS.seek(14 + headerSize); // start of color palette
|
bmpFS.seek(14 + headerSize); // start of color palette
|
||||||
for (uint16_t i = 0; i < paletteSize; i++) {
|
for (uint16_t i = 0; i < paletteSize; i++) {
|
||||||
palette[i] = read32(bmpFS);
|
palette[i] = read32(bmpFS);
|
||||||
@@ -198,7 +198,7 @@ private:
|
|||||||
}
|
}
|
||||||
b = c; g = c >> 8; r = c >> 16;
|
b = c; g = c >> 8; r = c >> 16;
|
||||||
}
|
}
|
||||||
if (dimming != 255) { // only dimm when needed
|
if (dimming != 255) { // only dim when needed
|
||||||
r *= dimming; g *= dimming; b *= dimming;
|
r *= dimming; g *= dimming; b *= dimming;
|
||||||
r = r >> 8; g = g >> 8; b = b >> 8;
|
r = r >> 8; g = g >> 8; b = b >> 8;
|
||||||
}
|
}
|
||||||
|
|||||||
122
usermods/mcu_temp/mcuTemp.h
Normal file
122
usermods/mcu_temp/mcuTemp.h
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "wled.h"
|
||||||
|
|
||||||
|
// class name. Use something descriptive and leave the ": public Usermod" part :)
|
||||||
|
class mcuTemp : public Usermod
|
||||||
|
{
|
||||||
|
|
||||||
|
private:
|
||||||
|
float mcutemp = 0;
|
||||||
|
|
||||||
|
// any private methods should go here (non-inline methosd should be defined out of class)
|
||||||
|
void publishMqtt(const char *state, bool retain = false); // example for publishing MQTT message
|
||||||
|
|
||||||
|
public:
|
||||||
|
mcuTemp(const char *name, bool enabled) : Usermod(name, enabled) {} // WLEDMM
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void connected()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
// if usermod is disabled or called during strip updating just exit
|
||||||
|
// NOTE: on very long strips strip.isUpdating() may always return true so update accordingly
|
||||||
|
if (!enabled || strip.isUpdating())
|
||||||
|
return;
|
||||||
|
|
||||||
|
#ifdef ESP8266 // ESP8266
|
||||||
|
// does not seem possible
|
||||||
|
mcutemp = -1;
|
||||||
|
#elif defined(CONFIG_IDF_TARGET_ESP32S2) // ESP32S2
|
||||||
|
mcutemp = -1;
|
||||||
|
#else // ESP32 ESP32S3 and ESP32C3
|
||||||
|
mcutemp = roundf(temperatureRead() * 100) / 100;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (millis() - lastTime > 10000)
|
||||||
|
{
|
||||||
|
char array[10];
|
||||||
|
snprintf(array, sizeof(array), "%f", mcutemp);
|
||||||
|
publishMqtt(array);
|
||||||
|
lastTime = millis();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* addToJsonInfo() can be used to add custom entries to the /json/info part of the JSON API.
|
||||||
|
* Creating an "u" object allows you to add custom key/value pairs to the Info section of the WLED web UI.
|
||||||
|
* Below it is shown how this could be used for e.g. a light sensor
|
||||||
|
*/
|
||||||
|
void addToJsonInfo(JsonObject &root)
|
||||||
|
{
|
||||||
|
// if "u" object does not exist yet wee need to create it
|
||||||
|
JsonObject user = root["u"];
|
||||||
|
if (user.isNull())
|
||||||
|
user = root.createNestedObject("u");
|
||||||
|
|
||||||
|
// this code adds "u":{"ExampleUsermod":[20," lux"]} to the info object
|
||||||
|
// int reading = 20;
|
||||||
|
JsonArray lightArr = user.createNestedArray(FPSTR(_name)); // name
|
||||||
|
lightArr.add(mcutemp); // value
|
||||||
|
lightArr.add(F(" °C")); // unit
|
||||||
|
|
||||||
|
// if you are implementing a sensor usermod, you may publish sensor data
|
||||||
|
// JsonObject sensor = root[F("sensor")];
|
||||||
|
// if (sensor.isNull()) sensor = root.createNestedObject(F("sensor"));
|
||||||
|
// temp = sensor.createNestedArray(F("light"));
|
||||||
|
// temp.add(reading);
|
||||||
|
// temp.add(F("lux"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void addToJsonState(JsonObject &root)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void readFromJsonState(JsonObject &root)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void addToConfig(JsonObject &root)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool readFromConfig(JsonObject &root)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void appendConfigData()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleOverlayDraw()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* getId() allows you to optionally give your V2 usermod an unique ID (please define it in const.h!).
|
||||||
|
* This could be used in the future for the system to determine whether your usermod is installed.
|
||||||
|
*/
|
||||||
|
uint16_t getId()
|
||||||
|
{
|
||||||
|
return USERMOD_ID_MCUTEMP;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void mcuTemp::publishMqtt(const char *state, bool retain)
|
||||||
|
{
|
||||||
|
#ifndef WLED_DISABLE_MQTT
|
||||||
|
// Check if MQTT Connected, otherwise it will crash the 8266
|
||||||
|
if (WLED_MQTT_CONNECTED)
|
||||||
|
{
|
||||||
|
char subuf[64];
|
||||||
|
strcpy(subuf, mqttDeviceTopic);
|
||||||
|
strcat_P(subuf, PSTR("/mcutemp"));
|
||||||
|
mqtt->publish(subuf, 0, retain, state);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
11
usermods/mcu_temp/readme.md
Normal file
11
usermods/mcu_temp/readme.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# MCU Temp Usermod
|
||||||
|
This usermod adds the temperature readout to the Info tab and also publishes that over the topic `mcutemp` topic.
|
||||||
|
|
||||||
|
|
||||||
|
A shown temp of 53,33°C might indicate that the internal temp is not supported.
|
||||||
|
|
||||||
|
ESP8266 does not have a internal temp sensor
|
||||||
|
|
||||||
|
ESP32S2 seems to crash on reading the sensor -> disabled
|
||||||
|
|
||||||
|
Buildflag: `-D USERMOD_MCUTEMP`
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
# Multi Relay
|
# Multi Relay
|
||||||
|
|
||||||
This usermod-v2 modification allows the connection of multiple relays, each with individual delay and on/off mode.
|
This usermod-v2 modification allows the connection of multiple relays, each with individual delay and on/off mode.
|
||||||
|
Usermod supports PCF8574 I2C port expander to reduce GPIO use.
|
||||||
|
PCF8574 supports 8 outputs and each output corresponds to a relay in WLED (relay 0 = port 0, etc). I you are using more than 8 relays with multiple PCF8574 make sure their addresses are set conscutively (e.g. 0x20 and 0x21). You can set address of first expander in settings.
|
||||||
|
(**NOTE:** Will require Wire library and global I2C pins defined.)
|
||||||
|
|
||||||
## HTTP API
|
## HTTP API
|
||||||
All responses are returned in JSON format.
|
All responses are returned in JSON format.
|
||||||
@@ -81,13 +84,15 @@ void registerUsermods()
|
|||||||
Usermod can be configured via the Usermods settings page.
|
Usermod can be configured via the Usermods settings page.
|
||||||
|
|
||||||
* `enabled` - enable/disable usermod
|
* `enabled` - enable/disable usermod
|
||||||
|
* `use-PCF8574` - use PCF8574 port expander instead of GPIO pins
|
||||||
|
* `first-PCF8574` - I2C address of first expander (WARNING: enter *decimal* value)
|
||||||
|
* `broadcast`- time in seconds between MQTT relay-state broadcasts
|
||||||
|
* `HA-discovery`- enable Home Assistant auto discovery
|
||||||
* `pin` - ESP GPIO pin the relay is connected to (can be configured at compile time `-D MULTI_RELAY_PINS=xx,xx,...`)
|
* `pin` - ESP GPIO pin the relay is connected to (can be configured at compile time `-D MULTI_RELAY_PINS=xx,xx,...`)
|
||||||
* `delay-s` - delay in seconds after on/off command is received
|
* `delay-s` - delay in seconds after on/off command is received
|
||||||
* `active-high` - assign high/low activation of relay (can be used to reverse relay states)
|
* `active-high` - assign high/low activation of relay (can be used to reverse relay states)
|
||||||
* `external` - if enabled, WLED does not control relay, it can only be triggered by an external command (MQTT, HTTP, JSON or button)
|
* `external` - if enabled, WLED does not control relay, it can only be triggered by an external command (MQTT, HTTP, JSON or button)
|
||||||
* `button` - button (from LED Settings) that controls this relay
|
* `button` - button (from LED Settings) that controls this relay
|
||||||
* `broadcast`- time in seconds between MQTT relay-state broadcasts
|
|
||||||
* `HA-discovery`- enable Home Assistant auto discovery
|
|
||||||
|
|
||||||
If there is no MultiRelay section, just save current configuration and re-open Usermods settings page.
|
If there is no MultiRelay section, just save current configuration and re-open Usermods settings page.
|
||||||
|
|
||||||
@@ -100,3 +105,6 @@ Have fun - @blazoncek
|
|||||||
2021-11
|
2021-11
|
||||||
* Added information about dynamic configuration options
|
* Added information about dynamic configuration options
|
||||||
* Added button support.
|
* Added button support.
|
||||||
|
|
||||||
|
2023-05
|
||||||
|
* Added support for PCF8574 I2C port expander (multiple)
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -2805,7 +2805,7 @@ uint16_t mode_bouncing_balls(void) {
|
|||||||
// number of balls based on intensity setting to max of 7 (cycles colors)
|
// number of balls based on intensity setting to max of 7 (cycles colors)
|
||||||
// non-chosen color is a random color
|
// non-chosen color is a random color
|
||||||
uint16_t numBalls = (SEGMENT.intensity * (maxNumBalls - 1)) / 255 + 1; // minimum 1 ball
|
uint16_t numBalls = (SEGMENT.intensity * (maxNumBalls - 1)) / 255 + 1; // minimum 1 ball
|
||||||
constexpr float gravity = -9.81; // standard value of gravity
|
const float gravity = -9.81f; // standard value of gravity
|
||||||
const bool hasCol2 = SEGCOLOR(2);
|
const bool hasCol2 = SEGCOLOR(2);
|
||||||
const unsigned long time = millis();
|
const unsigned long time = millis();
|
||||||
|
|
||||||
@@ -4177,11 +4177,9 @@ static const char _data_FX_MODE_DANCING_SHADOWS[] PROGMEM = "Dancing Shadows@!,#
|
|||||||
By Stefan Seegel
|
By Stefan Seegel
|
||||||
*/
|
*/
|
||||||
uint16_t mode_washing_machine(void) {
|
uint16_t mode_washing_machine(void) {
|
||||||
float speed = tristate_square8(strip.now >> 7, 90, 15);
|
int speed = tristate_square8(strip.now >> 7, 90, 15);
|
||||||
float quot = 32.0f - ((float)SEGMENT.speed / 16.0f);
|
|
||||||
speed /= quot;
|
|
||||||
|
|
||||||
SEGENV.step += (speed * 128.0f);
|
SEGENV.step += (speed * 2048) / (512 - SEGMENT.speed);
|
||||||
|
|
||||||
for (int i = 0; i < SEGLEN; i++) {
|
for (int i = 0; i < SEGLEN; i++) {
|
||||||
uint8_t col = sin8(((SEGMENT.intensity / 25 + 1) * 255 * i / SEGLEN) + (SEGENV.step >> 7));
|
uint8_t col = sin8(((SEGMENT.intensity / 25 + 1) * 255 * i / SEGLEN) + (SEGENV.step >> 7));
|
||||||
@@ -4595,7 +4593,7 @@ uint16_t mode_2DBlackHole(void) { // By: Stepko https://editor.soulma
|
|||||||
}
|
}
|
||||||
|
|
||||||
SEGMENT.fadeToBlackBy(16 + (SEGMENT.speed>>3)); // create fading trails
|
SEGMENT.fadeToBlackBy(16 + (SEGMENT.speed>>3)); // create fading trails
|
||||||
float t = (float)(millis())/128; // timebase
|
unsigned long t = millis()/128; // timebase
|
||||||
// outer stars
|
// outer stars
|
||||||
for (size_t i = 0; i < 8; i++) {
|
for (size_t i = 0; i < 8; i++) {
|
||||||
x = beatsin8(SEGMENT.custom1>>3, 0, cols - 1, 0, ((i % 2) ? 128 : 0) + t * i);
|
x = beatsin8(SEGMENT.custom1>>3, 0, cols - 1, 0, ((i % 2) ? 128 : 0) + t * i);
|
||||||
@@ -5098,7 +5096,9 @@ uint16_t mode_2DLissajous(void) { // By: Andrew Tuline
|
|||||||
const uint16_t cols = SEGMENT.virtualWidth();
|
const uint16_t cols = SEGMENT.virtualWidth();
|
||||||
const uint16_t rows = SEGMENT.virtualHeight();
|
const uint16_t rows = SEGMENT.virtualHeight();
|
||||||
|
|
||||||
|
if (SEGENV.call == 0) { SEGMENT.setUpLeds(); SEGMENT.fill(BLACK);} // WLEDMM fadeToBlackBy() needs previous setUpLeds()
|
||||||
SEGMENT.fadeToBlackBy(SEGMENT.intensity);
|
SEGMENT.fadeToBlackBy(SEGMENT.intensity);
|
||||||
|
|
||||||
uint_fast16_t phase = (strip.now * (1 + SEGENV.custom3)) /32; // allow user to control rotation speed
|
uint_fast16_t phase = (strip.now * (1 + SEGENV.custom3)) /32; // allow user to control rotation speed
|
||||||
|
|
||||||
if (SEGENV.check3) { // WLEDMM: this is the original "float" code featuring anti-aliasing
|
if (SEGENV.check3) { // WLEDMM: this is the original "float" code featuring anti-aliasing
|
||||||
|
|||||||
@@ -371,7 +371,8 @@ typedef struct Segment {
|
|||||||
bool mirror_y : 1; // 8 : mirrored Y (2D)
|
bool mirror_y : 1; // 8 : mirrored Y (2D)
|
||||||
bool transpose : 1; // 9 : transposed (2D, swapped X & Y)
|
bool transpose : 1; // 9 : transposed (2D, swapped X & Y)
|
||||||
uint8_t map1D2D : 3; // 10-12 : mapping for 1D effect on 2D (0-use as strip, 1-expand vertically, 2-circular/arc, 3-rectangular/corner, ...)
|
uint8_t map1D2D : 3; // 10-12 : mapping for 1D effect on 2D (0-use as strip, 1-expand vertically, 2-circular/arc, 3-rectangular/corner, ...)
|
||||||
uint8_t soundSim : 3; // 13-15 : 0-7 sound simulation types
|
uint8_t soundSim : 1; // 13 : 0-1 sound simulation types ("soft" & "hard" or "on"/"off")
|
||||||
|
uint8_t set : 2; // 14-15 : 0-3 UI segment sets/groups
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
uint8_t grouping, spacing;
|
uint8_t grouping, spacing;
|
||||||
@@ -544,7 +545,7 @@ typedef struct Segment {
|
|||||||
|
|
||||||
void allocLeds(); //WLEDMM
|
void allocLeds(); //WLEDMM
|
||||||
|
|
||||||
void set(uint16_t i1, uint16_t i2, uint8_t grp=1, uint8_t spc=0, uint16_t ofs=UINT16_MAX, uint16_t i1Y=0, uint16_t i2Y=1);
|
void setUp(uint16_t i1, uint16_t i2, uint8_t grp=1, uint8_t spc=0, uint16_t ofs=UINT16_MAX, uint16_t i1Y=0, uint16_t i2Y=1);
|
||||||
bool setColor(uint8_t slot, uint32_t c); //returns true if changed
|
bool setColor(uint8_t slot, uint32_t c); //returns true if changed
|
||||||
void setCCT(uint16_t k);
|
void setCCT(uint16_t k);
|
||||||
void setOpacity(uint8_t o);
|
void setOpacity(uint8_t o);
|
||||||
@@ -831,6 +832,7 @@ class WS2812FX { // 96 bytes
|
|||||||
getActiveSegmentsNum(void),
|
getActiveSegmentsNum(void),
|
||||||
getFirstSelectedSegId(void),
|
getFirstSelectedSegId(void),
|
||||||
getLastActiveSegmentId(void),
|
getLastActiveSegmentId(void),
|
||||||
|
getActiveSegsLightCapabilities(bool selectedOnly = false),
|
||||||
setPixelSegment(uint8_t n);
|
setPixelSegment(uint8_t n);
|
||||||
|
|
||||||
inline uint8_t getBrightness(void) { return _brightness; }
|
inline uint8_t getBrightness(void) { return _brightness; }
|
||||||
|
|||||||
@@ -63,11 +63,12 @@ void WS2812FX::setUpMatrix() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
USER_PRINTF("setUpMatrix %d x %d\n", Segment::maxWidth, Segment::maxHeight);
|
||||||
|
|
||||||
//WLEDMM recreate customMappingTable if more space needed
|
//WLEDMM recreate customMappingTable if more space needed
|
||||||
if (Segment::maxWidth * Segment::maxHeight > customMappingTableSize) {
|
if (Segment::maxWidth * Segment::maxHeight > customMappingTableSize) {
|
||||||
uint32_t size = MAX(ledmapMaxSize, Segment::maxWidth * Segment::maxHeight);//TroyHack
|
uint32_t size = MAX(ledmapMaxSize, Segment::maxWidth * Segment::maxHeight);//TroyHack
|
||||||
USER_PRINTF("setupmatrix customMappingTable alloc %d from %d\n", size, customMappingTableSize);
|
USER_PRINTF("setupmatrix customMappingTable alloc %d from %d\n", size, customMappingTableSize);
|
||||||
|
|
||||||
//if (customMappingTable != nullptr) delete[] customMappingTable;
|
//if (customMappingTable != nullptr) delete[] customMappingTable;
|
||||||
//customMappingTable = new uint16_t[size];
|
//customMappingTable = new uint16_t[size];
|
||||||
|
|
||||||
|
|||||||
@@ -186,12 +186,12 @@ bool Segment::allocateData(size_t len) {
|
|||||||
if (data && _dataLen == len) return true; //already allocated
|
if (data && _dataLen == len) return true; //already allocated
|
||||||
deallocateData();
|
deallocateData();
|
||||||
if (Segment::getUsedSegmentData() + len > MAX_SEGMENT_DATA) return false; //not enough memory
|
if (Segment::getUsedSegmentData() + len > MAX_SEGMENT_DATA) return false; //not enough memory
|
||||||
// if possible use SPI RAM on ESP32
|
// do not use SPI RAM on ESP32 since it is slow
|
||||||
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM) && defined(WLED_USE_PSRAM)
|
//#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM) && defined(WLED_USE_PSRAM)
|
||||||
if (psramFound())
|
//if (psramFound())
|
||||||
data = (byte*) ps_malloc(len);
|
// data = (byte*) ps_malloc(len);
|
||||||
else
|
//else
|
||||||
#endif
|
//#endif
|
||||||
data = (byte*) malloc(len);
|
data = (byte*) malloc(len);
|
||||||
if (!data) return false; //allocation failed
|
if (!data) return false; //allocation failed
|
||||||
Segment::addUsedSegmentData(len);
|
Segment::addUsedSegmentData(len);
|
||||||
@@ -438,7 +438,7 @@ void Segment::handleTransition() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Segment::set(uint16_t i1, uint16_t i2, uint8_t grp, uint8_t spc, uint16_t ofs, uint16_t i1Y, uint16_t i2Y) {
|
void Segment::setUp(uint16_t i1, uint16_t i2, uint8_t grp, uint8_t spc, uint16_t ofs, uint16_t i1Y, uint16_t i2Y) {
|
||||||
//return if neither bounds nor grouping have changed
|
//return if neither bounds nor grouping have changed
|
||||||
bool boundsUnchanged = (start == i1 && stop == i2);
|
bool boundsUnchanged = (start == i1 && stop == i2);
|
||||||
#ifndef WLED_DISABLE_2D
|
#ifndef WLED_DISABLE_2D
|
||||||
@@ -542,7 +542,7 @@ void Segment::setMode(uint8_t fx, bool loadDefaults) {
|
|||||||
sOpt = extractModeDefaults(fx, "o3"); check3 = (sOpt >= 0) ? (bool)sOpt : false;
|
sOpt = extractModeDefaults(fx, "o3"); check3 = (sOpt >= 0) ? (bool)sOpt : false;
|
||||||
//WLEDMM: return to old setting if not explicitly set
|
//WLEDMM: return to old setting if not explicitly set
|
||||||
sOpt = extractModeDefaults(fx, "m12"); if (sOpt >= 0) {if (oldMap==-1) oldMap = map1D2D; map1D2D = constrain(sOpt, 0, 7);} else {if (oldMap!=-1) map1D2D = oldMap; oldMap = -1;}
|
sOpt = extractModeDefaults(fx, "m12"); if (sOpt >= 0) {if (oldMap==-1) oldMap = map1D2D; map1D2D = constrain(sOpt, 0, 7);} else {if (oldMap!=-1) map1D2D = oldMap; oldMap = -1;}
|
||||||
sOpt = extractModeDefaults(fx, "si"); if (sOpt >= 0) {if (oldSim==-1) oldSim = soundSim; soundSim = constrain(sOpt, 0, 7);} else {if (oldSim!=-1) soundSim = oldSim; oldSim = -1;}
|
sOpt = extractModeDefaults(fx, "si"); if (sOpt >= 0) {if (oldSim==-1) oldSim = soundSim; soundSim = constrain(sOpt, 0, 1);} else {if (oldSim!=-1) soundSim = oldSim; oldSim = -1;}
|
||||||
sOpt = extractModeDefaults(fx, "rev"); if (sOpt >= 0) {if (oldReverse==-1) oldReverse = reverse; reverse = (bool)sOpt;} else {if (oldReverse!=-1) reverse = oldReverse==1; oldReverse = -1;}
|
sOpt = extractModeDefaults(fx, "rev"); if (sOpt >= 0) {if (oldReverse==-1) oldReverse = reverse; reverse = (bool)sOpt;} else {if (oldReverse!=-1) reverse = oldReverse==1; oldReverse = -1;}
|
||||||
sOpt = extractModeDefaults(fx, "mi"); if (sOpt >= 0) {if (oldMirror==-1) oldMirror = mirror; mirror = (bool)sOpt;} else {if (oldMirror!=-1) mirror = oldMirror==1; oldMirror = -1;} // NOTE: setting this option is a risky business
|
sOpt = extractModeDefaults(fx, "mi"); if (sOpt >= 0) {if (oldMirror==-1) oldMirror = mirror; mirror = (bool)sOpt;} else {if (oldMirror!=-1) mirror = oldMirror==1; oldMirror = -1;} // NOTE: setting this option is a risky business
|
||||||
sOpt = extractModeDefaults(fx, "rY"); if (sOpt >= 0) {if (oldReverse_y==-1) oldReverse_y = reverse_y; reverse_y = (bool)sOpt;} else {if (oldReverse_y!=-1) reverse_y = oldReverse_y==1; oldReverse_y = -1;}
|
sOpt = extractModeDefaults(fx, "rY"); if (sOpt >= 0) {if (oldReverse_y==-1) oldReverse_y = reverse_y; reverse_y = (bool)sOpt;} else {if (oldReverse_y!=-1) reverse_y = oldReverse_y==1; oldReverse_y = -1;}
|
||||||
@@ -1064,7 +1064,7 @@ uint8_t Segment::differs(Segment& b) const {
|
|||||||
if (startY != b.startY) d |= SEG_DIFFERS_BOUNDS;
|
if (startY != b.startY) d |= SEG_DIFFERS_BOUNDS;
|
||||||
if (stopY != b.stopY) d |= SEG_DIFFERS_BOUNDS;
|
if (stopY != b.stopY) d |= SEG_DIFFERS_BOUNDS;
|
||||||
|
|
||||||
//bit pattern: (msb first) sound:3, mapping:3, transposed, mirrorY, reverseY, [transitional, reset,] paused, mirrored, on, reverse, [selected]
|
//bit pattern: (msb first) set:2, sound:1, mapping:3, transposed, mirrorY, reverseY, [transitional, reset,] paused, mirrored, on, reverse, [selected]
|
||||||
if ((options & 0b1111111110011110U) != (b.options & 0b1111111110011110U)) d |= SEG_DIFFERS_OPT;
|
if ((options & 0b1111111110011110U) != (b.options & 0b1111111110011110U)) d |= SEG_DIFFERS_OPT;
|
||||||
if ((options & 0x0001U) != (b.options & 0x0001U)) d |= SEG_DIFFERS_SEL;
|
if ((options & 0x0001U) != (b.options & 0x0001U)) d |= SEG_DIFFERS_SEL;
|
||||||
for (uint8_t i = 0; i < NUM_COLORS; i++) if (colors[i] != b.colors[i]) d |= SEG_DIFFERS_COL;
|
for (uint8_t i = 0; i < NUM_COLORS; i++) if (colors[i] != b.colors[i]) d |= SEG_DIFFERS_COL;
|
||||||
@@ -1411,18 +1411,27 @@ void WS2812FX::enumerateLedmaps() {
|
|||||||
if (ledmapNames[i-1]) strlcpy(ledmapNames[i-1], tmp, 33);
|
if (ledmapNames[i-1]) strlcpy(ledmapNames[i-1], tmp, 33);
|
||||||
}
|
}
|
||||||
|
|
||||||
//WLEDMM calc ledmapMaxSize (TroyHack)
|
USER_PRINTF("enumerateLedmaps %s \"%s\"", fileName, name);
|
||||||
char dim[34] = { '\0' };
|
if (isMatrix) {
|
||||||
f.find("\"width\":");
|
//WLEDMM calc ledmapMaxSize (TroyHack)
|
||||||
f.readBytesUntil('\n', dim, sizeof(dim)-1); //hack: use fileName as we have this allocated already
|
char dim[34] = { '\0' };
|
||||||
uint16_t maxWidth = atoi(cleanUpName(dim));
|
f.find("\"width\":");
|
||||||
f.find("\"height\":");
|
f.readBytesUntil('\n', dim, sizeof(dim)-1); //hack: use fileName as we have this allocated already
|
||||||
memset(dim, 0, sizeof(dim)); // clear buffer before reading
|
uint16_t maxWidth = atoi(cleanUpName(dim));
|
||||||
f.readBytesUntil('\n', dim, sizeof(dim)-1);
|
f.find("\"height\":");
|
||||||
uint16_t maxHeight = atoi(cleanUpName(dim));
|
memset(dim, 0, sizeof(dim)); // clear buffer before reading
|
||||||
ledmapMaxSize = MAX(ledmapMaxSize, maxWidth * maxHeight);
|
f.readBytesUntil('\n', dim, sizeof(dim)-1);
|
||||||
|
uint16_t maxHeight = atoi(cleanUpName(dim));
|
||||||
|
ledmapMaxSize = MAX(ledmapMaxSize, maxWidth * maxHeight);
|
||||||
|
|
||||||
USER_PRINTF("enumerateLedmaps %s \"%s\" (%dx%d -> %d)\n", fileName, name, maxWidth, maxHeight, ledmapMaxSize);
|
if (maxWidth*maxHeight>0) {
|
||||||
|
USER_PRINTF(" (%dx%d -> %d)\n", maxWidth, maxHeight, ledmapMaxSize);
|
||||||
|
} else {
|
||||||
|
USER_PRINTLN();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
USER_PRINTLN();
|
||||||
}
|
}
|
||||||
f.close();
|
f.close();
|
||||||
USER_FLUSH();
|
USER_FLUSH();
|
||||||
@@ -1822,6 +1831,14 @@ void WS2812FX::setBrightness(uint8_t b, bool direct) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t WS2812FX::getActiveSegsLightCapabilities(bool selectedOnly) {
|
||||||
|
uint8_t totalLC = 0;
|
||||||
|
for (segment &seg : _segments) {
|
||||||
|
if (seg.isActive() && (!selectedOnly || seg.isSelected())) totalLC |= seg.getLightCapabilities();
|
||||||
|
}
|
||||||
|
return totalLC;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t WS2812FX::getFirstSelectedSegId(void)
|
uint8_t WS2812FX::getFirstSelectedSegId(void)
|
||||||
{
|
{
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
@@ -1919,7 +1936,7 @@ Segment& WS2812FX::getSegment(uint8_t id) {
|
|||||||
|
|
||||||
void WS2812FX::setSegment(uint8_t n, uint16_t i1, uint16_t i2, uint8_t grouping, uint8_t spacing, uint16_t offset, uint16_t startY, uint16_t stopY) {
|
void WS2812FX::setSegment(uint8_t n, uint16_t i1, uint16_t i2, uint8_t grouping, uint8_t spacing, uint16_t offset, uint16_t startY, uint16_t stopY) {
|
||||||
if (n >= _segments.size()) return;
|
if (n >= _segments.size()) return;
|
||||||
_segments[n].set(i1, i2, grouping, spacing, offset, startY, stopY);
|
_segments[n].setUp(i1, i2, grouping, spacing, offset, startY, stopY);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WS2812FX::restartRuntime() {
|
void WS2812FX::restartRuntime() {
|
||||||
@@ -2208,31 +2225,32 @@ bool WS2812FX::deserializeMap(uint8_t n) {
|
|||||||
USER_PRINT(F("Reading LED map from ")); //WLEDMM use USER_PRINT
|
USER_PRINT(F("Reading LED map from ")); //WLEDMM use USER_PRINT
|
||||||
USER_PRINTLN(fileName);
|
USER_PRINTLN(fileName);
|
||||||
|
|
||||||
//WLEDMM: read width and height (mandatory in file!!)
|
if (isMatrix) {
|
||||||
f.find("\"width\":");
|
//WLEDMM: read width and height
|
||||||
f.readBytesUntil('\n', fileName, sizeof(fileName)); //hack: use fileName as we have this allocated already
|
f.find("\"width\":");
|
||||||
uint16_t maxWidth = atoi(fileName);
|
f.readBytesUntil('\n', fileName, sizeof(fileName)); //hack: use fileName as we have this allocated already
|
||||||
|
uint16_t maxWidth = atoi(fileName);
|
||||||
|
|
||||||
f.find("\"height\":");
|
f.find("\"height\":");
|
||||||
f.readBytesUntil('\n', fileName, sizeof(fileName));
|
f.readBytesUntil('\n', fileName, sizeof(fileName));
|
||||||
uint16_t maxHeight = atoi(fileName);
|
uint16_t maxHeight = atoi(fileName);
|
||||||
|
|
||||||
USER_PRINTF("deserializeMap %d x %d\n", maxWidth, maxHeight);
|
//WLEDMM: support ledmap file properties width and height: if found change segment
|
||||||
if (maxWidth * maxHeight <= 0) {
|
if (maxWidth * maxHeight > 0) {
|
||||||
releaseJSONBufferLock();
|
Segment::maxWidth = maxWidth;
|
||||||
return false;
|
Segment::maxHeight = maxHeight;
|
||||||
|
resetSegments(true); //WLEDMM not makeAutoSegments() as we only want to change bounds
|
||||||
|
}
|
||||||
|
else
|
||||||
|
setUpMatrix(); //reset segment sizes to panels
|
||||||
}
|
}
|
||||||
|
|
||||||
//WLEDMM: support ledmap file properties width and height
|
USER_PRINTF("deserializeMap %d x %d\n", Segment::maxWidth, Segment::maxHeight);
|
||||||
Segment::maxWidth = maxWidth;
|
|
||||||
Segment::maxHeight = maxHeight;
|
|
||||||
resetSegments(true); //WLEDMM not makeAutoSegments() as we only want to change bounds
|
|
||||||
|
|
||||||
//WLEDMM recreate customMappingTable if more space needed
|
//WLEDMM recreate customMappingTable if more space needed
|
||||||
if (Segment::maxWidth * Segment::maxHeight > customMappingTableSize) {
|
if (Segment::maxWidth * Segment::maxHeight > customMappingTableSize) {
|
||||||
uint32_t size = MAX(ledmapMaxSize, Segment::maxWidth * Segment::maxHeight);//TroyHack
|
uint32_t size = MAX(ledmapMaxSize, Segment::maxWidth * Segment::maxHeight);//TroyHack
|
||||||
USER_PRINTF("deserializemap customMappingTable alloc %d from %d\n", size, customMappingTableSize);
|
USER_PRINTF("deserializemap customMappingTable alloc %d from %d\n", size, customMappingTableSize);
|
||||||
|
|
||||||
//if (customMappingTable != nullptr) delete[] customMappingTable;
|
//if (customMappingTable != nullptr) delete[] customMappingTable;
|
||||||
//customMappingTable = new uint16_t[size];
|
//customMappingTable = new uint16_t[size];
|
||||||
|
|
||||||
@@ -2249,7 +2267,7 @@ bool WS2812FX::deserializeMap(uint8_t n) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (customMappingTable != nullptr) {
|
if (customMappingTable != nullptr) {
|
||||||
customMappingSize = maxWidth * maxHeight;
|
customMappingSize = Segment::maxWidth * Segment::maxHeight;
|
||||||
|
|
||||||
//WLEDMM: find the map values
|
//WLEDMM: find the map values
|
||||||
f.find("\"map\":[");
|
f.find("\"map\":[");
|
||||||
|
|||||||
@@ -101,20 +101,27 @@ void onAlexaChange(EspalexaDevice* dev)
|
|||||||
{
|
{
|
||||||
byte rgbw[4];
|
byte rgbw[4];
|
||||||
uint16_t ct = dev->getCt();
|
uint16_t ct = dev->getCt();
|
||||||
if (!ct) return;
|
if (!ct) return;
|
||||||
uint16_t k = 1000000 / ct; //mireds to kelvin
|
uint16_t k = 1000000 / ct; //mireds to kelvin
|
||||||
|
|
||||||
if (strip.hasCCTBus()) {
|
if (strip.hasCCTBus()) {
|
||||||
strip.setCCT(k);
|
bool hasManualWhite = strip.getActiveSegsLightCapabilities(true) & SEG_CAPABILITY_W;
|
||||||
rgbw[0]= 0; rgbw[1]= 0; rgbw[2]= 0; rgbw[3]= 255;
|
|
||||||
} else if (strip.hasWhiteChannel()) {
|
strip.setCCT(k);
|
||||||
|
if (hasManualWhite) {
|
||||||
|
rgbw[0] = 0; rgbw[1] = 0; rgbw[2] = 0; rgbw[3] = 255;
|
||||||
|
} else {
|
||||||
|
rgbw[0] = 255; rgbw[1] = 255; rgbw[2] = 255; rgbw[3] = 0;
|
||||||
|
dev->setValue(255);
|
||||||
|
}
|
||||||
|
} else if (strip.hasWhiteChannel()) {
|
||||||
switch (ct) { //these values empirically look good on RGBW
|
switch (ct) { //these values empirically look good on RGBW
|
||||||
case 199: rgbw[0]=255; rgbw[1]=255; rgbw[2]=255; rgbw[3]=255; break;
|
case 199: rgbw[0]=255; rgbw[1]=255; rgbw[2]=255; rgbw[3]=255; break;
|
||||||
case 234: rgbw[0]=127; rgbw[1]=127; rgbw[2]=127; rgbw[3]=255; break;
|
case 234: rgbw[0]=127; rgbw[1]=127; rgbw[2]=127; rgbw[3]=255; break;
|
||||||
case 284: rgbw[0]= 0; rgbw[1]= 0; rgbw[2]= 0; rgbw[3]=255; break;
|
case 284: rgbw[0]= 0; rgbw[1]= 0; rgbw[2]= 0; rgbw[3]=255; break;
|
||||||
case 350: rgbw[0]=130; rgbw[1]= 90; rgbw[2]= 0; rgbw[3]=255; break;
|
case 350: rgbw[0]=130; rgbw[1]= 90; rgbw[2]= 0; rgbw[3]=255; break;
|
||||||
case 383: rgbw[0]=255; rgbw[1]=153; rgbw[2]= 0; rgbw[3]=255; break;
|
case 383: rgbw[0]=255; rgbw[1]=153; rgbw[2]= 0; rgbw[3]=255; break;
|
||||||
default : colorKtoRGB(k, rgbw);
|
default : colorKtoRGB(k, rgbw);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
colorKtoRGB(k, rgbw);
|
colorKtoRGB(k, rgbw);
|
||||||
|
|||||||
@@ -101,12 +101,14 @@ uint32_t Bus::autoWhiteCalc(uint32_t c) {
|
|||||||
BusDigital::BusDigital(BusConfig &bc, uint8_t nr, const ColorOrderMap &com) : Bus(bc.type, bc.start, bc.autoWhite), _colorOrderMap(com) {
|
BusDigital::BusDigital(BusConfig &bc, uint8_t nr, const ColorOrderMap &com) : Bus(bc.type, bc.start, bc.autoWhite), _colorOrderMap(com) {
|
||||||
if (!IS_DIGITAL(bc.type) || !bc.count) return;
|
if (!IS_DIGITAL(bc.type) || !bc.count) return;
|
||||||
if (!pinManager.allocatePin(bc.pins[0], true, PinOwner::BusDigital)) return;
|
if (!pinManager.allocatePin(bc.pins[0], true, PinOwner::BusDigital)) return;
|
||||||
|
_frequencykHz = 0U;
|
||||||
_pins[0] = bc.pins[0];
|
_pins[0] = bc.pins[0];
|
||||||
if (IS_2PIN(bc.type)) {
|
if (IS_2PIN(bc.type)) {
|
||||||
if (!pinManager.allocatePin(bc.pins[1], true, PinOwner::BusDigital)) {
|
if (!pinManager.allocatePin(bc.pins[1], true, PinOwner::BusDigital)) {
|
||||||
cleanup(); return;
|
cleanup(); return;
|
||||||
}
|
}
|
||||||
_pins[1] = bc.pins[1];
|
_pins[1] = bc.pins[1];
|
||||||
|
_frequencykHz = bc.frequency ? bc.frequency : 2000U; // 2MHz clock if undefined
|
||||||
}
|
}
|
||||||
reversed = bc.reversed;
|
reversed = bc.reversed;
|
||||||
_needsRefresh = bc.refreshReq || bc.type == TYPE_TM1814;
|
_needsRefresh = bc.refreshReq || bc.type == TYPE_TM1814;
|
||||||
@@ -116,7 +118,7 @@ BusDigital::BusDigital(BusConfig &bc, uint8_t nr, const ColorOrderMap &com) : Bu
|
|||||||
if (_iType == I_NONE) return;
|
if (_iType == I_NONE) return;
|
||||||
uint16_t lenToCreate = _len;
|
uint16_t lenToCreate = _len;
|
||||||
if (bc.type == TYPE_WS2812_1CH_X3) lenToCreate = NUM_ICS_WS2812_1CH_3X(_len); // only needs a third of "RGB" LEDs for NeoPixelBus
|
if (bc.type == TYPE_WS2812_1CH_X3) lenToCreate = NUM_ICS_WS2812_1CH_3X(_len); // only needs a third of "RGB" LEDs for NeoPixelBus
|
||||||
_busPtr = PolyBus::create(_iType, _pins, lenToCreate, nr);
|
_busPtr = PolyBus::create(_iType, _pins, lenToCreate, nr, _frequencykHz);
|
||||||
_valid = (_busPtr != nullptr);
|
_valid = (_busPtr != nullptr);
|
||||||
_colorOrder = bc.colorOrder;
|
_colorOrder = bc.colorOrder;
|
||||||
if (_pins[1] != 255) { // WLEDMM USER_PRINTF
|
if (_pins[1] != 255) { // WLEDMM USER_PRINTF
|
||||||
@@ -222,10 +224,11 @@ BusPwm::BusPwm(BusConfig &bc) : Bus(bc.type, bc.start, bc.autoWhite) {
|
|||||||
_valid = false;
|
_valid = false;
|
||||||
if (!IS_PWM(bc.type)) return;
|
if (!IS_PWM(bc.type)) return;
|
||||||
uint8_t numPins = NUM_PWM_PINS(bc.type);
|
uint8_t numPins = NUM_PWM_PINS(bc.type);
|
||||||
|
_frequency = bc.frequency ? bc.frequency : WLED_PWM_FREQ;
|
||||||
|
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
analogWriteRange(255); //same range as one RGB channel
|
analogWriteRange(255); //same range as one RGB channel
|
||||||
analogWriteFreq(WLED_PWM_FREQ);
|
analogWriteFreq(_frequency);
|
||||||
#else
|
#else
|
||||||
_ledcStart = pinManager.allocateLedc(numPins);
|
_ledcStart = pinManager.allocateLedc(numPins);
|
||||||
if (_ledcStart == 255) { //no more free LEDC channels
|
if (_ledcStart == 255) { //no more free LEDC channels
|
||||||
@@ -242,7 +245,7 @@ BusPwm::BusPwm(BusConfig &bc) : Bus(bc.type, bc.start, bc.autoWhite) {
|
|||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
pinMode(_pins[i], OUTPUT);
|
pinMode(_pins[i], OUTPUT);
|
||||||
#else
|
#else
|
||||||
ledcSetup(_ledcStart + i, WLED_PWM_FREQ, 8);
|
ledcSetup(_ledcStart + i, _frequency, 8);
|
||||||
ledcAttachPin(_pins[i], _ledcStart + i);
|
ledcAttachPin(_pins[i], _ledcStart + i);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -462,21 +465,21 @@ void BusNetwork::cleanup() {
|
|||||||
uint32_t BusManager::memUsage(BusConfig &bc) {
|
uint32_t BusManager::memUsage(BusConfig &bc) {
|
||||||
uint8_t type = bc.type;
|
uint8_t type = bc.type;
|
||||||
uint16_t len = bc.count + bc.skipAmount;
|
uint16_t len = bc.count + bc.skipAmount;
|
||||||
if (type > 15 && type < 32) {
|
if (type > 15 && type < 32) { // digital types
|
||||||
|
if (type == TYPE_UCS8903 || type == TYPE_UCS8904) len *= 2; // 16-bit LEDs
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
if (bc.pins[0] == 3) { //8266 DMA uses 5x the mem
|
if (bc.pins[0] == 3) { //8266 DMA uses 5x the mem
|
||||||
if (type > 29) return len*20; //RGBW
|
if (type > 28) return len*20; //RGBW
|
||||||
return len*15;
|
return len*15;
|
||||||
}
|
}
|
||||||
if (type > 29) return len*4; //RGBW
|
if (type > 28) return len*4; //RGBW
|
||||||
return len*3;
|
return len*3;
|
||||||
#else //ESP32 RMT uses double buffer?
|
#else //ESP32 RMT uses double buffer?
|
||||||
if (type > 29) return len*8; //RGBW
|
if (type > 28) return len*8; //RGBW
|
||||||
return len*6;
|
return len*6;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (type > 31 && type < 48) return 5;
|
if (type > 31 && type < 48) return 5;
|
||||||
if (type == 44 || type == 45) return len*4; //RGBW
|
|
||||||
return len*3; //RGB
|
return len*3; //RGB
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,10 +29,11 @@ struct BusConfig {
|
|||||||
bool refreshReq;
|
bool refreshReq;
|
||||||
uint8_t autoWhite;
|
uint8_t autoWhite;
|
||||||
uint8_t pins[5] = {LEDPIN, 255, 255, 255, 255};
|
uint8_t pins[5] = {LEDPIN, 255, 255, 255, 255};
|
||||||
BusConfig(uint8_t busType, uint8_t* ppins, uint16_t pstart, uint16_t len = 1, uint8_t pcolorOrder = COL_ORDER_GRB, bool rev = false, uint8_t skip = 0, byte aw=RGBW_MODE_MANUAL_ONLY) {
|
uint16_t frequency;
|
||||||
|
BusConfig(uint8_t busType, uint8_t* ppins, uint16_t pstart, uint16_t len = 1, uint8_t pcolorOrder = COL_ORDER_GRB, bool rev = false, uint8_t skip = 0, byte aw=RGBW_MODE_MANUAL_ONLY, uint16_t clock_kHz=0U) {
|
||||||
refreshReq = (bool) GET_BIT(busType,7);
|
refreshReq = (bool) GET_BIT(busType,7);
|
||||||
type = busType & 0x7F; // bit 7 may be/is hacked to include refresh info (1=refresh in off state, 0=no refresh)
|
type = busType & 0x7F; // bit 7 may be/is hacked to include refresh info (1=refresh in off state, 0=no refresh)
|
||||||
count = len; start = pstart; colorOrder = pcolorOrder; reversed = rev; skipAmount = skip; autoWhite = aw;
|
count = len; start = pstart; colorOrder = pcolorOrder; reversed = rev; skipAmount = skip; autoWhite = aw; frequency = clock_kHz;
|
||||||
uint8_t nPins = 1;
|
uint8_t nPins = 1;
|
||||||
if (type >= TYPE_NET_DDP_RGB && type < 96) nPins = 4; //virtual network bus. 4 "pins" store IP address
|
if (type >= TYPE_NET_DDP_RGB && type < 96) nPins = 4; //virtual network bus. 4 "pins" store IP address
|
||||||
else if (type > 47) nPins = 2;
|
else if (type > 47) nPins = 2;
|
||||||
@@ -114,6 +115,7 @@ class Bus {
|
|||||||
virtual void setColorOrder() {}
|
virtual void setColorOrder() {}
|
||||||
virtual uint8_t getColorOrder() { return COL_ORDER_RGB; }
|
virtual uint8_t getColorOrder() { return COL_ORDER_RGB; }
|
||||||
virtual uint8_t skippedLeds() { return 0; }
|
virtual uint8_t skippedLeds() { return 0; }
|
||||||
|
virtual uint16_t getFrequency() { return 0U; }
|
||||||
inline uint16_t getStart() { return _start; }
|
inline uint16_t getStart() { return _start; }
|
||||||
inline void setStart(uint16_t start) { _start = start; }
|
inline void setStart(uint16_t start) { _start = start; }
|
||||||
inline uint8_t getType() { return _type; }
|
inline uint8_t getType() { return _type; }
|
||||||
@@ -203,6 +205,8 @@ class BusDigital : public Bus {
|
|||||||
return _skip;
|
return _skip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t getFrequency() { return _frequencykHz; }
|
||||||
|
|
||||||
void reinit();
|
void reinit();
|
||||||
|
|
||||||
void cleanup();
|
void cleanup();
|
||||||
@@ -216,6 +220,7 @@ class BusDigital : public Bus {
|
|||||||
uint8_t _pins[2] = {255, 255};
|
uint8_t _pins[2] = {255, 255};
|
||||||
uint8_t _iType = 0; //I_NONE;
|
uint8_t _iType = 0; //I_NONE;
|
||||||
uint8_t _skip = 0;
|
uint8_t _skip = 0;
|
||||||
|
uint16_t _frequencykHz = 0U;
|
||||||
void * _busPtr = nullptr;
|
void * _busPtr = nullptr;
|
||||||
const ColorOrderMap &_colorOrderMap;
|
const ColorOrderMap &_colorOrderMap;
|
||||||
};
|
};
|
||||||
@@ -234,6 +239,8 @@ class BusPwm : public Bus {
|
|||||||
|
|
||||||
uint8_t getPins(uint8_t* pinArray);
|
uint8_t getPins(uint8_t* pinArray);
|
||||||
|
|
||||||
|
uint16_t getFrequency() { return _frequency; }
|
||||||
|
|
||||||
void cleanup() {
|
void cleanup() {
|
||||||
deallocatePins();
|
deallocatePins();
|
||||||
}
|
}
|
||||||
@@ -248,6 +255,7 @@ class BusPwm : public Bus {
|
|||||||
#ifdef ARDUINO_ARCH_ESP32
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
uint8_t _ledcStart = 255;
|
uint8_t _ledcStart = 255;
|
||||||
#endif
|
#endif
|
||||||
|
uint16_t _frequency = 0U;
|
||||||
|
|
||||||
void deallocatePins();
|
void deallocatePins();
|
||||||
};
|
};
|
||||||
@@ -335,7 +343,7 @@ class BusManager {
|
|||||||
|
|
||||||
void setStatusPixel(uint32_t c);
|
void setStatusPixel(uint32_t c);
|
||||||
|
|
||||||
void IRAM_ATTR setPixelColor(uint16_t pix, uint32_t c, int16_t cct=-1);
|
void setPixelColor(uint16_t pix, uint32_t c, int16_t cct=-1);
|
||||||
|
|
||||||
void setBrightness(uint8_t b);
|
void setBrightness(uint8_t b);
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#ifndef BusWrapper_h
|
#ifndef BusWrapper_h
|
||||||
#define BusWrapper_h
|
#define BusWrapper_h
|
||||||
|
|
||||||
#include "NeoPixelBrightnessBus.h"
|
#include "NeoPixelBusLg.h"
|
||||||
|
|
||||||
// temporary - these defines should actually be set in platformio.ini
|
// temporary - these defines should actually be set in platformio.ini
|
||||||
// C3: I2S0 and I2S1 methods not supported (has one I2S bus)
|
// C3: I2S0 and I2S1 methods not supported (has one I2S bus)
|
||||||
@@ -53,6 +53,16 @@
|
|||||||
#define I_8266_U1_TM2_3 18
|
#define I_8266_U1_TM2_3 18
|
||||||
#define I_8266_DM_TM2_3 19
|
#define I_8266_DM_TM2_3 19
|
||||||
#define I_8266_BB_TM2_3 20
|
#define I_8266_BB_TM2_3 20
|
||||||
|
//UCS8903 (RGB)
|
||||||
|
#define I_8266_U0_UCS_3 49
|
||||||
|
#define I_8266_U1_UCS_3 50
|
||||||
|
#define I_8266_DM_UCS_3 51
|
||||||
|
#define I_8266_BB_UCS_3 52
|
||||||
|
//UCS8904 (RGBW)
|
||||||
|
#define I_8266_U0_UCS_4 53
|
||||||
|
#define I_8266_U1_UCS_4 54
|
||||||
|
#define I_8266_DM_UCS_4 55
|
||||||
|
#define I_8266_BB_UCS_4 56
|
||||||
|
|
||||||
/*** ESP32 Neopixel methods ***/
|
/*** ESP32 Neopixel methods ***/
|
||||||
//RGB
|
//RGB
|
||||||
@@ -80,6 +90,16 @@
|
|||||||
#define I_32_I0_TM2_3 37
|
#define I_32_I0_TM2_3 37
|
||||||
#define I_32_I1_TM2_3 38
|
#define I_32_I1_TM2_3 38
|
||||||
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
|
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
|
||||||
|
//UCS8903 (RGB)
|
||||||
|
#define I_32_RN_UCS_3 57
|
||||||
|
#define I_32_I0_UCS_3 58
|
||||||
|
#define I_32_I1_UCS_3 59
|
||||||
|
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
|
||||||
|
//UCS8904 (RGBW)
|
||||||
|
#define I_32_RN_UCS_4 60
|
||||||
|
#define I_32_I0_UCS_4 61
|
||||||
|
#define I_32_I1_UCS_4 62
|
||||||
|
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
|
||||||
|
|
||||||
//APA102
|
//APA102
|
||||||
#define I_HS_DOT_3 39 //hardware SPI
|
#define I_HS_DOT_3 39 //hardware SPI
|
||||||
@@ -105,77 +125,105 @@
|
|||||||
/*** ESP8266 Neopixel methods ***/
|
/*** ESP8266 Neopixel methods ***/
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
//RGB
|
//RGB
|
||||||
#define B_8266_U0_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Uart0Ws2813Method> //3 chan, esp8266, gpio1
|
#define B_8266_U0_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Uart0Ws2813Method, NeoGammaNullMethod> //3 chan, esp8266, gpio1
|
||||||
#define B_8266_U1_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Uart1Ws2813Method> //3 chan, esp8266, gpio2
|
#define B_8266_U1_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Uart1Ws2813Method, NeoGammaNullMethod> //3 chan, esp8266, gpio2
|
||||||
#define B_8266_DM_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Dma800KbpsMethod> //3 chan, esp8266, gpio3
|
#define B_8266_DM_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Dma800KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, gpio3
|
||||||
#define B_8266_BB_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266BitBang800KbpsMethod> //3 chan, esp8266, bb (any pin but 16)
|
#define B_8266_BB_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266BitBang800KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, bb (any pin but 16)
|
||||||
//RGBW
|
//RGBW
|
||||||
#define B_8266_U0_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp8266Uart0Ws2813Method> //4 chan, esp8266, gpio1
|
#define B_8266_U0_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp8266Uart0Ws2813Method, NeoGammaNullMethod> //4 chan, esp8266, gpio1
|
||||||
#define B_8266_U1_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp8266Uart1Ws2813Method> //4 chan, esp8266, gpio2
|
#define B_8266_U1_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp8266Uart1Ws2813Method, NeoGammaNullMethod> //4 chan, esp8266, gpio2
|
||||||
#define B_8266_DM_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp8266Dma800KbpsMethod> //4 chan, esp8266, gpio3
|
#define B_8266_DM_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp8266Dma800KbpsMethod, NeoGammaNullMethod> //4 chan, esp8266, gpio3
|
||||||
#define B_8266_BB_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp8266BitBang800KbpsMethod> //4 chan, esp8266, bb (any pin)
|
#define B_8266_BB_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp8266BitBang800KbpsMethod, NeoGammaNullMethod> //4 chan, esp8266, bb (any pin)
|
||||||
//400Kbps
|
//400Kbps
|
||||||
#define B_8266_U0_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Uart0400KbpsMethod> //3 chan, esp8266, gpio1
|
#define B_8266_U0_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Uart0400KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, gpio1
|
||||||
#define B_8266_U1_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Uart1400KbpsMethod> //3 chan, esp8266, gpio2
|
#define B_8266_U1_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Uart1400KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, gpio2
|
||||||
#define B_8266_DM_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Dma400KbpsMethod> //3 chan, esp8266, gpio3
|
#define B_8266_DM_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Dma400KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, gpio3
|
||||||
#define B_8266_BB_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266BitBang400KbpsMethod> //3 chan, esp8266, bb (any pin)
|
#define B_8266_BB_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266BitBang400KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, bb (any pin)
|
||||||
//TM1814 (RGBW)
|
//TM1814 (RGBW)
|
||||||
#define B_8266_U0_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp8266Uart0Tm1814Method>
|
#define B_8266_U0_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp8266Uart0Tm1814Method, NeoGammaNullMethod>
|
||||||
#define B_8266_U1_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp8266Uart1Tm1814Method>
|
#define B_8266_U1_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp8266Uart1Tm1814Method, NeoGammaNullMethod>
|
||||||
#define B_8266_DM_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp8266DmaTm1814Method>
|
#define B_8266_DM_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp8266DmaTm1814Method, NeoGammaNullMethod>
|
||||||
#define B_8266_BB_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp8266BitBangTm1814Method>
|
#define B_8266_BB_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp8266BitBangTm1814Method, NeoGammaNullMethod>
|
||||||
//TM1829 (RGB)
|
//TM1829 (RGB)
|
||||||
#define B_8266_U0_TM2_4 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp8266Uart0Tm1829Method>
|
#define B_8266_U0_TM2_4 NeoPixelBusLg<NeoBrgFeature, NeoEsp8266Uart0Tm1829Method, NeoGammaNullMethod>
|
||||||
#define B_8266_U1_TM2_4 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp8266Uart1Tm1829Method>
|
#define B_8266_U1_TM2_4 NeoPixelBusLg<NeoBrgFeature, NeoEsp8266Uart1Tm1829Method, NeoGammaNullMethod>
|
||||||
#define B_8266_DM_TM2_4 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp8266DmaTm1829Method>
|
#define B_8266_DM_TM2_4 NeoPixelBusLg<NeoBrgFeature, NeoEsp8266DmaTm1829Method, NeoGammaNullMethod>
|
||||||
#define B_8266_BB_TM2_4 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp8266BitBangTm1829Method>
|
#define B_8266_BB_TM2_4 NeoPixelBusLg<NeoBrgFeature, NeoEsp8266BitBangTm1829Method, NeoGammaNullMethod>
|
||||||
|
//UCS8903
|
||||||
|
#define B_8266_U0_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp8266Uart0Ws2813Method, NeoGammaNullMethod> //3 chan, esp8266, gpio1
|
||||||
|
#define B_8266_U1_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp8266Uart1Ws2813Method, NeoGammaNullMethod> //3 chan, esp8266, gpio2
|
||||||
|
#define B_8266_DM_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp8266Dma800KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, gpio3
|
||||||
|
#define B_8266_BB_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp8266BitBang800KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, bb (any pin but 16)
|
||||||
|
//UCS8904 RGBW
|
||||||
|
#define B_8266_U0_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp8266Uart0Ws2813Method, NeoGammaNullMethod> //4 chan, esp8266, gpio1
|
||||||
|
#define B_8266_U1_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp8266Uart1Ws2813Method, NeoGammaNullMethod> //4 chan, esp8266, gpio2
|
||||||
|
#define B_8266_DM_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp8266Dma800KbpsMethod, NeoGammaNullMethod> //4 chan, esp8266, gpio3
|
||||||
|
#define B_8266_BB_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp8266BitBang800KbpsMethod, NeoGammaNullMethod> //4 chan, esp8266, bb (any pin)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*** ESP32 Neopixel methods ***/
|
/*** ESP32 Neopixel methods ***/
|
||||||
#ifdef ARDUINO_ARCH_ESP32
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
//RGB
|
//RGB
|
||||||
#define B_32_RN_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32RmtNWs2812xMethod>
|
#define B_32_RN_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32RmtNWs2812xMethod, NeoGammaNullMethod>
|
||||||
#ifndef WLED_NO_I2S0_PIXELBUS
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
#define B_32_I0_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s0800KbpsMethod>
|
#define B_32_I0_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32I2s0800KbpsMethod, NeoGammaNullMethod>
|
||||||
#endif
|
#endif
|
||||||
#ifndef WLED_NO_I2S1_PIXELBUS
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
#define B_32_I1_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s1800KbpsMethod>
|
#define B_32_I1_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32I2s1800KbpsMethod, NeoGammaNullMethod>
|
||||||
#endif
|
#endif
|
||||||
//#define B_32_BB_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32BitBang800KbpsMethod> // NeoEsp8266BitBang800KbpsMethod
|
//#define B_32_BB_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32BitBang800KbpsMethod> // NeoEsp8266BitBang800KbpsMethod
|
||||||
//RGBW
|
//RGBW
|
||||||
#define B_32_RN_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp32RmtNWs2812xMethod>
|
#define B_32_RN_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp32RmtNWs2812xMethod, NeoGammaNullMethod>
|
||||||
#ifndef WLED_NO_I2S0_PIXELBUS
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
#define B_32_I0_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp32I2s0800KbpsMethod>
|
#define B_32_I0_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp32I2s0800KbpsMethod, NeoGammaNullMethod>
|
||||||
#endif
|
#endif
|
||||||
#ifndef WLED_NO_I2S1_PIXELBUS
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
#define B_32_I1_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp32I2s1800KbpsMethod>
|
#define B_32_I1_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp32I2s1800KbpsMethod, NeoGammaNullMethod>
|
||||||
#endif
|
#endif
|
||||||
//#define B_32_BB_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp32BitBang800KbpsMethod> // NeoEsp8266BitBang800KbpsMethod
|
//#define B_32_BB_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp32BitBang800KbpsMethod> // NeoEsp8266BitBang800KbpsMethod
|
||||||
//400Kbps
|
//400Kbps
|
||||||
#define B_32_RN_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32RmtN400KbpsMethod>
|
#define B_32_RN_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32RmtN400KbpsMethod, NeoGammaNullMethod>
|
||||||
#ifndef WLED_NO_I2S0_PIXELBUS
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
#define B_32_I0_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s0400KbpsMethod>
|
#define B_32_I0_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32I2s0400KbpsMethod, NeoGammaNullMethod>
|
||||||
#endif
|
#endif
|
||||||
#ifndef WLED_NO_I2S1_PIXELBUS
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
#define B_32_I1_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s1400KbpsMethod>
|
#define B_32_I1_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32I2s1400KbpsMethod, NeoGammaNullMethod>
|
||||||
#endif
|
#endif
|
||||||
//#define B_32_BB_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32BitBang400KbpsMethod> // NeoEsp8266BitBang400KbpsMethod
|
//#define B_32_BB_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32BitBang400KbpsMethod> // NeoEsp8266BitBang400KbpsMethod
|
||||||
//TM1814 (RGBW)
|
//TM1814 (RGBW)
|
||||||
#define B_32_RN_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp32RmtNTm1814Method>
|
#define B_32_RN_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp32RmtNTm1814Method, NeoGammaNullMethod>
|
||||||
#ifndef WLED_NO_I2S0_PIXELBUS
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
#define B_32_I0_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp32I2s0Tm1814Method>
|
#define B_32_I0_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp32I2s0Tm1814Method, NeoGammaNullMethod>
|
||||||
#endif
|
#endif
|
||||||
#ifndef WLED_NO_I2S1_PIXELBUS
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
#define B_32_I1_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp32I2s1Tm1814Method>
|
#define B_32_I1_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp32I2s1Tm1814Method, NeoGammaNullMethod>
|
||||||
#endif
|
#endif
|
||||||
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
|
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
|
||||||
//TM1829 (RGB)
|
//TM1829 (RGB)
|
||||||
#define B_32_RN_TM2_3 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp32RmtNTm1829Method>
|
#define B_32_RN_TM2_3 NeoPixelBusLg<NeoBrgFeature, NeoEsp32RmtNTm1829Method, NeoGammaNullMethod>
|
||||||
#ifndef WLED_NO_I2S0_PIXELBUS
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
#define B_32_I0_TM2_3 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp32I2s0Tm1829Method>
|
#define B_32_I0_TM2_3 NeoPixelBusLg<NeoBrgFeature, NeoEsp32I2s0Tm1829Method, NeoGammaNullMethod>
|
||||||
#endif
|
#endif
|
||||||
#ifndef WLED_NO_I2S1_PIXELBUS
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
#define B_32_I1_TM2_3 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp32I2s1Tm1829Method>
|
#define B_32_I1_TM2_3 NeoPixelBusLg<NeoBrgFeature, NeoEsp32I2s1Tm1829Method, NeoGammaNullMethod>
|
||||||
|
#endif
|
||||||
|
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
|
||||||
|
//UCS8903
|
||||||
|
#define B_32_RN_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp32RmtNWs2812xMethod, NeoGammaNullMethod>
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
#define B_32_I0_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp32I2s0800KbpsMethod, NeoGammaNullMethod>
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
|
#define B_32_I1_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp32I2s1800KbpsMethod, NeoGammaNullMethod>
|
||||||
|
#endif
|
||||||
|
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
|
||||||
|
//UCS8904
|
||||||
|
#define B_32_RN_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp32RmtNWs2812xMethod, NeoGammaNullMethod>
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
#define B_32_I0_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp32I2s0800KbpsMethod, NeoGammaNullMethod>
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
|
#define B_32_I1_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp32I2s1800KbpsMethod, NeoGammaNullMethod>
|
||||||
#endif
|
#endif
|
||||||
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
|
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
|
||||||
|
|
||||||
@@ -184,45 +232,51 @@
|
|||||||
//APA102
|
//APA102
|
||||||
#ifdef WLED_USE_ETHERNET
|
#ifdef WLED_USE_ETHERNET
|
||||||
// fix for #2542 (by @BlackBird77)
|
// fix for #2542 (by @BlackBird77)
|
||||||
#define B_HS_DOT_3 NeoPixelBrightnessBus<DotStarBgrFeature, DotStarEsp32DmaHspi5MhzMethod> //hardware HSPI with DMA (ESP32 only)
|
#define B_HS_DOT_3 NeoPixelBusLg<DotStarBgrFeature, DotStarEsp32HspiHzMethod, NeoGammaNullMethod> //hardware HSPI (was DotStarEsp32DmaHspi5MhzMethod in NPB @ 2.6.9)
|
||||||
#else
|
#else
|
||||||
#define B_HS_DOT_3 NeoPixelBrightnessBus<DotStarBgrFeature, DotStarSpi5MhzMethod> //hardware VSPI
|
#define B_HS_DOT_3 NeoPixelBusLg<DotStarBgrFeature, DotStarSpiHzMethod, NeoGammaNullMethod> //hardware VSPI
|
||||||
#endif
|
#endif
|
||||||
#define B_SS_DOT_3 NeoPixelBrightnessBus<DotStarBgrFeature, DotStarMethod> //soft SPI
|
#define B_SS_DOT_3 NeoPixelBusLg<DotStarBgrFeature, DotStarMethod, NeoGammaNullMethod> //soft SPI
|
||||||
|
|
||||||
//LPD8806
|
//LPD8806
|
||||||
#define B_HS_LPD_3 NeoPixelBrightnessBus<Lpd8806GrbFeature, Lpd8806SpiMethod>
|
#define B_HS_LPD_3 NeoPixelBusLg<Lpd8806GrbFeature, Lpd8806SpiHzMethod, NeoGammaNullMethod>
|
||||||
#define B_SS_LPD_3 NeoPixelBrightnessBus<Lpd8806GrbFeature, Lpd8806Method>
|
#define B_SS_LPD_3 NeoPixelBusLg<Lpd8806GrbFeature, Lpd8806Method, NeoGammaNullMethod>
|
||||||
|
|
||||||
//LPD6803
|
//LPD6803
|
||||||
#define B_HS_LPO_3 NeoPixelBrightnessBus<Lpd6803GrbFeature, Lpd6803SpiMethod>
|
#define B_HS_LPO_3 NeoPixelBusLg<Lpd6803GrbFeature, Lpd6803SpiHzMethod, NeoGammaNullMethod>
|
||||||
#define B_SS_LPO_3 NeoPixelBrightnessBus<Lpd6803GrbFeature, Lpd6803Method>
|
#define B_SS_LPO_3 NeoPixelBusLg<Lpd6803GrbFeature, Lpd6803Method, NeoGammaNullMethod>
|
||||||
|
|
||||||
//WS2801
|
//WS2801
|
||||||
#if defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==40000
|
#ifdef WLED_USE_ETHERNET
|
||||||
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi40MhzMethod> // fastest bus speed (not existing method?)
|
#define B_HS_WS1_3 NeoPixelBusLg<NeoRbgFeature, Ws2801MethodBase<TwoWireHspiImple<SpiSpeedHz>>, NeoGammaNullMethod>
|
||||||
#elif defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==20000
|
|
||||||
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi20MhzMethod> // 20MHz
|
|
||||||
#elif defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==10000
|
|
||||||
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801SpiMethod> // 10MHz
|
|
||||||
#elif defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==2000
|
|
||||||
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi2MhzMethod> //slower, more compatible
|
|
||||||
#elif defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==1000
|
|
||||||
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi1MhzMethod> //slower, more compatible
|
|
||||||
#elif defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==500
|
|
||||||
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi500KhzMethod> //slower, more compatible
|
|
||||||
#else
|
#else
|
||||||
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi2MhzMethod> // 2MHz; slower, more compatible
|
#define B_HS_WS1_3 NeoPixelBusLg<NeoRbgFeature, Ws2801SpiHzMethod, NeoGammaNullMethod>
|
||||||
#endif
|
#endif
|
||||||
#define B_SS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Method>
|
#define B_SS_WS1_3 NeoPixelBusLg<NeoRbgFeature, Ws2801Method, NeoGammaNullMethod>
|
||||||
|
|
||||||
//P9813
|
//P9813
|
||||||
#define B_HS_P98_3 NeoPixelBrightnessBus<P9813BgrFeature, P9813SpiMethod>
|
#define B_HS_P98_3 NeoPixelBusLg<P9813BgrFeature, P9813SpiHzMethod, NeoGammaNullMethod>
|
||||||
#define B_SS_P98_3 NeoPixelBrightnessBus<P9813BgrFeature, P9813Method>
|
#define B_SS_P98_3 NeoPixelBusLg<P9813BgrFeature, P9813Method, NeoGammaNullMethod>
|
||||||
|
|
||||||
|
// 48bit & 64bit to 24bit & 32bit RGB(W) conversion
|
||||||
|
#define toRGBW32(c) (RGBW32((c>>40)&0xFF, (c>>24)&0xFF, (c>>8)&0xFF, (c>>56)&0xFF))
|
||||||
|
#define RGBW32(r,g,b,w) (uint32_t((byte(w) << 24) | (byte(r) << 16) | (byte(g) << 8) | (byte(b))))
|
||||||
|
|
||||||
//handles pointer type conversion for all possible bus types
|
//handles pointer type conversion for all possible bus types
|
||||||
class PolyBus {
|
class PolyBus {
|
||||||
public:
|
public:
|
||||||
|
// initialize SPI bus speed for DotStar methods
|
||||||
|
template <class T>
|
||||||
|
static void beginDotStar(void* busPtr, int8_t sck, int8_t miso, int8_t mosi, int8_t ss, uint16_t clock_kHz = 0U) {
|
||||||
|
T dotStar_strip = static_cast<T>(busPtr);
|
||||||
|
#ifdef ESP8266
|
||||||
|
dotStar_strip->Begin();
|
||||||
|
#else
|
||||||
|
if (sck == -1 && mosi == -1) dotStar_strip->Begin();
|
||||||
|
else dotStar_strip->Begin(sck, miso, mosi, ss);
|
||||||
|
#endif
|
||||||
|
if (clock_kHz) dotStar_strip->SetMethodSettings(NeoSpiSettings((uint32_t)clock_kHz*1000));
|
||||||
|
}
|
||||||
// Begin & initialize the PixelSettings for TM1814 strips.
|
// Begin & initialize the PixelSettings for TM1814 strips.
|
||||||
template <class T>
|
template <class T>
|
||||||
static void beginTM1814(void* busPtr) {
|
static void beginTM1814(void* busPtr) {
|
||||||
@@ -231,7 +285,7 @@ class PolyBus {
|
|||||||
// Max current for each LED (22.5 mA).
|
// Max current for each LED (22.5 mA).
|
||||||
tm1814_strip->SetPixelSettings(NeoTm1814Settings(/*R*/225, /*G*/225, /*B*/225, /*W*/225));
|
tm1814_strip->SetPixelSettings(NeoTm1814Settings(/*R*/225, /*G*/225, /*B*/225, /*W*/225));
|
||||||
}
|
}
|
||||||
static void begin(void* busPtr, uint8_t busType, uint8_t* pins) {
|
static void begin(void* busPtr, uint8_t busType, uint8_t* pins, uint16_t clock_kHz = 0U) {
|
||||||
switch (busType) {
|
switch (busType) {
|
||||||
case I_NONE: break;
|
case I_NONE: break;
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
@@ -255,11 +309,19 @@ class PolyBus {
|
|||||||
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->Begin(); break;
|
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->Begin(); break;
|
||||||
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->Begin(); break;
|
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->Begin(); break;
|
||||||
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->Begin(); break;
|
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->Begin(); break;
|
||||||
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->Begin(); break;
|
case I_HS_DOT_3: beginDotStar<B_HS_DOT_3*>(busPtr, -1, -1, -1, -1, clock_kHz); break;
|
||||||
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->Begin(); break;
|
case I_HS_LPD_3: beginDotStar<B_HS_LPD_3*>(busPtr, -1, -1, -1, -1, clock_kHz); break;
|
||||||
case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->Begin(); break;
|
case I_HS_LPO_3: beginDotStar<B_HS_LPO_3*>(busPtr, -1, -1, -1, -1, clock_kHz); break;
|
||||||
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->Begin(); break;
|
case I_HS_WS1_3: beginDotStar<B_HS_WS1_3*>(busPtr, -1, -1, -1, -1, clock_kHz); break;
|
||||||
case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->Begin(); break;
|
case I_HS_P98_3: beginDotStar<B_HS_P98_3*>(busPtr, -1, -1, -1, -1, clock_kHz); break;
|
||||||
|
case I_8266_U0_UCS_3: (static_cast<B_8266_U0_UCS_3*>(busPtr))->Begin(); break;
|
||||||
|
case I_8266_U1_UCS_3: (static_cast<B_8266_U1_UCS_3*>(busPtr))->Begin(); break;
|
||||||
|
case I_8266_DM_UCS_3: (static_cast<B_8266_DM_UCS_3*>(busPtr))->Begin(); break;
|
||||||
|
case I_8266_BB_UCS_3: (static_cast<B_8266_BB_UCS_3*>(busPtr))->Begin(); break;
|
||||||
|
case I_8266_U0_UCS_4: (static_cast<B_8266_U0_UCS_4*>(busPtr))->Begin(); break;
|
||||||
|
case I_8266_U1_UCS_4: (static_cast<B_8266_U1_UCS_4*>(busPtr))->Begin(); break;
|
||||||
|
case I_8266_DM_UCS_4: (static_cast<B_8266_DM_UCS_4*>(busPtr))->Begin(); break;
|
||||||
|
case I_8266_BB_UCS_4: (static_cast<B_8266_BB_UCS_4*>(busPtr))->Begin(); break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef ARDUINO_ARCH_ESP32
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->Begin(); break;
|
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->Begin(); break;
|
||||||
@@ -296,12 +358,28 @@ class PolyBus {
|
|||||||
case I_32_I1_TM1_4: beginTM1814<B_32_I1_TM1_4*>(busPtr); break;
|
case I_32_I1_TM1_4: beginTM1814<B_32_I1_TM1_4*>(busPtr); break;
|
||||||
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->Begin(); break;
|
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->Begin(); break;
|
||||||
#endif
|
#endif
|
||||||
|
case I_32_RN_UCS_3: (static_cast<B_32_RN_UCS_3*>(busPtr))->Begin(); break;
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
case I_32_I0_UCS_3: (static_cast<B_32_I0_UCS_3*>(busPtr))->Begin(); break;
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
|
case I_32_I1_UCS_3: (static_cast<B_32_I1_UCS_3*>(busPtr))->Begin(); break;
|
||||||
|
#endif
|
||||||
|
// case I_32_BB_UCS_3: (static_cast<B_32_BB_UCS_3*>(busPtr))->Begin(); break;
|
||||||
|
case I_32_RN_UCS_4: (static_cast<B_32_RN_UCS_4*>(busPtr))->Begin(); break;
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
case I_32_I0_UCS_4: (static_cast<B_32_I0_UCS_4*>(busPtr))->Begin(); break;
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
|
case I_32_I1_UCS_4: (static_cast<B_32_I1_UCS_4*>(busPtr))->Begin(); break;
|
||||||
|
#endif
|
||||||
|
// case I_32_BB_UCS_4: (static_cast<B_32_BB_UCS_4*>(busPtr))->Begin(); break;
|
||||||
// ESP32 can (and should, to avoid inadvertantly driving the chip select signal) specify the pins used for SPI, but only in begin()
|
// ESP32 can (and should, to avoid inadvertantly driving the chip select signal) specify the pins used for SPI, but only in begin()
|
||||||
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break;
|
case I_HS_DOT_3: beginDotStar<B_HS_DOT_3*>(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break;
|
||||||
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break;
|
case I_HS_LPD_3: beginDotStar<B_HS_LPD_3*>(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break;
|
||||||
case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break;
|
case I_HS_LPO_3: beginDotStar<B_HS_LPO_3*>(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break;
|
||||||
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break;
|
case I_HS_WS1_3: beginDotStar<B_HS_WS1_3*>(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break;
|
||||||
case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break;
|
case I_HS_P98_3: beginDotStar<B_HS_P98_3*>(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break;
|
||||||
#endif
|
#endif
|
||||||
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->Begin(); break;
|
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->Begin(); break;
|
||||||
case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->Begin(); break;
|
case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->Begin(); break;
|
||||||
@@ -310,7 +388,7 @@ class PolyBus {
|
|||||||
case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->Begin(); break;
|
case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->Begin(); break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
static void* create(uint8_t busType, uint8_t* pins, uint16_t len, uint8_t channel) {
|
static void* create(uint8_t busType, uint8_t* pins, uint16_t len, uint8_t channel, uint16_t clock_kHz = 0U) {
|
||||||
void* busPtr = nullptr;
|
void* busPtr = nullptr;
|
||||||
switch (busType) {
|
switch (busType) {
|
||||||
case I_NONE: break;
|
case I_NONE: break;
|
||||||
@@ -335,6 +413,14 @@ class PolyBus {
|
|||||||
case I_8266_U1_TM2_3: busPtr = new B_8266_U1_TM2_4(len, pins[0]); break;
|
case I_8266_U1_TM2_3: busPtr = new B_8266_U1_TM2_4(len, pins[0]); break;
|
||||||
case I_8266_DM_TM2_3: busPtr = new B_8266_DM_TM2_4(len, pins[0]); break;
|
case I_8266_DM_TM2_3: busPtr = new B_8266_DM_TM2_4(len, pins[0]); break;
|
||||||
case I_8266_BB_TM2_3: busPtr = new B_8266_BB_TM2_4(len, pins[0]); break;
|
case I_8266_BB_TM2_3: busPtr = new B_8266_BB_TM2_4(len, pins[0]); break;
|
||||||
|
case I_8266_U0_UCS_3: busPtr = new B_8266_U0_UCS_3(len, pins[0]); break;
|
||||||
|
case I_8266_U1_UCS_3: busPtr = new B_8266_U1_UCS_3(len, pins[0]); break;
|
||||||
|
case I_8266_DM_UCS_3: busPtr = new B_8266_DM_UCS_3(len, pins[0]); break;
|
||||||
|
case I_8266_BB_UCS_3: busPtr = new B_8266_BB_UCS_3(len, pins[0]); break;
|
||||||
|
case I_8266_U0_UCS_4: busPtr = new B_8266_U0_UCS_4(len, pins[0]); break;
|
||||||
|
case I_8266_U1_UCS_4: busPtr = new B_8266_U1_UCS_4(len, pins[0]); break;
|
||||||
|
case I_8266_DM_UCS_4: busPtr = new B_8266_DM_UCS_4(len, pins[0]); break;
|
||||||
|
case I_8266_BB_UCS_4: busPtr = new B_8266_BB_UCS_4(len, pins[0]); break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef ARDUINO_ARCH_ESP32
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
case I_32_RN_NEO_3: busPtr = new B_32_RN_NEO_3(len, pins[0], (NeoBusChannel)channel); break;
|
case I_32_RN_NEO_3: busPtr = new B_32_RN_NEO_3(len, pins[0], (NeoBusChannel)channel); break;
|
||||||
@@ -371,6 +457,22 @@ class PolyBus {
|
|||||||
case I_32_I1_TM1_4: busPtr = new B_32_I1_TM1_4(len, pins[0]); break;
|
case I_32_I1_TM1_4: busPtr = new B_32_I1_TM1_4(len, pins[0]); break;
|
||||||
case I_32_I1_TM2_3: busPtr = new B_32_I1_TM2_3(len, pins[0]); break;
|
case I_32_I1_TM2_3: busPtr = new B_32_I1_TM2_3(len, pins[0]); break;
|
||||||
#endif
|
#endif
|
||||||
|
case I_32_RN_UCS_3: busPtr = new B_32_RN_UCS_3(len, pins[0], (NeoBusChannel)channel); break;
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
case I_32_I0_UCS_3: busPtr = new B_32_I0_UCS_3(len, pins[0]); break;
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
|
case I_32_I1_UCS_3: busPtr = new B_32_I1_UCS_3(len, pins[0]); break;
|
||||||
|
#endif
|
||||||
|
// case I_32_BB_UCS_3: busPtr = new B_32_BB_UCS_3(len, pins[0], (NeoBusChannel)channel); break;
|
||||||
|
case I_32_RN_UCS_4: busPtr = new B_32_RN_UCS_4(len, pins[0], (NeoBusChannel)channel); break;
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
case I_32_I0_UCS_4: busPtr = new B_32_I0_UCS_4(len, pins[0]); break;
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
|
case I_32_I1_UCS_4: busPtr = new B_32_I1_UCS_4(len, pins[0]); break;
|
||||||
|
#endif
|
||||||
|
// case I_32_BB_UCS_4: busPtr = new B_32_BB_UCS_4(len, pins[0], (NeoBusChannel)channel); break;
|
||||||
#endif
|
#endif
|
||||||
// for 2-wire: pins[1] is clk, pins[0] is dat. begin expects (len, clk, dat)
|
// for 2-wire: pins[1] is clk, pins[0] is dat. begin expects (len, clk, dat)
|
||||||
case I_HS_DOT_3: busPtr = new B_HS_DOT_3(len, pins[1], pins[0]); break;
|
case I_HS_DOT_3: busPtr = new B_HS_DOT_3(len, pins[1], pins[0]); break;
|
||||||
@@ -384,7 +486,7 @@ class PolyBus {
|
|||||||
case I_HS_P98_3: busPtr = new B_HS_P98_3(len, pins[1], pins[0]); break;
|
case I_HS_P98_3: busPtr = new B_HS_P98_3(len, pins[1], pins[0]); break;
|
||||||
case I_SS_P98_3: busPtr = new B_SS_P98_3(len, pins[1], pins[0]); break;
|
case I_SS_P98_3: busPtr = new B_SS_P98_3(len, pins[1], pins[0]); break;
|
||||||
}
|
}
|
||||||
begin(busPtr, busType, pins);
|
begin(busPtr, busType, pins, clock_kHz);
|
||||||
return busPtr;
|
return busPtr;
|
||||||
};
|
};
|
||||||
static void show(void* busPtr, uint8_t busType) {
|
static void show(void* busPtr, uint8_t busType) {
|
||||||
@@ -411,6 +513,14 @@ class PolyBus {
|
|||||||
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->Show(); break;
|
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->Show(); break;
|
||||||
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->Show(); break;
|
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->Show(); break;
|
||||||
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->Show(); break;
|
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->Show(); break;
|
||||||
|
case I_8266_U0_UCS_3: (static_cast<B_8266_U0_UCS_3*>(busPtr))->Show(); break;
|
||||||
|
case I_8266_U1_UCS_3: (static_cast<B_8266_U1_UCS_3*>(busPtr))->Show(); break;
|
||||||
|
case I_8266_DM_UCS_3: (static_cast<B_8266_DM_UCS_3*>(busPtr))->Show(); break;
|
||||||
|
case I_8266_BB_UCS_3: (static_cast<B_8266_BB_UCS_3*>(busPtr))->Show(); break;
|
||||||
|
case I_8266_U0_UCS_4: (static_cast<B_8266_U0_UCS_4*>(busPtr))->Show(); break;
|
||||||
|
case I_8266_U1_UCS_4: (static_cast<B_8266_U1_UCS_4*>(busPtr))->Show(); break;
|
||||||
|
case I_8266_DM_UCS_4: (static_cast<B_8266_DM_UCS_4*>(busPtr))->Show(); break;
|
||||||
|
case I_8266_BB_UCS_4: (static_cast<B_8266_BB_UCS_4*>(busPtr))->Show(); break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef ARDUINO_ARCH_ESP32
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->Show(); break;
|
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->Show(); break;
|
||||||
@@ -447,6 +557,22 @@ class PolyBus {
|
|||||||
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->Show(); break;
|
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->Show(); break;
|
||||||
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->Show(); break;
|
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->Show(); break;
|
||||||
#endif
|
#endif
|
||||||
|
case I_32_RN_UCS_3: (static_cast<B_32_RN_UCS_3*>(busPtr))->Show(); break;
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
case I_32_I0_UCS_3: (static_cast<B_32_I0_UCS_3*>(busPtr))->Show(); break;
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
|
case I_32_I1_UCS_3: (static_cast<B_32_I1_UCS_3*>(busPtr))->Show(); break;
|
||||||
|
#endif
|
||||||
|
// case I_32_BB_UCS_3: (static_cast<B_32_BB_NEO_3*>(busPtr))->Show(); break;
|
||||||
|
case I_32_RN_UCS_4: (static_cast<B_32_RN_UCS_4*>(busPtr))->Show(); break;
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
case I_32_I0_UCS_4: (static_cast<B_32_I0_UCS_4*>(busPtr))->Show(); break;
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
|
case I_32_I1_UCS_4: (static_cast<B_32_I1_UCS_4*>(busPtr))->Show(); break;
|
||||||
|
#endif
|
||||||
|
// case I_32_BB_UCS_4: (static_cast<B_32_BB_UCS_4*>(busPtr))->Show(); break;
|
||||||
#endif
|
#endif
|
||||||
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->Show(); break;
|
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->Show(); break;
|
||||||
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->Show(); break;
|
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->Show(); break;
|
||||||
@@ -484,6 +610,13 @@ class PolyBus {
|
|||||||
case I_8266_U1_TM2_3: return (static_cast<B_8266_U1_TM2_4*>(busPtr))->CanShow(); break;
|
case I_8266_U1_TM2_3: return (static_cast<B_8266_U1_TM2_4*>(busPtr))->CanShow(); break;
|
||||||
case I_8266_DM_TM2_3: return (static_cast<B_8266_DM_TM2_4*>(busPtr))->CanShow(); break;
|
case I_8266_DM_TM2_3: return (static_cast<B_8266_DM_TM2_4*>(busPtr))->CanShow(); break;
|
||||||
case I_8266_BB_TM2_3: return (static_cast<B_8266_BB_TM2_4*>(busPtr))->CanShow(); break;
|
case I_8266_BB_TM2_3: return (static_cast<B_8266_BB_TM2_4*>(busPtr))->CanShow(); break;
|
||||||
|
case I_8266_U0_UCS_3: return (static_cast<B_8266_U0_UCS_3*>(busPtr))->CanShow(); break;
|
||||||
|
case I_8266_U1_UCS_3: return (static_cast<B_8266_U1_UCS_3*>(busPtr))->CanShow(); break;
|
||||||
|
case I_8266_DM_UCS_3: return (static_cast<B_8266_DM_UCS_3*>(busPtr))->CanShow(); break;
|
||||||
|
case I_8266_BB_UCS_3: return (static_cast<B_8266_BB_UCS_3*>(busPtr))->CanShow(); break;
|
||||||
|
case I_8266_U0_UCS_4: return (static_cast<B_8266_U0_UCS_4*>(busPtr))->CanShow(); break;
|
||||||
|
case I_8266_U1_UCS_4: return (static_cast<B_8266_U1_UCS_4*>(busPtr))->CanShow(); break;
|
||||||
|
case I_8266_DM_UCS_4: return (static_cast<B_8266_DM_UCS_4*>(busPtr))->CanShow(); break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef ARDUINO_ARCH_ESP32
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
case I_32_RN_NEO_3: return (static_cast<B_32_RN_NEO_3*>(busPtr))->CanShow(); break;
|
case I_32_RN_NEO_3: return (static_cast<B_32_RN_NEO_3*>(busPtr))->CanShow(); break;
|
||||||
@@ -520,6 +653,22 @@ class PolyBus {
|
|||||||
case I_32_I1_TM1_4: return (static_cast<B_32_I1_TM1_4*>(busPtr))->CanShow(); break;
|
case I_32_I1_TM1_4: return (static_cast<B_32_I1_TM1_4*>(busPtr))->CanShow(); break;
|
||||||
case I_32_I1_TM2_3: return (static_cast<B_32_I1_TM2_3*>(busPtr))->CanShow(); break;
|
case I_32_I1_TM2_3: return (static_cast<B_32_I1_TM2_3*>(busPtr))->CanShow(); break;
|
||||||
#endif
|
#endif
|
||||||
|
case I_32_RN_UCS_3: return (static_cast<B_32_RN_UCS_3*>(busPtr))->CanShow(); break;
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
case I_32_I0_UCS_3: return (static_cast<B_32_I0_UCS_3*>(busPtr))->CanShow(); break;
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
|
case I_32_I1_UCS_3: return (static_cast<B_32_I1_UCS_3*>(busPtr))->CanShow(); break;
|
||||||
|
#endif
|
||||||
|
// case I_32_BB_UCS_3: return (static_cast<B_32_BB_UCS_3*>(busPtr))->CanShow(); break;
|
||||||
|
case I_32_RN_UCS_4: return (static_cast<B_32_RN_UCS_4*>(busPtr))->CanShow(); break;
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
case I_32_I0_UCS_4: return (static_cast<B_32_I0_UCS_4*>(busPtr))->CanShow(); break;
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
|
case I_32_I1_UCS_4: return (static_cast<B_32_I1_UCS_4*>(busPtr))->CanShow(); break;
|
||||||
|
#endif
|
||||||
|
// case I_32_BB_UCS_4: return (static_cast<B_32_BB_UCS_4*>(busPtr))->CanShow(); break;
|
||||||
#endif
|
#endif
|
||||||
case I_HS_DOT_3: return (static_cast<B_HS_DOT_3*>(busPtr))->CanShow(); break;
|
case I_HS_DOT_3: return (static_cast<B_HS_DOT_3*>(busPtr))->CanShow(); break;
|
||||||
case I_SS_DOT_3: return (static_cast<B_SS_DOT_3*>(busPtr))->CanShow(); break;
|
case I_SS_DOT_3: return (static_cast<B_SS_DOT_3*>(busPtr))->CanShow(); break;
|
||||||
@@ -561,34 +710,42 @@ class PolyBus {
|
|||||||
switch (busType) {
|
switch (busType) {
|
||||||
case I_NONE: break;
|
case I_NONE: break;
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
case I_8266_U0_NEO_3: (static_cast<B_8266_U0_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_8266_U0_NEO_3: (static_cast<B_8266_U0_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
case I_8266_U1_NEO_3: (static_cast<B_8266_U1_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_8266_U1_NEO_3: (static_cast<B_8266_U1_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
case I_8266_DM_NEO_3: (static_cast<B_8266_DM_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_8266_DM_NEO_3: (static_cast<B_8266_DM_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
case I_8266_BB_NEO_3: (static_cast<B_8266_BB_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_8266_BB_NEO_3: (static_cast<B_8266_BB_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
case I_8266_U0_NEO_4: (static_cast<B_8266_U0_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
|
case I_8266_U0_NEO_4: (static_cast<B_8266_U0_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
|
||||||
case I_8266_U1_NEO_4: (static_cast<B_8266_U1_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
|
case I_8266_U1_NEO_4: (static_cast<B_8266_U1_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
|
||||||
case I_8266_DM_NEO_4: (static_cast<B_8266_DM_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
|
case I_8266_DM_NEO_4: (static_cast<B_8266_DM_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
|
||||||
case I_8266_BB_NEO_4: (static_cast<B_8266_BB_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
|
case I_8266_BB_NEO_4: (static_cast<B_8266_BB_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
|
||||||
case I_8266_U0_400_3: (static_cast<B_8266_U0_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_8266_U0_400_3: (static_cast<B_8266_U0_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
case I_8266_U1_400_3: (static_cast<B_8266_U1_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_8266_U1_400_3: (static_cast<B_8266_U1_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
case I_8266_DM_400_3: (static_cast<B_8266_DM_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_8266_DM_400_3: (static_cast<B_8266_DM_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
case I_8266_BB_400_3: (static_cast<B_8266_BB_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_8266_BB_400_3: (static_cast<B_8266_BB_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
case I_8266_U0_TM1_4: (static_cast<B_8266_U0_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
|
case I_8266_U0_TM1_4: (static_cast<B_8266_U0_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
|
||||||
case I_8266_U1_TM1_4: (static_cast<B_8266_U1_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
|
case I_8266_U1_TM1_4: (static_cast<B_8266_U1_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
|
||||||
case I_8266_DM_TM1_4: (static_cast<B_8266_DM_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
|
case I_8266_DM_TM1_4: (static_cast<B_8266_DM_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
|
||||||
case I_8266_BB_TM1_4: (static_cast<B_8266_BB_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
|
case I_8266_BB_TM1_4: (static_cast<B_8266_BB_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
|
||||||
case I_8266_U0_TM2_3: (static_cast<B_8266_U0_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_8266_U0_TM2_3: (static_cast<B_8266_U0_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
|
case I_8266_U0_UCS_3: (static_cast<B_8266_U0_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
|
||||||
|
case I_8266_U1_UCS_3: (static_cast<B_8266_U1_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
|
||||||
|
case I_8266_DM_UCS_3: (static_cast<B_8266_DM_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
|
||||||
|
case I_8266_BB_UCS_3: (static_cast<B_8266_BB_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
|
||||||
|
case I_8266_U0_UCS_4: (static_cast<B_8266_U0_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
|
||||||
|
case I_8266_U1_UCS_4: (static_cast<B_8266_U1_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
|
||||||
|
case I_8266_DM_UCS_4: (static_cast<B_8266_DM_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
|
||||||
|
case I_8266_BB_UCS_4: (static_cast<B_8266_BB_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef ARDUINO_ARCH_ESP32
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
#ifndef WLED_NO_I2S0_PIXELBUS
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
case I_32_I0_NEO_3: (static_cast<B_32_I0_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_32_I0_NEO_3: (static_cast<B_32_I0_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
#endif
|
#endif
|
||||||
#ifndef WLED_NO_I2S1_PIXELBUS
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
case I_32_I1_NEO_3: (static_cast<B_32_I1_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_32_I1_NEO_3: (static_cast<B_32_I1_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
#endif
|
#endif
|
||||||
// case I_32_BB_NEO_3: (static_cast<B_32_BB_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
// case I_32_BB_NEO_3: (static_cast<B_32_BB_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
||||||
case I_32_RN_NEO_4: (static_cast<B_32_RN_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
|
case I_32_RN_NEO_4: (static_cast<B_32_RN_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
|
||||||
@@ -599,108 +756,147 @@ class PolyBus {
|
|||||||
case I_32_I1_NEO_4: (static_cast<B_32_I1_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
|
case I_32_I1_NEO_4: (static_cast<B_32_I1_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
|
||||||
#endif
|
#endif
|
||||||
// case I_32_BB_NEO_4: (static_cast<B_32_BB_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
|
// case I_32_BB_NEO_4: (static_cast<B_32_BB_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
|
||||||
case I_32_RN_400_3: (static_cast<B_32_RN_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_32_RN_400_3: (static_cast<B_32_RN_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
#ifndef WLED_NO_I2S0_PIXELBUS
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
#endif
|
#endif
|
||||||
#ifndef WLED_NO_I2S1_PIXELBUS
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
#endif
|
#endif
|
||||||
// case I_32_BB_400_3: (static_cast<B_32_BB_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
// case I_32_BB_400_3: (static_cast<B_32_BB_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
||||||
case I_32_RN_TM1_4: (static_cast<B_32_RN_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
|
case I_32_RN_TM1_4: (static_cast<B_32_RN_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
|
||||||
case I_32_RN_TM2_3: (static_cast<B_32_RN_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_32_RN_TM2_3: (static_cast<B_32_RN_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
#ifndef WLED_NO_I2S0_PIXELBUS
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
case I_32_I0_TM1_4: (static_cast<B_32_I0_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
|
case I_32_I0_TM1_4: (static_cast<B_32_I0_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
|
||||||
case I_32_I0_TM2_3: (static_cast<B_32_I0_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_32_I0_TM2_3: (static_cast<B_32_I0_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
#endif
|
#endif
|
||||||
#ifndef WLED_NO_I2S1_PIXELBUS
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
|
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
|
||||||
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
#endif
|
#endif
|
||||||
|
case I_32_RN_UCS_3: (static_cast<B_32_RN_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
case I_32_I0_UCS_3: (static_cast<B_32_I0_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
|
||||||
#endif
|
#endif
|
||||||
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_32_I1_UCS_3: (static_cast<B_32_I1_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
|
||||||
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
#endif
|
||||||
case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
// case I_32_BB_UCS_3: (static_cast<B_32_BB_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
|
||||||
case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_32_RN_UCS_4: (static_cast<B_32_RN_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
|
||||||
case I_SS_LPO_3: (static_cast<B_SS_LPO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_32_I0_UCS_4: (static_cast<B_32_I0_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
|
||||||
case I_SS_WS1_3: (static_cast<B_SS_WS1_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
#endif
|
||||||
case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
|
case I_32_I1_UCS_4: (static_cast<B_32_I1_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
|
||||||
|
#endif
|
||||||
|
// case I_32_BB_UCS_4: (static_cast<B_32_BB_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
|
||||||
|
#endif
|
||||||
|
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
|
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
|
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
|
case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
|
case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
|
case I_SS_LPO_3: (static_cast<B_SS_LPO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
|
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
|
case I_SS_WS1_3: (static_cast<B_SS_WS1_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
|
case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
|
case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
static void setBrightness(void* busPtr, uint8_t busType, uint8_t b) {
|
static void setBrightness(void* busPtr, uint8_t busType, uint8_t b) {
|
||||||
switch (busType) {
|
switch (busType) {
|
||||||
case I_NONE: break;
|
case I_NONE: break;
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
case I_8266_U0_NEO_3: (static_cast<B_8266_U0_NEO_3*>(busPtr))->SetBrightness(b); break;
|
case I_8266_U0_NEO_3: (static_cast<B_8266_U0_NEO_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_U1_NEO_3: (static_cast<B_8266_U1_NEO_3*>(busPtr))->SetBrightness(b); break;
|
case I_8266_U1_NEO_3: (static_cast<B_8266_U1_NEO_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_DM_NEO_3: (static_cast<B_8266_DM_NEO_3*>(busPtr))->SetBrightness(b); break;
|
case I_8266_DM_NEO_3: (static_cast<B_8266_DM_NEO_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_BB_NEO_3: (static_cast<B_8266_BB_NEO_3*>(busPtr))->SetBrightness(b); break;
|
case I_8266_BB_NEO_3: (static_cast<B_8266_BB_NEO_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_U0_NEO_4: (static_cast<B_8266_U0_NEO_4*>(busPtr))->SetBrightness(b); break;
|
case I_8266_U0_NEO_4: (static_cast<B_8266_U0_NEO_4*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_U1_NEO_4: (static_cast<B_8266_U1_NEO_4*>(busPtr))->SetBrightness(b); break;
|
case I_8266_U1_NEO_4: (static_cast<B_8266_U1_NEO_4*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_DM_NEO_4: (static_cast<B_8266_DM_NEO_4*>(busPtr))->SetBrightness(b); break;
|
case I_8266_DM_NEO_4: (static_cast<B_8266_DM_NEO_4*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_BB_NEO_4: (static_cast<B_8266_BB_NEO_4*>(busPtr))->SetBrightness(b); break;
|
case I_8266_BB_NEO_4: (static_cast<B_8266_BB_NEO_4*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_U0_400_3: (static_cast<B_8266_U0_400_3*>(busPtr))->SetBrightness(b); break;
|
case I_8266_U0_400_3: (static_cast<B_8266_U0_400_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_U1_400_3: (static_cast<B_8266_U1_400_3*>(busPtr))->SetBrightness(b); break;
|
case I_8266_U1_400_3: (static_cast<B_8266_U1_400_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_DM_400_3: (static_cast<B_8266_DM_400_3*>(busPtr))->SetBrightness(b); break;
|
case I_8266_DM_400_3: (static_cast<B_8266_DM_400_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_BB_400_3: (static_cast<B_8266_BB_400_3*>(busPtr))->SetBrightness(b); break;
|
case I_8266_BB_400_3: (static_cast<B_8266_BB_400_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_U0_TM1_4: (static_cast<B_8266_U0_TM1_4*>(busPtr))->SetBrightness(b); break;
|
case I_8266_U0_TM1_4: (static_cast<B_8266_U0_TM1_4*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_U1_TM1_4: (static_cast<B_8266_U1_TM1_4*>(busPtr))->SetBrightness(b); break;
|
case I_8266_U1_TM1_4: (static_cast<B_8266_U1_TM1_4*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_DM_TM1_4: (static_cast<B_8266_DM_TM1_4*>(busPtr))->SetBrightness(b); break;
|
case I_8266_DM_TM1_4: (static_cast<B_8266_DM_TM1_4*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_BB_TM1_4: (static_cast<B_8266_BB_TM1_4*>(busPtr))->SetBrightness(b); break;
|
case I_8266_BB_TM1_4: (static_cast<B_8266_BB_TM1_4*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_U0_TM2_3: (static_cast<B_8266_U0_TM2_4*>(busPtr))->SetBrightness(b); break;
|
case I_8266_U0_TM2_3: (static_cast<B_8266_U0_TM2_4*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->SetBrightness(b); break;
|
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->SetBrightness(b); break;
|
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->SetBrightness(b); break;
|
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->SetLuminance(b); break;
|
||||||
|
case I_8266_U0_UCS_3: (static_cast<B_8266_U0_UCS_3*>(busPtr))->SetLuminance(b); break;
|
||||||
|
case I_8266_U1_UCS_3: (static_cast<B_8266_U1_UCS_3*>(busPtr))->SetLuminance(b); break;
|
||||||
|
case I_8266_DM_UCS_3: (static_cast<B_8266_DM_UCS_3*>(busPtr))->SetLuminance(b); break;
|
||||||
|
case I_8266_BB_UCS_3: (static_cast<B_8266_BB_UCS_3*>(busPtr))->SetLuminance(b); break;
|
||||||
|
case I_8266_U0_UCS_4: (static_cast<B_8266_U0_UCS_4*>(busPtr))->SetLuminance(b); break;
|
||||||
|
case I_8266_U1_UCS_4: (static_cast<B_8266_U1_UCS_4*>(busPtr))->SetLuminance(b); break;
|
||||||
|
case I_8266_DM_UCS_4: (static_cast<B_8266_DM_UCS_4*>(busPtr))->SetLuminance(b); break;
|
||||||
|
case I_8266_BB_UCS_4: (static_cast<B_8266_BB_UCS_4*>(busPtr))->SetLuminance(b); break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef ARDUINO_ARCH_ESP32
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->SetBrightness(b); break;
|
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->SetLuminance(b); break;
|
||||||
#ifndef WLED_NO_I2S0_PIXELBUS
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
case I_32_I0_NEO_3: (static_cast<B_32_I0_NEO_3*>(busPtr))->SetBrightness(b); break;
|
case I_32_I0_NEO_3: (static_cast<B_32_I0_NEO_3*>(busPtr))->SetLuminance(b); break;
|
||||||
#endif
|
#endif
|
||||||
#ifndef WLED_NO_I2S1_PIXELBUS
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
case I_32_I1_NEO_3: (static_cast<B_32_I1_NEO_3*>(busPtr))->SetBrightness(b); break;
|
case I_32_I1_NEO_3: (static_cast<B_32_I1_NEO_3*>(busPtr))->SetLuminance(b); break;
|
||||||
#endif
|
#endif
|
||||||
// case I_32_BB_NEO_3: (static_cast<B_32_BB_NEO_3*>(busPtr))->SetBrightness(b); break;
|
// case I_32_BB_NEO_3: (static_cast<B_32_BB_NEO_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_32_RN_NEO_4: (static_cast<B_32_RN_NEO_4*>(busPtr))->SetBrightness(b); break;
|
case I_32_RN_NEO_4: (static_cast<B_32_RN_NEO_4*>(busPtr))->SetLuminance(b); break;
|
||||||
#ifndef WLED_NO_I2S0_PIXELBUS
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
case I_32_I0_NEO_4: (static_cast<B_32_I0_NEO_4*>(busPtr))->SetBrightness(b); break;
|
case I_32_I0_NEO_4: (static_cast<B_32_I0_NEO_4*>(busPtr))->SetLuminance(b); break;
|
||||||
#endif
|
#endif
|
||||||
#ifndef WLED_NO_I2S1_PIXELBUS
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
case I_32_I1_NEO_4: (static_cast<B_32_I1_NEO_4*>(busPtr))->SetBrightness(b); break;
|
case I_32_I1_NEO_4: (static_cast<B_32_I1_NEO_4*>(busPtr))->SetLuminance(b); break;
|
||||||
#endif
|
#endif
|
||||||
// case I_32_BB_NEO_4: (static_cast<B_32_BB_NEO_4*>(busPtr))->SetBrightness(b); break;
|
// case I_32_BB_NEO_4: (static_cast<B_32_BB_NEO_4*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_32_RN_400_3: (static_cast<B_32_RN_400_3*>(busPtr))->SetBrightness(b); break;
|
case I_32_RN_400_3: (static_cast<B_32_RN_400_3*>(busPtr))->SetLuminance(b); break;
|
||||||
#ifndef WLED_NO_I2S0_PIXELBUS
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->SetBrightness(b); break;
|
case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->SetLuminance(b); break;
|
||||||
#endif
|
#endif
|
||||||
#ifndef WLED_NO_I2S1_PIXELBUS
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->SetBrightness(b); break;
|
case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->SetLuminance(b); break;
|
||||||
#endif
|
#endif
|
||||||
// case I_32_BB_400_3: (static_cast<B_32_BB_400_3*>(busPtr))->SetBrightness(b); break;
|
// case I_32_BB_400_3: (static_cast<B_32_BB_400_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_32_RN_TM1_4: (static_cast<B_32_RN_TM1_4*>(busPtr))->SetBrightness(b); break;
|
case I_32_RN_TM1_4: (static_cast<B_32_RN_TM1_4*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_32_RN_TM2_3: (static_cast<B_32_RN_TM2_3*>(busPtr))->SetBrightness(b); break;
|
case I_32_RN_TM2_3: (static_cast<B_32_RN_TM2_3*>(busPtr))->SetLuminance(b); break;
|
||||||
#ifndef WLED_NO_I2S0_PIXELBUS
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
case I_32_I0_TM1_4: (static_cast<B_32_I0_TM1_4*>(busPtr))->SetBrightness(b); break;
|
case I_32_I0_TM1_4: (static_cast<B_32_I0_TM1_4*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_32_I0_TM2_3: (static_cast<B_32_I0_TM2_3*>(busPtr))->SetBrightness(b); break;
|
case I_32_I0_TM2_3: (static_cast<B_32_I0_TM2_3*>(busPtr))->SetLuminance(b); break;
|
||||||
#endif
|
#endif
|
||||||
#ifndef WLED_NO_I2S1_PIXELBUS
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->SetBrightness(b); break;
|
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->SetBrightness(b); break;
|
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->SetLuminance(b); break;
|
||||||
|
#endif
|
||||||
|
case I_32_RN_UCS_3: (static_cast<B_32_RN_UCS_3*>(busPtr))->SetLuminance(b); break;
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
case I_32_I0_UCS_3: (static_cast<B_32_I0_UCS_3*>(busPtr))->SetLuminance(b); break;
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
|
case I_32_I1_UCS_3: (static_cast<B_32_I1_UCS_3*>(busPtr))->SetLuminance(b); break;
|
||||||
|
#endif
|
||||||
|
// case I_32_BB_UCS_3: (static_cast<B_32_BB_UCS_3*>(busPtr))->SetLuminance(b); break;
|
||||||
|
case I_32_RN_UCS_4: (static_cast<B_32_RN_UCS_4*>(busPtr))->SetLuminance(b); break;
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
case I_32_I0_UCS_4: (static_cast<B_32_I0_UCS_4*>(busPtr))->SetLuminance(b); break;
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
|
case I_32_I1_UCS_4: (static_cast<B_32_I1_UCS_4*>(busPtr))->SetLuminance(b); break;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->SetBrightness(b); break;
|
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->SetBrightness(b); break;
|
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->SetBrightness(b); break;
|
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->SetBrightness(b); break;
|
case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->SetBrightness(b); break;
|
case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_SS_LPO_3: (static_cast<B_SS_LPO_3*>(busPtr))->SetBrightness(b); break;
|
case I_SS_LPO_3: (static_cast<B_SS_LPO_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->SetBrightness(b); break;
|
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_SS_WS1_3: (static_cast<B_SS_WS1_3*>(busPtr))->SetBrightness(b); break;
|
case I_SS_WS1_3: (static_cast<B_SS_WS1_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->SetBrightness(b); break;
|
case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->SetLuminance(b); break;
|
||||||
case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->SetBrightness(b); break;
|
case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->SetLuminance(b); break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
static uint32_t getPixelColor(void* busPtr, uint8_t busType, uint16_t pix, uint8_t co) {
|
static uint32_t getPixelColor(void* busPtr, uint8_t busType, uint16_t pix, uint8_t co) {
|
||||||
@@ -728,6 +924,14 @@ class PolyBus {
|
|||||||
case I_8266_U1_TM2_3: col = (static_cast<B_8266_U1_TM2_4*>(busPtr))->GetPixelColor(pix); break;
|
case I_8266_U1_TM2_3: col = (static_cast<B_8266_U1_TM2_4*>(busPtr))->GetPixelColor(pix); break;
|
||||||
case I_8266_DM_TM2_3: col = (static_cast<B_8266_DM_TM2_4*>(busPtr))->GetPixelColor(pix); break;
|
case I_8266_DM_TM2_3: col = (static_cast<B_8266_DM_TM2_4*>(busPtr))->GetPixelColor(pix); break;
|
||||||
case I_8266_BB_TM2_3: col = (static_cast<B_8266_BB_TM2_4*>(busPtr))->GetPixelColor(pix); break;
|
case I_8266_BB_TM2_3: col = (static_cast<B_8266_BB_TM2_4*>(busPtr))->GetPixelColor(pix); break;
|
||||||
|
case I_8266_U0_UCS_3: { Rgb48Color c = (static_cast<B_8266_U0_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
|
||||||
|
case I_8266_U1_UCS_3: { Rgb48Color c = (static_cast<B_8266_U1_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
|
||||||
|
case I_8266_DM_UCS_3: { Rgb48Color c = (static_cast<B_8266_DM_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
|
||||||
|
case I_8266_BB_UCS_3: { Rgb48Color c = (static_cast<B_8266_BB_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
|
||||||
|
case I_8266_U0_UCS_4: { Rgbw64Color c = (static_cast<B_8266_U0_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
|
||||||
|
case I_8266_U1_UCS_4: { Rgbw64Color c = (static_cast<B_8266_U1_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
|
||||||
|
case I_8266_DM_UCS_4: { Rgbw64Color c = (static_cast<B_8266_DM_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
|
||||||
|
case I_8266_BB_UCS_4: { Rgbw64Color c = (static_cast<B_8266_BB_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef ARDUINO_ARCH_ESP32
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
case I_32_RN_NEO_3: col = (static_cast<B_32_RN_NEO_3*>(busPtr))->GetPixelColor(pix); break;
|
case I_32_RN_NEO_3: col = (static_cast<B_32_RN_NEO_3*>(busPtr))->GetPixelColor(pix); break;
|
||||||
@@ -764,6 +968,22 @@ class PolyBus {
|
|||||||
case I_32_I1_TM1_4: col = (static_cast<B_32_I1_TM1_4*>(busPtr))->GetPixelColor(pix); break;
|
case I_32_I1_TM1_4: col = (static_cast<B_32_I1_TM1_4*>(busPtr))->GetPixelColor(pix); break;
|
||||||
case I_32_I1_TM2_3: col = (static_cast<B_32_I1_TM2_3*>(busPtr))->GetPixelColor(pix); break;
|
case I_32_I1_TM2_3: col = (static_cast<B_32_I1_TM2_3*>(busPtr))->GetPixelColor(pix); break;
|
||||||
#endif
|
#endif
|
||||||
|
case I_32_RN_UCS_3: { Rgb48Color c = (static_cast<B_32_RN_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
case I_32_I0_UCS_3: { Rgb48Color c = (static_cast<B_32_I0_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
|
case I_32_I1_UCS_3: { Rgb48Color c = (static_cast<B_32_I1_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
|
||||||
|
#endif
|
||||||
|
// case I_32_BB_UCS_3: col = (static_cast<B_32_BB_UCS_3*>(busPtr))->GetPixelColor(pix); break;
|
||||||
|
case I_32_RN_UCS_4: { Rgbw64Color c = (static_cast<B_32_RN_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
case I_32_I0_UCS_4: { Rgbw64Color c = (static_cast<B_32_I0_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
|
case I_32_I1_UCS_4: { Rgbw64Color c = (static_cast<B_32_I1_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
|
||||||
|
#endif
|
||||||
|
// case I_32_BB_UCS_4: col = (static_cast<B_32_BB_UCS_4*>(busPtr))->GetPixelColor(pix); break;
|
||||||
#endif
|
#endif
|
||||||
case I_HS_DOT_3: col = (static_cast<B_HS_DOT_3*>(busPtr))->GetPixelColor(pix); break;
|
case I_HS_DOT_3: col = (static_cast<B_HS_DOT_3*>(busPtr))->GetPixelColor(pix); break;
|
||||||
case I_SS_DOT_3: col = (static_cast<B_SS_DOT_3*>(busPtr))->GetPixelColor(pix); break;
|
case I_SS_DOT_3: col = (static_cast<B_SS_DOT_3*>(busPtr))->GetPixelColor(pix); break;
|
||||||
@@ -821,6 +1041,14 @@ class PolyBus {
|
|||||||
case I_8266_U1_TM2_3: delete (static_cast<B_8266_U1_TM2_4*>(busPtr)); break;
|
case I_8266_U1_TM2_3: delete (static_cast<B_8266_U1_TM2_4*>(busPtr)); break;
|
||||||
case I_8266_DM_TM2_3: delete (static_cast<B_8266_DM_TM2_4*>(busPtr)); break;
|
case I_8266_DM_TM2_3: delete (static_cast<B_8266_DM_TM2_4*>(busPtr)); break;
|
||||||
case I_8266_BB_TM2_3: delete (static_cast<B_8266_BB_TM2_4*>(busPtr)); break;
|
case I_8266_BB_TM2_3: delete (static_cast<B_8266_BB_TM2_4*>(busPtr)); break;
|
||||||
|
case I_8266_U0_UCS_3: delete (static_cast<B_8266_U0_UCS_3*>(busPtr)); break;
|
||||||
|
case I_8266_U1_UCS_3: delete (static_cast<B_8266_U1_UCS_3*>(busPtr)); break;
|
||||||
|
case I_8266_DM_UCS_3: delete (static_cast<B_8266_DM_UCS_3*>(busPtr)); break;
|
||||||
|
case I_8266_BB_UCS_3: delete (static_cast<B_8266_BB_UCS_3*>(busPtr)); break;
|
||||||
|
case I_8266_U0_UCS_4: delete (static_cast<B_8266_U0_UCS_4*>(busPtr)); break;
|
||||||
|
case I_8266_U1_UCS_4: delete (static_cast<B_8266_U1_UCS_4*>(busPtr)); break;
|
||||||
|
case I_8266_DM_UCS_4: delete (static_cast<B_8266_DM_UCS_4*>(busPtr)); break;
|
||||||
|
case I_8266_BB_UCS_4: delete (static_cast<B_8266_BB_UCS_4*>(busPtr)); break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef ARDUINO_ARCH_ESP32
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
case I_32_RN_NEO_3: delete (static_cast<B_32_RN_NEO_3*>(busPtr)); break;
|
case I_32_RN_NEO_3: delete (static_cast<B_32_RN_NEO_3*>(busPtr)); break;
|
||||||
@@ -857,6 +1085,22 @@ class PolyBus {
|
|||||||
case I_32_I1_TM1_4: delete (static_cast<B_32_I1_TM1_4*>(busPtr)); break;
|
case I_32_I1_TM1_4: delete (static_cast<B_32_I1_TM1_4*>(busPtr)); break;
|
||||||
case I_32_I1_TM2_3: delete (static_cast<B_32_I1_TM2_3*>(busPtr)); break;
|
case I_32_I1_TM2_3: delete (static_cast<B_32_I1_TM2_3*>(busPtr)); break;
|
||||||
#endif
|
#endif
|
||||||
|
case I_32_RN_UCS_3: delete (static_cast<B_32_RN_UCS_3*>(busPtr)); break;
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
case I_32_I0_UCS_3: delete (static_cast<B_32_I0_UCS_3*>(busPtr)); break;
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
|
case I_32_I1_UCS_3: delete (static_cast<B_32_I1_UCS_3*>(busPtr)); break;
|
||||||
|
#endif
|
||||||
|
// case I_32_BB_UCS_3: delete (static_cast<B_32_BB_UCS_3*>(busPtr)); break;
|
||||||
|
case I_32_RN_UCS_4: delete (static_cast<B_32_RN_UCS_4*>(busPtr)); break;
|
||||||
|
#ifndef WLED_NO_I2S0_PIXELBUS
|
||||||
|
case I_32_I0_UCS_4: delete (static_cast<B_32_I0_UCS_4*>(busPtr)); break;
|
||||||
|
#endif
|
||||||
|
#ifndef WLED_NO_I2S1_PIXELBUS
|
||||||
|
case I_32_I1_UCS_4: delete (static_cast<B_32_I1_UCS_4*>(busPtr)); break;
|
||||||
|
#endif
|
||||||
|
// case I_32_BB_UCS_4: delete (static_cast<B_32_BB_UCS_4*>(busPtr)); break;
|
||||||
#endif
|
#endif
|
||||||
case I_HS_DOT_3: delete (static_cast<B_HS_DOT_3*>(busPtr)); break;
|
case I_HS_DOT_3: delete (static_cast<B_HS_DOT_3*>(busPtr)); break;
|
||||||
case I_SS_DOT_3: delete (static_cast<B_SS_DOT_3*>(busPtr)); break;
|
case I_SS_DOT_3: delete (static_cast<B_SS_DOT_3*>(busPtr)); break;
|
||||||
@@ -912,6 +1156,10 @@ class PolyBus {
|
|||||||
return I_8266_U0_TM1_4 + offset;
|
return I_8266_U0_TM1_4 + offset;
|
||||||
case TYPE_TM1829:
|
case TYPE_TM1829:
|
||||||
return I_8266_U0_TM2_3 + offset;
|
return I_8266_U0_TM2_3 + offset;
|
||||||
|
case TYPE_UCS8903:
|
||||||
|
return I_8266_U0_UCS_3 + offset;
|
||||||
|
case TYPE_UCS8904:
|
||||||
|
return I_8266_U0_UCS_4 + offset;
|
||||||
}
|
}
|
||||||
#else //ESP32
|
#else //ESP32
|
||||||
uint8_t offset = 0; //0 = RMT (num 0-7) 8 = I2S0 9 = I2S1
|
uint8_t offset = 0; //0 = RMT (num 0-7) 8 = I2S0 9 = I2S1
|
||||||
@@ -953,6 +1201,10 @@ class PolyBus {
|
|||||||
return I_32_RN_TM1_4 + offset;
|
return I_32_RN_TM1_4 + offset;
|
||||||
case TYPE_TM1829:
|
case TYPE_TM1829:
|
||||||
return I_32_RN_TM2_3 + offset;
|
return I_32_RN_TM2_3 + offset;
|
||||||
|
case TYPE_UCS8903:
|
||||||
|
return I_32_RN_UCS_3 + offset;
|
||||||
|
case TYPE_UCS8904:
|
||||||
|
return I_32_RN_UCS_4 + offset;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -227,9 +227,8 @@ void handleButton()
|
|||||||
static unsigned long lastRun = 0UL;
|
static unsigned long lastRun = 0UL;
|
||||||
unsigned long now = millis();
|
unsigned long now = millis();
|
||||||
|
|
||||||
//if (strip.isUpdating()) return; // don't interfere with strip updates. Our button will still be there in 1ms (next cycle)
|
if (strip.isUpdating() && (now - lastRun < 400)) return; // don't interfere with strip update (unless strip is updating continuously, e.g. very long strips)
|
||||||
if (strip.isUpdating() && (millis() - lastRun < 400)) return; // be niced, but avoid button starvation
|
lastRun = now;
|
||||||
lastRun = millis();
|
|
||||||
|
|
||||||
for (uint8_t b=0; b<WLED_MAX_BUTTONS; b++) {
|
for (uint8_t b=0; b<WLED_MAX_BUTTONS; b++) {
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
@@ -240,7 +239,7 @@ void handleButton()
|
|||||||
|
|
||||||
if (usermods.handleButton(b)) continue; // did usermod handle buttons
|
if (usermods.handleButton(b)) continue; // did usermod handle buttons
|
||||||
|
|
||||||
if (buttonType[b] == BTN_TYPE_ANALOG || buttonType[b] == BTN_TYPE_ANALOG_INVERTED) { // button is not a button but a potentiometer
|
if (buttonType[b] == BTN_TYPE_ANALOG || buttonType[b] == BTN_TYPE_ANALOG_INVERTED) { // button is not a button but a potentiometer
|
||||||
if (now - lastRead > ANALOG_BTN_READ_CYCLE) {
|
if (now - lastRead > ANALOG_BTN_READ_CYCLE) {
|
||||||
handleAnalog(b);
|
handleAnalog(b);
|
||||||
lastRead = now;
|
lastRead = now;
|
||||||
@@ -248,14 +247,23 @@ void handleButton()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//button is not momentary, but switch. This is only suitable on pins whose on-boot state does not matter (NOT gpio0)
|
// button is not momentary, but switch. This is only suitable on pins whose on-boot state does not matter (NOT gpio0)
|
||||||
if (buttonType[b] == BTN_TYPE_SWITCH || buttonType[b] == BTN_TYPE_PIR_SENSOR) {
|
if (buttonType[b] == BTN_TYPE_SWITCH || buttonType[b] == BTN_TYPE_PIR_SENSOR) {
|
||||||
handleSwitch(b);
|
handleSwitch(b);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//momentary button logic
|
// momentary button logic
|
||||||
if (isButtonPressed(b)) { //pressed
|
if (isButtonPressed(b)) { // pressed
|
||||||
|
|
||||||
|
// if all macros are the same, fire action immediately on rising edge
|
||||||
|
if (macroButton[b] && macroButton[b] == macroLongPress[b] && macroButton[b] == macroDoublePress[b]) {
|
||||||
|
if (!buttonPressedBefore[b])
|
||||||
|
shortPressAction(b);
|
||||||
|
buttonPressedBefore[b] = true;
|
||||||
|
buttonPressedTime[b] = now; // continually update (for debouncing to work in release handler)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!buttonPressedBefore[b]) buttonPressedTime[b] = now;
|
if (!buttonPressedBefore[b]) buttonPressedTime[b] = now;
|
||||||
buttonPressedBefore[b] = true;
|
buttonPressedBefore[b] = true;
|
||||||
@@ -270,9 +278,15 @@ void handleButton()
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else if (!isButtonPressed(b) && buttonPressedBefore[b]) { //released
|
} else if (!isButtonPressed(b) && buttonPressedBefore[b]) { //released
|
||||||
|
|
||||||
long dur = now - buttonPressedTime[b];
|
long dur = now - buttonPressedTime[b];
|
||||||
if (dur < WLED_DEBOUNCE_THRESHOLD) {buttonPressedBefore[b] = false; continue;} //too short "press", debounce
|
|
||||||
|
// released after rising-edge short press action
|
||||||
|
if (macroButton[b] && macroButton[b] == macroLongPress[b] && macroButton[b] == macroDoublePress[b]) {
|
||||||
|
if (dur > WLED_DEBOUNCE_THRESHOLD) buttonPressedBefore[b] = false; // debounce, blocks button for 50 ms once it has been released
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dur < WLED_DEBOUNCE_THRESHOLD) {buttonPressedBefore[b] = false; continue;} // too short "press", debounce
|
||||||
bool doublePress = buttonWaitTime[b]; //did we have a short press before?
|
bool doublePress = buttonWaitTime[b]; //did we have a short press before?
|
||||||
buttonWaitTime[b] = 0;
|
buttonWaitTime[b] = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
|
|||||||
ledType |= refresh << 7; // hack bit 7 to indicate strip requires off refresh
|
ledType |= refresh << 7; // hack bit 7 to indicate strip requires off refresh
|
||||||
uint8_t AWmode = elm[F("rgbwm")] | autoWhiteMode;
|
uint8_t AWmode = elm[F("rgbwm")] | autoWhiteMode;
|
||||||
if (fromFS) {
|
if (fromFS) {
|
||||||
BusConfig bc = BusConfig(ledType, pins, start, length, colorOrder, reversed, skipFirst, AWmode); //WLEDMM to do bus , freqkHz
|
BusConfig bc = BusConfig(ledType, pins, start, length, colorOrder, reversed, skipFirst, AWmode, freqkHz);
|
||||||
mem += BusManager::memUsage(bc);
|
mem += BusManager::memUsage(bc);
|
||||||
if (mem <= MAX_LED_MEMORY) if (busses.add(bc) == -1) break; // finalization will be done in WLED::beginStrip()
|
if (mem <= MAX_LED_MEMORY) if (busses.add(bc) == -1) break; // finalization will be done in WLED::beginStrip()
|
||||||
} else {
|
} else {
|
||||||
@@ -480,6 +480,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
|
|||||||
|
|
||||||
getStringFromJson(mqttDeviceTopic, if_mqtt[F("topics")][F("device")], 33); // "wled/test"
|
getStringFromJson(mqttDeviceTopic, if_mqtt[F("topics")][F("device")], 33); // "wled/test"
|
||||||
getStringFromJson(mqttGroupTopic, if_mqtt[F("topics")][F("group")], 33); // ""
|
getStringFromJson(mqttGroupTopic, if_mqtt[F("topics")][F("group")], 33); // ""
|
||||||
|
CJSON(retainMqttMsg, if_mqtt[F("rtn")]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef WLED_DISABLE_HUESYNC
|
#ifndef WLED_DISABLE_HUESYNC
|
||||||
@@ -802,7 +803,7 @@ void serializeConfig() {
|
|||||||
ins["type"] = bus->getType() & 0x7F;
|
ins["type"] = bus->getType() & 0x7F;
|
||||||
ins["ref"] = bus->isOffRefreshRequired();
|
ins["ref"] = bus->isOffRefreshRequired();
|
||||||
ins[F("rgbwm")] = bus->getAutoWhiteMode();
|
ins[F("rgbwm")] = bus->getAutoWhiteMode();
|
||||||
// ins[F("freq")] = bus->getFrequency(); WLEDMM to do bus
|
ins[F("freq")] = bus->getFrequency();
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonArray hw_com = hw.createNestedArray(F("com"));
|
JsonArray hw_com = hw.createNestedArray(F("com"));
|
||||||
@@ -956,6 +957,7 @@ void serializeConfig() {
|
|||||||
if_mqtt[F("user")] = mqttUser;
|
if_mqtt[F("user")] = mqttUser;
|
||||||
if_mqtt[F("pskl")] = strlen(mqttPass);
|
if_mqtt[F("pskl")] = strlen(mqttPass);
|
||||||
if_mqtt[F("cid")] = mqttClientID;
|
if_mqtt[F("cid")] = mqttClientID;
|
||||||
|
if_mqtt[F("rtn")] = retainMqttMsg;
|
||||||
|
|
||||||
JsonObject if_mqtt_topics = if_mqtt.createNestedObject(F("topics"));
|
JsonObject if_mqtt_topics = if_mqtt.createNestedObject(F("topics"));
|
||||||
if_mqtt_topics[F("device")] = mqttDeviceTopic;
|
if_mqtt_topics[F("device")] = mqttDeviceTopic;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#define DEFAULT_AP_SSID "WLED-AP"
|
#define DEFAULT_AP_SSID "WLED-AP"
|
||||||
#define DEFAULT_AP_PASS "wled1234"
|
#define DEFAULT_AP_PASS "wled1234"
|
||||||
#define DEFAULT_OTA_PASS "wledota"
|
#define DEFAULT_OTA_PASS "wledota"
|
||||||
|
#define DEFAULT_MDNS_NAME "x"
|
||||||
|
|
||||||
//increase if you need more
|
//increase if you need more
|
||||||
#ifndef WLED_MAX_USERMODS
|
#ifndef WLED_MAX_USERMODS
|
||||||
@@ -138,6 +139,7 @@
|
|||||||
#define USERMOD_ID_SHT 39 //Usermod "usermod_sht.h
|
#define USERMOD_ID_SHT 39 //Usermod "usermod_sht.h
|
||||||
#define USERMOD_ID_KLIPPER 40 // Usermod Klipper percentage
|
#define USERMOD_ID_KLIPPER 40 // Usermod Klipper percentage
|
||||||
//WLEDMM
|
//WLEDMM
|
||||||
|
#define USERMOD_ID_MCUTEMP 89 //Usermod "usermod_v2_artifx.h"
|
||||||
#define USERMOD_ID_ARTIFX 90 //Usermod "usermod_v2_artifx.h"
|
#define USERMOD_ID_ARTIFX 90 //Usermod "usermod_v2_artifx.h"
|
||||||
#define USERMOD_ID_WEATHER 91 //Usermod "usermod_v2_weather.h"
|
#define USERMOD_ID_WEATHER 91 //Usermod "usermod_v2_weather.h"
|
||||||
#define USERMOD_ID_GAMES 92 //Usermod "usermod_v2_games.h"
|
#define USERMOD_ID_GAMES 92 //Usermod "usermod_v2_games.h"
|
||||||
|
|||||||
@@ -174,37 +174,62 @@ button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.slider-icon {
|
.slider-icon {
|
||||||
/*transform: translate(3px,3px);*/
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 8px;
|
left: 8px;
|
||||||
bottom: 5px;
|
bottom: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.e-icon {
|
|
||||||
transform: translateY(3px);
|
|
||||||
}
|
|
||||||
|
|
||||||
.sel-icon {
|
.sel-icon {
|
||||||
transform: translateX(3px);
|
transform: translateX(3px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.e-icon, .sel-icon, .slider-icon {
|
.e-icon, .g-icon, .sel-icon, .slider-icon {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: var(--c-d);
|
color: var(--c-d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.g-icon {
|
||||||
|
font-style: normal;
|
||||||
|
position: absolute;
|
||||||
|
top: 8px;
|
||||||
|
right: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* pop-up container */
|
||||||
|
.pop {
|
||||||
|
position: absolute;
|
||||||
|
display: inline-block;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* pop-up content (segment sets) */
|
||||||
|
.pop-c {
|
||||||
|
position: absolute;
|
||||||
|
background-color: var(--c-2);
|
||||||
|
border: 1px solid var(--c-8);
|
||||||
|
border-radius: 20px;
|
||||||
|
z-index: 1;
|
||||||
|
top: 3px;
|
||||||
|
right: 35px;
|
||||||
|
padding: 3px 8px 1px;
|
||||||
|
font-size: 24px;
|
||||||
|
line-height: 24px;
|
||||||
|
}
|
||||||
|
.pop-c span {
|
||||||
|
padding: 2px 6px;
|
||||||
|
}
|
||||||
|
|
||||||
.search-icon {
|
.search-icon {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 8px;
|
top: 8px;
|
||||||
left: 12px;
|
left: 12px;
|
||||||
/*pointer-events: none;*/
|
|
||||||
width: 24px;
|
width: 24px;
|
||||||
height: 24px;
|
height: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.clear-icon {
|
.clear-icon {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
display: none;
|
|
||||||
top: 8px;
|
top: 8px;
|
||||||
right: 9px;
|
right: 9px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@@ -232,14 +257,12 @@ button {
|
|||||||
|
|
||||||
#liveview {
|
#liveview {
|
||||||
height: 4px;
|
height: 4px;
|
||||||
display: none;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border: 0px;
|
border: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#liveview2D {
|
#liveview2D {
|
||||||
height: 90%;
|
height: 90%;
|
||||||
display: none;
|
|
||||||
width: 90%;
|
width: 90%;
|
||||||
border: 0px;
|
border: 0px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@@ -482,13 +505,6 @@ button {
|
|||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pql, .edit-icon {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hide {
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
.fade {
|
.fade {
|
||||||
visibility: hidden; /* hide it */
|
visibility: hidden; /* hide it */
|
||||||
opacity: 0; /* make it transparent */
|
opacity: 0; /* make it transparent */
|
||||||
@@ -567,7 +583,6 @@ button {
|
|||||||
position: fixed;
|
position: fixed;
|
||||||
top: calc(var(--th) + 5px);
|
top: calc(var(--th) + 5px);
|
||||||
left: 1px;
|
left: 1px;
|
||||||
display: none;
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -674,7 +689,9 @@ img {
|
|||||||
#wbal .sliderdisplay { background: linear-gradient(90deg, #ff8f1f 0%, #fff 50%, #cbdbff); }
|
#wbal .sliderdisplay { background: linear-gradient(90deg, #ff8f1f 0%, #fff 50%, #cbdbff); }
|
||||||
|
|
||||||
/* wrapper divs hidden by default */
|
/* wrapper divs hidden by default */
|
||||||
#rgbwrap, #swrap, #hwrap, #kwrap, #wwrap, #wbal, #qcs-w, #hexw {
|
#liveview, #liveview2D, #roverstar, #pql
|
||||||
|
#rgbwrap, #swrap, #hwrap, #kwrap, #wwrap, #wbal, #qcs-w, #hexw,
|
||||||
|
.clear-icon, .edit-icon, .ptxt {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -783,8 +800,8 @@ input[type=range]::-moz-range-thumb {
|
|||||||
-webkit-transform:translate3d(0,0,0);
|
-webkit-transform:translate3d(0,0,0);
|
||||||
backface-visibility: hidden;
|
backface-visibility: hidden;
|
||||||
transform:translate3d(0,0,0);
|
transform:translate3d(0,0,0);
|
||||||
overflow: clip;
|
overflow: hidden;
|
||||||
text-overflow: clip;
|
text-overflow: ellipsis;
|
||||||
border: 1px solid var(--c-3);
|
border: 1px solid var(--c-3);
|
||||||
background-color: var(--c-3);
|
background-color: var(--c-3);
|
||||||
}
|
}
|
||||||
@@ -815,6 +832,7 @@ input[type=range]::-moz-range-thumb {
|
|||||||
.btn-xs, .btn-pl-del, .btn-pl-add {
|
.btn-xs, .btn-pl-del, .btn-pl-add {
|
||||||
width: 42px !important;
|
width: 42px !important;
|
||||||
height: 42px !important;
|
height: 42px !important;
|
||||||
|
text-overflow: clip;
|
||||||
}
|
}
|
||||||
.btn-xs {
|
.btn-xs {
|
||||||
margin: 2px 0 0 0;
|
margin: 2px 0 0 0;
|
||||||
@@ -991,8 +1009,7 @@ textarea {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.ptxt {
|
.ptxt {
|
||||||
margin: -1px 4px 8px !important;
|
margin: -1px 4px 8px !important;
|
||||||
display: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.stxt {
|
.stxt {
|
||||||
@@ -1002,7 +1019,7 @@ textarea {
|
|||||||
.segname, .pname {
|
.segname, .pname {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
overflow: clip;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
padding: 8px 24px;
|
padding: 8px 24px;
|
||||||
@@ -1060,11 +1077,9 @@ textarea {
|
|||||||
|
|
||||||
#csl .xxs {
|
#csl .xxs {
|
||||||
border: 2px solid var(--c-d) !important;
|
border: 2px solid var(--c-d) !important;
|
||||||
/*box-shadow: 0 0 0 2px var(--c-d);*/
|
|
||||||
}
|
}
|
||||||
#csl .xxs-w {
|
#csl .xxs-w {
|
||||||
border-width: 5px !important;
|
border-width: 5px !important;
|
||||||
/*box-shadow: 0 0 0 5px var(--c-d);*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.qcs, #namelabel { /* text shadow for name to be legible on grey backround */
|
.qcs, #namelabel { /* text shadow for name to be legible on grey backround */
|
||||||
@@ -1078,7 +1093,6 @@ textarea {
|
|||||||
|
|
||||||
.pwr {
|
.pwr {
|
||||||
color: var(--c-6);
|
color: var(--c-6);
|
||||||
transform: translate(1px, 1px);
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1093,18 +1107,13 @@ textarea {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.frz {
|
.frz {
|
||||||
left: 32px;
|
left: 10px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -3px;
|
top: 8px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding: 8px;
|
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.expanded .frz {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* radiobuttons and checkmarks */
|
/* radiobuttons and checkmarks */
|
||||||
.check, .radio {
|
.check, .radio {
|
||||||
display: block;
|
display: block;
|
||||||
@@ -1246,7 +1255,6 @@ TD .checkmark, TD .radiomark {
|
|||||||
|
|
||||||
.lbl-s {
|
.lbl-s {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
/* margin: 10px 4px 0 0; */
|
|
||||||
margin-top: 6px;
|
margin-top: 6px;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
width: 48%;
|
width: 48%;
|
||||||
@@ -1296,10 +1304,6 @@ TD .checkmark, TD .radiomark {
|
|||||||
background-color: var(--c-3);
|
background-color: var(--c-3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*.selected .radiomark {
|
|
||||||
border: 1px solid var(--c-3);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/* selected list item */
|
/* selected list item */
|
||||||
.lstI.selected {
|
.lstI.selected {
|
||||||
top: 0;
|
top: 0;
|
||||||
@@ -1417,7 +1421,7 @@ TD .checkmark, TD .radiomark {
|
|||||||
.expanded {
|
.expanded {
|
||||||
display: inline-block !important;
|
display: inline-block !important;
|
||||||
}
|
}
|
||||||
.expanded .segin.hide, .expanded .presin.hide, .expanded .sbs.hide {
|
.hide, .expanded .segin.hide, .expanded .presin.hide, .expanded .sbs.hide, .expanded .frz, .expanded .g-icon {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1553,11 +1557,7 @@ TD .checkmark, TD .radiomark {
|
|||||||
left: 12px;
|
left: 12px;
|
||||||
}
|
}
|
||||||
.segname {
|
.segname {
|
||||||
padding: 8px 16px;
|
max-width: calc(100% - 110px);
|
||||||
max-width: 140px;
|
|
||||||
}
|
|
||||||
.segname, .pname {
|
|
||||||
max-width: 134px;
|
|
||||||
}
|
}
|
||||||
.segt TD {
|
.segt TD {
|
||||||
padding: 0 !important;
|
padding: 0 !important;
|
||||||
|
|||||||
@@ -74,7 +74,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="briwrap">
|
<div id="briwrap">
|
||||||
<p class="hd">Brightness</p>
|
<p class="hd">Brightness</p>
|
||||||
<div class="slider" style="left:24px;">
|
<div class="slider" style="padding-right:32px;">
|
||||||
<i class="icons slider-icon" onclick="tglTheme()" style="transform: translate(-32px,5px);"></i>
|
<i class="icons slider-icon" onclick="tglTheme()" style="transform: translate(-32px,5px);"></i>
|
||||||
<div class="sliderwrap il">
|
<div class="sliderwrap il">
|
||||||
<input id="sliderBri" onchange="setBri()" oninput="updateTrail(this)" max="255" min="1" type="range" value="128" />
|
<input id="sliderBri" onchange="setBri()" oninput="updateTrail(this)" max="255" min="1" type="range" value="128" />
|
||||||
|
|||||||
@@ -737,6 +737,14 @@ function populateSegments(s)
|
|||||||
|
|
||||||
ledmapFileNames.push((inst.n?inst.n:"default") + ".json"); //WLEDMM
|
ledmapFileNames.push((inst.n?inst.n:"default") + ".json"); //WLEDMM
|
||||||
|
|
||||||
|
// segment set icon color
|
||||||
|
let cG = "var(--c-b)";
|
||||||
|
switch (inst.set) {
|
||||||
|
case 1: cG = "var(--c-r)"; break;
|
||||||
|
case 2: cG = "var(--c-g)"; break;
|
||||||
|
case 3: cG = "var(--c-l)"; break;
|
||||||
|
}
|
||||||
|
|
||||||
let segp = `<div id="segp${i}" class="sbs">`+
|
let segp = `<div id="segp${i}" class="sbs">`+
|
||||||
`<i class="icons slider-icon pwr ${inst.on ? "act":""}" id="seg${i}pwr" onclick="setSegPwr(${i})"></i>`+
|
`<i class="icons slider-icon pwr ${inst.on ? "act":""}" id="seg${i}pwr" onclick="setSegPwr(${i})"></i>`+
|
||||||
`<div class="sliderwrap il">`+
|
`<div class="sliderwrap il">`+
|
||||||
@@ -748,97 +756,100 @@ function populateSegments(s)
|
|||||||
let stoX = inst.stop;
|
let stoX = inst.stop;
|
||||||
let staY = inst.startY;
|
let staY = inst.startY;
|
||||||
let stoY = inst.stopY;
|
let stoY = inst.stopY;
|
||||||
|
let isMSeg = isM && staX<mw*mh; // 2D matrix segment
|
||||||
let rvXck = `<label class="check revchkl">Reverse ${isM?'':'direction'}<input type="checkbox" id="seg${i}rev" onchange="setRev(${i})" ${inst.rev?"checked":""}><span class="checkmark"></span></label>`;
|
let rvXck = `<label class="check revchkl">Reverse ${isM?'':'direction'}<input type="checkbox" id="seg${i}rev" onchange="setRev(${i})" ${inst.rev?"checked":""}><span class="checkmark"></span></label>`;
|
||||||
let miXck = `<label class="check revchkl">Mirror<input type="checkbox" id="seg${i}mi" onchange="setMi(${i})" ${inst.mi?"checked":""}><span class="checkmark"></span></label>`;
|
let miXck = `<label class="check revchkl">Mirror<input type="checkbox" id="seg${i}mi" onchange="setMi(${i})" ${inst.mi?"checked":""}><span class="checkmark"></span></label>`;
|
||||||
let rvYck = "", miYck ="";
|
let rvYck = "", miYck ="";
|
||||||
if (isM && staX<mw*mh) {
|
if (isMSeg) {
|
||||||
rvYck = `<label class="check revchkl">Reverse<input type="checkbox" id="seg${i}rY" onchange="setRevY(${i})" ${inst.rY?"checked":""}><span class="checkmark"></span></label>`;
|
rvYck = `<label class="check revchkl">Reverse<input type="checkbox" id="seg${i}rY" onchange="setRevY(${i})" ${inst.rY?"checked":""}><span class="checkmark"></span></label>`;
|
||||||
miYck = `<label class="check revchkl">Mirror<input type="checkbox" id="seg${i}mY" onchange="setMiY(${i})" ${inst.mY?"checked":""}><span class="checkmark"></span></label>`;
|
miYck = `<label class="check revchkl">Mirror<input type="checkbox" id="seg${i}mY" onchange="setMiY(${i})" ${inst.mY?"checked":""}><span class="checkmark"></span></label>`;
|
||||||
}
|
}
|
||||||
// WLEDMM: jMap
|
// WLEDMM: jMap
|
||||||
let map2D = `<div id="seg${i}map2D" data-map="map2D" class="lbl-s hide">Expand 1D FX<br>
|
let map2D = `<div id="seg${i}map2D" data-map="map2D" class="lbl-s hide">Expand 1D FX<br>`+
|
||||||
<div class="sel-p"><select class="sel-p" id="seg${i}m12" onchange="setM12(${i})">
|
`<div class="sel-p"><select class="sel-p" id="seg${i}m12" onchange="setM12(${i})">`+
|
||||||
<option value="0" ${inst.m12==0?' selected':''}>Pixels</option>
|
`<option value="0" ${inst.m12==0?' selected':''}>Pixels</option>`+
|
||||||
<option value="1" ${inst.m12==1?' selected':''}>Bar</option>
|
`<option value="1" ${inst.m12==1?' selected':''}>Bar</option>`+
|
||||||
<option value="2" ${inst.m12==2?' selected':''}>Arc</option>
|
`<option value="2" ${inst.m12==2?' selected':''}>Arc</option>`+
|
||||||
<option value="3" ${inst.m12==3?' selected':''}>Corner</option>
|
`<option value="3" ${inst.m12==3?' selected':''}>Corner</option>`+
|
||||||
<option value="4" ${inst.m12==4?' selected':''}>jMap ☾</option>
|
`<option value="4" ${inst.m12==4?' selected':''}>jMap ☾</option>`+
|
||||||
<option value="5" ${inst.m12==5?' selected':''}>Circle ☾</option>
|
`<option value="5" ${inst.m12==5?' selected':''}>Circle ☾</option>`+
|
||||||
<option value="6" ${inst.m12==6?' selected':''}>Block ☾</option>
|
`<option value="6" ${inst.m12==6?' selected':''}>Block ☾</option>`+
|
||||||
</select></div>
|
`</select></div>`+
|
||||||
</div>`;
|
`</div>`;
|
||||||
let sndSim = `<div data-snd="si" class="lbl-s hide">Sound sim<br>
|
let sndSim = `<div data-snd="si" class="lbl-s hide">Sound sim<br>`+
|
||||||
<div class="sel-p"><select class="sel-p" id="seg${i}si" onchange="setSi(${i})">
|
`<div class="sel-p"><select class="sel-p" id="seg${i}si" onchange="setSi(${i})">`+
|
||||||
<option value="0" ${inst.si==0?' selected':''}>BeatSin</option>
|
`<option value="0" ${inst.si==0?' selected':''}>BeatSin</option>`+
|
||||||
<option value="1" ${inst.si==1?' selected':''}>WeWillRockYou</option>
|
`<option value="1" ${inst.si==1?' selected':''}>WeWillRockYou</option>`+
|
||||||
<option value="2" ${inst.si==2?' selected':''}>U10_3</option>
|
`</select></div>`+
|
||||||
<option value="3" ${inst.si==3?' selected':''}>U14_3</option>
|
`</div>`;
|
||||||
</select></div>
|
|
||||||
</div>`;
|
|
||||||
//WLEDMM ARTIFX
|
//WLEDMM ARTIFX
|
||||||
let fxName = eJson.find((o)=>{return o.id==selectedFx}).name;
|
let fxName = eJson.find((o)=>{return o.id==selectedFx}).name;
|
||||||
let cusEff = `<button class="btn" onclick="toggleCEEditor('${inst.n?inst.n:"default"}', ${i})">ARTI-FX Editor ☾</button><br>`;
|
let cusEff = `<button class="btn" onclick="toggleCEEditor('${inst.n?inst.n:"default"}', ${i})">ARTI-FX Editor ☾</button><br>`;
|
||||||
cn += `<div class="seg lstI ${i==s.mainseg ? 'selected' : ''} ${exp ? "expanded":""}" id="seg${i}">
|
cn += `<div class="seg lstI ${i==s.mainseg ? 'selected' : ''} ${exp ? "expanded":""}" id="seg${i}" data-set="${inst.set}">`+
|
||||||
<label class="check schkl">
|
`<label class="check schkl">`+
|
||||||
<input type="checkbox" id="seg${i}sel" onchange="selSeg(${i})" ${inst.sel ? "checked":""}>
|
`<input type="checkbox" id="seg${i}sel" onchange="selSeg(${i})" ${inst.sel ? "checked":""}>`+
|
||||||
<span class="checkmark"></span>
|
`<span class="checkmark"></span>`+
|
||||||
</label>
|
`</label>`+
|
||||||
<i class="icons e-icon frz" id="seg${i}frz" onclick="event.preventDefault();tglFreeze(${i});">&#x${inst.frz ? (li.live && li.liveseg==i?'e410':'e0e8') : 'e325'};</i>
|
`<div class="segname" onclick="selSegEx(${i})">`+
|
||||||
<div class="segname" onclick="selSegEx(${i})">
|
`<i class="icons e-icon frz" id="seg${i}frz" onclick="event.preventDefault();tglFreeze(${i});">&#x${inst.frz ? (li.live && li.liveseg==i?'e410':'e0e8') : 'e325'};</i>`+
|
||||||
${inst.n ? inst.n : "Segment "+i}
|
(inst.n ? inst.n : "Segment "+i) +
|
||||||
<i class="icons edit-icon flr" id="seg${i}nedit" onclick="tglSegn(${i})"></i>
|
`<div class="pop hide" onclick="event.preventDefault();event.stopPropagation();">`+
|
||||||
</div>
|
`<i class="icons g-icon" style="color:${cG};" onclick="this.nextElementSibling.classList.toggle('hide');">ɸ${String.fromCharCode(inst.set+"A".charCodeAt(0))};</i>`+
|
||||||
<i class="icons e-icon flr" id="sege${i}" onclick="expand(${i})"></i>
|
`<div class="pop-c hide"><span style="color:var(--c-f);" onclick="setGrp(${i},0);">➊</span><span style="color:var(--c-r);" onclick="setGrp(${i},1);">➋</span><span style="color:var(--c-g);" onclick="setGrp(${i},2);">➌</span><span style="color:var(--c-l);" onclick="setGrp(${i},3);">➍</span></div>`+
|
||||||
${cfg.comp.segpwr?segp:''}
|
`</div> `+
|
||||||
<div class="segin" id="seg${i}in">
|
`<i class="icons edit-icon flr" id="seg${i}nedit" onclick="tglSegn(${i})"></i>`+
|
||||||
<input id="seg${i}fx" value="${inst.fx}" type="hidden"/> <!--WLEDMM-->
|
`</div>`+
|
||||||
<input type="text" class="ptxt" id="seg${i}t" autocomplete="off" maxlength=32 value="${inst.n?inst.n:""}" placeholder="Enter name..."/>
|
`<i class="icons e-icon flr" id="sege${i}" onclick="expand(${i})"></i>`+
|
||||||
<table class="infot segt">
|
(cfg.comp.segpwr ? segp : '') +
|
||||||
<tr>
|
`<div class="segin" id="seg${i}in">`+
|
||||||
<td>${isM&&staX<mw*mh?'Start X':'Start LED'}</td>
|
`<input id="seg${i}fx" value="${inst.fx}" type="hidden"/>` + // <!--WLEDMM-->
|
||||||
<td>${isM&&staX<mw*mh?(cfg.comp.seglen?"Width":"Stop X"):(cfg.comp.seglen?"LED count":"Stop LED")}</td>
|
`<input type="text" class="ptxt" id="seg${i}t" autocomplete="off" maxlength=32 value="${inst.n?inst.n:""}" placeholder="Enter name..."/>`+
|
||||||
<td>${isM&&staX<mw*mh?'':'Offset'}</td>
|
`<table class="infot segt">`+
|
||||||
</tr>
|
`<tr>`+
|
||||||
<tr>
|
`<td>${isMSeg?'Start X':'Start LED'}</td>`+
|
||||||
<td><input class="segn" id="seg${i}s" type="number" min="0" max="${(isM&&staX<mw*mh?mw:ledCount)-1}" value="${staX}" oninput="updateLen(${i})" onkeydown="segEnter(${i})"></td>
|
`<td>${isMSeg?(cfg.comp.seglen?"Width":"Stop X"):(cfg.comp.seglen?"LED count":"Stop LED")}</td>`+
|
||||||
<td><input class="segn" id="seg${i}e" type="number" min="0" max="${(isM&&staX<mw*mh?mw:ledCount)}" value="${stoX-(cfg.comp.seglen?staX:0)}" oninput="updateLen(${i})" onkeydown="segEnter(${i})"></td>
|
`<td>${isMSeg?'':'Offset'}</td>`+
|
||||||
<td style="text-align:revert;">${isM&&staX<mw*mh?miXck+'<br>'+rvXck:''}<input class="segn ${isM&&staX<mw*mh?'hide':''}" id="seg${i}of" type="number" value="${inst.of}" oninput="updateLen(${i})"></td>
|
`</tr>`+
|
||||||
</tr>
|
`<tr>`+
|
||||||
${isM&&staX<mw*mh ? '<tr><td>Start Y</td><td>'+(cfg.comp.seglen?'Height':'Stop Y')+'</td><td></td></tr>'+
|
`<td><input class="segn" id="seg${i}s" type="number" min="0" max="${(isMSeg?mw:ledCount)-1}" value="${staX}" oninput="updateLen(${i})" onkeydown="segEnter(${i})"></td>`+
|
||||||
'<tr>'+
|
`<td><input class="segn" id="seg${i}e" type="number" min="0" max="${(isMSeg?mw:ledCount)}" value="${stoX-(cfg.comp.seglen?staX:0)}" oninput="updateLen(${i})" onkeydown="segEnter(${i})"></td>`+
|
||||||
'<td><input class="segn" id="seg'+i+'sY" type="number" min="0" max="'+(mh-1)+'" value="'+staY+'" oninput="updateLen('+i+')" onkeydown="segEnter('+i+')"></td>'+
|
`<td ${isMSeg?'style="text-align:revert;"':''}>${isMSeg?miXck+'<br>'+rvXck:''}<input class="segn ${isMSeg?'hide':''}" id="seg${i}of" type="number" value="${inst.of}" oninput="updateLen(${i})"></td>`+
|
||||||
'<td><input class="segn" id="seg'+i+'eY" type="number" min="0" max="'+mh+'" value="'+(stoY-(cfg.comp.seglen?staY:0))+'" oninput="updateLen('+i+')" onkeydown="segEnter('+i+')"></td>'+
|
`</tr>`+
|
||||||
'<td style="text-align:revert;">'+miYck+'<br>'+rvYck+'</td>'+
|
(isMSeg ? '<tr><td>Start Y</td><td>'+(cfg.comp.seglen?'Height':'Stop Y')+'</td><td></td></tr>'+
|
||||||
'</tr>':''}
|
'<tr>'+
|
||||||
<tr>
|
'<td><input class="segn" id="seg'+i+'sY" type="number" min="0" max="'+(mh-1)+'" value="'+staY+'" oninput="updateLen('+i+')" onkeydown="segEnter('+i+')"></td>'+
|
||||||
<td>Grouping</td>
|
'<td><input class="segn" id="seg'+i+'eY" type="number" min="0" max="'+mh+'" value="'+(stoY-(cfg.comp.seglen?staY:0))+'" oninput="updateLen('+i+')" onkeydown="segEnter('+i+')"></td>'+
|
||||||
<td>Spacing</td>
|
'<td style="text-align:revert;">'+miYck+'<br>'+rvYck+'</td>'+
|
||||||
<td></td>
|
'</tr>' : '') +
|
||||||
</tr>
|
`<tr>`+
|
||||||
<tr>
|
`<td>Grouping</td>`+
|
||||||
<td><input class="segn" id="seg${i}grp" type="number" min="1" max="255" value="${inst.grp}" oninput="updateLen(${i})" onkeydown="segEnter(${i})"></td>
|
`<td>Spacing</td>`+
|
||||||
<td><input class="segn" id="seg${i}spc" type="number" min="0" max="255" value="${inst.spc}" oninput="updateLen(${i})" onkeydown="segEnter(${i})"></td>
|
`<td></td>`+
|
||||||
<td style="text-align:revert;"><button class="btn btn-xs" onclick="setSeg(${i})"><i class="icons btn-icon" id="segc${i}"></i></button></td>
|
`</tr>`+
|
||||||
</tr>
|
`<tr>`+
|
||||||
</table>
|
`<td><input class="segn" id="seg${i}grp" type="number" min="1" max="255" value="${inst.grp}" oninput="updateLen(${i})" onkeydown="segEnter(${i})"></td>`+
|
||||||
<div class="h bp" id="seg${i}len"></div>
|
`<td><input class="segn" id="seg${i}spc" type="number" min="0" max="255" value="${inst.spc}" oninput="updateLen(${i})" onkeydown="segEnter(${i})"></td>`+
|
||||||
${!(isM&&staX<mw*mh)?rvXck:''}
|
`<td><button class="btn btn-xs" onclick="setSeg(${i})"><i class="icons btn-icon" id="segc${i}"></i></button></td>`+
|
||||||
${isM&&staX<mw*mh&&stoY-staY>1&&stoX-staX>1?map2D:''}
|
`</tr>`+
|
||||||
${s.AudioReactive && s.AudioReactive.on ? "" : sndSim}
|
`</table>`+
|
||||||
${s.ARTIFX && s.ARTIFX.on && fxName.includes("ARTI-FX") ? cusEff : ""}
|
`<div class="h bp" id="seg${i}len"></div>`+
|
||||||
<label class="check revchkl" id="seg${i}lbtm">
|
(!isMSeg ? rvXck : '') +
|
||||||
${isM&&staX<mw*mh?'Transpose':'Mirror effect'}${isM&&staX<mw*mh?
|
(isMSeg&&stoY-staY>1&&stoX-staX>1 ? map2D : '') +
|
||||||
'<input type="checkbox" id="seg'+i+'tp" onchange="setTp('+i+')" '+(inst.tp?"checked":"")+'>':
|
(s.AudioReactive && s.AudioReactive.on ? "" : sndSim) +
|
||||||
'<input type="checkbox" id="seg'+i+'mi" onchange="setMi('+i+')" '+(inst.mi?"checked":"")+'>'}
|
(s.ARTIFX && s.ARTIFX.on && fxName.includes("ARTI-FX") ? cusEff : "") + // <!--WLEDMM-->
|
||||||
<span class="checkmark"></span>
|
`<label class="check revchkl" id="seg${i}lbtm">`+
|
||||||
</label>
|
(isMSeg?'Transpose':'Mirror effect') + (isMSeg ?
|
||||||
<div class="del">
|
'<input type="checkbox" id="seg'+i+'tp" onchange="setTp('+i+')" '+(inst.tp?"checked":"")+'>':
|
||||||
<button class="btn btn-xs" id="segr${i}" title="Repeat until end" onclick="rptSeg(${i})"><i class="icons btn-icon"></i></button>
|
'<input type="checkbox" id="seg'+i+'mi" onchange="setMi('+i+')" '+(inst.mi?"checked":"")+'>') +
|
||||||
<button class="btn btn-xs" id="segd${i}" title="Delete" onclick="delSeg(${i})"><i class="icons btn-icon"></i></button>
|
`<span class="checkmark"></span>`+
|
||||||
</div>
|
`</label>`+
|
||||||
</div>
|
`<div class="del">`+
|
||||||
${cfg.comp.segpwr?'':segp}
|
`<button class="btn btn-xs" id="segr${i}" title="Repeat until end" onclick="rptSeg(${i})"><i class="icons btn-icon"></i></button>`+
|
||||||
</div>`;
|
`<button class="btn btn-xs" id="segd${i}" title="Delete" onclick="delSeg(${i})"><i class="icons btn-icon"></i></button>`+
|
||||||
|
`</div>`+
|
||||||
|
`</div>`+
|
||||||
|
(cfg.comp.segpwr ? '' : segp) +
|
||||||
|
`</div>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
gId('segcont').innerHTML = cn;
|
gId('segcont').innerHTML = cn;
|
||||||
@@ -855,7 +866,7 @@ function populateSegments(s)
|
|||||||
gId(`segd${lSeg}`).classList.add("hide");
|
gId(`segd${lSeg}`).classList.add("hide");
|
||||||
gId(`segp0`).classList.add("hide");
|
gId(`segp0`).classList.add("hide");
|
||||||
}
|
}
|
||||||
if (!isM && !noNewSegs && (cfg.comp.seglen?parseInt(gId(`seg${lSeg}s`).value):0)+parseInt(gId(`seg${lSeg}e`).value)<ledCount) gId(`segr${lSeg}`).style.display = "inline";
|
if (!isM && !noNewSegs && (cfg.comp.seglen?parseInt(gId(`seg${lSeg}s`).value):0)+parseInt(gId(`seg${lSeg}e`).value)<ledCount) gId(`segr${lSeg}`).classList.remove("hide");
|
||||||
gId('segutil2').style.display = (segCount > 1) ? "block":"none"; // rsbtn parent
|
gId('segutil2').style.display = (segCount > 1) ? "block":"none"; // rsbtn parent
|
||||||
|
|
||||||
if (Array.isArray(li.maps) && li.maps.length>0) { //WLEDMM >0 instead of 1 to show also first ledmap. Attention: WLED AC has isM check, in MM Matrices are supported so do not check on isM
|
if (Array.isArray(li.maps) && li.maps.length>0) { //WLEDMM >0 instead of 1 to show also first ledmap. Attention: WLED AC has isM check, in MM Matrices are supported so do not check on isM
|
||||||
@@ -1010,8 +1021,8 @@ function genPalPrevCss(id)
|
|||||||
|
|
||||||
function generateListItemHtml(listName, id, name, clickAction, extraHtml = '', effectPar = '')
|
function generateListItemHtml(listName, id, name, clickAction, extraHtml = '', effectPar = '')
|
||||||
{
|
{
|
||||||
return `<div class="lstI${id==0?' sticky':''}" data-id="${id}" ${effectPar===''?'':'data-opt="'+effectPar+'"'}onClick="${clickAction}(${id})">`+
|
return `<div class="lstI${id==0?' sticky':''}" data-id="${id}" ${effectPar===''?'':'data-opt="'+effectPar+'" '}onClick="${clickAction}(${id})">`+
|
||||||
`<label class="radio schkl" onclick="event.preventDefault()">`+
|
`<label title="(${id})" class="radio schkl" onclick="event.preventDefault()">`+ // (#1984)
|
||||||
`<input type="radio" value="${id}" name="${listName}">`+
|
`<input type="radio" value="${id}" name="${listName}">`+
|
||||||
`<span class="radiomark"></span>`+
|
`<span class="radiomark"></span>`+
|
||||||
`<div class="lstIcontent">`+
|
`<div class="lstIcontent">`+
|
||||||
@@ -1737,6 +1748,8 @@ function readState(s,command=false)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (s.seg.length>2) d.querySelectorAll(".pop").forEach((e)=>{e.classList.remove("hide");});
|
||||||
|
|
||||||
var cd = gId('csl').children;
|
var cd = gId('csl').children;
|
||||||
for (let e = cd.length-1; e >= 0; e--) {
|
for (let e = cd.length-1; e >= 0; e--) {
|
||||||
cd[e].dataset.r = i.col[e][0];
|
cd[e].dataset.r = i.col[e][0];
|
||||||
@@ -2147,9 +2160,13 @@ function makeSeg()
|
|||||||
|
|
||||||
function resetUtil(off=false)
|
function resetUtil(off=false)
|
||||||
{
|
{
|
||||||
gId('segutil').innerHTML = `<div class="seg btn btn-s ${off?'off':''}" style="border-radius:24px;padding:0;">`
|
gId('segutil').innerHTML = `<div class="seg btn btn-s${off?' off':''}" style="padding:0;">`
|
||||||
+ '<label class="check schkl"><input type="checkbox" id="selall" onchange="selSegAll(this)"><span class="checkmark"></span></label>'
|
+ '<label class="check schkl"><input type="checkbox" id="selall" onchange="selSegAll(this)"><span class="checkmark"></span></label>'
|
||||||
+ `<div class="segname" ${off?'':'onclick="makeSeg()"'}><i class="icons btn-icon"></i>Add segment</div></div>`;
|
+ `<div class="segname" ${off?'':'onclick="makeSeg()"'}><i class="icons btn-icon"></i>Add segment</div>`
|
||||||
|
+ '<div class="pop hide" onclick="event.stopPropagation();">'
|
||||||
|
+ `<i class="icons g-icon" onclick="this.nextElementSibling.classList.toggle('hide');"></i>`
|
||||||
|
+ '<div class="pop-c hide"><span style="color:var(--c-f);" onclick="selGrp(0);">➊</span><span style="color:var(--c-r);" onclick="selGrp(1);">➋</span><span style="color:var(--c-g);" onclick="selGrp(2);">➌</span><span style="color:var(--c-l);" onclick="selGrp(3);">➍</span></div>'
|
||||||
|
+ '</div></div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
function makePlSel(el, incPl=false)
|
function makePlSel(el, incPl=false)
|
||||||
@@ -2435,6 +2452,20 @@ function selSeg(s)
|
|||||||
requestJson(obj);
|
requestJson(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function selGrp(g)
|
||||||
|
{
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
var sel = gId(`segcont`).querySelectorAll(`div[data-set="${g}"]`);
|
||||||
|
var obj = {"seg":[]};
|
||||||
|
for (let i=0; i<=lSeg; i++) obj.seg.push({"id":i,"sel":false});
|
||||||
|
if (sel) for (let s of sel||[]) {
|
||||||
|
let i = parseInt(s.id.substring(3));
|
||||||
|
obj.seg[i] = {"id":i,"sel":true};
|
||||||
|
}
|
||||||
|
if (obj.seg.length) requestJson(obj);
|
||||||
|
}
|
||||||
|
|
||||||
function rptSeg(s)
|
function rptSeg(s)
|
||||||
{
|
{
|
||||||
//TODO: 2D support
|
//TODO: 2D support
|
||||||
@@ -2555,6 +2586,14 @@ function setTp(s)
|
|||||||
requestJson(obj);
|
requestJson(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setGrp(s, g)
|
||||||
|
{
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
var obj = {"seg": {"id": s, "set": g}};
|
||||||
|
requestJson(obj);
|
||||||
|
}
|
||||||
|
|
||||||
function setSegPwr(s)
|
function setSegPwr(s)
|
||||||
{
|
{
|
||||||
var pwr = gId(`seg${s}pwr`).classList.contains('act');
|
var pwr = gId(`seg${s}pwr`).classList.contains('act');
|
||||||
|
|||||||
@@ -219,6 +219,7 @@ Client ID: <input type="text" name="MQCID" maxlength="40"><br>
|
|||||||
Device Topic: <input type="text" name="MD" maxlength="32"><br>
|
Device Topic: <input type="text" name="MD" maxlength="32"><br>
|
||||||
Group Topic: <input type="text" name="MG" maxlength="32"><br>
|
Group Topic: <input type="text" name="MG" maxlength="32"><br>
|
||||||
Publish on button press: <input type="checkbox" name="BM"><br>
|
Publish on button press: <input type="checkbox" name="BM"><br>
|
||||||
|
Retain brightness & color messages: <input type="checkbox" name="RT"><br>
|
||||||
<i>Reboot required to apply changes. </i><a href="https://mm.kno.wled.ge/interfaces/mqtt/" target="_blank">MQTT info</a>
|
<i>Reboot required to apply changes. </i><a href="https://mm.kno.wled.ge/interfaces/mqtt/" target="_blank">MQTT info</a>
|
||||||
</div>
|
</div>
|
||||||
<h3>Philips Hue</h3>
|
<h3>Philips Hue</h3>
|
||||||
|
|||||||
@@ -186,11 +186,11 @@
|
|||||||
<h3>Ethernet Type</h3>
|
<h3>Ethernet Type</h3>
|
||||||
<select name="ETH">
|
<select name="ETH">
|
||||||
<option value="0">None</option>
|
<option value="0">None</option>
|
||||||
<option value="9">ABC! WLED V43 Controller & compatible</option>
|
<option value="9">ABC! WLED V43 & compatible</option>
|
||||||
<option value="2">ESP32-POE</option>
|
<option value="2">ESP32-POE</option>
|
||||||
<option value="6">ESP32Deux</option>
|
<option value="6">ESP32Deux</option>
|
||||||
<option value="7">KIT-VE</option>
|
<option value="7">KIT-VE</option>
|
||||||
<option value="8">QuinLED-Dig-Octa</option>
|
<option value="8">QuinLED-Dig-Octa & T-ETH-POE</option>
|
||||||
<option value="4">QuinLED-ESP32</option>
|
<option value="4">QuinLED-ESP32</option>
|
||||||
<option value="10">Serg74-ETH32</option>
|
<option value="10">Serg74-ETH32</option>
|
||||||
<option value="5">TwilightLord-ESP32</option>
|
<option value="5">TwilightLord-ESP32</option>
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ void handleDDPPacket(e131_packet_t* p) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t ddpChannelsPerLed = (p->dataType == DDP_TYPE_RGBW32) ? 4 : 3; // data type 0x1A is RGBW (type 3, 8 bit/channel)
|
uint8_t ddpChannelsPerLed = ((p->dataType & 0b00111000)>>3 == 0b011) ? 4 : 3; // data type 0x1B (formerly 0x1A) is RGBW (type 3, 8 bit/channel)
|
||||||
|
|
||||||
uint32_t start = htonl(p->channelOffset) / ddpChannelsPerLed;
|
uint32_t start = htonl(p->channelOffset) / ddpChannelsPerLed;
|
||||||
start += DMXAddress / ddpChannelsPerLed;
|
start += DMXAddress / ddpChannelsPerLed;
|
||||||
@@ -532,4 +532,4 @@ void sendArtnetPollReply(ArtPollReply *reply, IPAddress ipAddress, uint16_t port
|
|||||||
notifierUdp.endPacket();
|
notifierUdp.endPacket();
|
||||||
|
|
||||||
reply->reply_bind_index++;
|
reply->reply_bind_index++;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -189,7 +189,7 @@ void sendImprovInfoResponse() {
|
|||||||
out[11] = 4; //Firmware len ("WLED")
|
out[11] = 4; //Firmware len ("WLED")
|
||||||
out[12] = 'W'; out[13] = 'L'; out[14] = 'E'; out[15] = 'D';
|
out[12] = 'W'; out[13] = 'L'; out[14] = 'E'; out[15] = 'D';
|
||||||
uint8_t lengthSum = 17;
|
uint8_t lengthSum = 17;
|
||||||
uint8_t vlen = sprintf_P(out+lengthSum,PSTR("0.14.0-b15.25/%i"),VERSION);
|
uint8_t vlen = sprintf_P(out+lengthSum,PSTR("0.14.0-b15.27/%i"),VERSION);
|
||||||
out[16] = vlen; lengthSum += vlen;
|
out[16] = vlen; lengthSum += vlen;
|
||||||
uint8_t hlen = 7;
|
uint8_t hlen = 7;
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
|
|||||||
@@ -169,7 +169,10 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId)
|
|||||||
if ((spc>0 && spc!=seg.spacing) || seg.map1D2D!=map1D2D) seg.fill(BLACK); // clear spacing gaps // WLEDMM softhack007: this line sometimes crashes with "Stack canary watchpoint triggered (async_tcp)"
|
if ((spc>0 && spc!=seg.spacing) || seg.map1D2D!=map1D2D) seg.fill(BLACK); // clear spacing gaps // WLEDMM softhack007: this line sometimes crashes with "Stack canary watchpoint triggered (async_tcp)"
|
||||||
|
|
||||||
seg.map1D2D = constrain(map1D2D, 0, 7);
|
seg.map1D2D = constrain(map1D2D, 0, 7);
|
||||||
seg.soundSim = constrain(soundSim, 0, 7);
|
seg.soundSim = constrain(soundSim, 0, 1);
|
||||||
|
|
||||||
|
uint8_t set = elem[F("set")] | seg.set;
|
||||||
|
seg.set = constrain(set, 0, 3);
|
||||||
|
|
||||||
uint16_t len = 1;
|
uint16_t len = 1;
|
||||||
if (stop > start) len = stop - start;
|
if (stop > start) len = stop - start;
|
||||||
@@ -181,7 +184,7 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId)
|
|||||||
of = offsetAbs;
|
of = offsetAbs;
|
||||||
}
|
}
|
||||||
if (stop > start && of > len -1) of = len -1;
|
if (stop > start && of > len -1) of = len -1;
|
||||||
seg.set(start, stop, grp, spc, of, startY, stopY);
|
seg.setUp(start, stop, grp, spc, of, startY, stopY);
|
||||||
|
|
||||||
if (seg.reset && seg.stop == 0) {
|
if (seg.reset && seg.stop == 0) {
|
||||||
if (iAmGroot) suspendStripService = false; // WLEDMM release lock
|
if (iAmGroot) suspendStripService = false; // WLEDMM release lock
|
||||||
@@ -212,36 +215,43 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId)
|
|||||||
JsonArray colarr = elem["col"];
|
JsonArray colarr = elem["col"];
|
||||||
if (!colarr.isNull())
|
if (!colarr.isNull())
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < 3; i++)
|
if (seg.getLightCapabilities() & 3) {
|
||||||
{
|
// segment has RGB or White
|
||||||
int rgbw[] = {0,0,0,0};
|
for (size_t i = 0; i < 3; i++)
|
||||||
bool colValid = false;
|
{
|
||||||
JsonArray colX = colarr[i];
|
int rgbw[] = {0,0,0,0};
|
||||||
if (colX.isNull()) {
|
bool colValid = false;
|
||||||
byte brgbw[] = {0,0,0,0};
|
JsonArray colX = colarr[i];
|
||||||
const char* hexCol = colarr[i];
|
if (colX.isNull()) {
|
||||||
if (hexCol == nullptr) { //Kelvin color temperature (or invalid), e.g 2400
|
byte brgbw[] = {0,0,0,0};
|
||||||
int kelvin = colarr[i] | -1;
|
const char* hexCol = colarr[i];
|
||||||
if (kelvin < 0) continue;
|
if (hexCol == nullptr) { //Kelvin color temperature (or invalid), e.g 2400
|
||||||
if (kelvin == 0) seg.setColor(i, 0);
|
int kelvin = colarr[i] | -1;
|
||||||
if (kelvin > 0) colorKtoRGB(kelvin, brgbw);
|
if (kelvin < 0) continue;
|
||||||
|
if (kelvin == 0) seg.setColor(i, 0);
|
||||||
|
if (kelvin > 0) colorKtoRGB(kelvin, brgbw);
|
||||||
|
colValid = true;
|
||||||
|
} else { //HEX string, e.g. "FFAA00"
|
||||||
|
colValid = colorFromHexString(brgbw, hexCol);
|
||||||
|
}
|
||||||
|
for (size_t c = 0; c < 4; c++) rgbw[c] = brgbw[c];
|
||||||
|
} else { //Array of ints (RGB or RGBW color), e.g. [255,160,0]
|
||||||
|
byte sz = colX.size();
|
||||||
|
if (sz == 0) continue; //do nothing on empty array
|
||||||
|
|
||||||
|
copyArray(colX, rgbw, 4);
|
||||||
colValid = true;
|
colValid = true;
|
||||||
} else { //HEX string, e.g. "FFAA00"
|
|
||||||
colValid = colorFromHexString(brgbw, hexCol);
|
|
||||||
}
|
}
|
||||||
for (size_t c = 0; c < 4; c++) rgbw[c] = brgbw[c];
|
|
||||||
} else { //Array of ints (RGB or RGBW color), e.g. [255,160,0]
|
|
||||||
byte sz = colX.size();
|
|
||||||
if (sz == 0) continue; //do nothing on empty array
|
|
||||||
|
|
||||||
copyArray(colX, rgbw, 4);
|
if (!colValid) continue;
|
||||||
colValid = true;
|
|
||||||
|
seg.setColor(i, RGBW32(rgbw[0],rgbw[1],rgbw[2],rgbw[3]));
|
||||||
|
if (seg.mode == FX_MODE_STATIC) strip.trigger(); //instant refresh
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
if (!colValid) continue;
|
// non RGB & non White segment (usually On/Off bus)
|
||||||
|
seg.setColor(0, ULTRAWHITE);
|
||||||
seg.setColor(i, RGBW32(rgbw[0],rgbw[1],rgbw[2],rgbw[3]));
|
seg.setColor(1, BLACK);
|
||||||
if (seg.mode == FX_MODE_STATIC) strip.trigger(); //instant refresh
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -284,7 +294,9 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId)
|
|||||||
getVal(elem["ix"], &seg.intensity);
|
getVal(elem["ix"], &seg.intensity);
|
||||||
|
|
||||||
uint8_t pal = seg.palette;
|
uint8_t pal = seg.palette;
|
||||||
if (getVal(elem["pal"], &pal)) seg.setPalette(pal);
|
if (seg.getLightCapabilities() & 1) { // ignore palette for White and On/Off segments
|
||||||
|
if (getVal(elem["pal"], &pal)) seg.setPalette(pal);
|
||||||
|
}
|
||||||
|
|
||||||
getVal(elem["c1"], &seg.custom1);
|
getVal(elem["c1"], &seg.custom1);
|
||||||
getVal(elem["c2"], &seg.custom2);
|
getVal(elem["c2"], &seg.custom2);
|
||||||
@@ -589,6 +601,7 @@ void serializeSegment(JsonObject& root, Segment& seg, byte id, bool forPreset, b
|
|||||||
byte segbri = seg.opacity;
|
byte segbri = seg.opacity;
|
||||||
root["bri"] = (segbri) ? segbri : 255;
|
root["bri"] = (segbri) ? segbri : 255;
|
||||||
root["cct"] = seg.cct;
|
root["cct"] = seg.cct;
|
||||||
|
root[F("set")] = seg.set;
|
||||||
|
|
||||||
if (segmentBounds && seg.name != nullptr) root["n"] = reinterpret_cast<const char *>(seg.name); //not good practice, but decreases required JSON buffer
|
if (segmentBounds && seg.name != nullptr) root["n"] = reinterpret_cast<const char *>(seg.name); //not good practice, but decreases required JSON buffer
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
|
|
||||||
void parseMQTTBriPayload(char* payload)
|
void parseMQTTBriPayload(char* payload)
|
||||||
{
|
{
|
||||||
if (strstr(payload, "ON") || strstr(payload, "on") || strstr(payload, "true")) {bri = briLast; stateUpdated(1);}
|
if (strstr(payload, "ON") || strstr(payload, "on") || strstr(payload, "true")) {bri = briLast; stateUpdated(CALL_MODE_DIRECT_CHANGE);}
|
||||||
else if (strstr(payload, "T" ) || strstr(payload, "t" )) {toggleOnOff(); stateUpdated(1);}
|
else if (strstr(payload, "T" ) || strstr(payload, "t" )) {toggleOnOff(); stateUpdated(CALL_MODE_DIRECT_CHANGE);}
|
||||||
else {
|
else {
|
||||||
uint8_t in = strtoul(payload, NULL, 10);
|
uint8_t in = strtoul(payload, NULL, 10);
|
||||||
if (in == 0 && bri > 0) briLast = bri;
|
if (in == 0 && bri > 0) briLast = bri;
|
||||||
@@ -142,22 +142,22 @@ void publishMqtt()
|
|||||||
sprintf_P(s, PSTR("%u"), bri);
|
sprintf_P(s, PSTR("%u"), bri);
|
||||||
strlcpy(subuf, mqttDeviceTopic, 33);
|
strlcpy(subuf, mqttDeviceTopic, 33);
|
||||||
strcat_P(subuf, PSTR("/g"));
|
strcat_P(subuf, PSTR("/g"));
|
||||||
mqtt->publish(subuf, 0, true, s); // retain message
|
mqtt->publish(subuf, 0, retainMqttMsg, s); // optionally retain message (#2263)
|
||||||
|
|
||||||
sprintf_P(s, PSTR("#%06X"), (col[3] << 24) | (col[0] << 16) | (col[1] << 8) | (col[2]));
|
sprintf_P(s, PSTR("#%06X"), (col[3] << 24) | (col[0] << 16) | (col[1] << 8) | (col[2]));
|
||||||
strlcpy(subuf, mqttDeviceTopic, 33);
|
strlcpy(subuf, mqttDeviceTopic, 33);
|
||||||
strcat_P(subuf, PSTR("/c"));
|
strcat_P(subuf, PSTR("/c"));
|
||||||
mqtt->publish(subuf, 0, true, s); // retain message
|
mqtt->publish(subuf, 0, retainMqttMsg, s); // optionally retain message (#2263)
|
||||||
|
|
||||||
strlcpy(subuf, mqttDeviceTopic, 33);
|
strlcpy(subuf, mqttDeviceTopic, 33);
|
||||||
strcat_P(subuf, PSTR("/status"));
|
strcat_P(subuf, PSTR("/status"));
|
||||||
mqtt->publish(subuf, 0, true, "online"); // retain message for a LWT
|
mqtt->publish(subuf, 0, true, "online"); // retain message for a LWT
|
||||||
|
|
||||||
char apires[1024]; // allocating 1024 bytes from stack can be risky
|
char apires[1024]; // allocating 1024 bytes from stack can be risky
|
||||||
XML_response(nullptr, apires);
|
XML_response(nullptr, apires);
|
||||||
strlcpy(subuf, mqttDeviceTopic, 33);
|
strlcpy(subuf, mqttDeviceTopic, 33);
|
||||||
strcat_P(subuf, PSTR("/v"));
|
strcat_P(subuf, PSTR("/v"));
|
||||||
mqtt->publish(subuf, 0, false, apires); // do not retain message
|
mqtt->publish(subuf, 0, retainMqttMsg, apires); // optionally retain message (#2263)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,4 +22,5 @@
|
|||||||
#define CLIENT_PASS "Your_Password"
|
#define CLIENT_PASS "Your_Password"
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//#define MAX_LEDS 1500 //Maximum total LEDs. More than 1500 might create a low memory situation on ESP8266.
|
//#define MAX_LEDS 1500 // Maximum total LEDs. More than 1500 might create a low memory situation on ESP8266.
|
||||||
|
//#define MDNS_NAME "wled" // mDNS hostname, ie: *.local
|
||||||
|
|||||||
@@ -152,16 +152,13 @@ int getSignalQuality(int rssi)
|
|||||||
//handle Ethernet connection event
|
//handle Ethernet connection event
|
||||||
void WiFiEvent(WiFiEvent_t event)
|
void WiFiEvent(WiFiEvent_t event)
|
||||||
{
|
{
|
||||||
#ifdef WLED_USE_ETHERNET
|
|
||||||
char hostname[25];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_ETHERNET)
|
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_ETHERNET)
|
||||||
case SYSTEM_EVENT_ETH_START:
|
case SYSTEM_EVENT_ETH_START:
|
||||||
DEBUG_PRINTLN(F("ETH Started"));
|
DEBUG_PRINTLN(F("ETH Started"));
|
||||||
break;
|
break;
|
||||||
case SYSTEM_EVENT_ETH_CONNECTED:
|
case SYSTEM_EVENT_ETH_CONNECTED:
|
||||||
|
{
|
||||||
DEBUG_PRINTLN(F("ETH Connected"));
|
DEBUG_PRINTLN(F("ETH Connected"));
|
||||||
if (!apActive) {
|
if (!apActive) {
|
||||||
WiFi.disconnect(true);
|
WiFi.disconnect(true);
|
||||||
@@ -172,10 +169,12 @@ void WiFiEvent(WiFiEvent_t event)
|
|||||||
ETH.config(INADDR_NONE, INADDR_NONE, INADDR_NONE);
|
ETH.config(INADDR_NONE, INADDR_NONE, INADDR_NONE);
|
||||||
}
|
}
|
||||||
// convert the "serverDescription" into a valid DNS hostname (alphanumeric)
|
// convert the "serverDescription" into a valid DNS hostname (alphanumeric)
|
||||||
|
char hostname[64];
|
||||||
prepareHostname(hostname);
|
prepareHostname(hostname);
|
||||||
ETH.setHostname(hostname);
|
ETH.setHostname(hostname);
|
||||||
showWelcomePage = false;
|
showWelcomePage = false;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case SYSTEM_EVENT_ETH_DISCONNECTED:
|
case SYSTEM_EVENT_ETH_DISCONNECTED:
|
||||||
DEBUG_PRINTLN(F("ETH Disconnected"));
|
DEBUG_PRINTLN(F("ETH Disconnected"));
|
||||||
// This doesn't really affect ethernet per se,
|
// This doesn't really affect ethernet per se,
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ static void doSaveState() {
|
|||||||
size_t len = measureJson(*fileDoc) + 1;
|
size_t len = measureJson(*fileDoc) + 1;
|
||||||
DEBUG_PRINTLN(len);
|
DEBUG_PRINTLN(len);
|
||||||
// if possible use SPI RAM on ESP32
|
// if possible use SPI RAM on ESP32
|
||||||
#if defined(BOARD_HAS_PSRAM) && (defined(WLED_USE_PSRAM) || defined(WLED_USE_PSRAM_JSON))
|
#if defined(BOARD_HAS_PSRAM) && (defined(WLED_USE_PSRAM) || defined(WLED_USE_PSRAM_JSON)) // WLEDMM
|
||||||
if (psramFound())
|
if (psramFound())
|
||||||
tmpRAMbuffer = (char*) ps_malloc(len);
|
tmpRAMbuffer = (char*) ps_malloc(len);
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -159,7 +159,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
|||||||
// actual finalization is done in WLED::loop() (removing old busses and adding new)
|
// actual finalization is done in WLED::loop() (removing old busses and adding new)
|
||||||
// this may happen even before this loop is finished so we do "doInitBusses" after the loop
|
// this may happen even before this loop is finished so we do "doInitBusses" after the loop
|
||||||
if (busConfigs[s] != nullptr) delete busConfigs[s];
|
if (busConfigs[s] != nullptr) delete busConfigs[s];
|
||||||
busConfigs[s] = new BusConfig(type, pins, start, length, colorOrder | (channelSwap<<4), request->hasArg(cv), skip, awmode); //WLEDMM to do bus, freqHz
|
busConfigs[s] = new BusConfig(type, pins, start, length, colorOrder | (channelSwap<<4), request->hasArg(cv), skip, awmode, freqHz);
|
||||||
busesChanged = true;
|
busesChanged = true;
|
||||||
}
|
}
|
||||||
//doInitBusses = busesChanged; // we will do that below to ensure all input data is processed
|
//doInitBusses = busesChanged; // we will do that below to ensure all input data is processed
|
||||||
@@ -368,6 +368,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
|||||||
strlcpy(mqttDeviceTopic, request->arg(F("MD")).c_str(), 33);
|
strlcpy(mqttDeviceTopic, request->arg(F("MD")).c_str(), 33);
|
||||||
strlcpy(mqttGroupTopic, request->arg(F("MG")).c_str(), 33);
|
strlcpy(mqttGroupTopic, request->arg(F("MG")).c_str(), 33);
|
||||||
buttonPublishMqtt = request->hasArg(F("BM"));
|
buttonPublishMqtt = request->hasArg(F("BM"));
|
||||||
|
retainMqttMsg = request->hasArg(F("RT"));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef WLED_DISABLE_HUESYNC
|
#ifndef WLED_DISABLE_HUESYNC
|
||||||
@@ -867,7 +868,7 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply)
|
|||||||
if (pos > 0) {
|
if (pos > 0) {
|
||||||
spcI = getNumVal(&req, pos);
|
spcI = getNumVal(&req, pos);
|
||||||
}
|
}
|
||||||
selseg.set(startI, stopI, grpI, spcI, UINT16_MAX, startY, stopY);
|
selseg.setUp(startI, stopI, grpI, spcI, UINT16_MAX, startY, stopY);
|
||||||
|
|
||||||
pos = req.indexOf(F("RV=")); //Segment reverse
|
pos = req.indexOf(F("RV=")); //Segment reverse
|
||||||
if (pos > 0) selseg.reverse = req.charAt(pos+3) != '0';
|
if (pos > 0) selseg.reverse = req.charAt(pos+3) != '0';
|
||||||
|
|||||||
@@ -53,8 +53,8 @@ typedef struct ip_addr ip4_addr_t;
|
|||||||
#define DDP_PUSH_FLAG 0x01
|
#define DDP_PUSH_FLAG 0x01
|
||||||
#define DDP_TIMECODE_FLAG 0x10
|
#define DDP_TIMECODE_FLAG 0x10
|
||||||
|
|
||||||
#define DDP_TYPE_RGB24 0x0A
|
#define DDP_TYPE_RGB24 0x0B // 00 001 011 (RGB , 8 bits per channel, 3 channels)
|
||||||
#define DDP_TYPE_RGBW32 0x1A
|
#define DDP_TYPE_RGBW32 0x1B // 00 011 011 (RGBW, 8 bits per channel, 4 channels)
|
||||||
|
|
||||||
#define ARTNET_OPCODE_OPDMX 0x5000
|
#define ARTNET_OPCODE_OPDMX 0x5000
|
||||||
#define ARTNET_OPCODE_OPPOLL 0x2000
|
#define ARTNET_OPCODE_OPPOLL 0x2000
|
||||||
|
|||||||
@@ -375,7 +375,7 @@ void handleNotifications()
|
|||||||
uint16_t stopY = 1, stop = (udpIn[3+ofs] << 8 | udpIn[4+ofs]);
|
uint16_t stopY = 1, stop = (udpIn[3+ofs] << 8 | udpIn[4+ofs]);
|
||||||
uint16_t offset = (udpIn[7+ofs] << 8 | udpIn[8+ofs]);
|
uint16_t offset = (udpIn[7+ofs] << 8 | udpIn[8+ofs]);
|
||||||
if (!receiveSegmentOptions) {
|
if (!receiveSegmentOptions) {
|
||||||
selseg.set(start, stop, selseg.grouping, selseg.spacing, offset, startY, stopY);
|
selseg.setUp(start, stop, selseg.grouping, selseg.spacing, offset, startY, stopY);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//for (size_t j = 1; j<4; j++) selseg.setOption(j, (udpIn[9 +ofs] >> j) & 0x01); //only take into account mirrored, on, reversed; ignore selected
|
//for (size_t j = 1; j<4; j++) selseg.setOption(j, (udpIn[9 +ofs] >> j) & 0x01); //only take into account mirrored, on, reversed; ignore selected
|
||||||
@@ -409,9 +409,9 @@ void handleNotifications()
|
|||||||
stopY = (udpIn[34+ofs] << 8 | udpIn[35+ofs]);
|
stopY = (udpIn[34+ofs] << 8 | udpIn[35+ofs]);
|
||||||
}
|
}
|
||||||
if (receiveSegmentBounds) {
|
if (receiveSegmentBounds) {
|
||||||
selseg.set(start, stop, udpIn[5+ofs], udpIn[6+ofs], offset, startY, stopY);
|
selseg.setUp(start, stop, udpIn[5+ofs], udpIn[6+ofs], offset, startY, stopY);
|
||||||
} else {
|
} else {
|
||||||
selseg.set(selseg.start, selseg.stop, udpIn[5+ofs], udpIn[6+ofs], selseg.offset, selseg.startY, selseg.stopY);
|
selseg.setUp(selseg.start, selseg.stop, udpIn[5+ofs], udpIn[6+ofs], selseg.offset, selseg.startY, selseg.stopY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stateChanged = true;
|
stateChanged = true;
|
||||||
|
|||||||
@@ -12,11 +12,11 @@
|
|||||||
//#include "../usermods/EXAMPLE_v2/usermod_v2_example.h"
|
//#include "../usermods/EXAMPLE_v2/usermod_v2_example.h"
|
||||||
|
|
||||||
#ifdef USERMOD_BATTERY
|
#ifdef USERMOD_BATTERY
|
||||||
#include "../usermods/Battery/usermod_v2_Battery.h"
|
#include "../usermods/Battery/usermod_v2_Battery.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_DALLASTEMPERATURE
|
#ifdef USERMOD_DALLASTEMPERATURE
|
||||||
#include "../usermods/Temperature/usermod_temperature.h"
|
#include "../usermods/Temperature/usermod_temperature.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_SHT
|
#ifdef USERMOD_SHT
|
||||||
@@ -24,165 +24,169 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_SN_PHOTORESISTOR
|
#ifdef USERMOD_SN_PHOTORESISTOR
|
||||||
#include "../usermods/SN_Photoresistor/usermod_sn_photoresistor.h"
|
#include "../usermods/SN_Photoresistor/usermod_sn_photoresistor.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_PWM_FAN
|
#ifdef USERMOD_PWM_FAN
|
||||||
// requires DALLASTEMPERATURE or SHT included before it
|
// requires DALLASTEMPERATURE or SHT included before it
|
||||||
#include "../usermods/PWM_fan/usermod_PWM_fan.h"
|
#include "../usermods/PWM_fan/usermod_PWM_fan.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_BUZZER
|
#ifdef USERMOD_BUZZER
|
||||||
#include "../usermods/buzzer/usermod_v2_buzzer.h"
|
#include "../usermods/buzzer/usermod_v2_buzzer.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_SENSORSTOMQTT
|
#ifdef USERMOD_SENSORSTOMQTT
|
||||||
#include "../usermods/sensors_to_mqtt/usermod_v2_SensorsToMqtt.h"
|
#include "../usermods/sensors_to_mqtt/usermod_v2_SensorsToMqtt.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_PIRSWITCH
|
#ifdef USERMOD_PIRSWITCH
|
||||||
#include "../usermods/PIR_sensor_switch/usermod_PIR_sensor_switch.h"
|
#include "../usermods/PIR_sensor_switch/usermod_PIR_sensor_switch.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_MODE_SORT
|
#ifdef USERMOD_MODE_SORT
|
||||||
#include "../usermods/usermod_v2_mode_sort/usermod_v2_mode_sort.h"
|
#include "../usermods/usermod_v2_mode_sort/usermod_v2_mode_sort.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_BH1750
|
#ifdef USERMOD_BH1750
|
||||||
#include "../usermods/BH1750_v2/usermod_bh1750.h" //WLEDMM: usermod_bh1750.h in small caps!
|
#include "../usermods/BH1750_v2/usermod_bh1750.h" //WLEDMM: usermod_bh1750.h in small caps!
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// BME280 v2 usermod. Define "USERMOD_BME280" in my_config.h
|
// BME280 v2 usermod. Define "USERMOD_BME280" in my_config.h
|
||||||
#ifdef USERMOD_BME280
|
#ifdef USERMOD_BME280
|
||||||
#include "../usermods/BME280_v2/usermod_bme280.h"
|
#include "../usermods/BME280_v2/usermod_bme280.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_FOUR_LINE_DISPLAY
|
#ifdef USERMOD_FOUR_LINE_DISPLAY
|
||||||
#if defined(USE_ALT_DISPLAY) || defined(USE_ALT_DISPlAY)
|
#if defined(USE_ALT_DISPLAY) || defined(USE_ALT_DISPlAY)
|
||||||
#include "../usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h"
|
#include "../usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h"
|
||||||
#else
|
#else
|
||||||
#include "../usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h"
|
#include "../usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h"
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_ROTARY_ENCODER_UI
|
#ifdef USERMOD_ROTARY_ENCODER_UI
|
||||||
#if defined(USE_ALT_DISPLAY) || defined(USE_ALT_DISPlAY)
|
#if defined(USE_ALT_DISPLAY) || defined(USE_ALT_DISPlAY)
|
||||||
#include "../usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h"
|
#include "../usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h"
|
||||||
#else
|
#else
|
||||||
#include "../usermods/usermod_v2_rotary_encoder_ui/usermod_v2_rotary_encoder_ui.h"
|
#include "../usermods/usermod_v2_rotary_encoder_ui/usermod_v2_rotary_encoder_ui.h"
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_AUTO_SAVE
|
#ifdef USERMOD_AUTO_SAVE
|
||||||
#include "../usermods/usermod_v2_auto_save/usermod_v2_auto_save.h"
|
#include "../usermods/usermod_v2_auto_save/usermod_v2_auto_save.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_DHT
|
#ifdef USERMOD_DHT
|
||||||
#include "../usermods/DHT/usermod_dht.h"
|
#include "../usermods/DHT/usermod_dht.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_VL53L0X_GESTURES
|
#ifdef USERMOD_VL53L0X_GESTURES
|
||||||
#include "../usermods/VL53L0X_gestures/usermod_vl53l0x_gestures.h"
|
#include "../usermods/VL53L0X_gestures/usermod_vl53l0x_gestures.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_ANIMATED_STAIRCASE
|
#ifdef USERMOD_ANIMATED_STAIRCASE
|
||||||
#include "../usermods/Animated_Staircase/Animated_Staircase.h"
|
#include "../usermods/Animated_Staircase/Animated_Staircase.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_MULTI_RELAY
|
#ifdef USERMOD_MULTI_RELAY
|
||||||
#include "../usermods/multi_relay/usermod_multi_relay.h"
|
#include "../usermods/multi_relay/usermod_multi_relay.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_RTC
|
#ifdef USERMOD_RTC
|
||||||
#include "../usermods/RTC/usermod_rtc.h"
|
#include "../usermods/RTC/usermod_rtc.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_ELEKSTUBE_IPS
|
#ifdef USERMOD_ELEKSTUBE_IPS
|
||||||
#include "../usermods/EleksTube_IPS/usermod_elekstube_ips.h"
|
#include "../usermods/EleksTube_IPS/usermod_elekstube_ips.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_ROTARY_ENCODER_BRIGHTNESS_COLOR
|
#ifdef USERMOD_ROTARY_ENCODER_BRIGHTNESS_COLOR
|
||||||
#include "../usermods/usermod_rotary_brightness_color/usermod_rotary_brightness_color.h"
|
#include "../usermods/usermod_rotary_brightness_color/usermod_rotary_brightness_color.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef RGB_ROTARY_ENCODER
|
#ifdef RGB_ROTARY_ENCODER
|
||||||
#include "../usermods/rgb-rotary-encoder/rgb-rotary-encoder.h"
|
#include "../usermods/rgb-rotary-encoder/rgb-rotary-encoder.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_ST7789_DISPLAY
|
#ifdef USERMOD_ST7789_DISPLAY
|
||||||
#include "../usermods/ST7789_display/ST7789_Display.h"
|
#include "../usermods/ST7789_display/ST7789_Display.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_SEVEN_SEGMENT
|
#ifdef USERMOD_SEVEN_SEGMENT
|
||||||
#include "../usermods/seven_segment_display/usermod_v2_seven_segment_display.h"
|
#include "../usermods/seven_segment_display/usermod_v2_seven_segment_display.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_SSDR
|
#ifdef USERMOD_SSDR
|
||||||
#include "../usermods/seven_segment_display_reloaded/usermod_seven_segment_reloaded.h"
|
#include "../usermods/seven_segment_display_reloaded/usermod_seven_segment_reloaded.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_CRONIXIE
|
#ifdef USERMOD_CRONIXIE
|
||||||
#include "../usermods/Cronixie/usermod_cronixie.h"
|
#include "../usermods/Cronixie/usermod_cronixie.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef QUINLED_AN_PENTA
|
#ifdef QUINLED_AN_PENTA
|
||||||
#include "../usermods/quinled-an-penta/quinled-an-penta.h"
|
#include "../usermods/quinled-an-penta/quinled-an-penta.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_WIZLIGHTS
|
#ifdef USERMOD_WIZLIGHTS
|
||||||
#include "../usermods/wizlights/wizlights.h"
|
#include "../usermods/wizlights/wizlights.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_WORDCLOCK
|
#ifdef USERMOD_WORDCLOCK
|
||||||
#include "../usermods/usermod_v2_word_clock/usermod_v2_word_clock.h"
|
#include "../usermods/usermod_v2_word_clock/usermod_v2_word_clock.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_MY9291
|
#ifdef USERMOD_MY9291
|
||||||
#include "../usermods/MY9291/usermode_MY9291.h"
|
#include "../usermods/MY9291/usermode_MY9291.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_SI7021_MQTT_HA
|
#ifdef USERMOD_SI7021_MQTT_HA
|
||||||
#include "../usermods/Si7021_MQTT_HA/usermod_si7021_mqtt_ha.h"
|
#include "../usermods/Si7021_MQTT_HA/usermod_si7021_mqtt_ha.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_SMARTNEST
|
#ifdef USERMOD_SMARTNEST
|
||||||
#include "../usermods/smartnest/usermod_smartnest.h"
|
#include "../usermods/smartnest/usermod_smartnest.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_AUDIOREACTIVE
|
#ifdef USERMOD_AUDIOREACTIVE
|
||||||
#include "../usermods/audioreactive/audio_reactive.h"
|
#include "../usermods/audioreactive/audio_reactive.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_ANALOG_CLOCK
|
#ifdef USERMOD_ANALOG_CLOCK
|
||||||
#include "../usermods/Analog_Clock/Analog_Clock.h"
|
#include "../usermods/Analog_Clock/Analog_Clock.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_PING_PONG_CLOCK
|
#ifdef USERMOD_PING_PONG_CLOCK
|
||||||
#include "../usermods/usermod_v2_ping_pong_clock/usermod_v2_ping_pong_clock.h"
|
#include "../usermods/usermod_v2_ping_pong_clock/usermod_v2_ping_pong_clock.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_ADS1115
|
#ifdef USERMOD_ADS1115
|
||||||
#include "../usermods/ADS1115_v2/usermod_ads1115.h"
|
#include "../usermods/ADS1115_v2/usermod_ads1115.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_KLIPPER_PERCENTAGE
|
#ifdef USERMOD_KLIPPER_PERCENTAGE
|
||||||
#include "..\usermods\usermod_v2_klipper_percentage\usermod_v2_klipper_percentage.h"
|
#include "..\usermods\usermod_v2_klipper_percentage\usermod_v2_klipper_percentage.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_BOBLIGHT
|
#ifdef USERMOD_BOBLIGHT
|
||||||
#include "../usermods/boblight/boblight.h"
|
#include "../usermods/boblight/boblight.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USERMOD_MCUTEMP
|
||||||
|
#include "../usermods/mcu_temp/mcuTemp.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(WLED_USE_SD_MMC) || defined(WLED_USE_SD_SPI)
|
#if defined(WLED_USE_SD_MMC) || defined(WLED_USE_SD_SPI)
|
||||||
// This include of SD.h and SD_MMC.h must happen here, else they won't be
|
// This include of SD.h and SD_MMC.h must happen here, else they won't be
|
||||||
// resolved correctly (when included in mod's header only)
|
// resolved correctly (when included in mod's header only)
|
||||||
#ifdef WLED_USE_SD_MMC
|
#ifdef WLED_USE_SD_MMC
|
||||||
#include "SD_MMC.h"
|
#include "SD_MMC.h"
|
||||||
#elif defined(WLED_USE_SD_SPI)
|
#elif defined(WLED_USE_SD_SPI)
|
||||||
#include "SD.h"
|
#include "SD.h"
|
||||||
#include "SPI.h"
|
#include "SPI.h"
|
||||||
#endif
|
#endif
|
||||||
#include "../usermods/sd_card/usermod_sd_card.h"
|
#include "../usermods/sd_card/usermod_sd_card.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_PWM_OUTPUTS
|
#ifdef USERMOD_PWM_OUTPUTS
|
||||||
@@ -211,190 +215,194 @@
|
|||||||
|
|
||||||
void registerUsermods()
|
void registerUsermods()
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Add your usermod class name here
|
* Add your usermod class name here
|
||||||
* || || ||
|
* || || ||
|
||||||
* \/ \/ \/
|
* \/ \/ \/
|
||||||
*/
|
*/
|
||||||
//usermods.add(new MyExampleUsermod());
|
//usermods.add(new MyExampleUsermod());
|
||||||
#ifdef USERMOD_BATTERY
|
#ifdef USERMOD_BATTERY
|
||||||
usermods.add(new UsermodBattery());
|
usermods.add(new UsermodBattery());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_DALLASTEMPERATURE
|
#ifdef USERMOD_DALLASTEMPERATURE
|
||||||
usermods.add(new UsermodTemperature("Temperature", true));
|
usermods.add(new UsermodTemperature("Temperature", true));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_SN_PHOTORESISTOR
|
#ifdef USERMOD_SN_PHOTORESISTOR
|
||||||
usermods.add(new Usermod_SN_Photoresistor());
|
usermods.add(new Usermod_SN_Photoresistor());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_PWM_FAN
|
#ifdef USERMOD_PWM_FAN
|
||||||
usermods.add(new PWMFanUsermod());
|
usermods.add(new PWMFanUsermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_BUZZER
|
#ifdef USERMOD_BUZZER
|
||||||
usermods.add(new BuzzerUsermod());
|
usermods.add(new BuzzerUsermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_BH1750
|
#ifdef USERMOD_BH1750
|
||||||
usermods.add(new Usermod_BH1750("BH1750", false));
|
usermods.add(new Usermod_BH1750("BH1750", false));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_BME280
|
#ifdef USERMOD_BME280
|
||||||
usermods.add(new UsermodBME280());
|
usermods.add(new UsermodBME280());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_SENSORSTOMQTT
|
#ifdef USERMOD_SENSORSTOMQTT
|
||||||
usermods.add(new UserMod_SensorsToMQTT());
|
usermods.add(new UserMod_SensorsToMQTT());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_PIRSWITCH
|
#ifdef USERMOD_PIRSWITCH
|
||||||
usermods.add(new PIRsensorSwitch());
|
usermods.add(new PIRsensorSwitch());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_MODE_SORT
|
#ifdef USERMOD_MODE_SORT
|
||||||
usermods.add(new ModeSortUsermod());
|
usermods.add(new ModeSortUsermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_FOUR_LINE_DISPLAY
|
#ifdef USERMOD_FOUR_LINE_DISPLAY
|
||||||
usermods.add(new FourLineDisplayUsermod());
|
usermods.add(new FourLineDisplayUsermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_ROTARY_ENCODER_UI
|
#ifdef USERMOD_ROTARY_ENCODER_UI
|
||||||
usermods.add(new RotaryEncoderUIUsermod()); // can use USERMOD_FOUR_LINE_DISPLAY
|
usermods.add(new RotaryEncoderUIUsermod()); // can use USERMOD_FOUR_LINE_DISPLAY
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_AUTO_SAVE
|
#ifdef USERMOD_AUTO_SAVE
|
||||||
usermods.add(new AutoSaveUsermod()); // can use USERMOD_FOUR_LINE_DISPLAY
|
usermods.add(new AutoSaveUsermod()); // can use USERMOD_FOUR_LINE_DISPLAY
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_DHT
|
#ifdef USERMOD_DHT
|
||||||
usermods.add(new UsermodDHT());
|
usermods.add(new UsermodDHT());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_VL53L0X_GESTURES
|
#ifdef USERMOD_VL53L0X_GESTURES
|
||||||
usermods.add(new UsermodVL53L0XGestures());
|
usermods.add(new UsermodVL53L0XGestures());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_ANIMATED_STAIRCASE
|
#ifdef USERMOD_ANIMATED_STAIRCASE
|
||||||
usermods.add(new Animated_Staircase());
|
usermods.add(new Animated_Staircase());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_MULTI_RELAY
|
#ifdef USERMOD_MULTI_RELAY
|
||||||
usermods.add(new MultiRelay());
|
usermods.add(new MultiRelay());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_RTC
|
#ifdef USERMOD_RTC
|
||||||
usermods.add(new RTCUsermod());
|
usermods.add(new RTCUsermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_ELEKSTUBE_IPS
|
#ifdef USERMOD_ELEKSTUBE_IPS
|
||||||
usermods.add(new ElekstubeIPSUsermod());
|
usermods.add(new ElekstubeIPSUsermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_ROTARY_ENCODER_BRIGHTNESS_COLOR
|
#ifdef USERMOD_ROTARY_ENCODER_BRIGHTNESS_COLOR
|
||||||
usermods.add(new RotaryEncoderBrightnessColor());
|
usermods.add(new RotaryEncoderBrightnessColor());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef RGB_ROTARY_ENCODER
|
#ifdef RGB_ROTARY_ENCODER
|
||||||
usermods.add(new RgbRotaryEncoderUsermod());
|
usermods.add(new RgbRotaryEncoderUsermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_ST7789_DISPLAY
|
#ifdef USERMOD_ST7789_DISPLAY
|
||||||
usermods.add(new St7789DisplayUsermod());
|
usermods.add(new St7789DisplayUsermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_SEVEN_SEGMENT
|
#ifdef USERMOD_SEVEN_SEGMENT
|
||||||
usermods.add(new SevenSegmentDisplay());
|
usermods.add(new SevenSegmentDisplay());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_SSDR
|
#ifdef USERMOD_SSDR
|
||||||
usermods.add(new UsermodSSDR());
|
usermods.add(new UsermodSSDR());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_CRONIXIE
|
#ifdef USERMOD_CRONIXIE
|
||||||
usermods.add(new UsermodCronixie());
|
usermods.add(new UsermodCronixie());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef QUINLED_AN_PENTA
|
#ifdef QUINLED_AN_PENTA
|
||||||
usermods.add(new QuinLEDAnPentaUsermod());
|
usermods.add(new QuinLEDAnPentaUsermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_WIZLIGHTS
|
#ifdef USERMOD_WIZLIGHTS
|
||||||
usermods.add(new WizLightsUsermod());
|
usermods.add(new WizLightsUsermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_WORDCLOCK
|
#ifdef USERMOD_WORDCLOCK
|
||||||
usermods.add(new WordClockUsermod());
|
usermods.add(new WordClockUsermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_MY9291
|
#ifdef USERMOD_MY9291
|
||||||
usermods.add(new MY9291Usermod());
|
usermods.add(new MY9291Usermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_SI7021_MQTT_HA
|
#ifdef USERMOD_SI7021_MQTT_HA
|
||||||
usermods.add(new Si7021_MQTT_HA());
|
usermods.add(new Si7021_MQTT_HA());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_SMARTNEST
|
#ifdef USERMOD_SMARTNEST
|
||||||
usermods.add(new Smartnest());
|
usermods.add(new Smartnest());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_AUDIOREACTIVE
|
#ifdef USERMOD_AUDIOREACTIVE
|
||||||
usermods.add(new AudioReactive());
|
usermods.add(new AudioReactive());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_ANALOG_CLOCK
|
#ifdef USERMOD_ANALOG_CLOCK
|
||||||
usermods.add(new AnalogClockUsermod());
|
usermods.add(new AnalogClockUsermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_PING_PONG_CLOCK
|
#ifdef USERMOD_PING_PONG_CLOCK
|
||||||
usermods.add(new PingPongClockUsermod());
|
usermods.add(new PingPongClockUsermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_ADS1115
|
#ifdef USERMOD_ADS1115
|
||||||
usermods.add(new ADS1115Usermod());
|
usermods.add(new ADS1115Usermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_KLIPPER_PERCENTAGE
|
#ifdef USERMOD_KLIPPER_PERCENTAGE
|
||||||
usermods.add(new klipper_percentage());
|
usermods.add(new klipper_percentage());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_BOBLIGHT
|
#ifdef USERMOD_BOBLIGHT
|
||||||
usermods.add(new BobLightUsermod());
|
usermods.add(new BobLightUsermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef SD_ADAPTER
|
#ifdef SD_ADAPTER
|
||||||
usermods.add(new UsermodSdCard());
|
usermods.add(new UsermodSdCard());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_PWM_OUTPUTS
|
#ifdef USERMOD_PWM_OUTPUTS
|
||||||
usermods.add(new PwmOutputsUsermod());
|
usermods.add(new PwmOutputsUsermod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_SHT
|
#ifdef USERMOD_SHT
|
||||||
usermods.add(new ShtUsermod("SHT-Sensor", false));
|
usermods.add(new ShtUsermod("SHT-Sensor", false));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//WLEDMM ARTIFX
|
#ifdef USERMOD_MCUTEMP
|
||||||
#ifdef USERMOD_ARTIFX
|
usermods.add(new mcuTemp("MCUTemp", true));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// WLEDMM ARTIFX
|
||||||
|
#ifdef USERMOD_ARTIFX
|
||||||
usermods.add(new ARTIFXUserMod());
|
usermods.add(new ARTIFXUserMod());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_WEATHER
|
#ifdef USERMOD_WEATHER
|
||||||
usermods.add(new WeatherUsermod("Weather", true));
|
usermods.add(new WeatherUsermod("Weather", true));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef USERMOD_MPU6050_IMU
|
#ifdef USERMOD_MPU6050_IMU
|
||||||
usermods.add(new MPU6050Driver("mpu6050-IMU", true));
|
usermods.add(new MPU6050Driver("mpu6050-IMU", true));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USERMOD_GAMES
|
#ifdef USERMOD_GAMES
|
||||||
usermods.add(new GamesUsermod());
|
usermods.add(new GamesUsermod());
|
||||||
#endif
|
#endif
|
||||||
#ifdef USERMOD_ANIMARTRIX
|
#ifdef USERMOD_ANIMARTRIX
|
||||||
usermods.add(new AnimartrixUsermod("Animartrix", true));
|
usermods.add(new AnimartrixUsermod("Animartrix", true));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -392,11 +392,12 @@ uint16_t crc16(const unsigned char* data_p, size_t length) {
|
|||||||
// Begin simulateSound (to enable audio enhanced effects to display something)
|
// Begin simulateSound (to enable audio enhanced effects to display something)
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// Currently 4 types defined, to be fine tuned and new types added
|
// Currently 4 types defined, to be fine tuned and new types added
|
||||||
|
// (only 2 used as stored in 1 bit in segment options, consider switching to a single global simulation type)
|
||||||
typedef enum UM_SoundSimulations {
|
typedef enum UM_SoundSimulations {
|
||||||
UMS_BeatSin = 0,
|
UMS_BeatSin = 0,
|
||||||
UMS_WeWillRockYou,
|
UMS_WeWillRockYou
|
||||||
UMS_10_3,
|
//UMS_10_13,
|
||||||
UMS_14_3
|
//UMS_14_3
|
||||||
} um_soundSimulations_t;
|
} um_soundSimulations_t;
|
||||||
|
|
||||||
um_data_t* simulateSound(uint8_t simulationId)
|
um_data_t* simulateSound(uint8_t simulationId)
|
||||||
@@ -484,7 +485,7 @@ um_data_t* simulateSound(uint8_t simulationId)
|
|||||||
fftResult[i] = 0;
|
fftResult[i] = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case UMS_10_3:
|
/*case UMS_10_3:
|
||||||
for (int i = 0; i<16; i++)
|
for (int i = 0; i<16; i++)
|
||||||
fftResult[i] = inoise8(beatsin8(90 / (i+1), 0, 200)*15 + (ms>>10), ms>>3);
|
fftResult[i] = inoise8(beatsin8(90 / (i+1), 0, 200)*15 + (ms>>10), ms>>3);
|
||||||
volumeSmth = fftResult[8];
|
volumeSmth = fftResult[8];
|
||||||
@@ -493,7 +494,7 @@ um_data_t* simulateSound(uint8_t simulationId)
|
|||||||
for (int i = 0; i<16; i++)
|
for (int i = 0; i<16; i++)
|
||||||
fftResult[i] = inoise8(beatsin8(120 / (i+1), 10, 30)*10 + (ms>>14), ms>>3);
|
fftResult[i] = inoise8(beatsin8(120 / (i+1), 10, 30)*10 + (ms>>14), ms>>3);
|
||||||
volumeSmth = fftResult[8];
|
volumeSmth = fftResult[8];
|
||||||
break;
|
break;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
samplePeak = random8() > 250;
|
samplePeak = random8() > 250;
|
||||||
|
|||||||
@@ -295,6 +295,8 @@ void WLED::loop()
|
|||||||
DEBUG_PRINT(F("Runtime: ")); DEBUG_PRINTLN(millis());
|
DEBUG_PRINT(F("Runtime: ")); DEBUG_PRINTLN(millis());
|
||||||
DEBUG_PRINT(F("Unix time: ")); toki.printTime(toki.getTime());
|
DEBUG_PRINT(F("Unix time: ")); toki.printTime(toki.getTime());
|
||||||
DEBUG_PRINT(F("Free heap : ")); DEBUG_PRINTLN(ESP.getFreeHeap());
|
DEBUG_PRINT(F("Free heap : ")); DEBUG_PRINTLN(ESP.getFreeHeap());
|
||||||
|
DEBUG_PRINT(F("Free heap: ")); DEBUG_PRINTLN(ESP.getFreeHeap());
|
||||||
|
//WLEDMM
|
||||||
#ifdef ARDUINO_ARCH_ESP32
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
DEBUG_PRINT(F("Avail heap: ")); DEBUG_PRINTLN(ESP.getMaxAllocHeap());
|
DEBUG_PRINT(F("Avail heap: ")); DEBUG_PRINTLN(ESP.getMaxAllocHeap());
|
||||||
DEBUG_PRINTF("%s min free stack %d\n", pcTaskGetTaskName(NULL), uxTaskGetStackHighWaterMark(NULL)); //WLEDMM
|
DEBUG_PRINTF("%s min free stack %d\n", pcTaskGetTaskName(NULL), uxTaskGetStackHighWaterMark(NULL)); //WLEDMM
|
||||||
@@ -526,26 +528,34 @@ void WLED::setup()
|
|||||||
DEBUG_PRINTF("%s min free stack %d\n", pcTaskGetTaskName(NULL), uxTaskGetStackHighWaterMark(NULL)); //WLEDMM
|
DEBUG_PRINTF("%s min free stack %d\n", pcTaskGetTaskName(NULL), uxTaskGetStackHighWaterMark(NULL)); //WLEDMM
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM)
|
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM)
|
||||||
psramInit();
|
//psramInit(); //WLEDMM?? softhack007: not sure if explicit init is really needed ... lets disable it here and see if that works
|
||||||
|
#if defined(CONFIG_IDF_TARGET_ESP32S3)
|
||||||
|
// S3: reserve GPIO 33-37 for "octal" PSRAM
|
||||||
|
managed_pin_type pins[] = { {33, true}, {34, true}, {35, true}, {36, true}, {37, true} };
|
||||||
|
pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM);
|
||||||
|
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
|
||||||
|
// S2: reserve GPIO 26-32 for PSRAM (may fail due to isPinOk() but that will also prevent other allocation)
|
||||||
|
managed_pin_type pins[] = { {26, true}, {27, true}, {28, true}, {29, true}, {30, true}, {31, true}, {32, true} };
|
||||||
|
pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM);
|
||||||
|
#elif defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||||
|
// C3: reserve GPIO 12-17 for PSRAM (may fail due to isPinOk() but that will also prevent other allocation)
|
||||||
|
managed_pin_type pins[] = { {12, true}, {13, true}, {14, true}, {15, true}, {16, true}, {17, true} };
|
||||||
|
pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM);
|
||||||
|
#else
|
||||||
|
// GPIO16/GPIO17 reserved for SPI RAM
|
||||||
|
managed_pin_type pins[] = { {16, true}, {17, true} };
|
||||||
|
pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM);
|
||||||
|
#endif
|
||||||
|
#if defined(BOARD_HAS_PSRAM) && (defined(WLED_USE_PSRAM) || defined(WLED_USE_PSRAM_JSON)) // WLEDMM
|
||||||
if (psramFound()) {
|
if (psramFound()) {
|
||||||
#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32S3)
|
DEBUG_PRINT(F("Total PSRAM: ")); DEBUG_PRINT(ESP.getPsramSize()/1024); DEBUG_PRINTLN("kB");
|
||||||
// GPIO16/GPIO17 reserved for SPI RAM
|
DEBUG_PRINT(F("Free PSRAM : ")); DEBUG_PRINT(ESP.getFreePsram()/1024); DEBUG_PRINTLN("kB");
|
||||||
managed_pin_type pins[2] = { {16, true}, {17, true} };
|
}
|
||||||
pinManager.allocateMultiplePins(pins, 2, PinOwner::SPI_RAM);
|
#else
|
||||||
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
|
DEBUG_PRINTLN(F("PSRAM not used."));
|
||||||
// S3: add GPIO 33-37 for "octal" PSRAM
|
#endif
|
||||||
managed_pin_type pins[5] = { {33, true}, {34, true}, {35, true}, {36, true}, {37, true} };
|
|
||||||
pinManager.allocateMultiplePins(pins, 5, PinOwner::SPI_RAM);
|
|
||||||
#endif
|
#endif
|
||||||
DEBUG_PRINT(F("Total PSRAM: ")); DEBUG_PRINT(ESP.getPsramSize()/1024); DEBUG_PRINTLN("kB");
|
|
||||||
DEBUG_PRINT(F("Free PSRAM : ")); DEBUG_PRINT(ESP.getFreePsram()/1024); DEBUG_PRINTLN("kB");
|
|
||||||
} else
|
|
||||||
DEBUG_PRINTLN(F("No PSRAM found."));
|
|
||||||
#endif
|
|
||||||
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM) && !defined(WLED_USE_PSRAM)
|
|
||||||
DEBUG_PRINTLN(F("PSRAM not used for LEDs."));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//DEBUG_PRINT(F("LEDs inited. heap usage ~"));
|
//DEBUG_PRINT(F("LEDs inited. heap usage ~"));
|
||||||
//DEBUG_PRINTLN(heapPreAlloc - ESP.getFreeHeap());
|
//DEBUG_PRINTLN(heapPreAlloc - ESP.getFreeHeap());
|
||||||
@@ -663,8 +673,6 @@ void WLED::setup()
|
|||||||
if (Serial && (Serial.available() > 0) && (Serial.peek() == 'I')) handleImprovPacket();
|
if (Serial && (Serial.available() > 0) && (Serial.peek() == 'I')) handleImprovPacket();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
strip.service(); // why?
|
|
||||||
|
|
||||||
#ifndef WLED_DISABLE_OTA
|
#ifndef WLED_DISABLE_OTA
|
||||||
if (aOtaEnabled) {
|
if (aOtaEnabled) {
|
||||||
ArduinoOTA.onStart([]() {
|
ArduinoOTA.onStart([]() {
|
||||||
@@ -785,7 +793,10 @@ void WLED::beginStrip()
|
|||||||
if (briS > 0) bri = briS;
|
if (briS > 0) bri = briS;
|
||||||
else if (bri == 0) bri = 128;
|
else if (bri == 0) bri = 128;
|
||||||
} else {
|
} else {
|
||||||
|
// fix for #3196
|
||||||
briLast = briS; bri = 0;
|
briLast = briS; bri = 0;
|
||||||
|
strip.fill(BLACK);
|
||||||
|
strip.show();
|
||||||
}
|
}
|
||||||
if (bootPreset > 0) {
|
if (bootPreset > 0) {
|
||||||
applyPreset(bootPreset, CALL_MODE_INIT);
|
applyPreset(bootPreset, CALL_MODE_INIT);
|
||||||
@@ -896,7 +907,7 @@ bool WLED::initEthernet()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
For LAN8720 the most correct way is to perform clean reset each time before init
|
For LAN8720 the most correct way is to perform clean reset each time before init
|
||||||
applying LOW to power or nRST pin for at least 100 us (please refer to datasheet, page 59)
|
applying LOW to power or nRST pin for at least 100 us (please refer to datasheet, page 59)
|
||||||
ESP_IDF > V4 implements it (150 us, lan87xx_reset_hw(esp_eth_phy_t *phy) function in
|
ESP_IDF > V4 implements it (150 us, lan87xx_reset_hw(esp_eth_phy_t *phy) function in
|
||||||
@@ -1057,8 +1068,6 @@ void WLED::initInterfaces()
|
|||||||
ArduinoOTA.begin();
|
ArduinoOTA.begin();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
strip.service();
|
|
||||||
|
|
||||||
#ifndef WLED_DISABLE_OTA // WLEDMM
|
#ifndef WLED_DISABLE_OTA // WLEDMM
|
||||||
if (aOtaEnabled) {
|
if (aOtaEnabled) {
|
||||||
USER_PRINT(F(" ArduinoOTA: "));
|
USER_PRINT(F(" ArduinoOTA: "));
|
||||||
|
|||||||
@@ -146,7 +146,7 @@
|
|||||||
// The following is a construct to enable code to compile without it.
|
// The following is a construct to enable code to compile without it.
|
||||||
// There is a code thet will still not use PSRAM though:
|
// There is a code thet will still not use PSRAM though:
|
||||||
// AsyncJsonResponse is a derived class that implements DynamicJsonDocument (AsyncJson-v6.h)
|
// AsyncJsonResponse is a derived class that implements DynamicJsonDocument (AsyncJson-v6.h)
|
||||||
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM) && (defined(WLED_USE_PSRAM) || defined(WLED_USE_PSRAM_JSON))
|
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM) && (defined(WLED_USE_PSRAM) || defined(WLED_USE_PSRAM_JSON)) // WLEDMM
|
||||||
struct PSRAM_Allocator {
|
struct PSRAM_Allocator {
|
||||||
void* allocate(size_t size) {
|
void* allocate(size_t size) {
|
||||||
if (psramFound()) return ps_malloc(size); // use PSRAM if it exists
|
if (psramFound()) return ps_malloc(size); // use PSRAM if it exists
|
||||||
@@ -180,6 +180,10 @@ using PSRAMDynamicJsonDocument = BasicJsonDocument<PSRAM_Allocator>;
|
|||||||
#define CLIENT_PASS ""
|
#define CLIENT_PASS ""
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef MDNS_NAME
|
||||||
|
#define MDNS_NAME DEFAULT_MDNS_NAME
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(WLED_AP_PASS) && !defined(WLED_AP_SSID)
|
#if defined(WLED_AP_PASS) && !defined(WLED_AP_SSID)
|
||||||
#error WLED_AP_PASS is defined but WLED_AP_SSID is still the default. \
|
#error WLED_AP_PASS is defined but WLED_AP_SSID is still the default. \
|
||||||
Please change WLED_AP_SSID to something unique.
|
Please change WLED_AP_SSID to something unique.
|
||||||
@@ -291,7 +295,7 @@ WLED_GLOBAL char ntpServerName[33] _INIT("0.wled.pool.ntp.org"); // NTP server
|
|||||||
// WiFi CONFIG (all these can be changed via web UI, no need to set them here)
|
// WiFi CONFIG (all these can be changed via web UI, no need to set them here)
|
||||||
WLED_GLOBAL char clientSSID[33] _INIT(CLIENT_SSID);
|
WLED_GLOBAL char clientSSID[33] _INIT(CLIENT_SSID);
|
||||||
WLED_GLOBAL char clientPass[65] _INIT(CLIENT_PASS);
|
WLED_GLOBAL char clientPass[65] _INIT(CLIENT_PASS);
|
||||||
WLED_GLOBAL char cmDNS[33] _INIT("x"); // mDNS address (placeholder, is replaced by wledXXXXXX.local)
|
WLED_GLOBAL char cmDNS[33] _INIT(MDNS_NAME); // mDNS address (*.local, replaced by wledXXXXXX if default is used)
|
||||||
WLED_GLOBAL char apSSID[33] _INIT(""); // AP off by default (unless setup)
|
WLED_GLOBAL char apSSID[33] _INIT(""); // AP off by default (unless setup)
|
||||||
WLED_GLOBAL byte apChannel _INIT(1); // 2.4GHz WiFi AP channel (1-13)
|
WLED_GLOBAL byte apChannel _INIT(1); // 2.4GHz WiFi AP channel (1-13)
|
||||||
WLED_GLOBAL byte apHide _INIT(0); // hidden AP SSID
|
WLED_GLOBAL byte apHide _INIT(0); // hidden AP SSID
|
||||||
@@ -433,6 +437,7 @@ WLED_GLOBAL char mqttUser[41] _INIT(""); // optional: username
|
|||||||
WLED_GLOBAL char mqttPass[65] _INIT(""); // optional: password for MQTT auth
|
WLED_GLOBAL char mqttPass[65] _INIT(""); // optional: password for MQTT auth
|
||||||
WLED_GLOBAL char mqttClientID[41] _INIT(""); // override the client ID
|
WLED_GLOBAL char mqttClientID[41] _INIT(""); // override the client ID
|
||||||
WLED_GLOBAL uint16_t mqttPort _INIT(1883);
|
WLED_GLOBAL uint16_t mqttPort _INIT(1883);
|
||||||
|
WLED_GLOBAL bool retainMqttMsg _INIT(false); // retain brightness and color
|
||||||
#define WLED_MQTT_CONNECTED (mqtt != nullptr && mqtt->connected())
|
#define WLED_MQTT_CONNECTED (mqtt != nullptr && mqtt->connected())
|
||||||
#else
|
#else
|
||||||
#define WLED_MQTT_CONNECTED false
|
#define WLED_MQTT_CONNECTED false
|
||||||
|
|||||||
@@ -415,7 +415,7 @@ void getSettingsJS(AsyncWebServerRequest* request, byte subPage, char* dest) //W
|
|||||||
char rf[4] = "RF"; rf[2] = 48+s; rf[3] = 0; //off refresh
|
char rf[4] = "RF"; rf[2] = 48+s; rf[3] = 0; //off refresh
|
||||||
char aw[4] = "AW"; aw[2] = 48+s; aw[3] = 0; //auto white mode
|
char aw[4] = "AW"; aw[2] = 48+s; aw[3] = 0; //auto white mode
|
||||||
char wo[4] = "WO"; wo[2] = 48+s; wo[3] = 0; //swap channels
|
char wo[4] = "WO"; wo[2] = 48+s; wo[3] = 0; //swap channels
|
||||||
// char sp[4] = "SP"; sp[2] = 48+s; sp[3] = 0; //bus clock speed WLEDMM to do bus
|
char sp[4] = "SP"; sp[2] = 48+s; sp[3] = 0; //bus clock speed
|
||||||
oappend(SET_F("addLEDs(1);"));
|
oappend(SET_F("addLEDs(1);"));
|
||||||
uint8_t pins[5];
|
uint8_t pins[5];
|
||||||
uint8_t nPins = bus->getPins(pins);
|
uint8_t nPins = bus->getPins(pins);
|
||||||
@@ -432,28 +432,27 @@ void getSettingsJS(AsyncWebServerRequest* request, byte subPage, char* dest) //W
|
|||||||
sappend('c',rf,bus->isOffRefreshRequired());
|
sappend('c',rf,bus->isOffRefreshRequired());
|
||||||
sappend('v',aw,bus->getAutoWhiteMode());
|
sappend('v',aw,bus->getAutoWhiteMode());
|
||||||
sappend('v',wo,bus->getColorOrder() >> 4);
|
sappend('v',wo,bus->getColorOrder() >> 4);
|
||||||
//WLEDMM to do bus freq
|
uint16_t speed = bus->getFrequency();
|
||||||
// uint16_t speed = bus->getFrequency();
|
if (bus->getType() > TYPE_ONOFF && bus->getType() < 48) {
|
||||||
// if (bus->getType() > TYPE_ONOFF && bus->getType() < 48) {
|
switch (speed) {
|
||||||
// switch (speed) {
|
case WLED_PWM_FREQ/3 : speed = 0; break;
|
||||||
// case WLED_PWM_FREQ/3 : speed = 0; break;
|
case WLED_PWM_FREQ/2 : speed = 1; break;
|
||||||
// case WLED_PWM_FREQ/2 : speed = 1; break;
|
default:
|
||||||
// default:
|
case WLED_PWM_FREQ : speed = 2; break;
|
||||||
// case WLED_PWM_FREQ : speed = 2; break;
|
case WLED_PWM_FREQ*2 : speed = 3; break;
|
||||||
// case WLED_PWM_FREQ*2 : speed = 3; break;
|
case WLED_PWM_FREQ*3 : speed = 4; break;
|
||||||
// case WLED_PWM_FREQ*3 : speed = 4; break;
|
}
|
||||||
// }
|
} else {
|
||||||
// } else {
|
switch (speed) {
|
||||||
// switch (speed) {
|
case 1000 : speed = 0; break;
|
||||||
// case 1000 : speed = 0; break;
|
case 2000 : speed = 1; break;
|
||||||
// case 2000 : speed = 1; break;
|
default:
|
||||||
// default:
|
case 5000 : speed = 2; break;
|
||||||
// case 5000 : speed = 2; break;
|
case 10000 : speed = 3; break;
|
||||||
// case 10000 : speed = 3; break;
|
case 20000 : speed = 4; break;
|
||||||
// case 20000 : speed = 4; break;
|
}
|
||||||
// }
|
}
|
||||||
// }
|
sappend('v',sp,speed);
|
||||||
// sappend('v',sp,speed);
|
|
||||||
}
|
}
|
||||||
sappend('v',SET_F("MA"),strip.ablMilliampsMax);
|
sappend('v',SET_F("MA"),strip.ablMilliampsMax);
|
||||||
sappend('v',SET_F("LA"),strip.milliampsPerLed);
|
sappend('v',SET_F("LA"),strip.milliampsPerLed);
|
||||||
@@ -593,6 +592,7 @@ void getSettingsJS(AsyncWebServerRequest* request, byte subPage, char* dest) //W
|
|||||||
sappends('s',"MD",mqttDeviceTopic);
|
sappends('s',"MD",mqttDeviceTopic);
|
||||||
sappends('s',SET_F("MG"),mqttGroupTopic);
|
sappends('s',SET_F("MG"),mqttGroupTopic);
|
||||||
sappend('c',SET_F("BM"),buttonPublishMqtt);
|
sappend('c',SET_F("BM"),buttonPublishMqtt);
|
||||||
|
sappend('c',SET_F("RT"),retainMqttMsg);
|
||||||
#else
|
#else
|
||||||
oappend(SET_F("toggle('MQTT');")); // hide MQTT settings
|
oappend(SET_F("toggle('MQTT');")); // hide MQTT settings
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user