mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-28 05:36:37 +00:00
Use heap memory for large JsonDocuments
This commit is contained in:
parent
d6c5f64143
commit
116877099b
@ -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
|
||||
|
@ -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 <time.h>
|
||||
@ -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<JsonObject>(), saved_page_id);
|
||||
jsonError = deserializeJson(jsonl, stream);
|
||||
line++;
|
||||
}
|
||||
// guiStart();
|
||||
|
||||
/* For debugging purposes */
|
||||
if(jsonError == DeserializationError::EmptyInput) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user