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 <vijaykumar9...@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 (vijaykumar9...@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 > _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel