Use hashed attribute names for speed

This commit is contained in:
fvanroie 2020-04-11 03:21:17 +02:00
parent 73849abaff
commit 695debb601

View File

@ -15,13 +15,14 @@ static inline bool is_true(const char * s);
static inline bool only_digits(const char * s);
/* 16-bit hashing function http://www.cse.yorku.ca/~oz/hash.html */
/* all possible attributes are hashed and checked if they are unique */
static uint16_t sdbm(const char * str)
{
uint16_t hash = 0;
char c;
// while(c = *str++) hash = c + (hash << 6) + (hash << 16) - hash;
while(c = (*str++)) {
while(c = (*(str++))) {
hash = tolower(c) + (hash << 6) - hash;
}
@ -224,7 +225,8 @@ static void hasp_attribute_get_part_state(lv_obj_t * obj, const char * attr_in,
}
}
static void hasp_local_style_attr_bg(lv_obj_t * obj, const char * attr_p, const char * payload, bool update)
static void hasp_local_style_attr(lv_obj_t * obj, const char * attr_p, uint16_t attr_hash, const char * payload,
bool update)
{
char attr[32];
uint8_t part = LV_TABLE_PART_BG;
@ -237,91 +239,186 @@ static void hasp_local_style_attr_bg(lv_obj_t * obj, const char * attr_p, const
* when using hasp_out use attr_p for the original attribute name
* *************************************************************** */
if(!strcmp_P(attr, PSTR("bg_blend_mode")))
switch(attr_hash) {
case ATTR_RADIUS:
return attribute_radius(obj, part, state, update, attr_p, var);
case ATTR_CLIP_CORNER:
return attribute_clip_corner(obj, part, state, update, attr_p, var);
case ATTR_SIZE:
return attribute_size(obj, part, state, update, attr_p, var);
case ATTR_TRANSFORM_WIDTH:
return lv_obj_set_style_local_transform_width(obj, part, state, (lv_style_int_t)var);
case ATTR_TRANSFORM_HEIGHT:
return lv_obj_set_style_local_transform_height(obj, part, state, (lv_style_int_t)var);
case ATTR_OPA_SCALE:
return lv_obj_set_style_local_opa_scale(obj, part, state, (lv_opa_t)var);
/* Background attributes */
case ATTR_BG_BLEND_MODE:
return attribute_bg_blend_mode(obj, part, state, update, attr_p, (lv_blend_mode_t)var);
if(!strcmp_P(attr, PSTR("bg_main_stop")))
case ATTR_BG_MAIN_STOP:
return attribute_bg_main_stop(obj, part, state, update, attr_p, (lv_style_int_t)var);
if(!strcmp_P(attr, PSTR("bg_grad_stop")))
case ATTR_BG_GRAD_STOP:
return attribute_bg_grad_stop(obj, part, state, update, attr_p, (lv_style_int_t)var);
if(!strcmp_P(attr, PSTR("bg_grad_dir")))
case ATTR_BG_GRAD_DIR:
return attribute_bg_grad_dir(obj, part, state, update, attr_p, (lv_grad_dir_t)var);
if(!strcmp_P(attr, PSTR("bg_color"))) {
case ATTR_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);
}
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);
}
case ATTR_BG_GRAD_COLOR:
return lv_obj_set_style_local_bg_grad_color(obj, part, state, haspPayloadToColor(payload));
case ATTR_BG_OPA:
return attribute_bg_opa(obj, part, state, update, attr_p, (lv_opa_t)var);
if(!strcmp_P(attr, PSTR("bg_opa"))) return attribute_bg_opa(obj, part, state, update, attr_p, (lv_opa_t)var);
Log.warning(F("HASP: Unknown property %s"), attr_p);
}
static void hasp_local_style_attr_pad(lv_obj_t * obj, const char * attr_p, const char * payload, bool update)
{
char attr[32];
uint8_t part = LV_TABLE_PART_BG;
uint8_t state = LV_STATE_DEFAULT;
int16_t var = atoi(payload);
hasp_attribute_get_part_state(obj, attr_p, attr, part, state);
/* ***** WARNING ****************************************************
* when using hasp_out use attr_p for the original attribute name
* *************************************************************** */
if(!strcmp_P(attr, PSTR("pad_top")))
/* Padding attributes */
case ATTR_PAD_TOP:
return attribute_pad_top(obj, part, state, update, attr_p, (lv_blend_mode_t)var);
if(!strcmp_P(attr, PSTR("pad_bottom")))
case ATTR_PAD_BOTTOM:
return attribute_pad_bottom(obj, part, state, update, attr_p, (lv_style_int_t)var);
if(!strcmp_P(attr, PSTR("pad_left")))
case ATTR_PAD_LEFT:
return attribute_pad_left(obj, part, state, update, attr_p, (lv_style_int_t)var);
if(!strcmp_P(attr, PSTR("pad_right")))
case ATTR_PAD_RIGHT:
return attribute_pad_right(obj, part, state, update, attr_p, (lv_grad_dir_t)var);
if(!strcmp_P(attr, PSTR("pad_inner"))) {
case ATTR_PAD_INNER:
return attribute_pad_inner(obj, part, state, update, attr_p, (lv_opa_t)var);
/* Text attributes */
case ATTR_TEXT_LETTER_SPACE:
return lv_obj_set_style_local_text_letter_space(obj, part, state, (lv_style_int_t)var);
case ATTR_TEXT_LINE_SPACE:
return lv_obj_set_style_local_text_line_space(obj, part, state, (lv_style_int_t)var);
case ATTR_TEXT_DECOR:
return lv_obj_set_style_local_text_decor(obj, part, state, (lv_text_decor_t)var);
case ATTR_TEXT_BLEND_MODE:
return lv_obj_set_style_local_text_blend_mode(obj, part, state, (lv_blend_mode_t)var);
case ATTR_TEXT_COLOR: {
lv_color_t color = haspPayloadToColor(payload);
return lv_obj_set_style_local_text_color(obj, part, state, color);
}
case ATTR_TEXT_SEL_COLOR: {
lv_color_t color = haspPayloadToColor(payload);
return lv_obj_set_style_local_text_sel_color(obj, part, state, color);
}
case ATTR_TEXT_OPA:
return lv_obj_set_style_local_text_opa(obj, part, state, (lv_opa_t)var);
/* Border attributes */
case ATTR_BORDER_WIDTH:
return lv_obj_set_style_local_border_width(obj, part, state, (lv_style_int_t)var);
case ATTR_BORDER_SIDE:
return lv_obj_set_style_local_border_side(obj, part, state, (lv_border_side_t)var);
case ATTR_BORDER_BLEND_MODE:
return lv_obj_set_style_local_border_blend_mode(obj, part, state, (lv_blend_mode_t)var);
case ATTR_BORDER_POST:
return lv_obj_set_style_local_border_post(obj, part, state, (bool)var);
case ATTR_BORDER_COLOR: {
lv_color_t color = haspPayloadToColor(payload);
return lv_obj_set_style_local_border_color(obj, part, state, color);
}
case ATTR_BORDER_OPA:
return lv_obj_set_style_local_border_opa(obj, part, state, (lv_opa_t)var);
/* Outline attributes */
case ATTR_OUTLINE_WIDTH:
return lv_obj_set_style_local_outline_width(obj, part, state, (lv_style_int_t)var);
case ATTR_OUTLINE_PAD:
return lv_obj_set_style_local_outline_pad(obj, part, state, (lv_style_int_t)var);
case ATTR_OUTLINE_BLEND_MODE:
return lv_obj_set_style_local_outline_blend_mode(obj, part, state, (lv_blend_mode_t)var);
case ATTR_OUTLINE_COLOR: {
lv_color_t color = haspPayloadToColor(payload);
return lv_obj_set_style_local_outline_color(obj, part, state, color);
}
case ATTR_OUTLINE_OPA:
return lv_obj_set_style_local_outline_opa(obj, part, state, (lv_opa_t)var);
/* Shadow attributes */
case ATTR_SHADOW_WIDTH:
return lv_obj_set_style_local_shadow_width(obj, part, state, (lv_style_int_t)var);
case ATTR_SHADOW_OFS_X:
return lv_obj_set_style_local_shadow_ofs_x(obj, part, state, (lv_style_int_t)var);
case ATTR_SHADOW_OFS_Y:
return lv_obj_set_style_local_shadow_ofs_y(obj, part, state, (lv_style_int_t)var);
case ATTR_SHADOW_SPREAD:
return lv_obj_set_style_local_shadow_spread(obj, part, state, (lv_style_int_t)var);
case ATTR_SHADOW_BLEND_MODE:
return lv_obj_set_style_local_shadow_blend_mode(obj, part, state, (lv_blend_mode_t)var);
case ATTR_SHADOW_COLOR: {
lv_color_t color = haspPayloadToColor(payload);
return lv_obj_set_style_local_shadow_color(obj, part, state, color);
}
case ATTR_SHADOW_OPA:
return lv_obj_set_style_local_shadow_opa(obj, part, state, (lv_opa_t)var);
/* Line attributes */
case ATTR_LINE_WIDTH:
return lv_obj_set_style_local_line_width(obj, part, state, (lv_style_int_t)var);
case ATTR_LINE_BLEND_MODE:
return lv_obj_set_style_local_line_blend_mode(obj, part, state, (lv_blend_mode_t)var);
case ATTR_LINE_DASH_WIDTH:
return lv_obj_set_style_local_line_dash_width(obj, part, state, (lv_style_int_t)var);
case ATTR_LINE_DASH_GAP:
return lv_obj_set_style_local_line_dash_gap(obj, part, state, (lv_style_int_t)var);
case ATTR_LINE_ROUNDED:
return lv_obj_set_style_local_line_rounded(obj, part, state, (bool)var);
case ATTR_LINE_COLOR: {
lv_color_t color = haspPayloadToColor(payload);
return lv_obj_set_style_local_line_color(obj, part, state, color);
}
case ATTR_LINE_OPA:
return lv_obj_set_style_local_line_opa(obj, part, state, (lv_opa_t)var);
/* Value attributes */
case ATTR_VALUE_LETTER_SPACE:
return lv_obj_set_style_local_value_letter_space(obj, part, state, (lv_style_int_t)var);
case ATTR_VALUE_LINE_SPACE:
return lv_obj_set_style_local_value_line_space(obj, part, state, (lv_style_int_t)var);
case ATTR_VALUE_BLEND_MODE:
return lv_obj_set_style_local_value_blend_mode(obj, part, state, (lv_blend_mode_t)var);
case ATTR_VALUE_OFS_X:
return lv_obj_set_style_local_value_ofs_x(obj, part, state, (lv_style_int_t)var);
case ATTR_VALUE_OFS_Y:
return lv_obj_set_style_local_value_ofs_y(obj, part, state, (lv_style_int_t)var);
case ATTR_VALUE_ALIGN:
return lv_obj_set_style_local_value_align(obj, part, state, (lv_align_t)var);
case ATTR_VALUE_COLOR: {
lv_color_t color = haspPayloadToColor(payload);
return lv_obj_set_style_local_value_color(obj, part, state, color);
}
case ATTR_VALUE_OPA:
return lv_obj_set_style_local_value_opa(obj, part, state, (lv_opa_t)var);
case ATTR_VALUE_STR:
return lv_obj_set_style_local_value_str(obj, part, state, (const char *)payload);
/* Pattern attributes */
case ATTR_PATTERN_REPEAT:
return lv_obj_set_style_local_pattern_repeat(obj, part, state, (bool)var);
case ATTR_PATTERN_BLEND_MODE:
return lv_obj_set_style_local_pattern_blend_mode(obj, part, state, (lv_blend_mode_t)var);
case ATTR_PATTERN_RECOLOR: {
lv_color_t color = haspPayloadToColor(payload);
return lv_obj_set_style_local_pattern_recolor(obj, part, state, color);
}
case ATTR_PATTERN_OPA:
return lv_obj_set_style_local_pattern_opa(obj, part, state, (lv_opa_t)var);
case ATTR_PATTERN_RECOLOR_OPA:
return lv_obj_set_style_local_pattern_recolor_opa(obj, part, state, (lv_opa_t)var);
case ATTR_PATTERN_IMAGE:
// return lv_obj_set_style_local_pattern_image(obj, part, state, (constvoid *)var);
break;
}
Log.warning(F("HASP: Unknown property %s"), attr_p);
}
static void hasp_local_style_attr(lv_obj_t * obj, const char * attr_p, const char * payload, bool update)
static void hasp_local_style_attr_font(lv_obj_t * obj, const char * attr_p, uint16_t attr_hash, const char * payload,
bool update)
{
if(attr_p == strstr_P(attr_p, PSTR("bg_"))) { // startsWith command/
return hasp_local_style_attr_bg(obj, attr_p, payload, update);
} else if(attr_p == strstr_P(attr_p, PSTR("pad_"))) {
return hasp_local_style_attr_pad(obj, attr_p, payload, update);
/* } else if(attr_p == strstr_P(attr_p, PSTR("text_"))) {
return hasp_local_style_attr_text(obj, attr_p, payload, update);
} else if(attr_p == strstr_P(attr_p, PSTR("line_"))) {
return hasp_local_style_attr_line(obj, attr_p, payload, update);
} else if(attr_p == strstr_P(attr_p, PSTR("value_"))) {
return hasp_local_style_attr_value(obj, attr_p, payload, update);
} else if(attr_p == strstr_P(attr_p, PSTR("border_"))) {
return hasp_local_style_attr_border(obj, attr_p, payload, update);
} else if(attr_p == strstr_P(attr_p, PSTR("shadow_"))) {
return hasp_local_style_attr_shadow(obj, attr_p, payload, update);
} else if(attr_p == strstr_P(attr_p, PSTR("outline_"))) {
return hasp_local_style_attr_outline(obj, attr_p, payload, update);
} else if(attr_p == strstr_P(attr_p, PSTR("pattern_"))) {
return hasp_local_style_attr_pattern(obj, attr_p, payload, update);*/
}
uint8_t part = LV_TABLE_PART_BG;
uint8_t state = LV_STATE_DEFAULT;
int16_t var = atoi(payload);
@ -355,94 +452,7 @@ static void hasp_local_style_attr(lv_obj_t * obj, const char * attr_p, const cha
* when using hasp_out use attr_p for the original attribute name
* *************************************************************** */
if(!strcmp_P(attr, PSTR("radius"))) {
return attribute_radius(obj, part, state, update, attr_p, var);
} else if(!strcmp_P(attr, PSTR("clip_corner"))) {
return attribute_clip_corner(obj, part, state, update, attr_p, var);
} else if(!strcmp_P(attr, PSTR("size"))) {
return attribute_size(obj, part, state, update, attr_p, var);
} 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(!strcmp_P(attr, PSTR("transform_height"))) {
return lv_obj_set_style_local_transform_height(obj, part, state, (lv_style_int_t)var);
} 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(!strcmp_P(attr, PSTR("border_width"))) {
return lv_obj_set_style_local_border_width(obj, part, state, (lv_style_int_t)var);
} 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(!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(!strcmp_P(attr, PSTR("border_post"))) {
return lv_obj_set_style_local_border_post(obj, part, state, (bool)var);
} 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(!strcmp_P(attr, PSTR("border_opa"))) {
return lv_obj_set_style_local_border_opa(obj, part, state, (lv_opa_t)var);
} 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(!strcmp_P(attr, PSTR("outline_pad"))) {
return lv_obj_set_style_local_outline_pad(obj, part, state, (lv_style_int_t)var);
} 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(!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(!strcmp_P(attr, PSTR("outline_opa"))) {
return lv_obj_set_style_local_outline_opa(obj, part, state, (lv_opa_t)var);
} 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(!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(!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(!strcmp_P(attr, PSTR("shadow_spread"))) {
return lv_obj_set_style_local_shadow_spread(obj, part, state, (lv_style_int_t)var);
} 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(!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(!strcmp_P(attr, PSTR("shadow_opa"))) {
return lv_obj_set_style_local_shadow_opa(obj, part, state, (lv_opa_t)var);
} else if(!strcmp_P(attr, PSTR("pattern_repeat"))) {
return lv_obj_set_style_local_pattern_repeat(obj, part, state, (bool)var);
} 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(!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(!strcmp_P(attr, PSTR("pattern_opa"))) {
return lv_obj_set_style_local_pattern_opa(obj, part, state, (lv_opa_t)var);
} 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(!strcmp_P(attr, PSTR("pattern_image"))) {
// return lv_obj_set_style_local_pattern_image(obj, part, state, (constvoid *)var);
} 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(!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(!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(!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(!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(!strcmp_P(attr, PSTR("value_align"))) {
return lv_obj_set_style_local_value_align(obj, part, state, (lv_align_t)var);
} 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(!strcmp_P(attr, PSTR("value_opa"))) {
return lv_obj_set_style_local_value_opa(obj, part, state, (lv_opa_t)var);
} else if(!strcmp_P(attr, PSTR("value_font"))) {
if(!strcmp_P(attr, PSTR("value_font"))) {
#if ESP32
switch(var) {
case 8:
@ -464,24 +474,7 @@ static void hasp_local_style_attr(lv_obj_t * obj, const char * attr_p, const cha
return;
#endif
// return lv_obj_set_style_local_value_font(obj, part, state, (constlv_font_t *)var);
} 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(!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(!strcmp_P(attr, PSTR("text_decor"))) {
return lv_obj_set_style_local_text_decor(obj, part, state, (lv_text_decor_t)var);
} 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(!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(!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(!strcmp_P(attr, PSTR("text_opa"))) {
return lv_obj_set_style_local_text_opa(obj, part, state, (lv_opa_t)var);
} else if(!strcmp_P(attr, PSTR("text_font"))) {
#if ESP32
switch(var) {
@ -508,21 +501,6 @@ static void hasp_local_style_attr(lv_obj_t * obj, const char * attr_p, const cha
return;
#endif
// return lv_obj_set_style_local_text_font(obj, part, state, (constlv_font_t *)var);
} 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(!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(!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(!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(!strcmp_P(attr, PSTR("line_rounded"))) {
return lv_obj_set_style_local_line_rounded(obj, part, state, (bool)var);
} 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(!strcmp_P(attr, PSTR("line_opa"))) {
return lv_obj_set_style_local_line_opa(obj, part, state, (lv_opa_t)var);
}
}
@ -670,16 +648,18 @@ static void hasp_process_obj_attribute_range(lv_obj_t * obj, const char * attr,
// @param update bool: change the value if true, dispatch value if false
void hasp_process_obj_attribute(lv_obj_t * obj, const char * attr_p, const char * payload, bool update)
{
unsigned long start = millis();
if(!obj) return Log.warning(F("HASP: Unknown object"));
int16_t val = atoi(payload);
char * attr = (char *)attr_p;
if(*attr == '.') attr++; // strip leading '.'
Log.trace("ATTR: %s => %d", attr, sdbm(attr));
uint16_t attr_hash = sdbm(attr);
// Log.trace("ATTR: %s => %d", attr, attr_hash);
/* 16-bit Hash Lookup Table */
switch(sdbm(attr)) {
switch(attr_hash) {
case ATTR_X:
return update ? lv_obj_set_x(obj, val) : hasp_out_int(obj, attr, lv_obj_get_x(obj));
@ -789,7 +769,8 @@ void hasp_process_obj_attribute(lv_obj_t * obj, const char * attr_p, const char
// hasp_local_style_attr(obj, attr, payload, update);
}
hasp_local_style_attr(obj, attr, payload, update);
hasp_local_style_attr(obj, attr, attr_hash, payload, update);
Log.trace(F("ATTR: %s (%d)took %d millis"), attr_p, attr_hash, millis() - start);
}
/* **************************