From f080be00e519ad20c313187c1d8d208002c01ce7 Mon Sep 17 00:00:00 2001 From: bpohvoodoo Date: Fri, 22 Mar 2019 12:15:55 +0100 Subject: [PATCH] Simplifying Code --- Arduino/McLighting/McLighting.ino | 5 +- Arduino/McLighting/request_handlers.h | 189 +++++++++++++------------- Arduino/McLighting/rest_api.h | 28 ++-- platformio.ini | 7 +- 4 files changed, 116 insertions(+), 113 deletions(-) diff --git a/Arduino/McLighting/McLighting.ino b/Arduino/McLighting/McLighting.ino index a51f1db..e7d83c2 100644 --- a/Arduino/McLighting/McLighting.ino +++ b/Arduino/McLighting/McLighting.ino @@ -372,7 +372,7 @@ void initMqtt() { #if ENABLE_MQTT == 0 DBG_OUTPUT_PORT.printf("MQTT active: %s:%d\r\n", mqtt_host, mqtt_port); mqtt_client->setServer(mqtt_host, mqtt_port); - mqtt_client->setCallback(mqtt_callback); + mqtt_client->setCallback(onMqttMessage); #endif #if ENABLE_MQTT == 1 DBG_OUTPUT_PORT.printf("AMQTT active: %s:%d\r\n", mqtt_host, mqtt_port); @@ -451,11 +451,12 @@ void setup() { //Strip Config #if ENABLE_STATE_SAVE == 1 (readConfigFS()) ? DBG_OUTPUT_PORT.println("WiFiManager config FS read success!"): DBG_OUTPUT_PORT.println("WiFiManager config FS Read failure!"); - delay(500); + delay(250); (readStateFS()) ? DBG_OUTPUT_PORT.println("Strip state config FS read Success!") : DBG_OUTPUT_PORT.println("Strip state config FS read failure!"); #endif #if ENABLE_STATE_SAVE == 0 (setConfByConfString(readEEPROM(0, 222)))? DBG_OUTPUT_PORT.println("WiFiManager config EEPROM read success!"): DBG_OUTPUT_PORT.println("WiFiManager config EEPROM Read failure!"); + delay(250); (setModeByStateString(readEEPROM(256, 66)))? DBG_OUTPUT_PORT.println("Strip state config EEPROM read Success!") : DBG_OUTPUT_PORT.println("Strip state config EEPROM read failure!"); #endif char tmp_strip_size[6], tmp_fxoptions[5], tmp_rgbOrder[5]; //needed tempararily for WiFiManager Settings diff --git a/Arduino/McLighting/request_handlers.h b/Arduino/McLighting/request_handlers.h index 41a0508..51d4b59 100644 --- a/Arduino/McLighting/request_handlers.h +++ b/Arduino/McLighting/request_handlers.h @@ -58,98 +58,103 @@ void convertColors() { } void getArgs() { - if (server.arg("rgb") != "") { - uint32_t rgb = (uint32_t) strtoul(server.arg("rgb").c_str(), NULL, 16); - main_color.white = ((rgb >> 24) & 0xFF); - main_color.red = ((rgb >> 16) & 0xFF); - main_color.green = ((rgb >> 8) & 0xFF); - main_color.blue = ((rgb >> 0) & 0xFF); - } else { - if ((server.arg("r") != "") && (server.arg("r").toInt() >= 0) && (server.arg("r").toInt() <= 255)) { - main_color.red = server.arg("r").toInt(); + + if (mode == SET_ALL || mode == SET_MODE || mode == SET_COLOR) { + if (server.arg("rgb") != "") { + uint32_t rgb = (uint32_t) strtoul(server.arg("rgb").c_str(), NULL, 16); + main_color.white = ((rgb >> 24) & 0xFF); + main_color.red = ((rgb >> 16) & 0xFF); + main_color.green = ((rgb >> 8) & 0xFF); + main_color.blue = ((rgb >> 0) & 0xFF); + } else { + if ((server.arg("r") != "") && (server.arg("r").toInt() >= 0) && (server.arg("r").toInt() <= 255)) { + main_color.red = server.arg("r").toInt(); + } + if ((server.arg("g") != "") && (server.arg("g").toInt() >= 0) && (server.arg("g").toInt() <= 255)) { + main_color.green = server.arg("g").toInt(); + } + if ((server.arg("b") != "") && (server.arg("b").toInt() >= 0) && (server.arg("b").toInt() <= 255)) { + main_color.blue = server.arg("b").toInt(); + } + if ((server.arg("w") != "") && (server.arg("w").toInt() >= 0) && (server.arg("w").toInt() <= 255)){ + main_color.white = server.arg("w").toInt(); + } } - if ((server.arg("g") != "") && (server.arg("g").toInt() >= 0) && (server.arg("g").toInt() <= 255)) { - main_color.green = server.arg("g").toInt(); + if (server.arg("rgb2") != "") { + uint32_t rgb2 = (uint32_t) strtoul(server.arg("rgb2").c_str(), NULL, 16); + back_color.white = ((rgb2 >> 24) & 0xFF); + back_color.red = ((rgb2 >> 16) & 0xFF); + back_color.green = ((rgb2 >> 8) & 0xFF); + back_color.blue = ((rgb2 >> 0) & 0xFF); + } else { + if ((server.arg("r2") != "") && (server.arg("r2").toInt() >= 0) && (server.arg("r2").toInt() <= 255)) { + back_color.red = server.arg("r2").toInt(); + } + if ((server.arg("g2") != "") && (server.arg("g2").toInt() >= 0) && (server.arg("g2").toInt() <= 255)) { + back_color.green = server.arg("g2").toInt(); + } + if ((server.arg("b2") != "") && (server.arg("b2").toInt() >= 0) && (server.arg("b2").toInt() <= 255)) { + back_color.blue = server.arg("b2").toInt(); + } + if ((server.arg("w2") != "") && (server.arg("w2").toInt() >= 0) && (server.arg("w2").toInt() <= 255)){ + back_color.white = server.arg("w2").toInt(); + } } - if ((server.arg("b") != "") && (server.arg("b").toInt() >= 0) && (server.arg("b").toInt() <= 255)) { - main_color.blue = server.arg("b").toInt(); + if (server.arg("rgb3") != "") { + uint32_t rgb3 = (uint32_t) strtoul(server.arg("rgb3").c_str(), NULL, 16); + xtra_color.white = ((rgb3 >> 24) & 0xFF); + xtra_color.red = ((rgb3 >> 16) & 0xFF); + xtra_color.green = ((rgb3 >> 8) & 0xFF); + xtra_color.blue = ((rgb3 >> 0) & 0xFF); + } else { + if ((server.arg("r3") != "") && (server.arg("r3").toInt() >= 0) && (server.arg("r3").toInt() <= 255)) { + xtra_color.red = server.arg("r3").toInt(); + } + if ((server.arg("g3") != "") && (server.arg("g3").toInt() >= 0) && (server.arg("g3").toInt() <= 255)) { + xtra_color.green = server.arg("g3").toInt(); + } + if ((server.arg("b3") != "") && (server.arg("b3").toInt() >= 0) && (server.arg("b3").toInt() <= 255)) { + xtra_color.blue = server.arg("b3").toInt(); + } + if ((server.arg("w3") != "") && (server.arg("w3").toInt() >= 0) && (server.arg("w3").toInt() <= 255)){ + xtra_color.white = server.arg("w3").toInt(); + } } - if ((server.arg("w") != "") && (server.arg("w").toInt() >= 0) && (server.arg("w").toInt() <= 255)){ - main_color.white = server.arg("w").toInt(); + main_color.red = constrain(main_color.red, 0, 255); + main_color.green = constrain(main_color.green, 0, 255); + main_color.blue = constrain(main_color.blue, 0, 255); + main_color.white = constrain(main_color.white, 0, 255); + back_color.red = constrain(back_color.red, 0, 255); + back_color.green = constrain(back_color.green, 0, 255); + back_color.blue = constrain(back_color.blue, 0, 255); + back_color.white = constrain(back_color.white, 0, 255); + xtra_color.red = constrain(xtra_color.red, 0, 255); + xtra_color.green = constrain(xtra_color.green, 0, 255); + xtra_color.blue = constrain(xtra_color.blue, 0, 255); + xtra_color.white = constrain(xtra_color.white, 0, 255); + convertColors(); + } + if (mode == SET_ALL || mode == SET_MODE || mode == SET_SPEED || mode == TV) { + if ((server.arg("s") != "") && (server.arg("s").toInt() >= 0) && (server.arg("s").toInt() <= 255)) { + ws2812fx_speed = constrain(server.arg("s").toInt(), 0, 255); } } - if (server.arg("rgb2") != "") { - uint32_t rgb2 = (uint32_t) strtoul(server.arg("rgb2").c_str(), NULL, 16); - back_color.white = ((rgb2 >> 24) & 0xFF); - back_color.red = ((rgb2 >> 16) & 0xFF); - back_color.green = ((rgb2 >> 8) & 0xFF); - back_color.blue = ((rgb2 >> 0) & 0xFF); - } else { - if ((server.arg("r2") != "") && (server.arg("r2").toInt() >= 0) && (server.arg("r2").toInt() <= 255)) { - back_color.red = constrain(server.arg("r2").toInt(), 0, 255); - } - if ((server.arg("g2") != "") && (server.arg("g2").toInt() >= 0) && (server.arg("g2").toInt() <= 255)) { - back_color.green = server.arg("g2").toInt(); - } - if ((server.arg("b2") != "") && (server.arg("b2").toInt() >= 0) && (server.arg("b2").toInt() <= 255)) { - back_color.blue = server.arg("b2").toInt(); - } - if ((server.arg("w2") != "") && (server.arg("w2").toInt() >= 0) && (server.arg("w2").toInt() <= 255)){ - back_color.white = server.arg("w2").toInt(); + if (mode == SET_ALL || mode == SET_MODE) { + if ((server.arg("m") != "") && (server.arg("m").toInt() >= 0) && (server.arg("m").toInt() <= strip->getModeCount())) { + ws2812fx_mode = constrain(server.arg("m").toInt(), 0, strip->getModeCount() - 1); } } - if (server.arg("rgb3") != "") { - uint32_t rgb3 = (uint32_t) strtoul(server.arg("rgb3").c_str(), NULL, 16); - xtra_color.white = ((rgb3 >> 24) & 0xFF); - xtra_color.red = ((rgb3 >> 16) & 0xFF); - xtra_color.green = ((rgb3 >> 8) & 0xFF); - xtra_color.blue = ((rgb3 >> 0) & 0xFF); - } else { - if ((server.arg("r3") != "") && (server.arg("r3").toInt() >= 0) && (server.arg("r3").toInt() <= 255)) { - xtra_color.red = server.arg("r3").toInt(); - } - if ((server.arg("g3") != "") && (server.arg("g3").toInt() >= 0) && (server.arg("g3").toInt() <= 255)) { - xtra_color.green = server.arg("g3").toInt(); - } - if ((server.arg("b3") != "") && (server.arg("b3").toInt() >= 0) && (server.arg("b3").toInt() <= 255)) { - xtra_color.blue = server.arg("b3").toInt(); - } - if ((server.arg("w3") != "") && (server.arg("w3").toInt() >= 0) && (server.arg("w3").toInt() <= 255)){ - xtra_color.white = server.arg("w3").toInt(); + if (mode == SET_ALL || mode == SET_MODE || mode == SET_BRIGHTNESS || mode == AUTO || mode == TV || mode == E131) { + if ((server.arg("c") != "") && (server.arg("c").toInt() >= 0) && (server.arg("c").toInt() <= 100)) { + brightness = constrain((int) server.arg("c").toInt() * 2.55, 0, 255); + } else if ((server.arg("p") != "") && (server.arg("p").toInt() >= 0) && (server.arg("p").toInt() <= 255)) { + brightness = constrain(server.arg("p").toInt(), 0, 255); } } - if ((server.arg("s") != "") && (server.arg("s").toInt() >= 0) && (server.arg("s").toInt() <= 255)) { - ws2812fx_speed = constrain(server.arg("s").toInt(), 0, 255); - } - - if ((server.arg("m") != "") && (server.arg("m").toInt() >= 0) && (server.arg("m").toInt() <= strip->getModeCount())) { - ws2812fx_mode = constrain(server.arg("m").toInt(), 0, strip->getModeCount() - 1); - } - - if ((server.arg("c") != "") && (server.arg("c").toInt() >= 0) && (server.arg("c").toInt() <= 100)) { - brightness = constrain((int) server.arg("c").toInt() * 2.55, 0, 255); - } else if ((server.arg("p") != "") && (server.arg("p").toInt() >= 0) && (server.arg("p").toInt() <= 255)) { - brightness = constrain(server.arg("p").toInt(), 0, 255); - } - - main_color.red = constrain(main_color.red, 0, 255); - main_color.green = constrain(main_color.green, 0, 255); - main_color.blue = constrain(main_color.blue, 0, 255); - main_color.white = constrain(main_color.white, 0, 255); - back_color.red = constrain(back_color.red, 0, 255); - back_color.green = constrain(back_color.green, 0, 255); - back_color.blue = constrain(back_color.blue, 0, 255); - back_color.white = constrain(back_color.white, 0, 255); - xtra_color.red = constrain(xtra_color.red, 0, 255); - xtra_color.green = constrain(xtra_color.green, 0, 255); - xtra_color.blue = constrain(xtra_color.blue, 0, 255); - xtra_color.white = constrain(xtra_color.white, 0, 255); - convertColors(); - DBG_OUTPUT_PORT.print("Get Args: "); - DBG_OUTPUT_PORT.println(listStatusJSON()); + + DBG_OUTPUT_PORT.printf("Get Args: %s\r\n", listStatusJSON()); } - uint16_t convertSpeed(uint8_t mcl_speed) { //long ws2812_speed = mcl_speed * 256; uint16_t ws2812_speed = 61760 * (exp(0.0002336 * mcl_speed) - exp(-0.03181 * mcl_speed)); @@ -1254,24 +1259,18 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght } #endif + #if ENABLE_MQTT == 0 + void onMqttMessage(char* topic, byte* payload_in, uint16_t length) { + #endif + #if ENABLE_MQTT == 1 - void onMqttMessage(char* topic, char* payload_in, AsyncMqttClientMessageProperties properties, size_t length, size_t index, size_t total) { - DBG_OUTPUT_PORT.print("MQTT: Recieved ["); DBG_OUTPUT_PORT.print(topic); -// DBG_OUTPUT_PORT.print("]: "); DBG_OUTPUT_PORT.println(payload_in); + void onMqttMessage(char* topic, char* payload_in, AsyncMqttClientMessageProperties properties, size_t length, size_t index, size_t total) { + #endif uint8_t * payload = (uint8_t *) malloc(length + 1); memcpy(payload, payload_in, length); payload[length] = 0; - DBG_OUTPUT_PORT.printf("]: %s\r\n", payload); - #endif - - #if ENABLE_MQTT == 0 - void mqtt_callback(char* topic, byte* payload_in, uint16_t length) { - uint8_t * payload = (uint8_t *)malloc(length + 1); - memcpy(payload, payload_in, length); - payload[length] = 0; - DBG_OUTPUT_PORT.printf("MQTT: Message arrived [%s]\r\n", payload); - #endif - + DBG_OUTPUT_PORT.printf("MQTT: Recieved [%s]: %s\r\n", topic, payload); + #if defined(ENABLE_HOMEASSISTANT) if (strcmp(topic, mqtt_ha_state_in) == 0) { if (!processJson((char*)payload)) { diff --git a/Arduino/McLighting/rest_api.h b/Arduino/McLighting/rest_api.h index f946880..52b33a3 100644 --- a/Arduino/McLighting/rest_api.h +++ b/Arduino/McLighting/rest_api.h @@ -1,4 +1,4 @@ -// *************************************************************************** + // *************************************************************************** // Setup: Webserver handler // *************************************************************************** //list directory @@ -193,8 +193,8 @@ }); server.on("/set_brightness", []() { - getArgs(); - mode = SET_BRIGHTNESS; + mode = SET_BRIGHTNESS; + getArgs(); getStatusJSON(); }); @@ -207,8 +207,8 @@ }); server.on("/set_speed", []() { - getArgs(); mode = SET_SPEED; + getArgs(); getStatusJSON(); }); @@ -347,7 +347,6 @@ updateStrip = false; updateConf = false; getConfigJSON(); - delay(500); }); server.on("/off", []() { @@ -357,56 +356,57 @@ server.on("/auto", []() { mode = AUTO; + getArgs(); getStatusJSON(); }); server.on("/all", []() { - getArgs(); ws2812fx_mode = FX_MODE_STATIC; mode = SET_ALL; + getArgs(); getStatusJSON(); }); #if defined(ENABLE_LEGACY_ANIMATIONS) server.on("/wipe", []() { - getArgs(); ws2812fx_mode = FX_MODE_COLOR_WIPE; mode = SET_ALL; + getArgs(); getStatusJSON(); }); server.on("/rainbow", []() { - getArgs(); ws2812fx_mode = FX_MODE_RAINBOW; mode = SET_ALL; + getArgs(); getStatusJSON(); }); server.on("/rainbowcycle", []() { - getArgs(); ws2812fx_mode = FX_MODE_RAINBOW_CYCLE; mode = SET_ALL; + getArgs(); getStatusJSON(); }); server.on("/theaterchase", []() { - getArgs(); ws2812fx_mode = FX_MODE_THEATER_CHASE; mode = SET_ALL; + getArgs(); getStatusJSON(); }); server.on("/twinklerandom", []() { - getArgs(); ws2812fx_mode = FX_MODE_TWINKLE_RANDOM; mode = SET_ALL; + getArgs(); getStatusJSON(); }); server.on("/theaterchaserainbow", []() { - getArgs(); ws2812fx_mode = FX_MODE_THEATER_CHASE_RAINBOW; mode = SET_ALL; + getArgs(); getStatusJSON(); }); #endif @@ -414,6 +414,7 @@ #if defined(ENABLE_E131) server.on("/e131", []() { mode = E131; + getArgs(); getStatusJSON(); }); #endif @@ -421,6 +422,7 @@ #if defined(ENABLE_TV) server.on("/tv", []() { mode = TV; + getArgs(); getStatusJSON(); }); #endif @@ -430,7 +432,7 @@ }); server.on("/set_mode", []() { - getArgs(); mode = SET_MODE; + getArgs(); getStatusJSON(); }); diff --git a/platformio.ini b/platformio.ini index a7fbbfd..37b646d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -35,8 +35,8 @@ arduino_core_2_5_0 = espressif8266@2.0.4 arduino_core_stage = https://github.com/platformio/platform-espressif8266.git#feature/stage framework = arduino -platform = ${common.arduino_core_2_4_2} -; platform = ${common.arduino_core_2_5_0} +;platform = ${common.arduino_core_2_4_2} +platform = ${common.arduino_core_2_5_0} build_flags = -DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH -DMQTT_MAX_PACKET_SIZE=512 ; PubSubClient Specific flags @@ -74,9 +74,10 @@ lib_deps = ${common.lib_deps} board = nodemcuv2 framework = ${common.framework} platform = ${common.platform} +board_build.f_cpu = 160000000L build_flags = ${common.build_flags} - ; -Wl,-Teagle.flash.4m3m.ld ;;;; Required for core > v2.5.0 or staging version + -Wl,-Teagle.flash.4m3m.ld ; Required for core > v2.5.0 or staging version monitor_speed = ${common.monitor_speed} upload_speed = ${common.upload_speed} upload_resetmethod = ${common.upload_resetmethod}