From: Simon Glass <sjg@chromium.org> Add a few functions which can convert a flag and an object type to strings. Co-developed-by: Claude <noreply@anthropic.com> Signed-off-by: Simon Glass <sjg@chromium.org> --- boot/scene.c | 42 ++++++++++++++++++++++++++++++++++++++++++ boot/scene_internal.h | 16 ++++++++++++++++ test/boot/expo.c | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+) diff --git a/boot/scene.c b/boot/scene.c index ec0c5899bca..c2e4d8e1330 100644 --- a/boot/scene.c +++ b/boot/scene.c @@ -19,6 +19,29 @@ #include <linux/input.h> #include "scene_internal.h" +static const char *const scene_flag_names[] = { + "hide", + "point", + "open", + "size_valid", + "sync_pos", + "sync_size", + "sync_width", + "sync_bbox", + "manual", + "dirty", +}; + +static const char *const scene_obj_type_names[] = { + "none", + "image", + "text", + "box", + "textedit", + "menu", + "textline", +}; + int scene_new(struct expo *exp, const char *name, uint id, struct scene **scnp) { struct scene *scn; @@ -1634,3 +1657,22 @@ int scene_dims_union(struct scene *scn, uint id, struct scene_obj_dims *dims) return 0; } + +const char *scene_flag_name(uint flag) +{ + int bit; + + bit = ffs(flag) - 1; + if (bit < 0 || bit >= ARRAY_SIZE(scene_flag_names)) + return "(none)"; + + return scene_flag_names[bit]; +} + +const char *scene_obj_type_name(enum scene_obj_t type) +{ + if (type >= ARRAY_SIZE(scene_obj_type_names)) + return "unknown"; + + return scene_obj_type_names[type]; +} diff --git a/boot/scene_internal.h b/boot/scene_internal.h index 00696979f7d..9bf2cb8f8f2 100644 --- a/boot/scene_internal.h +++ b/boot/scene_internal.h @@ -540,4 +540,20 @@ int scene_calc_arrange(struct scene *scn, struct expo_arrange_info *arr); int scene_txt_generic_init(struct expo *exp, struct scene_txt_generic *gen, const char *name, uint str_id, const char *str); +/** + * scene_flag_name() - Get the name of a scene flag + * + * @flag: Single-bit flag mask (e.g. BIT(7)) + * Return: Flag name, or "(none)" if flag is 0 or out of range + */ +const char *scene_flag_name(uint flag); + +/** + * scene_obj_type_name() - Get the name of a scene object type + * + * @type: Object type + * Return: Type name, or "unknown" if out of range + */ +const char *scene_obj_type_name(enum scene_obj_t type); + #endif /* __SCENE_INTERNAL_H */ diff --git a/test/boot/expo.c b/test/boot/expo.c index 8a401ba9884..7c27da165c5 100644 --- a/test/boot/expo.c +++ b/test/boot/expo.c @@ -1220,3 +1220,41 @@ static int expo_test_calc_fps(struct unit_test_state *uts) return 0; } BOOTSTD_TEST(expo_test_calc_fps, 0); + +/* Test scene_flag_name() */ +static int expo_scene_flag_name(struct unit_test_state *uts) +{ + /* Test valid flags */ + ut_asserteq_str("hide", scene_flag_name(SCENEOF_HIDE)); + ut_asserteq_str("point", scene_flag_name(SCENEOF_POINT)); + ut_asserteq_str("open", scene_flag_name(SCENEOF_OPEN)); + ut_asserteq_str("manual", scene_flag_name(SCENEOF_MANUAL)); + + /* Test invalid flag (0) */ + ut_asserteq_str("(none)", scene_flag_name(0)); + + /* Test invalid flag (out of range) */ + ut_asserteq_str("(none)", scene_flag_name(BIT(20))); + + return 0; +} +BOOTSTD_TEST(expo_scene_flag_name, 0); + +/* Test scene_obj_type_name() */ +static int expo_scene_obj_type_name(struct unit_test_state *uts) +{ + /* Test all valid object types */ + ut_asserteq_str("none", scene_obj_type_name(SCENEOBJT_NONE)); + ut_asserteq_str("image", scene_obj_type_name(SCENEOBJT_IMAGE)); + ut_asserteq_str("text", scene_obj_type_name(SCENEOBJT_TEXT)); + ut_asserteq_str("box", scene_obj_type_name(SCENEOBJT_BOX)); + ut_asserteq_str("menu", scene_obj_type_name(SCENEOBJT_MENU)); + ut_asserteq_str("textline", scene_obj_type_name(SCENEOBJT_TEXTLINE)); + ut_asserteq_str("textedit", scene_obj_type_name(SCENEOBJT_TEXTEDIT)); + + /* Test invalid type (out of range) */ + ut_asserteq_str("unknown", scene_obj_type_name(SCENEOBJT_TEXTLINE + 1)); + + return 0; +} +BOOTSTD_TEST(expo_scene_obj_type_name, 0); -- 2.43.0