You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ac...@apache.org on 2020/06/17 15:13:47 UTC
[incubator-nuttx-apps] 02/02: examples/lvgldemo: Change to latest
official release
This is an automated email from the ASF dual-hosted git repository.
acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx-apps.git
commit 32a2207e86cf037f71db9b5a7aba436bc747912c
Author: Huang Qi <hu...@xiaomi.com>
AuthorDate: Wed Jun 17 16:50:05 2020 +0800
examples/lvgldemo: Change to latest official release
---
examples/lvgldemo/.gitignore | 2 +
examples/lvgldemo/Kconfig | 84 ++++++++----------------------------------
examples/lvgldemo/Makefile | 58 +++++++++++++++++++++++++++++
examples/lvgldemo/lv_ex_conf.h | 68 ++++++++++++++++++++++++++++++++++
examples/lvgldemo/lvgldemo.c | 28 ++++++++++++--
examples/lvgldemo/tp_cal.c | 35 ++++++++++--------
6 files changed, 188 insertions(+), 87 deletions(-)
diff --git a/examples/lvgldemo/.gitignore b/examples/lvgldemo/.gitignore
new file mode 100644
index 0000000..7340595
--- /dev/null
+++ b/examples/lvgldemo/.gitignore
@@ -0,0 +1,2 @@
+/*.zip
+/lv_examples
\ No newline at end of file
diff --git a/examples/lvgldemo/Kconfig b/examples/lvgldemo/Kconfig
index 0ac756d..2e6e2fa 100644
--- a/examples/lvgldemo/Kconfig
+++ b/examples/lvgldemo/Kconfig
@@ -4,10 +4,10 @@
#
menuconfig EXAMPLES_LVGLDEMO
- tristate "Littlev Graphics Library Demo"
+ tristate "LVGL Demo"
default n
---help---
- Enable build the Littlev Graphics Library Demo programs
+ Enable build the Light and Versatile Graphics Library Demo programs
if EXAMPLES_LVGLDEMO
@@ -18,82 +18,30 @@ config EXAMPLES_LVGLDEMO_CALIBRATE
Calibrate touchscreen before demo start, but some touchscreen
don't need it, like capacitive touchscreen.
+config EXAMPLES_LVGLDEMO_BUFF_SIZE
+ int "Display buffer size (in line)"
+ default 20
+
choice
prompt "Select a demo application"
- default EXAMPLES_LVGLDEMO_SIMPLE
-
-config EXAMPLES_LVGLDEMO_SIMPLE
- bool "Simple"
+ default EXAMPLES_LVGLDEMO_WIDGETS
-config EXAMPLES_LVGLDEMO_THEME_1
- bool "Single Theme"
- ---help---
- Create a test screen with a lot objects and apply
- the given theme on them
+config EXAMPLES_LVGLDEMO_BENCHMARK
+ bool "Benchmark"
-config EXAMPLES_LVGLDEMO_THEME_2
- bool "Multiple Themes"
- select LV_THEME_LIVE_UPDATE
+config EXAMPLES_LVGLDEMO_PRINTER
+ bool "Printer"
---help---
- Switch themes on the fly to demonstrate each different
- themes. Configure multiple themes in the littlevgl
- settings to use.
-
-endchoice
-
-config EXAMPLES_LVGLDEMO_WALLPAPER
- bool "Use wallpaper"
- depends on EXAMPLES_LVGLDEMO_SIMPLE
- default y
-
-config EXAMPLES_LVGLDEMO_SLIDE_SHOW
- bool "Use slide"
- depends on EXAMPLES_LVGLDEMO_SIMPLE
- default n
+ This demo is optimized for 800 * 480 resolution
-choice
- prompt "Selected Theme"
- depends on EXAMPLES_LVGLDEMO_THEME_1
- default EXAMPLES_LVGLDEMO_THEME_1_DEFAULT
-
-config EXAMPLES_LVGLDEMO_THEME_1_DEFAULT
- bool "Default Theme"
- select USE_LV_THEME_DEFAULT
-
-config EXAMPLES_LVGLDEMO_THEME_1_ALIEN
- bool "Alien"
- select USE_LV_THEME_ALIEN
-
-config EXAMPLES_LVGLDEMO_THEME_1_NIGHT
- bool "Night"
- select USE_LV_THEME_NIGHT
-
-config EXAMPLES_LVGLDEMO_THEME_1_MONO
- bool "Mono"
- select USE_LV_THEME_MONO
+config EXAMPLES_LVGLDEMO_STRESS
+ bool "Stress"
-config EXAMPLES_LVGLDEMO_THEME_1_MATERIAL
- bool "Material"
- select USE_LV_THEME_MATERIAL
-
-config EXAMPLES_LVGLDEMO_THEME_1_ZEN
- bool "Zen"
- select USE_LV_THEME_ZEN
-
-config EXAMPLES_LVGLDEMO_THEME_1_NEMO
- bool "Nemo"
- select USE_LV_THEME_NEMO
+config EXAMPLES_LVGLDEMO_WIDGETS
+ bool "Widgets"
endchoice
-config EXAMPLES_LVGLDEMO_THEME_1_HUE
- int "Theme hue"
- range 0 360
- depends on EXAMPLES_LVGLDEMO_THEME_1
- default 30
- ---help---
- Choose a hue color from the HSV color space
-
config EXAMPLES_LVGLDEMO_PRIORITY
int "lvgl task priority"
default 100
diff --git a/examples/lvgldemo/Makefile b/examples/lvgldemo/Makefile
index e95a8fa..f784d1c 100644
--- a/examples/lvgldemo/Makefile
+++ b/examples/lvgldemo/Makefile
@@ -37,6 +37,15 @@ include $(TOPDIR)/Make.defs
# LittleVGL demo built-in application info
+CONFIG_LV_EXAMPLES_URL ?= https://github.com/lvgl/lv_examples/archive
+
+LVGL_EXAMPLES_VERSION ?= 7.0.2
+LVGL_EXAMPLES_TARBALL = v$(LVGL_EXAMPLES_VERSION).zip
+
+WGET ?= wget
+LVGL_EXAMPLES_UNPACKNAME = lv_examples
+UNPACK ?= unzip -o
+
PROGNAME = lvgldemo
PRIORITY = $(CONFIG_EXAMPLES_LVGLDEMO_PRIORITY)
STACKSIZE = $(CONFIG_EXAMPLES_LVGLDEMO_STACKSIZE)
@@ -46,11 +55,60 @@ MODULE = $(CONFIG_EXAMPLES_LVGLDEMO)
CSRCS += fbdev.c tp.c tp_cal.c
+# static common assets used in mutiple example
+
+LV_EXAMPLE_ASSETS = $(wildcard ./lv_examples/assets/*.c)
+CSRCS += $(notdir $(LV_EXAMPLE_ASSETS))
+VPATH += lv_examples/assets
+
+ifneq ($(CONFIG_EXAMPLES_LVGLDEMO_BENCHMARK),)
+CSRCS += lv_demo_benchmark.c
+VPATH += lv_examples/src/lv_demo_benchmark
+endif
+
+ifneq ($(CONFIG_EXAMPLES_LVGLDEMO_PRINTER),)
+LV_PRINTER_IMAGES = $(wildcard ./lv_examples/src/lv_demo_printer/images/*.c)
+CSRCS += lv_demo_printer.c lv_demo_printer_theme.c
+CSRCS += $(notdir $(LV_PRINTER_IMAGES))
+VPATH += lv_examples/src/lv_demo_printer
+VPATH += lv_examples/src/lv_demo_printer/images
+endif
+
+ifneq ($(CONFIG_EXAMPLES_LVGLDEMO_STRESS),)
+CSRCS += lv_demo_stress.c
+VPATH += lv_examples/src/lv_demo_stress
+endif
+
+ifneq ($(CONFIG_EXAMPLES_LVGLDEMO_WIDGETS),)
+CSRCS += lv_demo_widgets.c
+VPATH += lv_examples/src/lv_demo_widgets
+endif
+
MAINSRC = lvgldemo.c
LVGL_SRC_DIR=$(APPDIR)/graphics/lvgl/lvgl
LVGL_DIR=$(APPDIR)/graphics/lvgl
+
CFLAGS += ${shell $(INCDIR) "$(CC)" "$(LVGL_SRC_DIR)" "$(LVGL_DIR)"}
CXXFLAGS += ${shell $(INCDIR) "$(CC)" "$(LVGL_SRC_DIR)" "$(LVGL_DIR)"}
+$(LVGL_EXAMPLES_TARBALL):
+ @echo "Downloading: $(LVGL_EXAMPLES_TARBALL)"
+ $(Q) $(WGET) $(CONFIG_LV_EXAMPLES_URL)/$(LVGL_EXAMPLES_TARBALL)
+
+$(LVGL_EXAMPLES_UNPACKNAME): $(LVGL_EXAMPLES_TARBALL)
+ @echo "Unpacking: $(LVGL_EXAMPLES_TARBALL) -> $(LVGL_EXAMPLES_UNPACKNAME)"
+ $(Q) $(UNPACK) $(LVGL_EXAMPLES_TARBALL)
+ $(Q) mv lv_examples-$(LVGL_EXAMPLES_VERSION) $(LVGL_EXAMPLES_UNPACKNAME)
+ $(Q) touch $(LVGL_EXAMPLES_UNPACKNAME)
+
+context:: $(LVGL_EXAMPLES_UNPACKNAME)
+
+clean::
+ $(call DELDIR, build)
+
+distclean::
+ $(call DELDIR, $(LVGL_EXAMPLES_UNPACKNAME))
+ $(call DELFILE, $(LVGL_EXAMPLES_TARBALL))
+
include $(APPDIR)/Application.mk
diff --git a/examples/lvgldemo/lv_ex_conf.h b/examples/lvgldemo/lv_ex_conf.h
new file mode 100644
index 0000000..4d8c606
--- /dev/null
+++ b/examples/lvgldemo/lv_ex_conf.h
@@ -0,0 +1,68 @@
+/****************************************************************************
+ * examples/lvgldemo/lv_ex_conf.h
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+#ifndef __APPS_EXAMPLES_LVGLDEMO_LV_EX_CONF_H
+#define __APPS_EXAMPLES_LVGLDEMO_LV_EX_CONF_H
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Enable printf-ing data in demoes and examples */
+
+#define LV_EX_PRINTF 1
+
+/* Add PC keyboard support to some examples
+ * (`lv_drivers` repository is required)
+ */
+
+#define LV_EX_KEYBOARD 0
+
+/* Add 'encoder' (mouse wheel) support to some examples
+ * (`lv_drivers` repository is required)
+ */
+
+#define LV_EX_MOUSEWHEEL 0
+
+/* Show some widget */
+
+#define LV_USE_DEMO_WIDGETS 1
+#if LV_USE_DEMO_WIDGETS
+#define LV_DEMO_WIDGETS_SLIDESHOW 0
+#endif
+
+/* Printer demo, optimized for 800x480 */
+
+#define LV_USE_DEMO_PRINTER 1
+
+/* Demonstrate the usage of encoder and keyboard */
+
+#define LV_USE_DEMO_KEYPAD_AND_ENCODER 1
+
+/* Benchmark your system */
+
+#define LV_USE_DEMO_BENCHMARK 1
+
+/* Stress test for LVGL */
+
+#define LV_USE_DEMO_STRESS 1
+
+#endif /* __APPS_EXAMPLES_LVGLDEMO_LV_EX_CONF_H */
+
diff --git a/examples/lvgldemo/lvgldemo.c b/examples/lvgldemo/lvgldemo.c
index 6b945b2..60fe84b 100644
--- a/examples/lvgldemo/lvgldemo.c
+++ b/examples/lvgldemo/lvgldemo.c
@@ -73,6 +73,18 @@
# define NEED_BOARDINIT 1
#endif
+#define DISPLAY_BUFFER_SIZE (CONFIG_LV_HOR_RES * \
+ CONFIG_EXAMPLES_LVGLDEMO_BUFF_SIZE)
+
+/****************************************************************************
+ * Public Functions Prototypes
+ ****************************************************************************/
+
+void lv_demo_benchmark(void);
+void lv_demo_printer(void);
+void lv_demo_stress(void);
+void lv_demo_widgets(void);
+
/****************************************************************************
* Private Functions
****************************************************************************/
@@ -148,7 +160,7 @@ int main(int argc, FAR char *argv[])
pthread_t tick_thread;
lv_disp_buf_t disp_buf;
- static lv_color_t buf[CONFIG_LV_VDB_SIZE];
+ static lv_color_t buf[DISPLAY_BUFFER_SIZE];
#ifndef CONFIG_EXAMPLES_LVGLDEMO_CALIBRATE
lv_point_t p[4];
@@ -196,7 +208,7 @@ int main(int argc, FAR char *argv[])
/* Basic LittlevGL display driver initialization */
- lv_disp_buf_init(&disp_buf, buf, NULL, LV_HOR_RES_MAX * 10);
+ lv_disp_buf_init(&disp_buf, buf, NULL, DISPLAY_BUFFER_SIZE);
lv_disp_drv_init(&disp_drv);
disp_drv.flush_cb = fbdev_flush;
disp_drv.buffer = &disp_buf;
@@ -220,6 +232,16 @@ int main(int argc, FAR char *argv[])
indev_drv.read_cb = tp_read;
lv_indev_drv_register(&indev_drv);
+#if defined(CONFIG_EXAMPLES_LVGLDEMO_BENCHMARK)
+ lv_demo_benchmark();
+#elif defined(CONFIG_EXAMPLES_LVGLDEMO_PRINTER)
+ lv_demo_printer();
+#elif defined(CONFIG_EXAMPLES_LVGLDEMO_STRESS)
+ lv_demo_stress();
+#elif defined(CONFIG_EXAMPLES_LVGLDEMO_WIDGETS)
+ lv_demo_widgets();
+#endif
+
/* Start TP calibration */
#ifdef CONFIG_EXAMPLES_LVGLDEMO_CALIBRATE
@@ -227,7 +249,7 @@ int main(int argc, FAR char *argv[])
#else
tp_set_cal_values(p, p + 1, p + 2, p + 3);
#endif
- /* Handle LittlevGL tasks */
+ /* Handle LVGL tasks */
while (1)
{
diff --git a/examples/lvgldemo/tp_cal.c b/examples/lvgldemo/tp_cal.c
index 8459657..ed07965 100644
--- a/examples/lvgldemo/tp_cal.c
+++ b/examples/lvgldemo/tp_cal.c
@@ -76,10 +76,11 @@ static void btn_click_action(FAR lv_obj_t *scr, lv_event_t event);
static enum tp_cal_state_e state;
static lv_point_t p[4];
-static lv_obj_t *prev_scr;
-static lv_obj_t *big_btn;
-static lv_obj_t *label_main;
-static lv_obj_t *circ_area;
+static lv_obj_t *prev_scr;
+static lv_obj_t *big_btn;
+static lv_obj_t *label_main;
+static lv_obj_t *circ_area;
+static lv_theme_t *prev_theme;
/****************************************************************************
* Public Functions
@@ -166,15 +167,10 @@ static void btn_click_action(FAR lv_obj_t *scr, lv_event_t event)
#if LV_USE_ANIMATION
lv_anim_init(&a);
lv_anim_set_var(&a, circ_area);
- lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t)lv_obj_set_x);
- lv_anim_set_time(&a, 500);
- lv_anim_set_values(&a, LV_HOR_RES - CIRCLE_SIZE,
- LV_HOR_RES - CIRCLE_SIZE);
- lv_anim_set_delay(&a, 200);
- lv_anim_start(&a);
-
lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t)lv_obj_set_y);
+ lv_anim_set_time(&a, 500);
lv_anim_set_values(&a, 0, LV_VER_RES - CIRCLE_SIZE);
+ lv_anim_set_delay(&a, 200);
lv_anim_start(&a);
#else
lv_obj_set_pos(circ_area,
@@ -214,11 +210,6 @@ static void btn_click_action(FAR lv_obj_t *scr, lv_event_t event)
lv_anim_set_values(&a, LV_HOR_RES - CIRCLE_SIZE, 0);
lv_anim_set_delay(&a, 200);
lv_anim_start(&a);
-
- lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t)lv_obj_set_y);
- lv_anim_set_values(&a, LV_VER_RES - CIRCLE_SIZE,
- LV_VER_RES - CIRCLE_SIZE);
- lv_anim_start(&a);
#else
lv_obj_set_pos(circ_area, 0, LV_VER_RES - CIRCLE_SIZE);
#endif
@@ -251,6 +242,7 @@ static void btn_click_action(FAR lv_obj_t *scr, lv_event_t event)
}
else if (state == TP_CAL_STATE_WAIT_LEAVE)
{
+ lv_theme_set_act(prev_theme);
lv_scr_load(prev_scr);
tp_set_cal_values(&p[0], &p[1], &p[2], &p[3]);
state = TP_CAL_STATE_READY;
@@ -291,6 +283,17 @@ void tp_cal_create(void)
prev_scr = lv_scr_act();
+ lv_theme_t *theme = LV_THEME_DEFAULT_INIT(LV_THEME_DEFAULT_COLOR_PRIMARY,
+ LV_THEME_DEFAULT_COLOR_SECONDARY,
+ LV_THEME_DEFAULT_FLAG,
+ LV_THEME_DEFAULT_FONT_SMALL,
+ LV_THEME_DEFAULT_FONT_NORMAL,
+ LV_THEME_DEFAULT_FONT_SUBTITLE,
+ LV_THEME_DEFAULT_FONT_TITLE);
+
+ prev_theme = lv_theme_get_act();
+ lv_theme_set_act(theme);
+
lv_obj_t *scr = lv_obj_create(NULL, NULL);
lv_obj_set_size(scr, TP_MAX_VALUE, TP_MAX_VALUE);
lv_scr_load(scr);