diff --git a/platformio.ini b/platformio.ini index 1c26f6a1..7bdb6062 100644 --- a/platformio.ini +++ b/platformio.ini @@ -64,6 +64,7 @@ build_flags = -D STREAMUTILS_ENABLE_EEPROM=1 ; for STM32, it also supports EEPROM ; -- Hasp build options ---------------------------- + -D HASP_USE_FREETYPE=1 -D HASP_VER_MAJ=0 -D HASP_VER_MIN=6 ;-D HASP_VER_REV=3 diff --git a/src/hasp/hasp_attribute.cpp b/src/hasp/hasp_attribute.cpp index 7160b8a8..675f3620 100644 --- a/src/hasp/hasp_attribute.cpp +++ b/src/hasp/hasp_attribute.cpp @@ -1420,7 +1420,7 @@ static hasp_attribute_type_t attribute_common_json(lv_obj_t* obj, uint16_t attr_ { switch(attr_hash) { case ATTR_JSONL: { - DeserializationError jsonError; + DeserializationError jsonError = DeserializationError::Ok; if(update) { @@ -1433,17 +1433,20 @@ static hasp_attribute_type_t attribute_common_json(lv_obj_t* obj, uint16_t attr_ DeserializationError jsonError = deserializeJson(json, (char*)payload); json.shrinkToFit(); - if(!jsonError) { + if(jsonError == DeserializationError::Ok) { // Make sure we have a valid JsonObject to start from if(JsonObject keys = json.as()) { hasp_parse_json_attributes(obj, keys); // json is valid object, cast as a JsonObject } else { + LOG_WARNING(TAG_ATTR, "%s %d", __FILE__, __LINE__); jsonError = DeserializationError::InvalidInput; } } else { + LOG_WARNING(TAG_ATTR, "%s %d", __FILE__, __LINE__); jsonError = DeserializationError::IncompleteInput; } } + LOG_WARNING(TAG_ATTR, "%s %d", __FILE__, __LINE__); if(jsonError) { // Couldn't parse incoming JSON object dispatch_json_error(TAG_ATTR, jsonError); diff --git a/src/hasp/hasp_dispatch.cpp b/src/hasp/hasp_dispatch.cpp index 0781e3fa..8f938f30 100644 --- a/src/hasp/hasp_dispatch.cpp +++ b/src/hasp/hasp_dispatch.cpp @@ -135,7 +135,9 @@ void dispatch_state_val(const char* topic, hasp_event_t eventid, int32_t val) void dispatch_json_error(uint8_t tag, DeserializationError& jsonError) { - LOG_ERROR(tag, F(D_JSON_FAILED " %s"), jsonError.c_str()); + LOG_ERROR(tag, F(D_JSON_FAILED " %d"), jsonError); + // const char * error = jsonError.c_str(); + // LOG_ERROR(tag, F(D_JSON_FAILED " %s"), error); } // p[x].b[y].attr=value diff --git a/src/hasp/hasp_font.cpp b/src/hasp/hasp_font.cpp index fa7b013f..ba9b980c 100644 --- a/src/hasp/hasp_font.cpp +++ b/src/hasp/hasp_font.cpp @@ -20,13 +20,13 @@ static lv_ll_t hasp_fonts_ll; typedef struct { - const char* name; /* The name of the font file */ - lv_font_t* font; /* point to lvgl font */ + const char* payload; /* The payload with name and size */ + lv_font_t* font; /* point to lvgl font */ } hasp_font_info_t; void font_setup() { - _lv_ll_init(&hasp_fonts_ll, sizeof(lv_ft_info_t)); + _lv_ll_init(&hasp_fonts_ll, sizeof(hasp_font_info_t)); } size_t font_split_payload(const char* payload) @@ -43,7 +43,8 @@ static lv_font_t* font_find_in_list(const char* payload) { hasp_font_info_t* font_p = (hasp_font_info_t*)_lv_ll_get_head(&hasp_fonts_ll); while(font_p) { - if(strcmp(font_p->name, payload) == 0) { + if(strcmp(font_p->payload, payload) == 0) { // name and size + LOG_WARNING(TAG_FONT, F("Payload %s found => line height = %d"), payload, font_p->font->line_height); return font_p->font; } font_p = (hasp_font_info_t*)_lv_ll_get_next(&hasp_fonts_ll, font_p); @@ -62,27 +63,27 @@ static lv_font_t* font_add_to_list(const char* payload) char* name_p = NULL; #if defined(ARDUINO_ARCH_ESP32) && (HASP_USE_FREETYPE > 0) - // if(!font) { - // // Try .ttf file + if(!font) { + // Try .ttf file - // size_t pos = font_split_payload(payload); - // if(pos > 0 && pos < 56) { - // uint16_t size = atoi(payload + pos); + size_t pos = font_split_payload(payload); + if(pos > 0 && pos < 56) { + uint16_t size = atoi(payload + pos); - // char fontname[64]; - // memset(fontname, 0, sizeof(fontname)); - // strncpy(fontname, payload, pos); - // snprintf_P(filename, sizeof(filename), PSTR("L:\\%s.ttf"), fontname); + char fontname[64]; + memset(fontname, 0, sizeof(fontname)); + strncpy(fontname, payload, pos); + snprintf_P(filename, sizeof(filename), PSTR("L:\\%s.ttf"), fontname); - // lv_ft_info_t info; - // info.name = filename; - // info.weight = size; - // info.style = FT_FONT_STYLE_NORMAL; - // if(lv_ft_font_init(&info)) { - // font = info.font; - // } - // } - // } + lv_ft_info_t info; + info.name = filename; + info.weight = size; + info.style = FT_FONT_STYLE_NORMAL; + if(lv_ft_font_init(&info)) { + font = info.font; + } + } + } if(!font) { // Try .otf file @@ -101,20 +102,19 @@ static lv_font_t* font_add_to_list(const char* payload) if(!font) return NULL; LOG_VERBOSE(TAG_FONT, F("Loaded font %s size %d"), filename, font->line_height); + /* allox payload str */ size_t len = strlen(payload); name_p = (char*)calloc(sizeof(char), len + 1); if(!name_p) return NULL; strncpy(name_p, payload, len); - hasp_font_info_t info; - info.name = name_p; - info.font = font; + hasp_font_info_t* new_font_item; + new_font_item = (hasp_font_info_t*)_lv_ll_ins_tail(&hasp_fonts_ll); + if(!new_font_item) return NULL; - hasp_font_info_t* info_p; - info_p = (hasp_font_info_t*)_lv_ll_ins_tail(&hasp_fonts_ll); - *info_p = info; - - return info.font; + new_font_item->payload = name_p; + new_font_item->font = font; + return font; } // Convert the payload to a font pointer