[PATCH] Add lvgl_hello: Sample Hello world app using littleVGL and libbsd
Vijay Kumar Banerjee
vijaykumar9597 at gmail.com
Fri Aug 30 18:23:16 UTC 2019
---
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>
+#include <bsp/i2c.h>
+#include <libcpu/am335x.h>
+#include <rtems/irq-extension.h>
+#include <rtems/counter.h>
+#include <bsp/bbb-gpio.h>
+#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>
+
+#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);
+ 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
@@ -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')
def rebuild(ctx):
import waflib.Options
--
2.20.1
More information about the devel
mailing list