diff --git a/tasmota/include/tasmota_types.h b/tasmota/include/tasmota_types.h index 9f0005da7..758da9625 100644 --- a/tasmota/include/tasmota_types.h +++ b/tasmota/include/tasmota_types.h @@ -186,8 +186,8 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu uint32_t no_voltage_common : 1; // bit 4 (v12.3.1.5) - SetOption150 - (Energy) Force no voltage/frequency common uint32_t matter_enabled : 1; // bit 5 (v12.3.1.5) - SetOption151 - (Matter) Enable Matter protocol over Wifi uint32_t bistable_single_pin : 1; // bit 6 (v12.5.0.1) - SetOption152 - (Power) Switch between two (0) or one (1) pin bistable relay control - uint32_t berry_autoexec : 1; // bit 7 (v12.5.0.3) - SetOption153 - (Berry) Disable autoexec.be on restart (1) - uint32_t spare08 : 1; // bit 8 + uint32_t berry_no_autoexec : 1; // bit 7 (v12.5.0.3) - SetOption153 - (Berry) Disable autoexec.be on restart (1) + uint32_t berry_light_scheme : 1; // bit 8 (v12.5.0.3) - SetOption154 - (Berry) Handle berry led using RMT0 as additional WS2812 scheme uint32_t spare09 : 1; // bit 9 uint32_t spare10 : 1; // bit 10 uint32_t spare11 : 1; // bit 11 diff --git a/tasmota/tasmota_xdrv_driver/xdrv_04_light.ino b/tasmota/tasmota_xdrv_driver/xdrv_04_light.ino index 21717af62..7323d4f26 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_04_light.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_04_light.ino @@ -50,7 +50,8 @@ * 10 yes no no Kwanzaa * 11 yes no no Rainbow * 12 yes no no Fire - * + * 13 yes no no Stairs + * 14 yes no no Clear (= Berry) \*********************************************************************************************/ /*********************************************************************************************\ @@ -1866,7 +1867,7 @@ void LightAnimate(void) break; #endif default: - XlgtCall(FUNC_SET_SCHEME); + XlgtCall(FUNC_SET_SCHEME); } #ifdef USE_DEVICE_GROUPS @@ -2858,7 +2859,7 @@ void CmndHsbColor(void) void CmndScheme(void) { - // Scheme 0..12 - Select one of schemes 0 to 12 + // Scheme 0..14 - Select one of schemes 0 to 14 // Scheme 2 - Select scheme 2 // Scheme 2,0 - Select scheme 2 with color wheel set to 0 (HSB Red) // Scheme + - Select next scheme diff --git a/tasmota/tasmota_xdrv_driver/xdrv_52_3_berry_leds.ino b/tasmota/tasmota_xdrv_driver/xdrv_52_3_berry_leds.ino index 4b5b542da..2be1436cc 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_52_3_berry_leds.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_52_3_berry_leds.ino @@ -135,7 +135,23 @@ extern "C" { break; case 2: // # 02 : show void -> void { - uint32_t pixels_size; // number of bytes to push + if (Settings->flag6.berry_light_scheme && + (1 == TasmotaGlobal.light_driver)) { // XLGT_01 +#ifdef USE_NETWORK_LIGHT_SCHEMES + bool scheme_berry = ((Light.max_scheme -1) == Settings->light_scheme); +#else + bool scheme_berry = (Light.max_scheme == Settings->light_scheme); +#endif + if (scheme_berry) { + if (!Light.power) { + break; + } + } else { + // Skip berry Show() but use WS2812 driver Show() instead + break; + } + } + uint32_t pixels_size; // number of bytes to push if (s_ws2812_grb) { s_ws2812_grb->Show(); pixels_size = s_ws2812_grb->PixelsSize(); } if (s_sk6812_grbw) { s_sk6812_grbw->Show(); pixels_size = s_ws2812_grb->PixelsSize(); } diff --git a/tasmota/tasmota_xdrv_driver/xdrv_52_9_berry.ino b/tasmota/tasmota_xdrv_driver/xdrv_52_9_berry.ino index 917f656b0..c46606e47 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_52_9_berry.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_52_9_berry.ino @@ -379,7 +379,7 @@ void BrLoad(const char * script_name) { if (berry.vm == nullptr || TasmotaGlobal.no_autoexec) { return; } // abort is berry is not running, or bootloop prevention kicked in if (!strcmp_P(script_name, "autoexec.be")) { - if (Settings->flag6.berry_autoexec) { // SetOption153 - (Berry) Disable autoexec.be on restart (1) + if (Settings->flag6.berry_no_autoexec) { // SetOption153 - (Berry) Disable autoexec.be on restart (1) return; } } diff --git a/tasmota/tasmota_xlgt_light/xlgt_01_ws2812.ino b/tasmota/tasmota_xlgt_light/xlgt_01_ws2812.ino index 3312a8322..d30a4fba5 100644 --- a/tasmota/tasmota_xlgt_light/xlgt_01_ws2812.ino +++ b/tasmota/tasmota_xlgt_light/xlgt_01_ws2812.ino @@ -33,15 +33,13 @@ * 6 (11) yes no no Rainbow * 7 (12) yes no no Fire * 8 (13) yes no no Stairs + * 9 (14) yes no no Clear (= Berry) + * 10 (15) yes no no Optional DDP \*********************************************************************************************/ #define XLGT_01 1 -#ifdef USE_NETWORK_LIGHT_SCHEMES const uint8_t WS2812_SCHEMES = 10; // Number of WS2812 schemes -#else -const uint8_t WS2812_SCHEMES = 9; // Number of WS2812 schemes -#endif const char kWs2812Commands[] PROGMEM = "|" // No prefix D_CMND_LED "|" D_CMND_PIXELS "|" D_CMND_ROTATION "|" D_CMND_WIDTH "|" D_CMND_STEPPIXELS ; @@ -172,11 +170,7 @@ WsColor kRainbow[7] = { 255,0,0, 255,128,0, 255,255,0, 0,255,0, 0,0,255, 128,0,2 WsColor kFire[3] = { 255,0,0, 255,102,0, 255,192,0 }; WsColor kStairs[2] = { 0,0,0, 255,255,255 }; -#ifdef USE_NETWORK_LIGHT_SCHEMES -ColorScheme kSchemes[WS2812_SCHEMES -2] = { // Skip clock scheme and DDP scheme -#else -ColorScheme kSchemes[WS2812_SCHEMES -1] = { // Skip clock scheme -#endif +ColorScheme kSchemes[WS2812_SCHEMES -2] = { // Skip clock and clear scheme kIncandescent, 2, kRgb, 3, kChristmas, 2, @@ -203,6 +197,7 @@ struct WS2812 { uint8_t show_next = 1; uint8_t scheme_offset = 0; bool suspend_update = false; + bool scheme9; } Ws2812; /********************************************************************************************/ @@ -554,7 +549,7 @@ void Ws2812DDP(void) Ws2812StripShow(); } } -#endif +#endif // USE_NETWORK_LIGHT_SCHEMES void Ws2812Clear(void) { @@ -645,8 +640,11 @@ void Ws2812ShowScheme(void) { uint32_t scheme = Settings->light_scheme - Ws2812.scheme_offset; + if (scheme != 9) { + Ws2812.scheme9 = 0; + } #ifdef USE_NETWORK_LIGHT_SCHEMES - if ((scheme != 9) && (ddp_udp_up)) { + if ((scheme != 10) && (ddp_udp_up)) { ddp_udp.stop(); ddp_udp_up = 0; AddLog(LOG_LEVEL_DEBUG_MORE, "DDP: UDP Stopped: WS2812 Scheme not DDP"); @@ -659,11 +657,17 @@ void Ws2812ShowScheme(void) Ws2812.show_next = 0; } break; + case 9: // Clear + if (!Ws2812.scheme9) { + Ws2812Clear(); + Ws2812.scheme9 = 1; + } + break; #ifdef USE_NETWORK_LIGHT_SCHEMES - case 9: + case 10: Ws2812DDP(); break; -#endif +#endif // USE_NETWORK_LIGHT_SCHEMES default: if(Settings->light_step_pixels > 0){ Ws2812Steps(scheme -1); @@ -713,6 +717,10 @@ void Ws2812ModuleSelected(void) Ws2812.scheme_offset = Light.max_scheme +1; Light.max_scheme += WS2812_SCHEMES; +#ifdef USE_NETWORK_LIGHT_SCHEMES + Light.max_scheme++; +#endif + #if (USE_WS2812_CTYPE > NEO_3LED) TasmotaGlobal.light_type = LT_RGBW; #else