diff --git a/src/hasp_attr_set.cpp b/src/hasp_attr_set.cpp index d9edc7d6..96ab4489 100644 --- a/src/hasp_attr_set.cpp +++ b/src/hasp_attr_set.cpp @@ -9,6 +9,11 @@ LV_FONT_DECLARE(unscii_8_icon); +static inline bool is_true(const char * s) +{ + return (!strcmp_P(s, PSTR("true")) || !strcmp_P(s, PSTR("TRUE")) || !strcmp_P(s, PSTR("1"))); +} + lv_color_t haspLogColor(lv_color_t color) { uint8_t r = (LV_COLOR_GET_R(color) * 263 + 7) >> 5; @@ -25,26 +30,26 @@ lv_color_t haspPayloadToColor(const char * payload) if(!strcmp_P(payload, PSTR("red"))) return haspLogColor(LV_COLOR_RED); break; case 4: - if(!strcmp_P(payload, PSTR("aqua"))) return haspLogColor(LV_COLOR_AQUA); if(!strcmp_P(payload, PSTR("blue"))) return haspLogColor(LV_COLOR_BLUE); if(!strcmp_P(payload, PSTR("cyan"))) return haspLogColor(LV_COLOR_CYAN); if(!strcmp_P(payload, PSTR("gray"))) return haspLogColor(LV_COLOR_GRAY); + if(!strcmp_P(payload, PSTR("aqua"))) return haspLogColor(LV_COLOR_AQUA); if(!strcmp_P(payload, PSTR("lime"))) return haspLogColor(LV_COLOR_LIME); if(!strcmp_P(payload, PSTR("teal"))) return haspLogColor(LV_COLOR_TEAL); if(!strcmp_P(payload, PSTR("navy"))) return haspLogColor(LV_COLOR_NAVY); break; case 5: - if(!strcmp_P(payload, PSTR("olive"))) return haspLogColor(LV_COLOR_OLIVE); if(!strcmp_P(payload, PSTR("green"))) return haspLogColor(LV_COLOR_GREEN); if(!strcmp_P(payload, PSTR("white"))) return haspLogColor(LV_COLOR_WHITE); if(!strcmp_P(payload, PSTR("black"))) return haspLogColor(LV_COLOR_BLACK); + if(!strcmp_P(payload, PSTR("olive"))) return haspLogColor(LV_COLOR_OLIVE); break; case 6: - if(!strcmp_P(payload, PSTR("maroon"))) return haspLogColor(LV_COLOR_MAROON); + if(!strcmp_P(payload, PSTR("yellow"))) return haspLogColor(LV_COLOR_YELLOW); if(!strcmp_P(payload, PSTR("orange"))) return haspLogColor(LV_COLOR_ORANGE); if(!strcmp_P(payload, PSTR("purple"))) return haspLogColor(LV_COLOR_PURPLE); if(!strcmp_P(payload, PSTR("silver"))) return haspLogColor(LV_COLOR_SILVER); - if(!strcmp_P(payload, PSTR("yellow"))) return haspLogColor(LV_COLOR_YELLOW); + if(!strcmp_P(payload, PSTR("maroon"))) return haspLogColor(LV_COLOR_MAROON); break; case 7: if(!strcmp_P(payload, PSTR("magenta"))) return haspLogColor(LV_COLOR_MAGENTA); @@ -65,9 +70,9 @@ lv_color_t haspPayloadToColor(const char * payload) return LV_COLOR_BLACK; } -void haspAttributeNotFound(String & strAttr) +static void haspAttributeNotFound(const char * attr) { - Log.warning(F("HASP: Unknown property %s"), strAttr.c_str()); + Log.warning(F("HASP: Unknown property %s"), attr); } void set_cpicker_value(lv_obj_t * obj, const char * payload) @@ -110,142 +115,150 @@ void haspSetOpacity(lv_obj_t * obj, uint8_t val) #endif } -void haspSetLocalStyle(lv_obj_t * obj, String & strAttr, String & strPayload) +void haspSetLocalStyle(lv_obj_t * obj, const char * attr_p, const char * payload) { uint8_t part = LV_TABLE_PART_BG; uint8_t state = LV_STATE_DEFAULT; - int16_t var = strPayload.toInt(); - // lv_color_t color = lv_color_hex((uint32_t)strPayload.toInt()); - // debugPrintln(strAttr + ":" + strPayload); + int16_t var = atoi(payload); - // Check Trailing partnumber - if(strAttr.endsWith(F("1"))) { - part = LV_TABLE_PART_CELL1; - } else if(strAttr.endsWith(F("2"))) { - part = LV_TABLE_PART_CELL2; - } else if(strAttr.endsWith(F("3"))) { - part = LV_TABLE_PART_CELL3; - } else if(strAttr.endsWith(F("4"))) { - part = LV_TABLE_PART_CELL4; - // } else if(strAttr.endsWith(F("9"))) { - // part = LV_PAGE_PART_SCRL; + int len = strlen(attr_p); + + if(len > 0) { + // Check Trailing partnumber + if(attr_p[len - 1] == '1') { + part = LV_TABLE_PART_CELL1; + } else if(attr_p[len - 1] == '2') { + part = LV_TABLE_PART_CELL2; + } else if(attr_p[len - 1] == '3') { + part = LV_TABLE_PART_CELL3; + } else if(attr_p[len - 1] == '4') { + part = LV_TABLE_PART_CELL4; + // } else if(attr[len - 1] == '9') { + // part = LV_PAGE_PART_SCRL; + } } // Remove Trailing part digit - if(part != LV_TABLE_PART_BG && strAttr.length() > 0) strAttr.remove(strAttr.length() - 1); + char attr[128]; + if(part != LV_TABLE_PART_BG && len > 0) { + strncpy(attr, attr_p, len - 1); + } else { + strncpy(attr, attr_p, len); + } + // debugPrintln(strAttr + "&" + part); - if(strAttr == F("radius")) { + if(!strcmp_P(attr, PSTR("radius"))) { return lv_obj_set_style_local_radius(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("clip_corner")) { + } else if(!strcmp_P(attr, PSTR("clip_corner"))) { return lv_obj_set_style_local_clip_corner(obj, part, state, (bool)var); - } else if(strAttr == F("size")) { + } else if(!strcmp_P(attr, PSTR("size"))) { return lv_obj_set_style_local_size(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("transform_width")) { + } else if(!strcmp_P(attr, PSTR("transform_width"))) { return lv_obj_set_style_local_transform_width(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("transform_height")) { + } else if(!strcmp_P(attr, PSTR("transform_height"))) { return lv_obj_set_style_local_transform_height(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("opa_scale")) { + } else if(!strcmp_P(attr, PSTR("opa_scale"))) { return lv_obj_set_style_local_opa_scale(obj, part, state, (lv_opa_t)var); - } else if(strAttr == F("pad_top")) { + } else if(!strcmp_P(attr, PSTR("pad_top"))) { return lv_obj_set_style_local_pad_top(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("pad_bottom")) { + } else if(!strcmp_P(attr, PSTR("pad_bottom"))) { return lv_obj_set_style_local_pad_bottom(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("pad_left")) { + } else if(!strcmp_P(attr, PSTR("pad_left"))) { return lv_obj_set_style_local_pad_left(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("pad_right")) { + } else if(!strcmp_P(attr, PSTR("pad_right"))) { return lv_obj_set_style_local_pad_right(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("pad_inner")) { + } else if(!strcmp_P(attr, PSTR("pad_inner"))) { return lv_obj_set_style_local_pad_inner(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("bg_blend_mode")) { + } else if(!strcmp_P(attr, PSTR("bg_blend_mode"))) { return lv_obj_set_style_local_bg_blend_mode(obj, part, state, (lv_blend_mode_t)var); - } else if(strAttr == F("bg_main_stop")) { + } else if(!strcmp_P(attr, PSTR("bg_main_stop"))) { return lv_obj_set_style_local_bg_main_stop(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("bg_grad_stop")) { + } else if(!strcmp_P(attr, PSTR("bg_grad_stop"))) { return lv_obj_set_style_local_bg_grad_stop(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("bg_grad_dir")) { + } else if(!strcmp_P(attr, PSTR("bg_grad_dir"))) { return lv_obj_set_style_local_bg_grad_dir(obj, part, state, (lv_grad_dir_t)var); - } else if(strAttr == F("bg_color")) { - lv_color_t color = haspPayloadToColor(strPayload.c_str()); + } else if(!strcmp_P(attr, PSTR("bg_color"))) { + lv_color_t color = haspPayloadToColor(payload); if(part != 64) return lv_obj_set_style_local_bg_color(obj, part, state, color); else return lv_obj_set_style_local_bg_color(obj, LV_PAGE_PART_SCRL, LV_STATE_CHECKED, color); - } else if(strAttr == F("bg_grad_color")) { - lv_color_t color = haspPayloadToColor(strPayload.c_str()); + } else if(!strcmp_P(attr, PSTR("bg_grad_color"))) { + lv_color_t color = haspPayloadToColor(payload); return lv_obj_set_style_local_bg_grad_color(obj, part, state, color); - } else if(strAttr == F("bg_opa")) { + } else if(!strcmp_P(attr, PSTR("bg_opa"))) { return lv_obj_set_style_local_bg_opa(obj, part, state, (lv_opa_t)var); - } else if(strAttr == F("border_width")) { + } else if(!strcmp_P(attr, PSTR("border_width"))) { return lv_obj_set_style_local_border_width(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("border_side")) { + } else if(!strcmp_P(attr, PSTR("border_side"))) { return lv_obj_set_style_local_border_side(obj, part, state, (lv_border_side_t)var); - } else if(strAttr == F("border_blend_mode")) { + } else if(!strcmp_P(attr, PSTR("border_blend_mode"))) { return lv_obj_set_style_local_border_blend_mode(obj, part, state, (lv_blend_mode_t)var); - } else if(strAttr == F("border_post")) { + } else if(!strcmp_P(attr, PSTR("border_post"))) { return lv_obj_set_style_local_border_post(obj, part, state, (bool)var); - } else if(strAttr == F("border_color")) { - lv_color_t color = haspPayloadToColor(strPayload.c_str()); + } else if(!strcmp_P(attr, PSTR("border_color"))) { + lv_color_t color = haspPayloadToColor(payload); return lv_obj_set_style_local_border_color(obj, part, state, color); - } else if(strAttr == F("border_opa")) { + } else if(!strcmp_P(attr, PSTR("border_opa"))) { return lv_obj_set_style_local_border_opa(obj, part, state, (lv_opa_t)var); - } else if(strAttr == F("outline_width")) { + } else if(!strcmp_P(attr, PSTR("outline_width"))) { return lv_obj_set_style_local_outline_width(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("outline_pad")) { + } else if(!strcmp_P(attr, PSTR("outline_pad"))) { return lv_obj_set_style_local_outline_pad(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("outline_blend_mode")) { + } else if(!strcmp_P(attr, PSTR("outline_blend_mode"))) { return lv_obj_set_style_local_outline_blend_mode(obj, part, state, (lv_blend_mode_t)var); - } else if(strAttr == F("outline_color")) { - lv_color_t color = haspPayloadToColor(strPayload.c_str()); + } else if(!strcmp_P(attr, PSTR("outline_color"))) { + lv_color_t color = haspPayloadToColor(payload); return lv_obj_set_style_local_outline_color(obj, part, state, color); - } else if(strAttr == F("outline_opa")) { + } else if(!strcmp_P(attr, PSTR("outline_opa"))) { return lv_obj_set_style_local_outline_opa(obj, part, state, (lv_opa_t)var); - } else if(strAttr == F("shadow_width")) { + } else if(!strcmp_P(attr, PSTR("shadow_width"))) { return lv_obj_set_style_local_shadow_width(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("shadow_ofs_x")) { + } else if(!strcmp_P(attr, PSTR("shadow_ofs_x"))) { return lv_obj_set_style_local_shadow_ofs_x(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("shadow_ofs_y")) { + } else if(!strcmp_P(attr, PSTR("shadow_ofs_y"))) { return lv_obj_set_style_local_shadow_ofs_y(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("shadow_spread")) { + } else if(!strcmp_P(attr, PSTR("shadow_spread"))) { return lv_obj_set_style_local_shadow_spread(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("shadow_blend_mode")) { + } else if(!strcmp_P(attr, PSTR("shadow_blend_mode"))) { return lv_obj_set_style_local_shadow_blend_mode(obj, part, state, (lv_blend_mode_t)var); - } else if(strAttr == F("shadow_color")) { - lv_color_t color = haspPayloadToColor(strPayload.c_str()); + } else if(!strcmp_P(attr, PSTR("shadow_color"))) { + lv_color_t color = haspPayloadToColor(payload); return lv_obj_set_style_local_shadow_color(obj, part, state, color); - } else if(strAttr == F("shadow_opa")) { + } else if(!strcmp_P(attr, PSTR("shadow_opa"))) { return lv_obj_set_style_local_shadow_opa(obj, part, state, (lv_opa_t)var); - } else if(strAttr == F("pattern_repeat")) { + } else if(!strcmp_P(attr, PSTR("pattern_repeat"))) { return lv_obj_set_style_local_pattern_repeat(obj, part, state, (bool)var); - } else if(strAttr == F("pattern_blend_mode")) { + } else if(!strcmp_P(attr, PSTR("pattern_blend_mode"))) { return lv_obj_set_style_local_pattern_blend_mode(obj, part, state, (lv_blend_mode_t)var); - } else if(strAttr == F("pattern_recolor")) { - lv_color_t color = haspPayloadToColor(strPayload.c_str()); + } else if(!strcmp_P(attr, PSTR("pattern_recolor"))) { + lv_color_t color = haspPayloadToColor(payload); return lv_obj_set_style_local_pattern_recolor(obj, part, state, color); - } else if(strAttr == F("pattern_opa")) { + } else if(!strcmp_P(attr, PSTR("pattern_opa"))) { return lv_obj_set_style_local_pattern_opa(obj, part, state, (lv_opa_t)var); - } else if(strAttr == F("pattern_recolor_opa")) { + } else if(!strcmp_P(attr, PSTR("pattern_recolor_opa"))) { return lv_obj_set_style_local_pattern_recolor_opa(obj, part, state, (lv_opa_t)var); - } else if(strAttr == F("pattern_image")) { + } else if(!strcmp_P(attr, PSTR("pattern_image"))) { // return lv_obj_set_style_local_pattern_image(obj, part, state, (constvoid *)var); - } else if(strAttr == F("value_letter_space")) { + } else if(!strcmp_P(attr, PSTR("value_letter_space"))) { return lv_obj_set_style_local_value_letter_space(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("value_line_space")) { + } else if(!strcmp_P(attr, PSTR("value_line_space"))) { return lv_obj_set_style_local_value_line_space(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("value_blend_mode")) { + } else if(!strcmp_P(attr, PSTR("value_blend_mode"))) { return lv_obj_set_style_local_value_blend_mode(obj, part, state, (lv_blend_mode_t)var); - } else if(strAttr == F("value_ofs_x")) { + } else if(!strcmp_P(attr, PSTR("value_ofs_x"))) { return lv_obj_set_style_local_value_ofs_x(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("value_ofs_y")) { + } else if(!strcmp_P(attr, PSTR("value_ofs_y"))) { return lv_obj_set_style_local_value_ofs_y(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("value_align")) { + } else if(!strcmp_P(attr, PSTR("value_align"))) { return lv_obj_set_style_local_value_align(obj, part, state, (lv_align_t)var); - } else if(strAttr == F("value_color")) { - lv_color_t color = haspPayloadToColor(strPayload.c_str()); + } else if(!strcmp_P(attr, PSTR("value_color"))) { + lv_color_t color = haspPayloadToColor(payload); return lv_obj_set_style_local_value_color(obj, part, state, color); - } else if(strAttr == F("value_opa")) { + } else if(!strcmp_P(attr, PSTR("value_opa"))) { return lv_obj_set_style_local_value_opa(obj, part, state, (lv_opa_t)var); - } else if(strAttr == F("value_font")) { + } else if(!strcmp_P(attr, PSTR("value_font"))) { #if ESP32 switch(var) { case 8: @@ -267,25 +280,25 @@ void haspSetLocalStyle(lv_obj_t * obj, String & strAttr, String & strPayload) return; #endif // return lv_obj_set_style_local_value_font(obj, part, state, (constlv_font_t *)var); - } else if(strAttr == F("value_str")) { - return lv_obj_set_style_local_value_str(obj, part, state, (const char *)strPayload.c_str()); - } else if(strAttr == F("text_letter_space")) { + } else if(!strcmp_P(attr, PSTR("value_str"))) { + return lv_obj_set_style_local_value_str(obj, part, state, (const char *)payload); + } else if(!strcmp_P(attr, PSTR("text_letter_space"))) { return lv_obj_set_style_local_text_letter_space(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("text_line_space")) { + } else if(!strcmp_P(attr, PSTR("text_line_space"))) { return lv_obj_set_style_local_text_line_space(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("text_decor")) { + } else if(!strcmp_P(attr, PSTR("text_decor"))) { return lv_obj_set_style_local_text_decor(obj, part, state, (lv_text_decor_t)var); - } else if(strAttr == F("text_blend_mode")) { + } else if(!strcmp_P(attr, PSTR("text_blend_mode"))) { return lv_obj_set_style_local_text_blend_mode(obj, part, state, (lv_blend_mode_t)var); - } else if(strAttr == F("text_color")) { - lv_color_t color = haspPayloadToColor(strPayload.c_str()); + } else if(!strcmp_P(attr, PSTR("text_color"))) { + lv_color_t color = haspPayloadToColor(payload); return lv_obj_set_style_local_text_color(obj, part, state, color); - } else if(strAttr == F("text_sel_color")) { - lv_color_t color = haspPayloadToColor(strPayload.c_str()); + } else if(!strcmp_P(attr, PSTR("text_sel_color"))) { + lv_color_t color = haspPayloadToColor(payload); return lv_obj_set_style_local_text_sel_color(obj, part, state, color); - } else if(strAttr == F("text_opa")) { + } else if(!strcmp_P(attr, PSTR("text_opa"))) { return lv_obj_set_style_local_text_opa(obj, part, state, (lv_opa_t)var); - } else if(strAttr == F("text_font")) { + } else if(!strcmp_P(attr, PSTR("text_font"))) { #if ESP32 switch(var) { case 8: @@ -307,52 +320,52 @@ void haspSetLocalStyle(lv_obj_t * obj, String & strAttr, String & strPayload) return; #endif // return lv_obj_set_style_local_text_font(obj, part, state, (constlv_font_t *)var); - } else if(strAttr == F("line_width")) { + } else if(!strcmp_P(attr, PSTR("line_width"))) { return lv_obj_set_style_local_line_width(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("line_blend_mode")) { + } else if(!strcmp_P(attr, PSTR("line_blend_mode"))) { return lv_obj_set_style_local_line_blend_mode(obj, part, state, (lv_blend_mode_t)var); - } else if(strAttr == F("line_dash_width")) { + } else if(!strcmp_P(attr, PSTR("line_dash_width"))) { return lv_obj_set_style_local_line_dash_width(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("line_dash_gap")) { + } else if(!strcmp_P(attr, PSTR("line_dash_gap"))) { return lv_obj_set_style_local_line_dash_gap(obj, part, state, (lv_style_int_t)var); - } else if(strAttr == F("line_rounded")) { + } else if(!strcmp_P(attr, PSTR("line_rounded"))) { return lv_obj_set_style_local_line_rounded(obj, part, state, (bool)var); - } else if(strAttr == F("line_color")) { - lv_color_t color = haspPayloadToColor(strPayload.c_str()); + } else if(!strcmp_P(attr, PSTR("line_color"))) { + lv_color_t color = haspPayloadToColor(payload); return lv_obj_set_style_local_line_color(obj, part, state, color); - } else if(strAttr == F("line_opa")) { + } else if(!strcmp_P(attr, PSTR("line_opa"))) { return lv_obj_set_style_local_line_opa(obj, part, state, (lv_opa_t)var); } /* Property not found */ - haspAttributeNotFound(strAttr); + haspAttributeNotFound(attr); } -void haspSetObjAttribute1(lv_obj_t * obj, String & strAttr, String & strPayload) +void haspSetObjAttribute1(lv_obj_t * obj, const char * attr, const char * payload) { - uint16_t val = (uint16_t)strPayload.toInt(); + int16_t val = atoi(payload); - if(strAttr == F("x")) { + if(!strcmp_P(attr, PSTR("x"))) { lv_obj_set_x(obj, val); return; - } else if(strAttr == F("y")) { + } else if(!strcmp_P(attr, PSTR("y"))) { lv_obj_set_y(obj, val); return; - } else if(strAttr == F("w")) { + } else if(!strcmp_P(attr, PSTR("w"))) { lv_obj_set_width(obj, val); return; - } else if(strAttr == F("h")) { + } else if(!strcmp_P(attr, PSTR("h"))) { lv_obj_set_height(obj, val); return; } - haspSetLocalStyle(obj, strAttr, strPayload); + haspSetLocalStyle(obj, attr, payload); } -void haspSetObjAttribute3(lv_obj_t * obj, String & strAttr, String & strPayload) +void haspSetObjAttribute3(lv_obj_t * obj, const char * attr, const char * payload) { - uint16_t val = (uint16_t)strPayload.toInt(); + int16_t val = atoi(payload); - if(strAttr == F("vis")) { + if(!strcmp_P(attr, PSTR("vis"))) { lv_obj_set_hidden(obj, val == 0); return; } else { @@ -360,25 +373,25 @@ void haspSetObjAttribute3(lv_obj_t * obj, String & strAttr, String & strPayload) lv_obj_type_t list; lv_obj_get_type(obj, &list); - if(strAttr == F("txt")) { // In order of likelihood to occur + if(!strcmp_P(attr, PSTR("txt"))) { // In order of likelihood to occur if(check_obj_type(list.type[0], LV_HASP_BUTTON)) { - haspSetLabelText(obj, strPayload.c_str()); + haspSetLabelText(obj, payload); return; } else if(check_obj_type(list.type[0], LV_HASP_LABEL)) { - lv_label_set_text(obj, strPayload.c_str()); + lv_label_set_text(obj, payload); return; } else if(check_obj_type(list.type[0], LV_HASP_CHECKBOX)) { #if LVGL7 - lv_checkbox_set_text(obj, strPayload.c_str()); + lv_checkbox_set_text(obj, payload); #else - lv_cb_set_text(obj, strPayload.c_str()); + lv_cb_set_text(obj, payload); #endif return; } } - if(strAttr == F("val")) { // In order of likelihood to occur - int16_t intval = (int16_t)strPayload.toInt(); + if(!strcmp_P(attr, PSTR("val"))) { // In order of likelihood to occur + int16_t intval = atoi(payload); #if LVGL7 if(check_obj_type(list.type[0], LV_HASP_BUTTON)) { @@ -445,13 +458,13 @@ void haspSetObjAttribute3(lv_obj_t * obj, String & strAttr, String & strPayload) lv_bar_set_value(obj, intval, LV_ANIM_OFF); return; } else if(check_obj_type(list.type[0], LV_HASP_CPICKER)) { - set_cpicker_value(obj, strPayload.c_str()); + set_cpicker_value(obj, payload); return; } } - if(strAttr == F("min")) { // In order of likelihood to occur - int16_t min = (int16_t)strPayload.toInt(); + if(!strcmp_P(attr, PSTR("min"))) { // In order of likelihood to occur + int16_t min = atoi(payload); if(check_obj_type(list.type[0], LV_HASP_SLIDER)) { int16_t max = lv_slider_get_max_value(obj); lv_slider_set_range(obj, min, max); @@ -471,8 +484,8 @@ void haspSetObjAttribute3(lv_obj_t * obj, String & strAttr, String & strPayload) } } - if(strAttr == F("max")) { // In order of likelihood to occur - int16_t max = (int16_t)strPayload.toInt(); + if(!strcmp_P(attr, PSTR("max"))) { // In order of likelihood to occur + int16_t max = atoi(payload); if(check_obj_type(list.type[0], LV_HASP_SLIDER)) { int16_t min = lv_slider_get_max_value(obj); lv_slider_set_range(obj, min, max); @@ -492,14 +505,14 @@ void haspSetObjAttribute3(lv_obj_t * obj, String & strAttr, String & strPayload) } } } - haspSetLocalStyle(obj, strAttr, strPayload); + haspSetLocalStyle(obj, attr, payload); } -void haspSetObjAttribute4(lv_obj_t * obj, String & strAttr, String & strPayload) +void haspSetObjAttribute4(lv_obj_t * obj, const char * attr, const char * payload) { - uint16_t val = (uint16_t)strPayload.toInt(); + int16_t val = atoi(payload); - if(strAttr == F("rows")) { + if(!strcmp_P(attr, PSTR("rows"))) { lv_obj_type_t list; lv_obj_get_type(obj, &list); @@ -507,100 +520,97 @@ void haspSetObjAttribute4(lv_obj_t * obj, String & strAttr, String & strPayload) lv_roller_set_visible_row_count(obj, (uint8_t)val); return; } - } else if(strAttr == F("rect")) { + } else if(!strcmp_P(attr, PSTR("rect"))) { lv_obj_type_t list; lv_obj_get_type(obj, &list); if(check_obj_type(list.type[0], LV_HASP_CPICKER)) { - strPayload.toLowerCase(); - if(strPayload == F("true")) val = 1; + if(is_true(payload)) val = 1; lv_cpicker_set_type(obj, val ? LV_CPICKER_TYPE_RECT : LV_CPICKER_TYPE_DISC); return; } } - haspSetLocalStyle(obj, strAttr, strPayload); + haspSetLocalStyle(obj, attr, payload); } -void haspSetObjAttribute6(lv_obj_t * obj, String & strAttr, String & strPayload) +void haspSetObjAttribute6(lv_obj_t * obj, const char * attr, const char * payload) { - uint16_t val = (uint16_t)strPayload.toInt(); + int16_t val = atoi(payload); - if(strAttr == F("hidden")) { + if(!strcmp_P(attr, PSTR("hidden"))) { lv_obj_set_hidden(obj, val == 0); return; - } else if(strAttr == F("toggle")) { + } else if(!strcmp_P(attr, PSTR("toggle"))) { lv_obj_type_t list; lv_obj_get_type(obj, &list); if(check_obj_type(list.type[0], LV_HASP_BUTTON)) { - haspSetToggle(obj, strPayload.toInt() > 0); + haspSetToggle(obj, atoi(payload) > 0); return; } } - haspSetLocalStyle(obj, strAttr, strPayload); + haspSetLocalStyle(obj, attr, payload); } -void haspSetObjAttribute7(lv_obj_t * obj, String & strAttr, String & strPayload) +void haspSetObjAttribute7(lv_obj_t * obj, const char * attr, const char * payload) { - uint16_t val = (uint16_t)strPayload.toInt(); + int16_t val = atoi(payload); - if(strAttr == F("opacity")) { + if(!strcmp_P(attr, PSTR("opacity"))) { haspSetOpacity(obj, val); return; - } else if(strAttr == F("enabled")) { + } else if(!strcmp_P(attr, PSTR("enabled"))) { lv_obj_set_click(obj, val != 0); return; - } else if(strAttr == F("options")) { + } else if(!strcmp_P(attr, PSTR("options"))) { /* .options depend on objecttype */ lv_obj_type_t list; lv_obj_get_type(obj, &list); if(check_obj_type(list.type[0], LV_HASP_DDLIST)) { #if LVGL7 - lv_dropdown_set_options(obj, strPayload.c_str()); + lv_dropdown_set_options(obj, payload); #else - lv_ddlist_set_options(obj, strPayload.c_str()); + lv_ddlist_set_options(obj, payload); #endif return; } else if(check_obj_type(list.type[0], LV_HASP_ROLLER)) { lv_roller_ext_t * ext = (lv_roller_ext_t *)lv_obj_get_ext_attr(obj); - lv_roller_set_options(obj, strPayload.c_str(), ext->mode); + lv_roller_set_options(obj, payload, ext->mode); return; } } - haspSetLocalStyle(obj, strAttr, strPayload); + haspSetLocalStyle(obj, attr, payload); } -void haspSetObjAttribute(lv_obj_t * obj, String strAttr, String strPayload) +void hasp_set_obj_attribute(lv_obj_t * obj, const char * attr_p, const char * payload) { if(!obj) { Log.warning(F("HASP: Unknown object")); return; } - if(strAttr.startsWith(".")) { - strAttr.remove(0, 1); - } else { - // return haspAttributeNotFound(strAttr); - } + // strip starting '.' + char * attr = (char *)attr_p; + if(*attr == '.') attr++; - switch(strAttr.length()) { + switch(strlen(attr)) { case 1: - haspSetObjAttribute1(obj, strAttr, strPayload); + haspSetObjAttribute1(obj, attr, payload); break; case 4: - haspSetObjAttribute4(obj, strAttr, strPayload); + haspSetObjAttribute4(obj, attr, payload); break; case 3: - haspSetObjAttribute3(obj, strAttr, strPayload); + haspSetObjAttribute3(obj, attr, payload); break; case 6: - haspSetObjAttribute6(obj, strAttr, strPayload); + haspSetObjAttribute6(obj, attr, payload); break; case 7: - haspSetObjAttribute7(obj, strAttr, strPayload); + haspSetObjAttribute7(obj, attr, payload); break; default: - haspSetLocalStyle(obj, strAttr, strPayload); + haspSetLocalStyle(obj, attr, payload); } } \ No newline at end of file diff --git a/src/hasp_attr_set.h b/src/hasp_attr_set.h index adc682f2..20ed2921 100644 --- a/src/hasp_attr_set.h +++ b/src/hasp_attr_set.h @@ -8,7 +8,7 @@ extern "C" { #endif -void haspSetObjAttribute(lv_obj_t * obj, String strAttr, String strPayload); +void hasp_set_obj_attribute(lv_obj_t * obj, const char * attr_p, const char * payload); void haspSetOpacity(lv_obj_t * obj, uint8_t val); #ifdef __cplusplus