From 507e455f7ef784b7835f4a8957f6df96edd9fc8a Mon Sep 17 00:00:00 2001 From: fvanroie Date: Thu, 2 Apr 2020 16:47:21 +0200 Subject: [PATCH] Add webupdate --- src/hasp_dispatch.cpp | 47 +++++++++++++++++++++++++++++-------------- src/hasp_dispatch.h | 3 +++ 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/hasp_dispatch.cpp b/src/hasp_dispatch.cpp index 5883bbc5..d7a03458 100644 --- a/src/hasp_dispatch.cpp +++ b/src/hasp_dispatch.cpp @@ -9,6 +9,7 @@ #include "hasp_mdns.h" #include "hasp_wifi.h" #include "hasp_gui.h" +#include "hasp_ota.h" #include "hasp.h" #include "hasp_conf.h" @@ -89,7 +90,7 @@ void dispatchButtonAttribute(String & strTopic, const char * payload) int objid = strObjId.toInt(); if(pageid >= 0 && pageid <= 255 && objid >= 0 && objid <= 255) { - hasp_process_attribute((uint8_t)pageid, (uint8_t)objid, strAttr, payload); + hasp_process_attribute((uint8_t)pageid, (uint8_t)objid, strAttr.c_str(), payload); } // valid page } } @@ -120,6 +121,9 @@ void dispatchAttribute(String strTopic, const char * payload) } else if(strTopic == F("clearpage")) { dispatchClearPage(payload); + } else if(strTopic == F("update")) { + dispatchWebUpdate(payload); + } else if(strTopic == F("setupap")) { haspDisplayAP(String(F("HASP-ABC123")).c_str(), String(F("haspadmin")).c_str()); @@ -236,32 +240,32 @@ void dispatchJson(char * payload) if(jsonError) { // Couldn't parse incoming JSON command Log.warning(F("JSON: Failed to parse incoming JSON command with error: %s"), jsonError.c_str()); - return; - } + } else { - JsonArray arr = haspCommands.as(); - for(JsonVariant command : arr) { - dispatchCommand(command.as()); + JsonArray arr = haspCommands.as(); + for(JsonVariant command : arr) { + dispatchCommand(command.as()); + } } } void dispatchJsonl(char * payload) { - DynamicJsonDocument config(256); + DynamicJsonDocument config(3 * 128u); + size_t len = strlen(payload); + size_t maxsize = 128u * ((len / 128) + 1); + Log.verbose(F("CMND: payload %u => reserve %u"), len, maxsize); String output((char *)0); StringStream stream((String &)output); - - size_t maxsize = (128u * ((strlen(payload) / 128) + 1)); - Log.verbose(F("CMND: payload %u => reserve %u"), strlen(payload), (128u * ((strlen(payload) / 128) + 1))); - - output.reserve((128u * ((strlen(payload) / 128) + 1))); + output.reserve(maxsize); stream.print(payload); + uint8_t savedPage = 0; while(deserializeJson(config, stream) == DeserializationError::Ok) { serializeJson(config, Serial); Serial.println(); - haspNewObject(config.as()); + haspNewObject(config.as(), savedPage); } } @@ -281,8 +285,8 @@ void dispatchReboot(bool saveConfig) debugStop(); delay(250); wifiStop(); - Log.notice(F("STOP: Properly Rebooting the MCU now!")); Log.verbose(F("-------------------------------------")); + Log.notice(F("STOP: Properly Rebooting the MCU now!")); ESP.restart(); delay(5000); } @@ -292,4 +296,17 @@ void dispatch_button(uint8_t id, const char * event) #if HASP_USE_MQTT mqtt_send_input(id, event); #endif -} \ No newline at end of file +} + +void dispatchWebUpdate(const char * espOtaUrl) +{ + Log.verbose("FWUP: Checking for updates at URL: %s", espOtaUrl); + otaHttpUpdate(espOtaUrl); +} + +void IRAM_ATTR dispatch_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute, const char * data) +{ +#if HASP_USE_MQTT + mqtt_send_obj_attribute_str(pageid, btnid, attribute, data); +#endif +} diff --git a/src/hasp_dispatch.h b/src/hasp_dispatch.h index 591c5346..5f55f15c 100644 --- a/src/hasp_dispatch.h +++ b/src/hasp_dispatch.h @@ -16,10 +16,13 @@ void dispatchClearPage(String strPageid); void dispatchDim(String strDimLevel); void dispatchBacklight(String strPayload); +void dispatchWebUpdate(const char * espOtaUrl); void dispatchIdle(const char * state); void dispatchReboot(bool saveConfig); void dispatchStatusUpdate(void); void dispatch_button(uint8_t id, const char * event); +void IRAM_ATTR dispatch_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute, const char * data); + #endif \ No newline at end of file