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;
const size_t size = 32 + strlen(attribute) + strlen(data);
char payload[size]; char payload[size];
{
{ StaticJsonDocument<64> doc; // Total (recommended) size for const char*
StaticJsonDocument<size> doc; // Total (recommended) size 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, size);
serializeJson(doc, payload, MQTT_MAX_PACKET_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);
lv_color32_t c32; char payload[size];
c32.full = lv_color_to32(color); {
StaticJsonDocument<128> doc; // Total (recommended) size for const char*
char buffer[16];
lv_color32_t c32;
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);
} }