Use ArduinoJson in attr_out functions

This commit is contained in:
fvanroie 2021-11-16 00:25:33 +01:00
parent 09ae100b27
commit 43ef2426da

View File

@ -2063,22 +2063,21 @@ static hasp_attribute_type_t attribute_common_bool(lv_obj_t* obj, uint16_t attr_
void attr_out_str(lv_obj_t* obj, const char* attribute, const char* data) void attr_out_str(lv_obj_t* obj, const char* attribute, const char* data)
{ {
const size_t size = 64 + strlen(data);
uint8_t pageid; uint8_t pageid;
uint8_t objid; uint8_t objid;
if(!attribute || !hasp_find_id_from_obj(obj, &pageid, &objid)) return; if(!attribute || !hasp_find_id_from_obj(obj, &pageid, &objid)) return;
char payload[size];
const size_t size = 32 + strlen(attribute) + strlen(data);
char payload[size];
{ {
StaticJsonDocument<size> doc; // Total (recommended) size StaticJsonDocument<64> doc; // Total (recommended) size for const char*
if(data) if(data)
doc[attribute].set(data); doc[attribute].set(data);
else else
doc[attribute].set(nullptr); doc[attribute].set(nullptr);
serializeJson(doc, payload, MQTT_MAX_PACKET_SIZE); serializeJson(doc, payload, size);
} }
object_dispatch_state(pageid, objid, payload); object_dispatch_state(pageid, objid, payload);
} }
@ -2089,9 +2088,13 @@ void attr_out_int(lv_obj_t* obj, const char* attribute, int32_t val)
if(!attribute || !hasp_find_id_from_obj(obj, &pageid, &objid)) return; if(!attribute || !hasp_find_id_from_obj(obj, &pageid, &objid)) return;
char payload[64 + strlen(attribute)]; const size_t size = 32 + strlen(attribute);
snprintf_P(payload, sizeof(payload), PSTR("{\"%s\":%d}"), attribute, val); char payload[size];
{
StaticJsonDocument<64> doc; // Total (recommended) size for const char*
doc[attribute].set(val);
serializeJson(doc, payload, size);
}
object_dispatch_state(pageid, objid, payload); object_dispatch_state(pageid, objid, payload);
} }
@ -2102,12 +2105,13 @@ void attr_out_bool(lv_obj_t* obj, const char* attribute, bool val)
if(!attribute || !hasp_find_id_from_obj(obj, &pageid, &objid)) return; if(!attribute || !hasp_find_id_from_obj(obj, &pageid, &objid)) return;
char payload[16 + strlen(attribute)]; const size_t size = 32 + strlen(attribute);
if(val) char payload[size];
snprintf_P(payload, sizeof(payload), PSTR("{\"%s\":true}"), attribute); {
else StaticJsonDocument<64> doc; // Total (recommended) size for const char*
snprintf_P(payload, sizeof(payload), PSTR("{\"%s\":false}"), attribute); doc[attribute].set(val);
serializeJson(doc, payload, size);
}
object_dispatch_state(pageid, objid, payload); object_dispatch_state(pageid, objid, payload);
} }
@ -2118,12 +2122,22 @@ void attr_out_color(lv_obj_t* obj, const char* attribute, lv_color_t color)
if(!attribute || !hasp_find_id_from_obj(obj, &pageid, &objid)) return; if(!attribute || !hasp_find_id_from_obj(obj, &pageid, &objid)) return;
char payload[64 + strlen(attribute)]; const size_t size = 64 + strlen(attribute);
char payload[size];
{
StaticJsonDocument<128> doc; // Total (recommended) size for const char*
char buffer[16];
lv_color32_t c32; lv_color32_t c32;
c32.full = lv_color_to32(color);
snprintf_P(payload, sizeof(payload), PSTR("{\"%s\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d}"), attribute, c32.full = lv_color_to32(color);
c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue); snprintf_P(buffer, sizeof(buffer), PSTR("#%02x%02x%02x"), c32.ch.red, c32.ch.green, c32.ch.blue);
doc[attribute].set(buffer);
doc["r"].set(c32.ch.red);
doc["g"].set(c32.ch.green);
doc["b"].set(c32.ch.blue);
serializeJson(doc, payload, size);
}
object_dispatch_state(pageid, objid, payload); object_dispatch_state(pageid, objid, payload);
} }