From a1ac9f2701444ad883c146b5c41884fb4fb93ffc Mon Sep 17 00:00:00 2001 From: BPoH_Voodoo Date: Sun, 3 Feb 2019 17:13:17 +0100 Subject: [PATCH] Start to get rid of Legacy Animations Start to get rid of Legacy Animations: tv mode is now selectable on its own (ENABLE_TV) off mode is now no legacy animation e131 mode is now no legacy animation --- Arduino/McLighting/McLighting.ino | 62 ++++++++++++++++++++------- Arduino/McLighting/definitions.h | 26 ++++++----- Arduino/McLighting/request_handlers.h | 21 ++++++--- clients/web(RGBW)/build/index.htm | 7 ++- clients/web(RGBW)/src/js/script.js | 4 +- 5 files changed, 82 insertions(+), 38 deletions(-) diff --git a/Arduino/McLighting/McLighting.ino b/Arduino/McLighting/McLighting.ino index e3d8efa..e3c2534 100644 --- a/Arduino/McLighting/McLighting.ino +++ b/Arduino/McLighting/McLighting.ino @@ -253,7 +253,7 @@ void saveConfigCallback () { // *************************************************************************** // Include: Color modes // *************************************************************************** -#ifdef ENABLE_LEGACY_ANIMATIONS +#ifdef ENABLE_TV #include "colormodes.h" #endif @@ -403,7 +403,8 @@ DBG_OUTPUT_PORT.println("Starting...."); //save the custom parameters to FS #if defined(ENABLE_STATE_SAVE_SPIFFS) and (defined(ENABLE_MQTT) or defined(ENABLE_AMQTT)) (writeConfigFS(shouldSaveConfig)) ? DBG_OUTPUT_PORT.println("WiFiManager config FS Save success!"): DBG_OUTPUT_PORT.println("WiFiManager config FS Save failure!"); - #else if defined(ENABLE_STATE_SAVE_EEPROM) + #endif + #if defined(ENABLE_STATE_SAVE_EEPROM) if (shouldSaveConfig) { DBG_OUTPUT_PORT.println("Saving WiFiManager config"); @@ -601,6 +602,16 @@ DBG_OUTPUT_PORT.println("Starting...."); #else json["legacy_animations"] = "OFF"; #endif + #ifdef ENABLE_TV + json["tv_animation"] = "ON"; + #else + json["tv_animation"] = "OFF"; + #endif + #ifdef ENABLE_E131 + json["e131_animations"] = "ON"; + #else + json["e131_animations"] = "OFF"; + #endif #ifdef HTTP_OTA json["esp8266_http_updateserver"] = "ON"; #endif @@ -738,7 +749,7 @@ DBG_OUTPUT_PORT.println("Starting...."); }); server.on("/off", []() { - #ifdef ENABLE_LEGACY_ANIMATIONS + #ifdef ENABLE_TV exit_func = true; #endif mode = OFF; @@ -759,10 +770,10 @@ DBG_OUTPUT_PORT.println("Starting...."); }); server.on("/auto", []() { - #ifdef ENABLE_LEGACY_ANIMATIONS + #ifdef ENABLE_TV exit_func = true; #endif - mode = OFF; + mode = AUTO; getArgs(); getStatusJSON(); #ifdef ENABLE_MQTT @@ -780,7 +791,7 @@ DBG_OUTPUT_PORT.println("Starting...."); }); server.on("/all", []() { - #ifdef ENABLE_LEGACY_ANIMATIONS + #ifdef ENABLE_TV exit_func = true; #endif ws2812fx_mode = FX_MODE_STATIC; @@ -804,7 +815,9 @@ DBG_OUTPUT_PORT.println("Starting...."); #ifdef ENABLE_LEGACY_ANIMATIONS server.on("/wipe", []() { + #ifdef ENABLE_TV exit_func = true; + #endif mode = WIPE; getArgs(); getStatusJSON(); @@ -823,7 +836,9 @@ DBG_OUTPUT_PORT.println("Starting...."); }); server.on("/rainbow", []() { + #ifdef ENABLE_TV exit_func = true; + #endif mode = RAINBOW; getArgs(); getStatusJSON(); @@ -842,7 +857,9 @@ DBG_OUTPUT_PORT.println("Starting...."); }); server.on("/rainbowCycle", []() { + #ifdef ENABLE_TV exit_func = true; + #endif mode = RAINBOWCYCLE; getArgs(); getStatusJSON(); @@ -861,7 +878,9 @@ DBG_OUTPUT_PORT.println("Starting...."); }); server.on("/theaterchase", []() { + #ifdef ENABLE_TV exit_func = true; + #endif mode = THEATERCHASE; getArgs(); getStatusJSON(); @@ -880,7 +899,9 @@ DBG_OUTPUT_PORT.println("Starting...."); }); server.on("/twinkleRandom", []() { + #ifdef ENABLE_TV exit_func = true; + #endif mode = TWINKLERANDOM; getArgs(); getStatusJSON(); @@ -899,7 +920,9 @@ DBG_OUTPUT_PORT.println("Starting...."); }); server.on("/theaterchaseRainbow", []() { + #ifdef ENABLE_TV exit_func = true; + #endif mode = THEATERCHASERAINBOW; getArgs(); getStatusJSON(); @@ -916,17 +939,20 @@ DBG_OUTPUT_PORT.println("Starting...."); if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); #endif }); - - #ifdef ENABLE_E131 + #endif + + #ifdef ENABLE_E131 server.on("/e131", []() { + #ifdef ENABLE_TV exit_func = true; + #endif mode = E131; getStatusJSON(); #ifdef ENABLE_MQTT mqtt_client.publish(mqtt_outtopic, String("OK =e131").c_str()); #endif #ifdef ENABLE_AMQTT - amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =131").c_str()); + amqttClient.publish(mqtt_outtopic.c_str(), qospub, false, String("OK =e131").c_str()); #endif #ifdef ENABLE_HOMEASSISTANT stateOn = true; @@ -935,8 +961,9 @@ DBG_OUTPUT_PORT.println("Starting...."); if(!spiffs_save_state.active()) spiffs_save_state.once(3, tickerSpiffsSaveState); #endif }); - #endif + #endif + #ifdef ENABLE_TV server.on("/tv", []() { exit_func = true; mode = TV; @@ -1000,9 +1027,11 @@ DBG_OUTPUT_PORT.println("Starting...."); else Serial.println(F("*** e131.begin failed ***")); #endif + #ifdef ENABLE_STATE_SAVE_SPIFFS (readStateFS()) ? DBG_OUTPUT_PORT.println(" Success!") : DBG_OUTPUT_PORT.println(" Failure!"); #endif + #ifdef ENABLE_STATE_SAVE_EEPROM // Load state string from EEPROM String saved_state_string = readEEPROM(256, 36); @@ -1128,22 +1157,25 @@ void loop() { strip.trigger(); mode = HOLD; } - #ifdef ENABLE_E131 + #endif + + #ifdef ENABLE_E131 if (mode == E131) { handleE131(); } - #endif #endif + if (mode == HOLD || mode == CUSTOM) { if(!strip.isRunning()) strip.start(); - #ifdef ENABLE_LEGACY_ANIMATIONS + #ifdef ENABLE_TV if (exit_func) { exit_func = false; } #endif if (prevmode == SET_MODE) prevmode = HOLD; } - #ifdef ENABLE_LEGACY_ANIMATIONS + + #ifdef ENABLE_TV if (mode == TV) { if(!strip.isRunning()) strip.start(); tv(); @@ -1151,7 +1183,7 @@ void loop() { #endif // Only for modes with WS2812FX functionality - #ifdef ENABLE_LEGACY_ANIMATIONS + #ifdef ENABLE_TV if (mode != TV && mode != CUSTOM) { #else if (mode != CUSTOM) { diff --git a/Arduino/McLighting/definitions.h b/Arduino/McLighting/definitions.h index ad0ce10..768243d 100644 --- a/Arduino/McLighting/definitions.h +++ b/Arduino/McLighting/definitions.h @@ -20,8 +20,9 @@ const char HOSTNAME[] = "McLightingRGBW"; // Friedly hostname #define ENABLE_BUTTON // If defined, enable button handling code, see: https://github.com/toblum/McLighting/wiki/Button-control //#define ENABLE_BUTTON_GY33 // If defined, enable button handling code for GY-33 color sensor to scan color //#define MQTT_HOME_ASSISTANT_SUPPORT // If defined, use AMQTT and select Tools -> IwIP Variant -> Higher Bandwidth -#define ENABLE_LEGACY_ANIMATIONS // Dont disbale this for now +#define ENABLE_LEGACY_ANIMATIONS // Enable Legacy Animations #define ENABLE_E131 // E1.31 implementation You have to uncomment #define USE_WS2812FX_DMA +#define ENABLE_TV // Enable TV Animation #ifdef ENABLE_E131 #define START_UNIVERSE 1 // First DMX Universe to listen for @@ -56,10 +57,10 @@ const char HOSTNAME[] = "McLightingRGBW"; // Friedly hostname // parameters for automatically cycling favorite patterns uint32_t autoParams[][4] = { // color, speed, mode, duration (seconds) - {0xff000000, 120, 1, 5.0}, // blink red for 5 seconds - {0x00ff0000, 120, 3, 10.0}, // wipe green for 10 seconds - {0x0000ff00, 196, 14, 5.0}, // dual scan blue for 5 seconds - {0x0000ff00, 196, 46, 15.0} // fireworks for 15 seconds + {0xff000000, 120, 1, 5}, // blink red for 5 seconds + {0x00ff0000, 120, 3, 10}, // wipe green for 10 seconds + {0x0000ff00, 196, 14, 5}, // dual scan blue for 5 seconds + {0x0000ff00, 196, 46, 15} // fireworks for 15 seconds }; #if defined(ENABLE_MQTT) or defined(ENABLE_AMQTT) @@ -114,18 +115,15 @@ uint32_t autoParams[][4] = { // color, speed, mode, duration (seconds) // List of all color modes #ifdef ENABLE_LEGACY_ANIMATIONS - #ifdef ENABLE_E131 - enum MODE { SET_MODE, HOLD, AUTO, OFF, TV, CUSTOM, SETCOLOR, SETSPEED, BRIGHTNESS, WIPE, RAINBOW, RAINBOWCYCLE, THEATERCHASE, TWINKLERANDOM, THEATERCHASERAINBOW, E131}; - #else - enum MODE { SET_MODE, HOLD, AUTO, OFF, TV, CUSTOM, SETCOLOR, SETSPEED, BRIGHTNESS, WIPE, RAINBOW, RAINBOWCYCLE, THEATERCHASE, TWINKLERANDOM, THEATERCHASERAINBOW}; - #endif + enum MODE {OFF, AUTO, TV, E131, SET_MODE, HOLD, CUSTOM, SETCOLOR, SETSPEED, BRIGHTNESS, WIPE, RAINBOW, RAINBOWCYCLE, THEATERCHASE, TWINKLERANDOM, THEATERCHASERAINBOW}; MODE mode = RAINBOW; // Standard mode that is active when software starts - bool exit_func = false; // Global helper variable to get out of the color modes when mode changes #else - enum MODE { SET_MODE, HOLD, AUTO, OFF, TV, CUSTOM, SETCOLOR, SETSPEED, BRIGHTNESS}; + enum MODE {OFF, AUTO, TV, E131, SET_MODE, HOLD, CUSTOM, SETCOLOR, SETSPEED, BRIGHTNESS}; MODE mode = SET_MODE; // Standard mode that is active when software starts #endif - +#ifdef ENABLE_TV + bool exit_func = false; // Global helper variable to get out of the color modes when mode changes +#endif MODE prevmode = mode; int ws2812fx_speed = 196; // Global variable for storing the delay between color changes --> smaller == faster @@ -164,7 +162,7 @@ char beforeauto_state[36]; // Keeps the state representation before a #endif // Button handling -#ifdef ENABLE_BUTTON || ENABLE_BUTTON_GY33 +#if defined(ENABLE_BUTTON) || defined(ENABLE_BUTTON_GY33) boolean buttonState = false; #endif diff --git a/Arduino/McLighting/request_handlers.h b/Arduino/McLighting/request_handlers.h index 67dfeae..0d48ace 100644 --- a/Arduino/McLighting/request_handlers.h +++ b/Arduino/McLighting/request_handlers.h @@ -143,7 +143,7 @@ void handleSetAllMode(uint8_t * mypayload) { main_color.blue = ((rgb >> 0) & 0xFF); DBG_OUTPUT_PORT.printf("WS: Set all leds to main color: R: [%u] G: [%u] B: [%u] W: [%u]\n", main_color.red, main_color.green, main_color.blue, main_color.white); - #ifdef ENABLE_LEGACY_ANIMATIONS + #ifdef ENABLE_TV exit_func = true; #endif ws2812fx_mode = FX_MODE_STATIC; @@ -178,7 +178,7 @@ void handleSetSingleLED(uint8_t * mypayload, uint8_t firstChar = 0) { strip.setPixelColor(led, ledstates[led].red, ledstates[led].green, ledstates[led].blue, ledstates[led].white); strip.show(); } - #ifdef ENABLE_LEGACY_ANIMATIONS + #ifdef ENABLE_TV exit_func = true; #endif mode = CUSTOM; @@ -263,7 +263,9 @@ void setModeByStateString(String saved_state_string) { } void handleSetNamedMode(String str_mode) { +#ifdef ENABLE_TV exit_func = true; +#endif if (str_mode.startsWith("=off") or str_mode.startsWith("/off")) { mode = OFF; @@ -271,12 +273,17 @@ void handleSetNamedMode(String str_mode) { stateOn = false; #endif } + +#ifdef ENABLE_TV if (str_mode.startsWith("=tv") or str_mode.startsWith("/tv")) { mode = TV; #ifdef ENABLE_HOMEASSISTANT stateOn = true; #endif } +#endif + +#ifdef ENABLE_E131 if (str_mode.startsWith("=e131") or str_mode.startsWith("/e131")) { if(strip.isRunning()) strip.stop(); mode = E131; @@ -284,6 +291,8 @@ void handleSetNamedMode(String str_mode) { stateOn = true; #endif } +#endif + #ifdef ENABLE_LEGACY_ANIMATIONS if (str_mode.startsWith("=auto")) { mode = AUTO; @@ -377,9 +386,11 @@ String listModesJSON(void) { JsonObject objectoff = json.createNestedObject(); objectoff["mode"] = "off"; objectoff["name"] = "OFF"; + #ifdef ENABLE_TV JsonObject objecttv = json.createNestedObject(); objecttv["mode"] = "tv"; objecttv["name"] = "TV"; + #endif #ifdef ENABLE_E131 JsonObject objecte131 = json.createNestedObject(); objecte131["mode"] = "e131"; @@ -742,7 +753,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght } } -#ifdef ENABLE_LEGACY_ANIMATIONS +#if defined(ENABLE_TV) || defined(ENABLE_E131) void checkForRequests() { webSocket.loop(); server.handleClient(); @@ -955,7 +966,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght // DBG_OUTPUT_PORT.print("]: "); DBG_OUTPUT_PORT.println(payload_in); uint8_t * payload = (uint8_t *) malloc(length + 1); memcpy(payload, payload_in, length); - payload[length] = NULL; + payload[length] = 0; DBG_OUTPUT_PORT.printf("]: %s\n", payload); #endif @@ -963,7 +974,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght void mqtt_callback(char* topic, byte* payload_in, unsigned int length) { uint8_t * payload = (uint8_t *)malloc(length + 1); memcpy(payload, payload_in, length); - payload[length] = NULL; + payload[length] = 0; DBG_OUTPUT_PORT.printf("MQTT: Message arrived [%s]\n", payload); #endif #ifdef ENABLE_HOMEASSISTANT diff --git a/clients/web(RGBW)/build/index.htm b/clients/web(RGBW)/build/index.htm index 0f38b88..e30b5d7 100644 --- a/clients/web(RGBW)/build/index.htm +++ b/clients/web(RGBW)/build/index.htm @@ -197,6 +197,9 @@ $(function(){ $.getJSON("http://" + host + "/status", function(data) { console.log("status", data); mode = data.mode; + if (mode == "1") { + // set autoswitch $("#autoSwitch").val('checked'); + } ws2812fx_mode = data.ws2812fx_mode; $("#rng_delay").val(data.speed); $("#rng_brightness").val(data.brightness); @@ -211,14 +214,14 @@ $(function(){ // Load modes async // List of all color modes - // enum MODE { SET_MODE, HOLD, AUTO, OFF, TV, CUSTOM, SETCOLOR, SETSPEED, BRIGHTNESS, WIPE, RAINBOW, RAINBOWCYCLE, THEATERCHASE, TWINKLERANDOM, THEATERCHASERAINBOW}; + // enum MODE {OFF, AUTO, TV, E131, SET_MODE, HOLD, CUSTOM, SETCOLOR, SETSPEED, BRIGHTNESS, WIPE, RAINBOW, RAINBOWCYCLE, THEATERCHASE, TWINKLERANDOM, THEATERCHASERAINBOW}; $.getJSON("http://" + host + "/get_modes", function(data) { console.log("modes", data); var modes_html = ""; data.forEach(function(current_mode){ if (current_mode.mode !== undefined) { modes_html += '
'; - if ((mode == "1" && current_mode.mode == ws2812fx_mode) || (mode == "3" && current_mode.mode == "off") || (mode == "4" && current_mode.mode == "tv") || (mode == "15" && current_mode.mode == "e131")){ + if ((mode == "5" && current_mode.mode == ws2812fx_mode) || (mode == "0" && current_mode.mode == "off") || (mode == "2" && current_mode.mode == "tv") || (mode == "3" && current_mode.mode == "e131")){ modes_html += '(' + current_mode.mode +') '+ current_mode.name; } else { modes_html += '(' + current_mode.mode +') '+ current_mode.name; diff --git a/clients/web(RGBW)/src/js/script.js b/clients/web(RGBW)/src/js/script.js index 4640076..4f62d27 100644 --- a/clients/web(RGBW)/src/js/script.js +++ b/clients/web(RGBW)/src/js/script.js @@ -56,14 +56,14 @@ $(function(){ // Load modes async // List of all color modes - // enum MODE { SET_MODE, HOLD, AUTO, OFF, TV, CUSTOM, SETCOLOR, SETSPEED, BRIGHTNESS, WIPE, RAINBOW, RAINBOWCYCLE, THEATERCHASE, TWINKLERANDOM, THEATERCHASERAINBOW}; + // enum MODE {OFF, AUTO, TV, E131, SET_MODE, HOLD, CUSTOM, SETCOLOR, SETSPEED, BRIGHTNESS, WIPE, RAINBOW, RAINBOWCYCLE, THEATERCHASE, TWINKLERANDOM, THEATERCHASERAINBOW}; $.getJSON("http://" + host + "/get_modes", function(data) { console.log("modes", data); var modes_html = ""; data.forEach(function(current_mode){ if (current_mode.mode !== undefined) { modes_html += '