[PATCH] Add lvgl_hello: Sample Hello world app using littleVGL and libbsd
Chris Johns
chrisj at rtems.org
Sun Sep 1 23:07:44 UTC 2019
Hi,
Thank you for the patch.
Can this please be moved as lvgl/hello? It would allow for other examples to be
added.
We need a test for liblvgl.a. Maybe lvgl/wscript can check and not build if not
found.
On 31/8/19 4:23 am, Vijay Kumar Banerjee wrote:
> ---
> README | 2 +-
> lvgl_hello/README | 6 ++
> lvgl_hello/test.c | 180 +++++++++++++++++++++++++++++++++++++++++++++
> lvgl_hello/wscript | 25 +++++++
> wscript | 1 +
> 5 files changed, 213 insertions(+), 1 deletion(-)
> create mode 100644 lvgl_hello/README
> create mode 100644 lvgl_hello/test.c
> create mode 100644 lvgl_hello/wscript
>
> diff --git a/README b/README
> index 99ca787..f1e127c 100644
> --- a/README
> +++ b/README
> @@ -15,4 +15,4 @@ posix_api - POSIX API examples (no led)
> schedsim - RTEMS Scheduler Simulator examples
> ticker - Ticker Variations
> uboot - U-Boot interaction examples
> -
> +lvgl_hello - LittleVGL graphics app example using libbsd framebuffer driver
> diff --git a/lvgl_hello/README b/lvgl_hello/README
> new file mode 100644
> index 0000000..866d0cd
> --- /dev/null
> +++ b/lvgl_hello/README
> @@ -0,0 +1,6 @@
> +This folder contains a sample graphics app using littleVGL library and libbsd
> +The generated exe file can be directly run using a JTAG debugger on a target
> +with the right device tree or this can be converted into an image.
> +
> +For instructions on how to build the image or how to run the exe, please refer
> +to the BSP documentation in https://docs.rtems.org
> diff --git a/lvgl_hello/test.c b/lvgl_hello/test.c
> new file mode 100644
> index 0000000..6e0c030
> --- /dev/null
> +++ b/lvgl_hello/test.c
> @@ -0,0 +1,180 @@
> +/*
> + * Copyright (c) 2019 Vijay Kumar Banerjee <vijaykumar9597 at gmail.com>.
> + * All rights reserved.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + * notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + * notice, this list of conditions and the following disclaimer in the
> + * documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + */
> +
> +#include <assert.h>
> +#include <stdlib.h>
> +#include <sysexits.h>
> +
> +#include <rtems.h>
> +#include <rtems/bsd/bsd.h>
> +#include <rtems/dhcpcd.h>
Needed?
> +#include <bsp/i2c.h>
> +#include <libcpu/am335x.h>
This ...
> +#include <rtems/irq-extension.h>
[ Needed? ]
> +#include <rtems/counter.h>
> +#include <bsp/bbb-gpio.h>
.. and this header make the example BBB specific. Is there a way this can be
moved into the BBB BSP or libbsd?
> +#include <rtems/console.h>
> +#include <rtems/shell.h>
> +#include <sys/ioctl.h>
> +#include <fcntl.h>
> +#include <dev/iicbus/iic.h>
> +
> +#include <machine/rtems-bsd-commands.h>
> +
> +#include <bsp.h>
> +
> +#define PRIO_SHELL 150
> +#define STACK_SIZE_SHELL (64 * 1024)
> +
> +#include <stdio.h>
> +#include <string.h>
> +#include <unistd.h>
> +#include <sys/fcntl.h>
> +#include <sys/ioctl.h>
> +#include <sys/mman.h>
> +#include <sys/time.h>
Which headers are needed in this list?
> +
> +#include <sys/consio.h>
> +#include <sys/fbio.h>
> +
> +#include <lvgl.h>
> +#include <fbdev.h>
> +
> +void
> +libbsdhelper_start_shell(rtems_task_priority prio)
> +{
> + rtems_status_code sc = rtems_shell_init(
> + "SHLL",
> + STACK_SIZE_SHELL,
> + prio,
> + CONSOLE_DEVICE_NAME,
> + false,
> + true,
> + NULL
> + );
> + assert(sc == RTEMS_SUCCESSFUL);
> +}
> +
> +static void
> +Init(rtems_task_argument arg)
> +{
> + rtems_status_code sc;
> + int exit_code;
> + (void)arg;
> + static lv_color_t buf[LV_HOR_RES_MAX*10];
> + static lv_disp_buf_t disp_buf;
> +
> + puts("\nRTEMS I2C TEST\n");
> + exit_code = bbb_register_i2c_0();
> + assert(exit_code == 0);
Is this needed for the display to work?
> + sc = rtems_bsd_initialize();
> + assert(sc == RTEMS_SUCCESSFUL);
> +
> + lv_init();
> +
> + fbdev_init();
> +
> + lv_disp_buf_init(&disp_buf, buf, NULL, LV_HOR_RES_MAX*10);
> +
> + lv_disp_drv_t disp_drv;
> + lv_disp_drv_init(&disp_drv);
> + disp_drv.buffer = &disp_buf;
> + disp_drv.flush_cb = fbdev_flush;
> + lv_disp_drv_register(&disp_drv);
> +
> + lv_obj_t * label = lv_label_create(lv_scr_act(), NULL);
> + lv_label_set_text(label, "Hello world!");
> + lv_obj_align(label, NULL, LV_ALIGN_CENTER, 0, 0);
> +
> + lv_tick_inc(5);
> + lv_task_handler();
> +
> + /* Some time for USB device to be detected. */
> + libbsdhelper_start_shell(PRIO_SHELL);
> +
> +
> + exit(0);
> +}
> +
> +/*
> + * Configure LibBSD.
> + */
> +#define RTEMS_BSD_CONFIG_BSP_CONFIG
> +#define RTEMS_BSD_CONFIG_TERMIOS_KQUEUE_AND_POLL
> +#define RTEMS_BSD_CONFIG_INIT
> +
> +#include <machine/rtems-bsd-config.h>
> +
> +/*
> + * Configure RTEMS.
> + */
> +#define CONFIGURE_MICROSECONDS_PER_TICK 1000
> +
> +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
> +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
> +#define CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
> +#define CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
> +#define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
> +
> +#define CONFIGURE_FILESYSTEM_DOSFS
> +#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 32
> +
> +#define CONFIGURE_UNLIMITED_OBJECTS
> +#define CONFIGURE_UNIFIED_WORK_AREAS
> +#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
> +
> +#define CONFIGURE_INIT_TASK_STACK_SIZE (64*1024)
> +#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES
> +#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT
> +
> +#define CONFIGURE_BDBUF_BUFFER_MAX_SIZE (32 * 1024)
> +#define CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS 4
> +#define CONFIGURE_BDBUF_CACHE_MEMORY_SIZE (1 * 1024 * 1024)
> +#define CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY 97
> +#define CONFIGURE_SWAPOUT_TASK_PRIORITY 97
> +
> +//#define CONFIGURE_STACK_CHECKER_ENABLED
> +
> +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
> +#define CONFIGURE_INIT
> +
> +#include <rtems/confdefs.h>
> +
> +/*
> + * Configure Shell.
> + */
> +#include <rtems/netcmds-config.h>
> +#include <bsp/irq-info.h>
> +#define CONFIGURE_SHELL_COMMANDS_INIT
> +
> +#define CONFIGURE_SHELL_USER_COMMANDS \
> + &bsp_interrupt_shell_command, \
> + &rtems_shell_ARP_Command, \
> + &rtems_shell_I2C_Command
> +
> +#define CONFIGURE_SHELL_COMMANDS_ALL
> +
> +#include <rtems/shellconfig.h>
> diff --git a/lvgl_hello/wscript b/lvgl_hello/wscript
> new file mode 100644
> index 0000000..45413ba
> --- /dev/null
> +++ b/lvgl_hello/wscript
Please move to lvgl/hello/wscript.
> @@ -0,0 +1,25 @@
> +# Copyright 2019 Vijay Kumar Banerjee (vijaykumar9597 at gmail.com)
> +#
> +# This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
> +#
> +
> +import rtems_waf.rtems as rtems
> +import os
> +
> +def build(bld):
> + rtems.build(bld)
> + arch_inc_path = rtems.arch_bsp_include_path(bld.env.RTEMS_VERSION,
> + bld.env.RTEMS_ARCH_BSP)
> + include_paths = ['',
> + 'lvgl',
> + 'lvgl/src',
> + 'lv_drivers/display',]
> +
> + for i in range(0,len(include_paths)):
> + include_paths[i] = os.path.join(bld.env.PREFIX, arch_inc_path, include_paths[i])
> +
> + bld(features = 'c cprogram',
> + target = 'lvgl_hello.exe',
> + source = ['test.c'],
> + includes = include_paths,
> + lib = ['m', 'lvgl', 'bsd'])
> diff --git a/wscript b/wscript
> index 4f5705b..fef95ff 100644
> --- a/wscript
> +++ b/wscript
> @@ -42,6 +42,7 @@ def build(bld):
> bld.recurse('posix_api')
> bld.recurse('cxx')
> bld.recurse('c11')
> + bld.recurse('lvgl_hello')
Please change to ...
bld.recurse('lvgl')
.. and add a wscript to check for liblvgl. You will need a `def configure(conf)`
function to check for lvgl in lvgl/wscript. See ...
https://git.rtems.org/rtems_waf/tree/rtems_bsd.py#n52
as an example.
I updated rtems_waf a month ago with better libbsd support. If the rtems_waf
module is updated you will pick up the needed functionality. The top level
wscript file will need to be updated, an example is here ..
https://git.rtems.org/chrisj/rtems-examples.git/tree/wscript?h=libbsd-libdl
The module is loaded with ...
import rtems_waf.rtems_bsd as rtems_bsd
then in options() add ...
rtems_bsd.options(opt)
and in bsp_configure() add ...
rtems_bsd.bsp_configure(conf, arch_bsp, mandatory = False)
conf.recurse('lvgl')
The configure will then be picked up by all BSPs. I suspect with this
functionality you will not need the specifics to find headers or libraries in
the hello/wscript file.
Thanks
Chris
>
> def rebuild(ctx):
> import waflib.Options
>
More information about the devel
mailing list