samples/modules: Add LVGL demo sample
Adds a sample which allows to build the LVGL upstream demo applications (music, benchmark, stress). Resolves issue #62744. Signed-off-by: Fabian Blatz <fabianblatz@gmail.com>
This commit is contained in:
parent
2a8548b036
commit
b94641697f
17 changed files with 311 additions and 0 deletions
83
samples/modules/lvgl/demos/CMakeLists.txt
Normal file
83
samples/modules/lvgl/demos/CMakeLists.txt
Normal file
|
@ -0,0 +1,83 @@
|
|||
# Copyright (c) 2023 Fabian Blatz <fabianblatz@gmail.com>
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
cmake_minimum_required(VERSION 3.20.0)
|
||||
|
||||
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
|
||||
project(lvgl_sample)
|
||||
|
||||
set(LVGL_DIR ${ZEPHYR_LVGL_MODULE_DIR})
|
||||
|
||||
FILE(GLOB app_sources src/*.c)
|
||||
target_sources(app PRIVATE ${app_sources})
|
||||
|
||||
target_include_directories(app PRIVATE
|
||||
${LVGL_DIR}/demos/
|
||||
)
|
||||
|
||||
target_sources_ifdef(CONFIG_LV_USE_DEMO_MUSIC app PRIVATE
|
||||
${LVGL_DIR}/demos/music/lv_demo_music_list.c
|
||||
${LVGL_DIR}/demos/music/lv_demo_music.c
|
||||
${LVGL_DIR}/demos/music/lv_demo_music_main.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_next.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_wave_top_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_icon_4_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_icon_4.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_corner_right.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_cover_1.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_slider_knob_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_icon_3.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_pause.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_pause_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_wave_bottom_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_icon_2_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_list_play_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_wave_top.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_play_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_cover_1_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_wave_bottom.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_corner_left_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_play.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_list_border.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_icon_2.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_next_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_list_play.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_list_border_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_rnd.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_cover_3.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_prev_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_loop.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_icon_1.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_slider_knob.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_corner_right_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_corner_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_corner_left.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_cover_2_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_icon_3_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_icon_1_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_cover_2.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_prev.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_rnd_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_list_pause_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_cover_3_large.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_list_pause.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_logo.c
|
||||
${LVGL_DIR}/demos/music/assets/img_lv_demo_music_btn_loop_large.c
|
||||
)
|
||||
|
||||
target_sources_ifdef(CONFIG_LV_USE_DEMO_BENCHMARK app PRIVATE
|
||||
${LVGL_DIR}/demos/benchmark/lv_demo_benchmark.c
|
||||
${LVGL_DIR}/demos/benchmark/assets/img_benchmark_cogwheel_indexed16.c
|
||||
${LVGL_DIR}/demos/benchmark/assets/lv_font_bechmark_montserrat_28_compr_az.c.c
|
||||
${LVGL_DIR}/demos/benchmark/assets/lv_font_bechmark_montserrat_16_compr_az.c.c
|
||||
${LVGL_DIR}/demos/benchmark/assets/img_benchmark_cogwheel_argb.c
|
||||
${LVGL_DIR}/demos/benchmark/assets/img_benchmark_cogwheel_alpha16.c
|
||||
${LVGL_DIR}/demos/benchmark/assets/img_benchmark_cogwheel_rgb.c
|
||||
${LVGL_DIR}/demos/benchmark/assets/lv_font_bechmark_montserrat_12_compr_az.c.c
|
||||
${LVGL_DIR}/demos/benchmark/assets/img_benchmark_cogwheel_chroma_keyed.c
|
||||
${LVGL_DIR}/demos/benchmark/assets/img_benchmark_cogwheel_rgb565a8.c
|
||||
)
|
||||
|
||||
target_sources_ifdef(CONFIG_LV_USE_DEMO_STRESS app PRIVATE
|
||||
${LVGL_DIR}/demos/stress/lv_demo_stress.c
|
||||
)
|
30
samples/modules/lvgl/demos/Kconfig
Normal file
30
samples/modules/lvgl/demos/Kconfig
Normal file
|
@ -0,0 +1,30 @@
|
|||
# Copyright (c) 2023 Fabian Blatz <fabianblatz@gmail.com>
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
choice LV_Z_DEMO
|
||||
prompt "LVGL demo to build"
|
||||
default LV_Z_DEMO_MUSIC
|
||||
help
|
||||
Demo application to build.
|
||||
|
||||
config LV_Z_DEMO_MUSIC
|
||||
bool "LVGL music demo"
|
||||
select LV_USE_DEMO_MUSIC
|
||||
help
|
||||
Build music player demo application.
|
||||
|
||||
config LV_Z_DEMO_BENCHMARK
|
||||
bool "LVGL benchmark demo"
|
||||
select LV_USE_DEMO_BENCHMARK
|
||||
help
|
||||
Build benchmarking demo application.
|
||||
|
||||
config LV_Z_DEMO_STRESS
|
||||
bool "LVGL stress demo"
|
||||
select LV_USE_DEMO_STRESS
|
||||
help
|
||||
Build stress testing demo application.
|
||||
|
||||
endchoice
|
||||
|
||||
source "Kconfig.zephyr"
|
51
samples/modules/lvgl/demos/README.rst
Normal file
51
samples/modules/lvgl/demos/README.rst
Normal file
|
@ -0,0 +1,51 @@
|
|||
.. zephyr:code-sample:: lvgl-demos
|
||||
:name: LVGL demos
|
||||
:relevant-api: display_interface
|
||||
|
||||
Run LVGL built-in demos.
|
||||
|
||||
Overview
|
||||
********
|
||||
|
||||
A sample showcasing upstream LVGL demos.
|
||||
|
||||
* Music
|
||||
The music player demo shows what kind of modern, smartphone-like user interfaces can be created on LVGL.
|
||||
* Benchmark
|
||||
The benchmark demo tests the performance in various cases. For example rectangle, border, shadow, text, image blending, image transformation, blending modes, etc.
|
||||
* Stress
|
||||
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.
|
||||
|
||||
Requirements
|
||||
************
|
||||
|
||||
* A board with display, ideally with 480x272 resolution or higher.
|
||||
|
||||
Building and Running
|
||||
********************
|
||||
|
||||
These demos can be built as follows:
|
||||
|
||||
.. zephyr-app-commands::
|
||||
:zephyr-app: samples/modules/lvgl/demos
|
||||
:host-os: unix
|
||||
:board: native_posix
|
||||
:gen-args: -DCONFIG_LV_Z_DEMO_MUSIC=y
|
||||
:goals: run
|
||||
:compact:
|
||||
|
||||
.. zephyr-app-commands::
|
||||
:zephyr-app: samples/modules/lvgl/demos
|
||||
:host-os: unix
|
||||
:board: native_posix
|
||||
:gen-args: -DCONFIG_LV_Z_DEMO_BENCHMARK=y
|
||||
:goals: run
|
||||
:compact:
|
||||
|
||||
.. zephyr-app-commands::
|
||||
:zephyr-app: samples/modules/lvgl/demos
|
||||
:host-os: unix
|
||||
:board: native_posix
|
||||
:gen-args: -DCONFIG_LV_Z_DEMO_STRESS=y
|
||||
:goals: run
|
||||
:compact:
|
4
samples/modules/lvgl/demos/boards/m5stack_core2.conf
Normal file
4
samples/modules/lvgl/demos/boards/m5stack_core2.conf
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Copyright 2023 Fabian Blatz <fabianblatz@gmail.com>
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
CONFIG_MAIN_STACK_SIZE=4096
|
8
samples/modules/lvgl/demos/boards/mimxrt1060_evk.conf
Normal file
8
samples/modules/lvgl/demos/boards/mimxrt1060_evk.conf
Normal file
|
@ -0,0 +1,8 @@
|
|||
# Copyright 2023 Fabian Blatz <fabianblatz@gmail.com>
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
# Enable PXP DMA engine and set rotation angle to 0 degrees.
|
||||
# This allows us to verify the DMA driver functions without altering
|
||||
# the output image
|
||||
CONFIG_DMA=y
|
||||
CONFIG_MCUX_ELCDIF_PXP=y
|
|
@ -0,0 +1,8 @@
|
|||
# Copyright 2023 Fabian Blatz <fabianblatz@gmail.com>
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
# Enable PXP DMA engine and set rotation angle to 0 degrees.
|
||||
# This allows us to verify the DMA driver functions without altering
|
||||
# the output image
|
||||
CONFIG_DMA=y
|
||||
CONFIG_MCUX_ELCDIF_PXP=y
|
4
samples/modules/lvgl/demos/boards/native_posix.conf
Normal file
4
samples/modules/lvgl/demos/boards/native_posix.conf
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Copyright 2023 Fabian Blatz <fabianblatz@gmail.com>
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
CONFIG_LV_COLOR_DEPTH_32=y
|
11
samples/modules/lvgl/demos/boards/native_posix.overlay
Normal file
11
samples/modules/lvgl/demos/boards/native_posix.overlay
Normal file
|
@ -0,0 +1,11 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Fabian Blatz <fabianblatz@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
&sdl_dc {
|
||||
compatible = "zephyr,sdl-dc";
|
||||
height = <272>;
|
||||
width = <480>;
|
||||
};
|
4
samples/modules/lvgl/demos/boards/native_posix_64.conf
Normal file
4
samples/modules/lvgl/demos/boards/native_posix_64.conf
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Copyright 2023 Fabian Blatz <fabianblatz@gmail.com>
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
CONFIG_LV_COLOR_DEPTH_32=y
|
|
@ -0,0 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Fabian Blatz <fabianblatz@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
#include "native_posix.overlay"
|
4
samples/modules/lvgl/demos/boards/native_sim.conf
Normal file
4
samples/modules/lvgl/demos/boards/native_sim.conf
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Copyright 2023 Fabian Blatz <fabianblatz@gmail.com>
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
CONFIG_LV_COLOR_DEPTH_32=y
|
6
samples/modules/lvgl/demos/boards/native_sim.overlay
Normal file
6
samples/modules/lvgl/demos/boards/native_sim.overlay
Normal file
|
@ -0,0 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Fabian Blatz <fabianblatz@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
#include "native_posix.overlay"
|
4
samples/modules/lvgl/demos/boards/native_sim_64.conf
Normal file
4
samples/modules/lvgl/demos/boards/native_sim_64.conf
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Copyright 2023 Fabian Blatz <fabianblatz@gmail.com>
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
CONFIG_LV_COLOR_DEPTH_32=y
|
6
samples/modules/lvgl/demos/boards/native_sim_64.overlay
Normal file
6
samples/modules/lvgl/demos/boards/native_sim_64.overlay
Normal file
|
@ -0,0 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Fabian Blatz <fabianblatz@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
#include "native_sim.overlay"
|
18
samples/modules/lvgl/demos/prj.conf
Normal file
18
samples/modules/lvgl/demos/prj.conf
Normal file
|
@ -0,0 +1,18 @@
|
|||
CONFIG_MAIN_STACK_SIZE=2048
|
||||
CONFIG_LOG=y
|
||||
CONFIG_SHELL=y
|
||||
|
||||
CONFIG_LVGL=y
|
||||
CONFIG_LV_Z_MEM_POOL_NUMBER_BLOCKS=8
|
||||
CONFIG_LV_Z_SHELL=y
|
||||
CONFIG_LV_USE_MONKEY=y
|
||||
|
||||
CONFIG_DISPLAY=y
|
||||
CONFIG_INPUT=y
|
||||
|
||||
CONFIG_LV_FONT_MONTSERRAT_12=y
|
||||
CONFIG_LV_FONT_MONTSERRAT_14=y
|
||||
CONFIG_LV_FONT_MONTSERRAT_16=y
|
||||
|
||||
# Benchmark Demo
|
||||
CONFIG_LV_USE_FONT_COMPRESSED=y
|
19
samples/modules/lvgl/demos/sample.yaml
Normal file
19
samples/modules/lvgl/demos/sample.yaml
Normal file
|
@ -0,0 +1,19 @@
|
|||
sample:
|
||||
description: LVGL sample, containing all upstream demos
|
||||
name: LVGL demos
|
||||
common:
|
||||
modules:
|
||||
- lvgl
|
||||
harness: none
|
||||
filter: dt_chosen_enabled("zephyr,display")
|
||||
tags: samples lvgl display gui
|
||||
tests:
|
||||
sample.modules.lvgl.demo_music:
|
||||
extra_configs:
|
||||
- CONFIG_LV_Z_DEMO_MUSIC=y
|
||||
sample.modules.lvgl.demo_benchmark:
|
||||
extra_configs:
|
||||
- CONFIG_LV_Z_DEMO_BENCHMARK=y
|
||||
sample.modules.lvgl.demo_stress:
|
||||
extra_configs:
|
||||
- CONFIG_LV_Z_DEMO_STRESS=y
|
45
samples/modules/lvgl/demos/src/main.c
Normal file
45
samples/modules/lvgl/demos/src/main.c
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Copyright (c) 2023 Fabian Blatz <fabianblatz@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <zephyr/kernel.h>
|
||||
#include <zephyr/drivers/display.h>
|
||||
#include <lvgl.h>
|
||||
#include <lv_demos.h>
|
||||
|
||||
#define LOG_LEVEL CONFIG_LOG_DEFAULT_LEVEL
|
||||
#include <zephyr/logging/log.h>
|
||||
LOG_MODULE_REGISTER(app);
|
||||
|
||||
int main(void)
|
||||
{
|
||||
const struct device *display_dev;
|
||||
|
||||
display_dev = DEVICE_DT_GET(DT_CHOSEN(zephyr_display));
|
||||
if (!device_is_ready(display_dev)) {
|
||||
LOG_ERR("Device not ready, aborting test");
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_LV_USE_DEMO_MUSIC)
|
||||
lv_demo_music();
|
||||
#elif defined(CONFIG_LV_USE_DEMO_BENCHMARK)
|
||||
lv_demo_benchmark();
|
||||
#elif defined(CONFIG_LV_USE_DEMO_STRESS)
|
||||
lv_demo_stress();
|
||||
#else
|
||||
#error Enable one of the demos CONFIG_LV_USE_DEMO_MUSIC, CONFIG_LV_USE_DEMO_BENCHMARK \
|
||||
or CONFIG_LV_USE_DEMO_STRESS.
|
||||
#endif
|
||||
|
||||
lv_task_handler();
|
||||
display_blanking_off(display_dev);
|
||||
|
||||
while (1) {
|
||||
k_msleep(lv_task_handler());
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue