[PATCH] Add lvgl_hello: Sample Hello world app using littleVGL and libbsd
Vijay Kumar Banerjee
vijaykumar9597 at gmail.com
Mon Sep 2 07:42:57 UTC 2019
On Mon, Sep 2, 2019 at 4:34 AM Chris Johns <chrisj at rtems.org> wrote:
> 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.
>
> OK. Understood.
> 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? ]
>
> Not all these headers are needed, they seeped in from the experimental
app that I made. I'll remove the ones that are unnecessary.
> > +#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?
>
> I think bbb-gpio.h isn't needed anymore, so it can just be removed. I'll
have a look
and report.
> > +#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?
>
> Yes. We need to register the rtems i2c device in order to work with the
TDA driver
as libbsd uses rtems i2c driver. The bbb_register_* is making it bbb
specific, what
do you suggest to make it more generic?
> > + 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.
>
> OK.
> > @@ -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.
>
> OK.
Thanks for the review. I'll do the necessary changes and post a v2.
> Thanks
> Chris
>
> >
> > def rebuild(ctx):
> > import waflib.Options
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20190902/3117cad7/attachment-0002.html>
More information about the devel
mailing list