From 4c71eb2a7b742aca65eda1ab343aa1a646aea692 Mon Sep 17 00:00:00 2001 From: Vijay Kumar Banerjee Date: Wed, 18 Sep 2019 02:56:46 +0530 Subject: Add lvgl/hello: Sample Hello world app using littleVGL and libbsd --- README | 2 +- lvgl/README | 6 +++ lvgl/hello/test.c | 154 +++++++++++++++++++++++++++++++++++++++++++++++++++++ lvgl/hello/wscript | 32 +++++++++++ lvgl/wscript | 13 +++++ rtems_waf | 2 +- wscript | 9 +++- 7 files changed, 215 insertions(+), 3 deletions(-) create mode 100644 lvgl/README create mode 100644 lvgl/hello/test.c create mode 100644 lvgl/hello/wscript create mode 100644 lvgl/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/README b/lvgl/README new file mode 100644 index 0000000..866d0cd --- /dev/null +++ b/lvgl/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..c85bb35 --- /dev/null +++ b/lvgl/hello/test.c @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2019 Vijay Kumar Banerjee . + * 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 +#include +#include + +#include +#include +#include +#include +#include + +#define PRIO_SHELL 150 +#define STACK_SIZE_SHELL (64 * 1024) + +#include + +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 LVGL HELLO WORLD\n"); + 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 + +/* + * 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 + +/* + * Configure Shell. + */ +#include +#include +#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 diff --git a/lvgl/hello/wscript b/lvgl/hello/wscript new file mode 100644 index 0000000..cbc001a --- /dev/null +++ b/lvgl/hello/wscript @@ -0,0 +1,32 @@ +# Copyright 2019 Vijay Kumar Banerjee (vijaykumar9597@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 rtems_waf.rtems_bsd as rtems_bsd +import os + +def configure(conf): + rtems.check_lib_path(conf, lib = 'm') + rtems.check_lib_path(conf, lib = 'lvgl', mandatory = False) + rtems.check_lib_path(conf, lib = 'bsd', mandatory = False) + +def build(bld): + rtems.build(bld) + if rtems.check_lib(bld, ['bsd', 'lvgl']): + arch_inc_path = rtems.arch_bsp_include_path(str(bld.env.RTEMS_VERSION), + str(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/lvgl/wscript b/lvgl/wscript new file mode 100644 index 0000000..e699554 --- /dev/null +++ b/lvgl/wscript @@ -0,0 +1,13 @@ +# Copyright 2019 Vijay Kumar Banerjee (vijaykumar9597@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 rtems_waf.rtems_bsd as rtems_bsd + +def configure(conf): + conf.recurse('hello') + +def build(bld): + bld.recurse('hello') diff --git a/rtems_waf b/rtems_waf index ad6c6e8..e7a75df 160000 --- a/rtems_waf +++ b/rtems_waf @@ -1 +1 @@ -Subproject commit ad6c6e8771b95dffa73a7dc1167d98d208f17cb0 +Subproject commit e7a75df6531beec1c1b0d18fcaf2cfce7693920c diff --git a/wscript b/wscript index 4f5705b..9af3ded 100644 --- a/wscript +++ b/wscript @@ -11,6 +11,7 @@ rtems_version = "5" try: import rtems_waf.rtems as rtems + import rtems_waf.rtems_bsd as rtems_bsd except: print('error: no rtems_waf git submodule; see README.waf') import sys @@ -19,11 +20,16 @@ except: def init(ctx): rtems.init(ctx, version = rtems_version, long_commands = True) +def bsp_configure(conf, arch_bsp): + rtems_bsd.bsp_configure(conf, arch_bsp, mandatory = False) + conf.recurse('lvgl') + def options(opt): rtems.options(opt) + rtems_bsd.options(opt) def configure(conf): - rtems.configure(conf) + rtems.configure(conf, bsp_configure = bsp_configure) def build(bld): rtems.build(bld) @@ -42,6 +48,7 @@ def build(bld): bld.recurse('posix_api') bld.recurse('cxx') bld.recurse('c11') + bld.recurse('lvgl') def rebuild(ctx): import waflib.Options -- cgit v1.2.3