diff --git a/src/hasp/hasp_attribute.cpp b/src/hasp/hasp_attribute.cpp index 14455651..22330ed0 100644 --- a/src/hasp/hasp_attribute.cpp +++ b/src/hasp/hasp_attribute.cpp @@ -1407,12 +1407,14 @@ void hasp_process_obj_attribute(lv_obj_t* obj, const char* attr_p, const char* p update ? (void)(obj->user_data.groupid = (uint8_t)val) : hasp_out_int(obj, attr, obj->user_data.groupid); break; // attribute_found + case ATTR_OBJ: + if(update) LOG_WARNING(TAG_ATTR, F(D_ATTRIBUTE_READ_ONLY), attr_p); + hasp_out_str(obj, attr, get_obj_type_name(obj)); + break; // attribute_found + case ATTR_OBJID: - if(update) { - LOG_WARNING(TAG_ATTR, F(D_ATTRIBUTE_READ_ONLY), attr_p); - } else { - hasp_out_int(obj, attr, obj->user_data.objid); - } + if(update) LOG_WARNING(TAG_ATTR, F(D_ATTRIBUTE_READ_ONLY), attr_p); + hasp_out_int(obj, attr, obj->user_data.objid); break; // attribute_found case ATTR_X: diff --git a/src/hasp/hasp_attribute.h b/src/hasp/hasp_attribute.h index ff8ccf50..3cc9d3c2 100644 --- a/src/hasp/hasp_attribute.h +++ b/src/hasp/hasp_attribute.h @@ -314,5 +314,6 @@ _HASP_ATTRIBUTE(SCALE_END_LINE_WIDTH, scale_end_line_width, lv_style_int_t) /* hasp user data */ #define ATTR_GROUPID 48986 #define ATTR_OBJID 41010 +#define ATTR_OBJ 53623 #endif diff --git a/src/hasp/hasp_object.cpp b/src/hasp/hasp_object.cpp index 690dccbb..25348977 100644 --- a/src/hasp/hasp_object.cpp +++ b/src/hasp/hasp_object.cpp @@ -152,6 +152,20 @@ bool hasp_find_id_from_obj(lv_obj_t* obj, uint8_t* pageid, uint8_t* objid) // } // } +/** + * Get the object type name of an object + * @param obj an lv_obj_t* of the object to check its type + * @return name of the object type + * @note + */ +const char* get_obj_type_name(lv_obj_t* obj) +{ + lv_obj_type_t list; + lv_obj_get_type(obj, &list); + const char* objtype = list.type[0]; + return objtype + 3; // skip lv_ +} + /** * Check if an lvgl objecttype name corresponds to a given HASP object ID * @param obj an lv_obj_t* of the object to check its type @@ -352,7 +366,8 @@ void generic_event_handler(lv_obj_t* obj, lv_event_t event) hasp_update_sleep_state(); // wakeup? dispatch_object_generic_event(obj, eventid); // send object event - dispatch_normalized_group_value(obj->user_data.groupid, NORMALIZE(dispatch_get_event_state(eventid), 0, 1), obj); + dispatch_normalized_group_value(obj->user_data.groupid, obj, dispatch_get_event_state(eventid), HASP_EVENT_OFF, + HASP_EVENT_ON); } /** @@ -390,7 +405,7 @@ void toggle_event_handler(lv_obj_t* obj, lv_event_t event) hasp_update_sleep_state(); // wakeup? dispatch_object_toggle_event(obj, val); - dispatch_normalized_group_value(obj->user_data.groupid, NORMALIZE(val, 0, 1), obj); + dispatch_normalized_group_value(obj->user_data.groupid, obj, val, HASP_EVENT_OFF, HASP_EVENT_ON); } else if(event == LV_EVENT_DELETE) { LOG_VERBOSE(TAG_HASP, F(D_OBJECT_DELETED)); @@ -454,7 +469,7 @@ static void selector_event_handler(lv_obj_t* obj, lv_event_t event) // hasp_send_obj_attribute_str(obj, property, buffer); dispatch_object_selection_changed(obj, val, buffer); - if(max > 0) dispatch_normalized_group_value(obj->user_data.groupid, NORMALIZE(val, 0, max), obj); + if(max > 0) dispatch_normalized_group_value(obj->user_data.groupid, obj, val, 0, max); } else if(event == LV_EVENT_DELETE) { LOG_VERBOSE(TAG_HASP, F(D_OBJECT_DELETED)); @@ -500,7 +515,7 @@ void slider_event_handler(lv_obj_t* obj, lv_event_t event) return; } dispatch_object_value_changed(obj, val); - dispatch_normalized_group_value(obj->user_data.groupid, NORMALIZE(val, min, max), obj); + dispatch_normalized_group_value(obj->user_data.groupid, obj, val, min, max); } else if(event == LV_EVENT_DELETE) { LOG_VERBOSE(TAG_HASP, F(D_OBJECT_DELETED)); diff --git a/src/hasp/hasp_object.h b/src/hasp/hasp_object.h index e280883a..ad88cdf0 100644 --- a/src/hasp/hasp_object.h +++ b/src/hasp/hasp_object.h @@ -66,6 +66,7 @@ lv_obj_t* hasp_find_obj_from_parent_id(lv_obj_t* parent, uint8_t objid); // lv_obj_t * hasp_find_obj_from_page_id(uint8_t pageid, uint8_t objid); bool hasp_find_id_from_obj(lv_obj_t* obj, uint8_t* pageid, uint8_t* objid); // bool check_obj_type_str(const char * lvobjtype, lv_hasp_obj_type_t haspobjtype); +const char* get_obj_type_name(lv_obj_t* obj); bool check_obj_type(lv_obj_t* obj, lv_hasp_obj_type_t haspobjtype); void hasp_object_tree(lv_obj_t* parent, uint8_t pageid, uint16_t level); void hasp_object_delete(lv_obj_t* obj);