Skip to content

Commit e357d75

Browse files
committed
samples: modules: lvgl: demos: Add new demos
Add the new demos of LVGL 9.2: - flex_layout - keypad_and_encoder - render - scroll - multilang Signed-off-by: Fabian Blatz <[email protected]>
1 parent ccb532f commit e357d75

File tree

6 files changed

+221
-8
lines changed

6 files changed

+221
-8
lines changed

samples/modules/lvgl/demos/CMakeLists.txt

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ target_sources_ifdef(CONFIG_LV_USE_DEMO_BENCHMARK app PRIVATE
7272
${LVGL_DIR}/demos/benchmark/assets/lv_font_benchmark_montserrat_12_compr_az.c.c
7373
${LVGL_DIR}/demos/benchmark/assets/lv_font_benchmark_montserrat_16_compr_az.c.c
7474
${LVGL_DIR}/demos/benchmark/assets/lv_font_benchmark_montserrat_28_compr_az.c.c
75-
${LVGL_DIR}/demos/transform/assets/img_transform_avatar_15.c
7675
${LVGL_DIR}/demos/benchmark/lv_demo_benchmark.c
7776
)
7877

@@ -87,3 +86,71 @@ target_sources_ifdef(CONFIG_LV_USE_DEMO_WIDGETS app PRIVATE
8786
${LVGL_DIR}/demos/widgets/assets/img_lvgl_logo.c
8887
${LVGL_DIR}/demos/widgets/lv_demo_widgets.c
8988
)
89+
90+
target_sources_ifdef(CONFIG_LV_USE_DEMO_FLEX_LAYOUT app PRIVATE
91+
${LVGL_DIR}/demos/flex_layout/lv_demo_flex_layout_main.c
92+
${LVGL_DIR}/demos/flex_layout/lv_demo_flex_layout_view.c
93+
${LVGL_DIR}/demos/flex_layout/lv_demo_flex_layout_flex_loader.c
94+
${LVGL_DIR}/demos/flex_layout/lv_demo_flex_layout_view_child_node.c
95+
${LVGL_DIR}/demos/flex_layout/lv_demo_flex_layout_view_ctrl_pad.c
96+
${LVGL_DIR}/demos/flex_layout/lv_demo_flex_layout_ctrl_pad.c
97+
)
98+
99+
target_sources_ifdef(CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER app PRIVATE
100+
${LVGL_DIR}/demos/keypad_encoder/lv_demo_keypad_encoder.c
101+
)
102+
103+
target_sources_ifdef(CONFIG_LV_USE_DEMO_RENDER app PRIVATE
104+
${LVGL_DIR}/demos/render/assets/img_render_arc_bg.c
105+
${LVGL_DIR}/demos/render/assets/img_render_lvgl_logo_argb8888.c
106+
${LVGL_DIR}/demos/render/assets/img_render_lvgl_logo_i1.c
107+
${LVGL_DIR}/demos/render/assets/img_render_lvgl_logo_l8.c
108+
${LVGL_DIR}/demos/render/assets/img_render_lvgl_logo_rgb565.c
109+
${LVGL_DIR}/demos/render/assets/img_render_lvgl_logo_rgb888.c
110+
${LVGL_DIR}/demos/render/assets/img_render_lvgl_logo_xrgb8888.c
111+
${LVGL_DIR}/demos/render/lv_demo_render.c
112+
)
113+
114+
target_sources_ifdef(CONFIG_LV_USE_DEMO_SCROLL app PRIVATE
115+
${LVGL_DIR}/demos/scroll/lv_demo_scroll.c
116+
)
117+
118+
target_sources_ifdef(CONFIG_LV_USE_DEMO_MULTILANG app PRIVATE
119+
${LVGL_DIR}/demos/multilang/assets/img_multilang_like.c
120+
${LVGL_DIR}/demos/multilang/assets/fonts/font_multilang_large.c
121+
${LVGL_DIR}/demos/multilang/assets/fonts/font_multilang_small.c
122+
${LVGL_DIR}/demos/multilang/assets/emojis/img_emoji_movie_camera.c
123+
${LVGL_DIR}/demos/multilang/assets/emojis/img_emoji_flexed_biceps.c
124+
${LVGL_DIR}/demos/multilang/assets/emojis/img_emoji_rocket.c
125+
${LVGL_DIR}/demos/multilang/assets/emojis/img_emoji_artist_palette.c
126+
${LVGL_DIR}/demos/multilang/assets/emojis/img_emoji_deciduous_tree.c
127+
${LVGL_DIR}/demos/multilang/assets/emojis/img_emoji_cat_face.c
128+
${LVGL_DIR}/demos/multilang/assets/emojis/img_emoji_red_heart.c
129+
${LVGL_DIR}/demos/multilang/assets/emojis/img_emoji_camera_with_flash.c
130+
${LVGL_DIR}/demos/multilang/assets/emojis/img_emoji_dog_face.c
131+
${LVGL_DIR}/demos/multilang/assets/emojis/img_emoji_books.c
132+
${LVGL_DIR}/demos/multilang/assets/emojis/img_emoji_earth_globe_europe_africa.c
133+
${LVGL_DIR}/demos/multilang/assets/emojis/img_emoji_soccer_ball.c
134+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_19.c
135+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_4.c
136+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_8.c
137+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_5.c
138+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_16.c
139+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_22.c
140+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_9.c
141+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_6.c
142+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_18.c
143+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_17.c
144+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_13.c
145+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_2.c
146+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_3.c
147+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_25.c
148+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_14.c
149+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_1.c
150+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_11.c
151+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_7.c
152+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_15.c
153+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_12.c
154+
${LVGL_DIR}/demos/multilang/assets/avatars/img_multilang_avatar_10.c
155+
${LVGL_DIR}/demos/multilang/lv_demo_multilang.c
156+
)

samples/modules/lvgl/demos/Kconfig

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,59 @@ config LV_Z_DEMO_WIDGETS
3030
bool "LVGL widgets demo"
3131
select LV_USE_DEMO_WIDGETS
3232
help
33-
Build stress testing demo application.
33+
Build widgets demo application.
34+
35+
config LV_Z_DEMO_FLEX_LAYOUT
36+
bool "LVGL flex layout demo"
37+
select LV_USE_DEMO_FLEX_LAYOUT
38+
help
39+
Build flex layout demo application.
40+
41+
config LV_Z_DEMO_KEYPAD_AND_ENCODER
42+
bool "LVGL keypad and encoder demo"
43+
select LV_USE_DEMO_KEYPAD_AND_ENCODER
44+
help
45+
Build keypad and encoder demo application.
46+
47+
config LV_Z_DEMO_RENDER
48+
bool "LVGL render demo"
49+
select LV_USE_DEMO_RENDER
50+
help
51+
Build render demo application.
52+
53+
config LV_Z_DEMO_SCROLL
54+
bool "LVGL scroll demo"
55+
select LV_USE_DEMO_SCROLL
56+
help
57+
Build scroll demo application.
58+
59+
config LV_Z_DEMO_MULTILANG
60+
bool "LVGL multilang demo"
61+
select LV_USE_DEMO_MULTILANG
62+
select LV_USE_IMGFONT
63+
help
64+
Build multilang demo application.
3465

3566
endchoice
3667

68+
config LV_Z_DEMO_RENDER_SCENE_DYNAMIC
69+
bool "Switch scenes dynamically"
70+
help
71+
Switch between scenes to render dynamically.
72+
73+
config LV_Z_DEMO_RENDER_SCENE_INDEX
74+
int "Index of the rendered scene"
75+
depends on !LV_Z_DEMO_RENDER_SCENE_DYNAMIC
76+
default 0
77+
range 0 11
78+
help
79+
Render scene by its index (refer to lv_demo_render.h)
80+
81+
config LV_Z_DEMO_RENDER_DYNAMIC_SCENE_TIMEOUT
82+
int "Seconds each rendered scene is shown"
83+
depends on LV_Z_DEMO_RENDER_SCENE_DYNAMIC
84+
default 3
85+
help
86+
Seconds each rendered scenar is shown
87+
3788
source "Kconfig.zephyr"

samples/modules/lvgl/demos/README.rst

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,16 @@ A sample showcasing upstream LVGL demos.
1717
A stress test for LVGL. It contains a lot of object creation, deletion, animations, styles usage, and so on. It can be used if there is any memory corruption during heavy usage or any memory leaks.
1818
* Widgets
1919
Shows how the widgets look like out of the box using the built-in material theme.
20+
* Flex Layout
21+
Showcases the use of the flex layout.
22+
* Keypad and Encoder
23+
Shows how to control widget with a keypad and hardware encoder.
24+
* Render
25+
Collection of multiple rendering tests.
26+
* Scroll
27+
Shows the scroll behaviour of a panel with a large list.
28+
* Multilang
29+
Shows a UI with multilanguage options, supporting unicode characters.
2030

2131
More details can be found in `LVGL demos Readme`_.
2232

@@ -72,6 +82,46 @@ These demos can be built for simulated display environment as follows:
7282
:goals: run
7383
:compact:
7484

85+
.. zephyr-app-commands::
86+
:zephyr-app: samples/modules/lvgl/demos
87+
:host-os: unix
88+
:board: native_sim
89+
:gen-args: -DCONFIG_LV_Z_DEMO_FLEX_LAYOUT=y
90+
:goals: run
91+
:compact:
92+
93+
.. zephyr-app-commands::
94+
:zephyr-app: samples/modules/lvgl/demos
95+
:host-os: unix
96+
:board: native_sim
97+
:gen-args: -DCONFIG_LV_Z_DEMO_KEYPAD_AND_ENCODER=y
98+
:goals: run
99+
:compact:
100+
101+
.. zephyr-app-commands::
102+
:zephyr-app: samples/modules/lvgl/demos
103+
:host-os: unix
104+
:board: native_sim
105+
:gen-args: -DCONFIG_LV_Z_DEMO_RENDER=y
106+
:goals: run
107+
:compact:
108+
109+
.. zephyr-app-commands::
110+
:zephyr-app: samples/modules/lvgl/demos
111+
:host-os: unix
112+
:board: native_sim
113+
:gen-args: -DCONFIG_LV_Z_DEMO_SCROLL=y
114+
:goals: run
115+
:compact:
116+
117+
.. zephyr-app-commands::
118+
:zephyr-app: samples/modules/lvgl/demos
119+
:host-os: unix
120+
:board: native_sim
121+
:gen-args: -DCONFIG_LV_Z_DEMO_MULTILANG=y
122+
:goals: run
123+
:compact:
124+
75125
Alternatively, if building from a 64-bit host machine, the previous target
76126
board argument may also be replaced by ``native_sim/native/64``.
77127

samples/modules/lvgl/demos/prj.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ CONFIG_INPUT=y
1313
CONFIG_LV_FONT_MONTSERRAT_12=y
1414
CONFIG_LV_FONT_MONTSERRAT_14=y
1515
CONFIG_LV_FONT_MONTSERRAT_16=y
16+
CONFIG_LV_FONT_MONTSERRAT_18=y
1617
CONFIG_LV_FONT_MONTSERRAT_24=y
1718

1819
# Benchmark Demo

samples/modules/lvgl/demos/sample.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,21 @@ tests:
2525
sample.modules.lvgl.demo_widgets:
2626
extra_configs:
2727
- CONFIG_LV_Z_DEMO_WIDGETS=y
28+
sample.modules.lvgl.demo_flex_layout:
29+
extra_configs:
30+
- CONFIG_LV_Z_DEMO_FLEX_LAYOUT=y
31+
sample.modules.lvgl.demo_keypad_encoder:
32+
extra_configs:
33+
- CONFIG_LV_Z_DEMO_KEYPAD_AND_ENCODER=y
34+
sample.modules.lvgl.demo_render:
35+
extra_configs:
36+
- CONFIG_LV_Z_DEMO_RENDER=y
37+
sample.modules.lvgl.demo_scroll:
38+
extra_configs:
39+
- CONFIG_LV_Z_DEMO_SCROLL=y
40+
sample.modules.lvgl.demo_multilang:
41+
extra_configs:
42+
- CONFIG_LV_Z_DEMO_MULTILANG=y
2843
sample.modules.lvgl.demos.st_b_lcd40_dsi1_mb1166:
2944
filter: dt_compat_enabled("orisetech,otm8009a")
3045
platform_allow: stm32h747i_disco/stm32h747xx/m7

samples/modules/lvgl/demos/src/main.c

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,31 +16,60 @@ LOG_MODULE_REGISTER(app);
1616
int main(void)
1717
{
1818
const struct device *display_dev;
19+
#ifdef CONFIG_LV_Z_DEMO_RENDER_SCENE_DYNAMIC
20+
k_timepoint_t next_scene_switch;
21+
lv_demo_render_scene_t cur_scene = LV_DEMO_RENDER_SCENE_FILL;
22+
#endif /* CONFIG_LV_Z_DEMO_RENDER_SCENE_DYNAMIC */
1923

2024
display_dev = DEVICE_DT_GET(DT_CHOSEN(zephyr_display));
2125
if (!device_is_ready(display_dev)) {
2226
LOG_ERR("Device not ready, aborting test");
2327
return 0;
2428
}
2529

26-
#if defined(CONFIG_LV_USE_DEMO_MUSIC)
30+
#if defined(CONFIG_LV_Z_DEMO_MUSIC)
2731
lv_demo_music();
28-
#elif defined(CONFIG_LV_USE_DEMO_BENCHMARK)
32+
#elif defined(CONFIG_LV_Z_DEMO_BENCHMARK)
2933
lv_demo_benchmark();
30-
#elif defined(CONFIG_LV_USE_DEMO_STRESS)
34+
#elif defined(CONFIG_LV_Z_DEMO_STRESS)
3135
lv_demo_stress();
32-
#elif defined(CONFIG_LV_USE_DEMO_WIDGETS)
36+
#elif defined(CONFIG_LV_Z_DEMO_WIDGETS)
3337
lv_demo_widgets();
38+
#elif defined(CONFIG_LV_Z_DEMO_FLEX_LAYOUT)
39+
lv_demo_flex_layout();
40+
#elif defined(CONFIG_LV_Z_DEMO_KEYPAD_AND_ENCODER)
41+
lv_demo_keypad_encoder();
42+
#elif defined(CONFIG_LV_Z_DEMO_RENDER)
43+
44+
#ifdef CONFIG_LV_Z_DEMO_RENDER_SCENE_DYNAMIC
45+
lv_demo_render(cur_scene, 255);
46+
next_scene_switch =
47+
sys_timepoint_calc(K_SECONDS(CONFIG_LV_Z_DEMO_RENDER_DYNAMIC_SCENE_TIMEOUT));
48+
#else
49+
lv_demo_render(CONFIG_LV_Z_DEMO_RENDER_SCENE_INDEX, 255);
50+
#endif /* CONFIG_LV_Z_DEMO_RENDER_SCENE_DYNAMIC */
51+
52+
#elif defined(CONFIG_LV_Z_DEMO_SCROLL)
53+
lv_demo_scroll();
54+
#elif defined(CONFIG_LV_Z_DEMO_MULTILANG)
55+
lv_demo_multilang();
3456
#else
35-
#error Enable one of the demos CONFIG_LV_USE_DEMO_MUSIC, CONFIG_LV_USE_DEMO_BENCHMARK ,\
36-
CONFIG_LV_USE_DEMO_STRESS, or CONFIG_LV_USE_DEMO_WIDGETS
57+
#error Enable one of the demos CONFIG_LV_Z_DEMO_*
3758
#endif
3859

3960
lv_timer_handler();
4061
display_blanking_off(display_dev);
4162

4263
while (1) {
4364
k_msleep(lv_timer_handler());
65+
#ifdef CONFIG_LV_Z_DEMO_RENDER_SCENE_DYNAMIC
66+
if (sys_timepoint_expired(next_scene_switch)) {
67+
cur_scene = (cur_scene + 1) % _LV_DEMO_RENDER_SCENE_NUM;
68+
lv_demo_render(cur_scene, 255);
69+
next_scene_switch = sys_timepoint_calc(
70+
K_SECONDS(CONFIG_LV_Z_DEMO_RENDER_DYNAMIC_SCENE_TIMEOUT));
71+
}
72+
#endif /* CONFIG_LV_Z_DEMO_RENDER_SCENE_DYNAMIC */
4473
}
4574

4675
return 0;

0 commit comments

Comments
 (0)