[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