Skip to content

Commit 76bf6ca

Browse files
authored
Merge pull request #1004 from lhag87/lines
change DynamicJsonDocument allocation in my_line_set_points
2 parents f910da1 + fddb75b commit 76bf6ca

1 file changed

Lines changed: 13 additions & 4 deletions

File tree

src/hasp/hasp_attribute.cpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,17 +197,26 @@ static bool my_line_set_points(lv_obj_t* obj, const char* payload)
197197
{
198198
my_line_clear_points(obj); // delete pointmap
199199

200-
// Create new points
201-
// Reserve memory for JsonDocument
202-
// StaticJsonDocument<1024> doc;
203-
size_t maxsize = (128u * ((strlen(payload) / 128) + 1)) + 256;
200+
// count LEFT SQUARE BRACKET => nb points +1
201+
uint16_t count = 0;
202+
for (const char* p = payload; *p; p++)
203+
if (*p == '[') count++;
204+
count--;
205+
206+
// Reserve memory for JsonDocument rounded to upper 128 bytes
207+
uint16_t maxsize = 128u * (3*JSON_ARRAY_SIZE(1)*count / 128+1) ;
208+
209+
LOG_VERBOSE(TAG_ATTR,"payload: %s",payload);
210+
LOG_TRACE(TAG_ATTR,"count: %u maxsize: %u taille brut %u",count,maxsize,(uint32_t)(3*JSON_ARRAY_SIZE(1)*count));
211+
204212
DynamicJsonDocument doc(maxsize);
205213
DeserializationError jsonError = deserializeJson(doc, payload);
206214

207215
if(jsonError) { // Couldn't parse incoming JSON payload
208216
dispatch_json_error(TAG_ATTR, jsonError);
209217
return false;
210218
}
219+
LOG_VERBOSE(TAG_ATTR,"Memory usage: %u",(uint32_t)doc.memoryUsage());
211220

212221
JsonArray arr = doc.as<JsonArray>(); // Parse payload
213222
size_t tot_len = sizeof(lv_point_t*) * (arr.size());

0 commit comments

Comments
 (0)