From 510565ca517ea78ebc89ee1a5853f4a1e18e0608 Mon Sep 17 00:00:00 2001 From: fvanroie Date: Sun, 25 Feb 2024 21:28:38 +0100 Subject: [PATCH] Serialize event payloads properly #637 --- src/hasp/hasp_event.cpp | 104 ++++++++++++++++++++++++++-------------- 1 file changed, 68 insertions(+), 36 deletions(-) diff --git a/src/hasp/hasp_event.cpp b/src/hasp/hasp_event.cpp index fd5eeaee..f5461817 100644 --- a/src/hasp/hasp_event.cpp +++ b/src/hasp/hasp_event.cpp @@ -272,12 +272,16 @@ static void event_object_val_event(lv_obj_t* obj, uint8_t eventid, int16_t val) { char data[512]; { + StaticJsonDocument<512> doc; char eventname[8]; Parser::get_event_name(eventid, eventname, sizeof(eventname)); - if(const char* tag = my_obj_get_tag(obj)) - snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d,\"tag\":%s}"), eventname, val, tag); - else - snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d}"), eventname, val); + doc["event"] = eventname; + doc["val"] = val; + if(const char* tag = my_obj_get_tag(obj)) doc["tag"] = tag; + serializeJson(doc, data, sizeof(data)); + // snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d,\"tag\":%s}"), eventname, val, tag); + // else + // snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d}"), eventname, val); } event_send_object_data(obj, data); } @@ -287,14 +291,21 @@ static void event_object_selection_changed(lv_obj_t* obj, uint8_t eventid, int16 { char data[512]; { + StaticJsonDocument<512> doc; char eventname[8]; Parser::get_event_name(eventid, eventname, sizeof(eventname)); - - if(const char* tag = my_obj_get_tag(obj)) - snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d,\"text\":\"%s\",\"tag\":%s}"), eventname, - val, text, tag); - else - snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d,\"text\":\"%s\"}"), eventname, val, text); + doc["event"] = eventname; + doc["val"] = val; + doc["text"] = text; + if(const char* tag = my_obj_get_tag(obj)) doc["tag"] = tag; + serializeJson(doc, data, sizeof(data)); + // if(const char* tag = my_obj_get_tag(obj)) + // snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d,\"text\":\"%s\",\"tag\":%s}"), + // eventname, + // val, text, tag); + // else + // snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d,\"text\":\"%s\"}"), eventname, val, + // text); } event_send_object_data(obj, data); } @@ -433,15 +444,19 @@ void textarea_event_handler(lv_obj_t* obj, lv_event_t event) char data[1024]; { + StaticJsonDocument<1024> doc; char eventname[8]; Parser::get_event_name(hasp_event_id, eventname, sizeof(eventname)); - - if(const char* tag = my_obj_get_tag(obj)) - snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"text\":\"%s\",\"tag\":%s}"), eventname, - lv_textarea_get_text(obj), tag); - else - snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"text\":\"%s\"}"), eventname, - lv_textarea_get_text(obj)); + doc["event"] = eventname; + doc["text"] = lv_textarea_get_text(obj); + if(const char* tag = my_obj_get_tag(obj)) doc["tag"] = tag; + serializeJson(doc, data, sizeof(data)); + // if(const char* tag = my_obj_get_tag(obj)) + // snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"text\":\"%s\",\"tag\":%s}"), eventname, + // lv_textarea_get_text(obj), tag); + // else + // snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"text\":\"%s\"}"), eventname, + // lv_textarea_get_text(obj)); } event_send_object_data(obj, data); @@ -525,13 +540,16 @@ void generic_event_handler(lv_obj_t* obj, lv_event_t event) } else { char data[512]; { + StaticJsonDocument<512> doc; char eventname[8]; Parser::get_event_name(last_value_sent, eventname, sizeof(eventname)); - - if(const char* tag = my_obj_get_tag(obj)) - snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"tag\":%s}"), eventname, tag); - else - snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\"}"), eventname); + doc["event"] = eventname; + if(const char* tag = my_obj_get_tag(obj)) doc["tag"] = tag; + serializeJson(doc, data, sizeof(data)); + // if(const char* tag = my_obj_get_tag(obj)) + // snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"tag\":%s}"), eventname, tag); + // else + // snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\"}"), eventname); } event_send_object_data(obj, data); } @@ -842,8 +860,10 @@ void cpicker_event_handler(lv_obj_t* obj, lv_event_t event) char data[512]; { - char eventname[8]; - Parser::get_event_name(hasp_event_id, eventname, sizeof(eventname)); + StaticJsonDocument<512> doc; + char buffer[8]; + Parser::get_event_name(hasp_event_id, buffer, sizeof(buffer)); + doc["event"] = buffer; lv_color32_t c32; lv_color_hsv_t hsv; @@ -851,18 +871,30 @@ void cpicker_event_handler(lv_obj_t* obj, lv_event_t event) hsv = lv_color_rgb_to_hsv(c32.ch.red, c32.ch.green, c32.ch.blue); last_color_sent = color; - if(const char* tag = my_obj_get_tag(obj)) - snprintf_P(data, sizeof(data), - PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"h\":%d,\"s\":%" - "d,\"v\":%d,\"tag\":%s}"), - eventname, c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue, hsv.h, - hsv.s, hsv.v, tag); - else - snprintf_P(data, sizeof(data), - PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"h\":%d,\"s\":%" - "d,\"v\":%d}"), - eventname, c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue, hsv.h, - hsv.s, hsv.v); + snprintf_P(buffer, sizeof(buffer), PSTR("#%02x%02x%02x"), c32.ch.red, c32.ch.green, c32.ch.blue); + doc["color"] = buffer; + doc["r"] = c32.ch.red; + doc["g"] = c32.ch.green; + doc["b"] = c32.ch.blue; + doc["h"] = hsv.h; + doc["s"] = hsv.s; + doc["v"] = hsv.v; + + if(const char* tag = my_obj_get_tag(obj)) doc["tag"] = tag; + serializeJson(doc, data, sizeof(data)); + + // if(const char* tag = my_obj_get_tag(obj)) + // snprintf_P(data, sizeof(data), + // PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"h\":%d,\"s\":%" + // "d,\"v\":%d,\"tag\":%s}"), + // eventname, c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue, hsv.h, + // hsv.s, hsv.v, tag); + // else + // snprintf_P(data, sizeof(data), + // PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"h\":%d,\"s\":%" + // "d,\"v\":%d}"), + // eventname, c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue, hsv.h, + // hsv.s, hsv.v); } event_send_object_data(obj, data);