diff --git a/src/hasp/hasp_attribute.cpp b/src/hasp/hasp_attribute.cpp index 617f7e68..cdb7a8d4 100644 --- a/src/hasp/hasp_attribute.cpp +++ b/src/hasp/hasp_attribute.cpp @@ -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) { - const size_t size = 64 + strlen(data); uint8_t pageid; uint8_t objid; if(!attribute || !hasp_find_id_from_obj(obj, &pageid, &objid)) return; + + const size_t size = 32 + strlen(attribute) + strlen(data); char payload[size]; - -{ - StaticJsonDocument doc; // Total (recommended) size - if(data) - doc[attribute].set(data); - else - doc[attribute].set(nullptr); - serializeJson(doc, payload, MQTT_MAX_PACKET_SIZE); -} - + { + StaticJsonDocument<64> doc; // Total (recommended) size for const char* + if(data) + doc[attribute].set(data); + else + doc[attribute].set(nullptr); + serializeJson(doc, payload, size); + } 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; - char payload[64 + strlen(attribute)]; - snprintf_P(payload, sizeof(payload), PSTR("{\"%s\":%d}"), attribute, val); - + const size_t size = 32 + strlen(attribute); + 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); } @@ -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; - char payload[16 + strlen(attribute)]; - if(val) - snprintf_P(payload, sizeof(payload), PSTR("{\"%s\":true}"), attribute); - else - snprintf_P(payload, sizeof(payload), PSTR("{\"%s\":false}"), attribute); - + const size_t size = 32 + strlen(attribute); + 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); } @@ -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; - char payload[64 + strlen(attribute)]; - lv_color32_t c32; - c32.full = lv_color_to32(color); + 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; - snprintf_P(payload, sizeof(payload), PSTR("{\"%s\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d}"), attribute, - c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue); + c32.full = lv_color_to32(color); + 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); }