diff --git a/src/hasp/hasp_attribute.cpp b/src/hasp/hasp_attribute.cpp index 74763117..0a609d79 100644 --- a/src/hasp/hasp_attribute.cpp +++ b/src/hasp/hasp_attribute.cpp @@ -90,9 +90,9 @@ void my_msgbox_map_clear(lv_obj_t* obj) const char** my_map_create(const char* payload) { // Reserve memory for JsonDocument - // size_t maxsize = (128u * ((strlen(payload) / 128) + 1)) + 256; - // DynamicJsonDocument map_doc(maxsize); - StaticJsonDocument<1024> map_doc; + // StaticJsonDocument<1024> map_doc; + size_t maxsize = (128u * ((strlen(payload) / 128) + 1)) + 256; + DynamicJsonDocument map_doc(maxsize); DeserializationError jsonError = deserializeJson(map_doc, payload); if(jsonError) { // Couldn't parse incoming JSON payload @@ -192,9 +192,9 @@ static bool my_line_set_points(lv_obj_t* obj, const char* payload) // Create new points // Reserve memory for JsonDocument - // size_t maxsize = (128u * ((strlen(payload) / 128) + 1)) + 256; - // DynamicJsonDocument doc(maxsize); - StaticJsonDocument<1024> doc; + // StaticJsonDocument<1024> doc; + size_t maxsize = (128u * ((strlen(payload) / 128) + 1)) + 256; + DynamicJsonDocument doc(maxsize); DeserializationError jsonError = deserializeJson(doc, payload); if(jsonError) { // Couldn't parse incoming JSON payload @@ -1656,15 +1656,15 @@ static hasp_attribute_type_t attribute_common_json(lv_obj_t* obj, uint16_t attr_ if(update) { - // size_t maxsize = (512u + JSON_OBJECT_SIZE(25)); - // DynamicJsonDocument json(maxsize); - StaticJsonDocument<1024> json; + // StaticJsonDocument<1024> json; + size_t maxsize = (512u + JSON_OBJECT_SIZE(25)); + DynamicJsonDocument json(maxsize); // Note: Deserialization can to be (char *) so the objects WILL NOT be copied // this uses less memory since the data is already copied from the mqtt receive buffer and cannot // get overwritten by the send buffer !! DeserializationError jsonError = deserializeJson(json, (char*)payload); - // json.shrinkToFit(); + json.shrinkToFit(); if(jsonError == DeserializationError::Ok) { // Make sure we have a valid JsonObject to start from diff --git a/src/hasp/hasp_dispatch.cpp b/src/hasp/hasp_dispatch.cpp index ebc883e4..84b853fa 100644 --- a/src/hasp/hasp_dispatch.cpp +++ b/src/hasp/hasp_dispatch.cpp @@ -1,4 +1,4 @@ -/* MIT License - Copyright (c) 2019-2022 Francis Van Roie +/* MIT License - Copyright (c) 2019-2023 Francis Van Roie For full license information read the LICENSE file in the project folder */ #include @@ -624,14 +624,14 @@ void dispatch_text_line(const char* payload, uint8_t source) { { - // size_t maxsize = (128u * ((strlen(payload) / 128) + 1)) + 512; - // DynamicJsonDocument json(maxsize); - StaticJsonDocument<1024> doc; + // StaticJsonDocument<1024> doc; + size_t maxsize = (128u * ((strlen(payload) / 128) + 1)) + 512; + DynamicJsonDocument doc(maxsize); // Note: Deserialization needs to be (const char *) so the objects WILL be copied // this uses more memory but otherwise the mqtt receive buffer can get overwritten by the send buffer !! DeserializationError jsonError = deserializeJson(doc, payload); - // json.shrinkToFit(); + doc.shrinkToFit(); if(jsonError) { // dispatch_json_error(TAG_MSGR, jsonError); @@ -654,8 +654,11 @@ void dispatch_text_line(const char* payload, uint8_t source) void dispatch_parse_json(const char*, const char* payload, uint8_t source) { // Parse an incoming JSON array into individual commands - StaticJsonDocument<2048> doc; + // StaticJsonDocument<2048> doc; + size_t maxsize = (128u * ((strlen(payload) / 128) + 1)) + 512; + DynamicJsonDocument doc(maxsize); DeserializationError jsonError = deserializeJson(doc, payload); + doc.shrinkToFit(); if(jsonError) { dispatch_json_error(TAG_MSGR, jsonError); @@ -675,22 +678,21 @@ void dispatch_parse_jsonl(Stream& stream, uint8_t& saved_page_id) void dispatch_parse_jsonl(std::istream& stream, uint8_t& saved_page_id) #endif { - // uint8_t savedPage = haspPages.get(); - uint16_t line = 1; - StaticJsonDocument<1024> jsonl; + // StaticJsonDocument<1024> jsonl; + DynamicJsonDocument jsonl(MQTT_MAX_PACKET_SIZE / 2 + 128); DeserializationError jsonError = deserializeJson(jsonl, stream); + jsonl.shrinkToFit(); #ifdef ARDUINO stream.setTimeout(25); #endif - // guiStop(); + uint16_t line = 1; while(jsonError == DeserializationError::Ok) { hasp_new_object(jsonl.as(), saved_page_id); jsonError = deserializeJson(jsonl, stream); line++; } - // guiStart(); /* For debugging purposes */ if(jsonError == DeserializationError::EmptyInput) {