[PATCH v2] Add lvgl/hello: Sample Hello world app using littleVGL and libbsd

Vijay Kumar Banerjee vijaykumar9597 at gmail.com
Tue Sep 17 21:31:22 UTC 2019


---
 README             |   2 +-
 lvgl/README        |   6 ++
 lvgl/hello/test.c  | 154 +++++++++++++++++++++++++++++++++++++++++++++
 lvgl/hello/wscript |  30 +++++++++
 lvgl/wscript       |  13 ++++
 wscript            |   9 ++-
 6 files changed, 212 insertions(+), 2 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 <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 <bsp/i2c.h>
+#include <rtems/console.h>
+#include <rtems/shell.h>
+
+#define PRIO_SHELL		150
+#define STACK_SIZE_SHELL	(64 * 1024)
+
+#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 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 <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..c706491
--- /dev/null
+++ b/lvgl/hello/wscript
@@ -0,0 +1,30 @@
+# 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 configure(conf):
+    rtems.check_lib_path(conf, lib = 'm')
+    rtems.check_lib_path(conf, lib = 'lvgl')
+    rtems.check_lib_path(conf, lib = 'bsd')
+
+def build(bld):
+    rtems.build(bld)
+    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 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 rtems_waf.rtems_bsd as rtems_bsd
+
+def configure(conf):
+    conf.recurse('hello')
+
+def build(bld):
+    bld.recurse('hello')
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
-- 
2.20.1



More information about the devel mailing list