diff --git a/wled00/bus_wrapper.h b/wled00/bus_wrapper.h index 325a1f53..3473efe5 100644 --- a/wled00/bus_wrapper.h +++ b/wled00/bus_wrapper.h @@ -7,6 +7,9 @@ // C3: I2S0 and I2S1 methods not supported // S2: I2S1 methods not supported // S3: I2S0 and I2S1 methods not supported yet +// https://github.com/Makuna/NeoPixelBus/blob/b32f719e95ef3c35c46da5c99538017ef925c026/src/internal/Esp32_i2s.h#L4 +// https://github.com/Makuna/NeoPixelBus/blob/b32f719e95ef3c35c46da5c99538017ef925c026/src/internal/NeoEsp32RmtMethod.h#L857 + #if !defined(WLED_NO_I2S0_PIXELBUS) && (defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C3)) #define WLED_NO_I2S0_PIXELBUS #endif @@ -46,54 +49,57 @@ #define I_8266_DM_TM1_4 15 #define I_8266_BB_TM1_4 16 //TM1829 (RGB) -#define I_8266_U0_TM2_3 39 -#define I_8266_U1_TM2_3 40 -#define I_8266_DM_TM2_3 41 -#define I_8266_BB_TM2_3 42 +#define I_8266_U0_TM2_3 17 +#define I_8266_U1_TM2_3 18 +#define I_8266_DM_TM2_3 19 +#define I_8266_BB_TM2_3 20 /*** ESP32 Neopixel methods ***/ //RGB -#define I_32_RN_NEO_3 17 -#define I_32_I0_NEO_3 18 -#define I_32_I1_NEO_3 19 +#define I_32_RN_NEO_3 21 +#define I_32_I0_NEO_3 22 +#define I_32_I1_NEO_3 23 +#define I_32_BB_NEO_3 24 // bitbangging on ESP32 not recommended //RGBW -#define I_32_RN_NEO_4 20 -#define I_32_I0_NEO_4 21 -#define I_32_I1_NEO_4 22 +#define I_32_RN_NEO_4 25 +#define I_32_I0_NEO_4 26 +#define I_32_I1_NEO_4 27 +#define I_32_BB_NEO_4 28 // bitbangging on ESP32 not recommended //400Kbps -#define I_32_RN_400_3 23 -#define I_32_I0_400_3 24 -#define I_32_I1_400_3 25 +#define I_32_RN_400_3 29 +#define I_32_I0_400_3 30 +#define I_32_I1_400_3 31 +#define I_32_BB_400_3 32 // bitbangging on ESP32 not recommended //TM1814 (RGBW) -#define I_32_RN_TM1_4 26 -#define I_32_I0_TM1_4 27 -#define I_32_I1_TM1_4 28 +#define I_32_RN_TM1_4 33 +#define I_32_I0_TM1_4 34 +#define I_32_I1_TM1_4 35 //Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S) //TM1829 (RGB) -#define I_32_RN_TM2_3 43 -#define I_32_I0_TM2_3 44 -#define I_32_I1_TM2_3 45 +#define I_32_RN_TM2_3 36 +#define I_32_I0_TM2_3 37 +#define I_32_I1_TM2_3 38 //Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S) //APA102 -#define I_HS_DOT_3 29 //hardware SPI -#define I_SS_DOT_3 30 //soft SPI +#define I_HS_DOT_3 39 //hardware SPI +#define I_SS_DOT_3 40 //soft SPI //LPD8806 -#define I_HS_LPD_3 31 -#define I_SS_LPD_3 32 +#define I_HS_LPD_3 41 +#define I_SS_LPD_3 42 //WS2801 -#define I_HS_WS1_3 33 -#define I_SS_WS1_3 34 +#define I_HS_WS1_3 43 +#define I_SS_WS1_3 44 //P9813 -#define I_HS_P98_3 35 -#define I_SS_P98_3 36 +#define I_HS_P98_3 45 +#define I_SS_P98_3 46 //LPD6803 -#define I_HS_LPO_3 37 -#define I_SS_LPO_3 38 +#define I_HS_LPO_3 47 +#define I_SS_LPO_3 48 /*** ESP8266 Neopixel methods ***/ @@ -135,6 +141,7 @@ #ifndef WLED_NO_I2S1_PIXELBUS #define B_32_I1_NEO_3 NeoPixelBrightnessBus #endif +//#define B_32_BB_NEO_3 NeoPixelBrightnessBus //RGBW #define B_32_RN_NEO_4 NeoPixelBrightnessBus #ifndef WLED_NO_I2S0_PIXELBUS @@ -143,6 +150,7 @@ #ifndef WLED_NO_I2S1_PIXELBUS #define B_32_I1_NEO_4 NeoPixelBrightnessBus #endif +//#define B_32_BB_NEO_4 NeoPixelBrightnessBus //400Kbps #define B_32_RN_400_3 NeoPixelBrightnessBus #ifndef WLED_NO_I2S0_PIXELBUS @@ -151,6 +159,7 @@ #ifndef WLED_NO_I2S1_PIXELBUS #define B_32_I1_400_3 NeoPixelBrightnessBus #endif +//#define B_32_BB_400_3 NeoPixelBrightnessBus //TM1814 (RGBW) #define B_32_RN_TM1_4 NeoPixelBrightnessBus #ifndef WLED_NO_I2S0_PIXELBUS @@ -255,6 +264,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_NEO_3: (static_cast(busPtr))->Begin(); break; #endif +// case I_32_BB_NEO_3: (static_cast(busPtr))->Begin(); break; case I_32_RN_NEO_4: (static_cast(busPtr))->Begin(); break; #ifndef WLED_NO_I2S0_PIXELBUS case I_32_I0_NEO_4: (static_cast(busPtr))->Begin(); break; @@ -262,6 +272,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_NEO_4: (static_cast(busPtr))->Begin(); break; #endif +// case I_32_BB_NEO_4: (static_cast(busPtr))->Begin(); break; case I_32_RN_400_3: (static_cast(busPtr))->Begin(); break; #ifndef WLED_NO_I2S0_PIXELBUS case I_32_I0_400_3: (static_cast(busPtr))->Begin(); break; @@ -269,6 +280,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_400_3: (static_cast(busPtr))->Begin(); break; #endif +// case I_32_BB_400_3: (static_cast(busPtr))->Begin(); break; case I_32_RN_TM1_4: beginTM1814(busPtr); break; case I_32_RN_TM2_3: (static_cast(busPtr))->Begin(); break; #ifndef WLED_NO_I2S0_PIXELBUS @@ -327,6 +339,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_NEO_3: busPtr = new B_32_I1_NEO_3(len, pins[0]); break; #endif +// case I_32_BB_NEO_3: busPtr = new B_32_BB_NEO_3(len, pins[0], (NeoBusChannel)channel); break; case I_32_RN_NEO_4: busPtr = new B_32_RN_NEO_4(len, pins[0], (NeoBusChannel)channel); break; #ifndef WLED_NO_I2S0_PIXELBUS case I_32_I0_NEO_4: busPtr = new B_32_I0_NEO_4(len, pins[0]); break; @@ -334,6 +347,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_NEO_4: busPtr = new B_32_I1_NEO_4(len, pins[0]); break; #endif +// case I_32_BB_NEO_4: busPtr = new B_32_BB_NEO_4(len, pins[0], (NeoBusChannel)channel); break; case I_32_RN_400_3: busPtr = new B_32_RN_400_3(len, pins[0], (NeoBusChannel)channel); break; #ifndef WLED_NO_I2S0_PIXELBUS case I_32_I0_400_3: busPtr = new B_32_I0_400_3(len, pins[0]); break; @@ -341,6 +355,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_400_3: busPtr = new B_32_I1_400_3(len, pins[0]); break; #endif +// case I_32_BB_400_3: busPtr = new B_32_BB_400_3(len, pins[0], (NeoBusChannel)channel); break; case I_32_RN_TM1_4: busPtr = new B_32_RN_TM1_4(len, pins[0], (NeoBusChannel)channel); break; case I_32_RN_TM2_3: busPtr = new B_32_RN_TM2_3(len, pins[0], (NeoBusChannel)channel); break; #ifndef WLED_NO_I2S0_PIXELBUS @@ -400,6 +415,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_NEO_3: (static_cast(busPtr))->Show(); break; #endif +// case I_32_BB_NEO_3: (static_cast(busPtr))->Show(); break; case I_32_RN_NEO_4: (static_cast(busPtr))->Show(); break; #ifndef WLED_NO_I2S0_PIXELBUS case I_32_I0_NEO_4: (static_cast(busPtr))->Show(); break; @@ -407,6 +423,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_NEO_4: (static_cast(busPtr))->Show(); break; #endif +// case I_32_BB_NEO_4: (static_cast(busPtr))->Show(); break; case I_32_RN_400_3: (static_cast(busPtr))->Show(); break; #ifndef WLED_NO_I2S0_PIXELBUS case I_32_I0_400_3: (static_cast(busPtr))->Show(); break; @@ -414,6 +431,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_400_3: (static_cast(busPtr))->Show(); break; #endif +// case I_32_BB_400_3: (static_cast(busPtr))->Show(); break; case I_32_RN_TM1_4: (static_cast(busPtr))->Show(); break; case I_32_RN_TM2_3: (static_cast(busPtr))->Show(); break; #ifndef WLED_NO_I2S0_PIXELBUS @@ -470,6 +488,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_NEO_3: return (static_cast(busPtr))->CanShow(); break; #endif +// case I_32_BB_NEO_3: return (static_cast(busPtr))->CanShow(); break; case I_32_RN_NEO_4: return (static_cast(busPtr))->CanShow(); break; #ifndef WLED_NO_I2S0_PIXELBUS case I_32_I0_NEO_4: return (static_cast(busPtr))->CanShow(); break; @@ -477,6 +496,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_NEO_4: return (static_cast(busPtr))->CanShow(); break; #endif +// case I_32_BB_NEO_4: return (static_cast(busPtr))->CanShow(); break; case I_32_RN_400_3: return (static_cast(busPtr))->CanShow(); break; #ifndef WLED_NO_I2S0_PIXELBUS case I_32_I0_400_3: return (static_cast(busPtr))->CanShow(); break; @@ -484,6 +504,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_400_3: return (static_cast(busPtr))->CanShow(); break; #endif +// case I_32_BB_400_3: return (static_cast(busPtr))->CanShow(); break; case I_32_RN_TM1_4: return (static_cast(busPtr))->CanShow(); break; case I_32_RN_TM2_3: return (static_cast(busPtr))->CanShow(); break; #ifndef WLED_NO_I2S0_PIXELBUS @@ -564,6 +585,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_NEO_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; #endif +// case I_32_BB_NEO_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_32_RN_NEO_4: (static_cast(busPtr))->SetPixelColor(pix, col); break; #ifndef WLED_NO_I2S0_PIXELBUS case I_32_I0_NEO_4: (static_cast(busPtr))->SetPixelColor(pix, col); break; @@ -571,6 +593,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_NEO_4: (static_cast(busPtr))->SetPixelColor(pix, col); break; #endif +// case I_32_BB_NEO_4: (static_cast(busPtr))->SetPixelColor(pix, col); break; case I_32_RN_400_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; #ifndef WLED_NO_I2S0_PIXELBUS case I_32_I0_400_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; @@ -578,6 +601,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_400_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; #endif +// case I_32_BB_400_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; case I_32_RN_TM1_4: (static_cast(busPtr))->SetPixelColor(pix, col); break; case I_32_RN_TM2_3: (static_cast(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break; #ifndef WLED_NO_I2S0_PIXELBUS @@ -634,6 +658,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_NEO_3: (static_cast(busPtr))->SetBrightness(b); break; #endif +// case I_32_BB_NEO_3: (static_cast(busPtr))->SetBrightness(b); break; case I_32_RN_NEO_4: (static_cast(busPtr))->SetBrightness(b); break; #ifndef WLED_NO_I2S0_PIXELBUS case I_32_I0_NEO_4: (static_cast(busPtr))->SetBrightness(b); break; @@ -641,6 +666,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_NEO_4: (static_cast(busPtr))->SetBrightness(b); break; #endif +// case I_32_BB_NEO_4: (static_cast(busPtr))->SetBrightness(b); break; case I_32_RN_400_3: (static_cast(busPtr))->SetBrightness(b); break; #ifndef WLED_NO_I2S0_PIXELBUS case I_32_I0_400_3: (static_cast(busPtr))->SetBrightness(b); break; @@ -648,6 +674,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_400_3: (static_cast(busPtr))->SetBrightness(b); break; #endif +// case I_32_BB_400_3: (static_cast(busPtr))->SetBrightness(b); break; case I_32_RN_TM1_4: (static_cast(busPtr))->SetBrightness(b); break; case I_32_RN_TM2_3: (static_cast(busPtr))->SetBrightness(b); break; #ifndef WLED_NO_I2S0_PIXELBUS @@ -705,6 +732,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_NEO_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; #endif +// case I_32_BB_NEO_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; case I_32_RN_NEO_4: col = (static_cast(busPtr))->GetPixelColor(pix); break; #ifndef WLED_NO_I2S0_PIXELBUS case I_32_I0_NEO_4: col = (static_cast(busPtr))->GetPixelColor(pix); break; @@ -712,6 +740,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_NEO_4: col = (static_cast(busPtr))->GetPixelColor(pix); break; #endif +// case I_32_BB_NEO_4: col = (static_cast(busPtr))->GetPixelColor(pix); break; case I_32_RN_400_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; #ifndef WLED_NO_I2S0_PIXELBUS case I_32_I0_400_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; @@ -719,6 +748,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_400_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; #endif +// case I_32_BB_400_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; case I_32_RN_TM1_4: col = (static_cast(busPtr))->GetPixelColor(pix); break; case I_32_RN_TM2_3: col = (static_cast(busPtr))->GetPixelColor(pix); break; #ifndef WLED_NO_I2S0_PIXELBUS @@ -795,6 +825,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_NEO_3: delete (static_cast(busPtr)); break; #endif +// case I_32_BB_NEO_3: delete (static_cast(busPtr)); break; case I_32_RN_NEO_4: delete (static_cast(busPtr)); break; #ifndef WLED_NO_I2S0_PIXELBUS case I_32_I0_NEO_4: delete (static_cast(busPtr)); break; @@ -802,6 +833,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_NEO_4: delete (static_cast(busPtr)); break; #endif +// case I_32_BB_NEO_4: delete (static_cast(busPtr)); break; case I_32_RN_400_3: delete (static_cast(busPtr)); break; #ifndef WLED_NO_I2S0_PIXELBUS case I_32_I0_400_3: delete (static_cast(busPtr)); break; @@ -809,6 +841,7 @@ class PolyBus { #ifndef WLED_NO_I2S1_PIXELBUS case I_32_I1_400_3: delete (static_cast(busPtr)); break; #endif +// case I_32_BB_400_3: delete (static_cast(busPtr)); break; case I_32_RN_TM1_4: delete (static_cast(busPtr)); break; case I_32_RN_TM2_3: delete (static_cast(busPtr)); break; #ifndef WLED_NO_I2S0_PIXELBUS @@ -875,12 +908,16 @@ class PolyBus { } #else //ESP32 uint8_t offset = 0; //0 = RMT (num 0-7) 8 = I2S0 9 = I2S1 - #ifndef CONFIG_IDF_TARGET_ESP32S2 - if (num > 9) return I_NONE; - if (num > 7) offset = num -7; - #else //ESP32 S2 only has 4 RMT channels + #if defined(CONFIG_IDF_TARGET_ESP32C3) //ESP32 C3 only has 2 RMT channels, I2S not supported, BB not allowed + if (num > 1) return I_NONE; + #elif defined(CONFIG_IDF_TARGET_ESP32S2) //ESP32 S2 only has 4 RMT channels, 1 I2S supported, BB not allowed if (num > 5) return I_NONE; - if (num > 4) offset = num -4; + if (num > 4) offset = 1; + #elif defined(CONFIG_IDF_TARGET_ESP32S3) //ESP32 S3 only has 4 RMT channels, I2S not supported, BB not allowed + if (num > 3) return I_NONE; + #else + if (num > 9) return I_NONE; // ESP32, 8 RMT channels, 2 I2S channels, BB not allowed + if (num > 7) offset = num -7; #endif switch (busType) { case TYPE_WS2812_RGB: diff --git a/wled00/const.h b/wled00/const.h index ae8d5d5e..1ad4bd29 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -25,14 +25,14 @@ #ifdef ESP8266 #define WLED_MAX_BUSSES 3 #else - #if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3) + #if defined(CONFIG_IDF_TARGET_ESP32C3) + #define WLED_MAX_BUSSES 2 + #elif defined(CONFIG_IDF_TARGET_ESP32S2) #define WLED_MAX_BUSSES 5 + #elif defined(CONFIG_IDF_TARGET_ESP32S3) + #define WLED_MAX_BUSSES 4 #else - #if defined(CONFIG_IDF_TARGET_ESP32S3) - #define WLED_MAX_BUSSES 8 - #else - #define WLED_MAX_BUSSES 10 - #endif + #define WLED_MAX_BUSSES 10 #endif #endif #endif @@ -286,7 +286,7 @@ #ifdef ESP8266 #define MAX_LED_MEMORY 4000 #else - #ifdef ARDUINO_ARCH_ESP32S2 + #if defined(ARDUINO_ARCH_ESP32S2) || defined(ARDUINO_ARCH_ESP32C3) #define MAX_LED_MEMORY 32000 #else #define MAX_LED_MEMORY 64000 diff --git a/wled00/util.cpp b/wled00/util.cpp index f636a306..b02f0e03 100644 --- a/wled00/util.cpp +++ b/wled00/util.cpp @@ -158,9 +158,9 @@ bool oappend(const char* txt) void prepareHostname(char* hostname) { + sprintf_P(hostname, "wled-%*s", 6, escapedMac.c_str() + 6); const char *pC = serverDescription; - uint8_t pos = 5; - + uint8_t pos = 5; // keep "wled-" while (*pC && pos < 24) { // while !null and not over length if (isalnum(*pC)) { // if the current char is alpha-numeric append it to the hostname hostname[pos] = *pC; @@ -169,18 +169,14 @@ void prepareHostname(char* hostname) hostname[pos] = '-'; pos++; } - // else do nothing - no leading hyphens and do not include hyphens for all other characters. - pC++; - } - // if the hostname is left blank, use the mac address/default mdns name - if (pos < 6) { - sprintf(hostname + 5, "%*s", 6, escapedMac.c_str() + 6); - } else { //last character must not be hyphen - while (pos > 0 && hostname[pos -1] == '-') { - hostname[pos -1] = 0; - pos--; - } - } + // else do nothing - no leading hyphens and do not include hyphens for all other characters. + pC++; + } + //last character must not be hyphen + while (pos > 0 && hostname[pos -1] == '-') { + pos--; + } + hostname[pos] = '\0'; // terminate string } diff --git a/wled00/wled.cpp b/wled00/wled.cpp index 47c0ed02..b0b95165 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -634,7 +634,7 @@ void WLED::initConnection() DEBUG_PRINTLN("..."); // convert the "serverDescription" into a valid DNS hostname (alphanumeric) - char hostname[25] = "wled-"; + char hostname[25]; prepareHostname(hostname); #ifdef ESP8266 diff --git a/wled00/wled.h b/wled00/wled.h index 66635448..8b62413a 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2210081 +#define VERSION 2210101 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG