From 02a56e0761a9fe9b35184381a737d249fc86e78c Mon Sep 17 00:00:00 2001 From: Daniel Rossier Date: Fri, 17 Jul 2026 14:05:25 +0200 Subject: [PATCH] Align the copyright e-mail on heig-vd.ch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace daniel.rossier@soo.tech with daniel.rossier@heig-vd.ch across the tree. The address README.md points contributors to, and the one every recent header already carries. 36 of these are .patch files under meta-linux/soo and meta-usr/soo. Every hit there sits on an added ("+") line — a copyright header of a file the patch creates — so do_patch is unaffected; none is a context line, which would have broken the apply. --- .../files/soo-generic/0020-vdevback.c.patch | 2 +- .../soo/files/soo-generic/0022-vdummy.c.patch | 2 +- .../soo/files/soo-generic/0032-vuart.c.patch | 2 +- .../files/soo-generic/0036-capsule.h.patch | 2 +- .../soo/files/soo-generic/0037-debug.h.patch | 2 +- .../soo/files/soo-generic/0050-paging.h.patch | 2 +- .../soo/files/soo-generic/0056-sysfs.h.patch | 2 +- .../soo/files/soo-generic/0060-debug.h.patch | 2 +- .../files/soo-generic/0061-injector.h.patch | 2 +- .../soo/files/soo-generic/0064-vbus.h.patch | 2 +- .../files/soo-generic/0065-vdevback.h.patch | 2 +- .../soo/files/soo-generic/0068-paging.c.patch | 2 +- .../files/soo-generic/0074-console.c.patch | 2 +- .../files/soo-generic/0075-lprintk.c.patch | 2 +- .../soo/files/soo-generic/0077-core.c.patch | 2 +- .../soo/files/soo-generic/0078-debug.c.patch | 2 +- .../soo/files/soo-generic/0083-gnttab.c.patch | 2 +- .../files/soo-generic/0084-hypervisor.c.patch | 2 +- .../soo/files/soo-generic/0086-setup.c.patch | 2 +- .../0087-soo_guest_activity.c.patch | 2 +- .../soo/files/soo-generic/0088-sysfs.c.patch | 2 +- .../files/soo-generic/0090-vbstorage.c.patch | 2 +- .../files/soo-generic/0091-vbstore.c.patch | 2 +- .../soo-generic/0093-vbus_backend.c.patch | 2 +- .../soo-generic/0095-vbus_client.c.patch | 2 +- .../soo-generic/0096-vbus_vbstore.c.patch | 2 +- .../0001-usr-linux-1.0-r0/0001-core.h.patch | 2 +- .../0001-usr-linux-1.0-r0/0002-debug.h.patch | 2 +- .../0003-device_access.h.patch | 2 +- .../0004-injector.h.patch | 2 +- .../0006-receive.h.patch | 2 +- .../0001-usr-linux-1.0-r0/0008-types.h.patch | 2 +- .../0001-usr-linux-1.0-r0/0010-core.h.patch | 2 +- .../0001-usr-linux-1.0-r0/0011-debug.h.patch | 2 +- .../0049-s3c-restore.c.patch | 2 +- .../0051-s3c-shutdown.c.patch | 2 +- so3/so3/apps/refso3/refso3.c | 2 +- so3/so3/arch/arm32/backtrace.c | 2 +- so3/so3/arch/arm32/include/asm/backtrace.h | 2 +- so3/so3/arch/arm32/include/asm/cpregs.h | 2 +- so3/so3/arch/arm32/virt32/platsmp.c | 2 +- so3/so3/arch/arm64/backtrace.c | 2 +- so3/so3/arch/arm64/include/asm/backtrace.h | 2 +- so3/so3/arch/arm64/include/asm/cpregs.h | 2 +- so3/so3/arch/arm64/virt64/platsmp.c | 2 +- so3/so3/avz/include/avz/dcm.h | 2 +- so3/so3/avz/include/avz/debug.h | 2 +- so3/so3/avz/include/avz/domain.h | 2 +- so3/so3/avz/include/avz/keyhandler.h | 2 +- so3/so3/avz/include/avz/memslot.h | 2 +- so3/so3/avz/include/avz/physdev.h | 2 +- so3/so3/avz/include/avz/sched.h | 2 +- so3/so3/avz/include/avz/schedop.h | 2 +- so3/so3/avz/kernel/console.c | 2 +- so3/so3/avz/kernel/domain_utils.c | 2 +- so3/so3/devices/timer/soo_timer.c | 2 +- so3/so3/include/logbool.h | 2 +- so3/so3/soo/drivers/vdevfront.c | 2 +- so3/so3/soo/drivers/vdummyfront/test.c | 2 +- so3/so3/soo/drivers/vdummyfront/vdummy.c | 2 +- so3/so3/soo/drivers/vuartfront/vuart.c | 2 +- .../soo/drivers/vuihandlerfront/vuihandler.c | 2 +- so3/so3/soo/include/soo/console.h | 2 +- so3/so3/soo/include/soo/debug.h | 2 +- so3/so3/soo/include/soo/physdev.h | 2 +- so3/so3/soo/include/soo/schedop.h | 2 +- so3/so3/soo/include/soo/soo.h | 2 +- so3/so3/soo/include/soo/vbus.h | 2 +- so3/so3/soo/include/soo/vdevfront.h | 2 +- so3/so3/soo/kernel/console/lprintk.c | 2 +- so3/so3/soo/kernel/debug/gpio.c | 2 +- so3/so3/soo/kernel/debug/time.c | 2 +- so3/so3/soo/kernel/gnttab.c | 2 +- so3/so3/soo/kernel/soo_guest_activity.c | 2 +- so3/so3/soo/kernel/vbstore/vbstore_capsule.c | 2 +- so3/so3/soo/kernel/vbus/vbus.c | 2 +- so3/so3/soo/kernel/vbus/vbus_client.c | 2 +- so3/so3/soo/kernel/vbus/vbus_frontend.c | 2 +- so3/so3/soo/kernel/vbus/vbus_vbstore.c | 2 +- so3/usr/lib/lv_conf.h | 1325 ++++++++++++++++ so3/usr/lib/slv/CMakeLists.txt | 7 + so3/usr/lib/slv/slv.c | 125 ++ so3/usr/lib/slv/slv.h | 65 + so3/usr/lib/slv/slv_fb.c | 158 ++ so3/usr/lib/slv/slv_fb.h | 41 + so3/usr/lib/slv/slv_fs.c | 99 ++ so3/usr/lib/slv/slv_fs.h | 26 + so3/usr/lib/slv/slv_keyboard.c | 70 + so3/usr/lib/slv/slv_keyboard.h | 44 + so3/usr/lib/slv/slv_mouse.c | 85 ++ so3/usr/lib/slv/slv_mouse.h | 42 + so3/usr/patches/0001-lv_conf.h.patch | 1328 +++++++++++++++++ so3/usr/patches/0002-CMakeLists.txt.patch | 10 + so3/usr/patches/0003-slv.c.patch | 128 ++ so3/usr/patches/0004-slv.h.patch | 68 + so3/usr/patches/0005-slv_fb.c.patch | 161 ++ so3/usr/patches/0006-slv_fb.h.patch | 44 + so3/usr/patches/0007-slv_fs.c.patch | 102 ++ so3/usr/patches/0008-slv_fs.h.patch | 29 + so3/usr/patches/0009-slv_keyboard.c.patch | 73 + so3/usr/patches/0010-slv_keyboard.h.patch | 47 + so3/usr/patches/0011-slv_mouse.c.patch | 88 ++ so3/usr/patches/0012-slv_mouse.h.patch | 45 + so3/usr/patches/0013-fillfb.c.patch | 82 + so3/usr/patches/0014-lvgl_demo.c.patch | 52 + so3/usr/patches/0015-lvgl_perf.c.patch | 69 + so3/usr/patches/0016-lvgl_benchmark.c.patch | 58 + so3/usr/patches/0017-lvgl_widgets.c.patch | 58 + so3/usr/patches/0018-CMakeLists.txt.patch | 19 + so3/usr/patches/0019-CMakeLists.txt.patch | 19 + so3/usr/patches/series | 19 + so3/usr/src/fillfb.c | 79 + so3/usr/src/lvgl_benchmark.c | 55 + so3/usr/src/lvgl_demo.c | 49 + so3/usr/src/lvgl_perf.c | 66 + so3/usr/src/lvgl_widgets.c | 55 + 116 files changed, 4969 insertions(+), 79 deletions(-) create mode 100644 so3/usr/lib/lv_conf.h create mode 100644 so3/usr/lib/slv/CMakeLists.txt create mode 100644 so3/usr/lib/slv/slv.c create mode 100644 so3/usr/lib/slv/slv.h create mode 100644 so3/usr/lib/slv/slv_fb.c create mode 100644 so3/usr/lib/slv/slv_fb.h create mode 100644 so3/usr/lib/slv/slv_fs.c create mode 100644 so3/usr/lib/slv/slv_fs.h create mode 100644 so3/usr/lib/slv/slv_keyboard.c create mode 100644 so3/usr/lib/slv/slv_keyboard.h create mode 100644 so3/usr/lib/slv/slv_mouse.c create mode 100644 so3/usr/lib/slv/slv_mouse.h create mode 100644 so3/usr/patches/0001-lv_conf.h.patch create mode 100644 so3/usr/patches/0002-CMakeLists.txt.patch create mode 100644 so3/usr/patches/0003-slv.c.patch create mode 100644 so3/usr/patches/0004-slv.h.patch create mode 100644 so3/usr/patches/0005-slv_fb.c.patch create mode 100644 so3/usr/patches/0006-slv_fb.h.patch create mode 100644 so3/usr/patches/0007-slv_fs.c.patch create mode 100644 so3/usr/patches/0008-slv_fs.h.patch create mode 100644 so3/usr/patches/0009-slv_keyboard.c.patch create mode 100644 so3/usr/patches/0010-slv_keyboard.h.patch create mode 100644 so3/usr/patches/0011-slv_mouse.c.patch create mode 100644 so3/usr/patches/0012-slv_mouse.h.patch create mode 100644 so3/usr/patches/0013-fillfb.c.patch create mode 100644 so3/usr/patches/0014-lvgl_demo.c.patch create mode 100644 so3/usr/patches/0015-lvgl_perf.c.patch create mode 100644 so3/usr/patches/0016-lvgl_benchmark.c.patch create mode 100644 so3/usr/patches/0017-lvgl_widgets.c.patch create mode 100644 so3/usr/patches/0018-CMakeLists.txt.patch create mode 100644 so3/usr/patches/0019-CMakeLists.txt.patch create mode 100644 so3/usr/patches/series create mode 100644 so3/usr/src/fillfb.c create mode 100644 so3/usr/src/lvgl_benchmark.c create mode 100644 so3/usr/src/lvgl_demo.c create mode 100644 so3/usr/src/lvgl_perf.c create mode 100644 so3/usr/src/lvgl_widgets.c diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0020-vdevback.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0020-vdevback.c.patch index 92a557b86e..69e4e37d3c 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0020-vdevback.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0020-vdevback.c.patch @@ -3,7 +3,7 @@ @@ -0,0 +1,309 @@ + +/* -+ * Copyright (C) 2020 Daniel Rossier ++ * Copyright (C) 2020 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0022-vdummy.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0022-vdummy.c.patch index ac6f2894e4..16485b07b9 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0022-vdummy.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0022-vdummy.c.patch @@ -2,7 +2,7 @@ +++ ./soo/drivers/vdummyback/vdummy.c 2025-08-29 08:46:41.395591085 +0200 @@ -0,0 +1,183 @@ +/* -+ * Copyright (C) 2016-2018 Daniel Rossier ++ * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0032-vuart.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0032-vuart.c.patch index df3e29041e..ad90931477 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0032-vuart.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0032-vuart.c.patch @@ -2,7 +2,7 @@ +++ ./soo/drivers/vuartback/vuart.c 2025-08-29 08:46:41.395804736 +0200 @@ -0,0 +1,327 @@ +/* -+ * Copyright (C) 2016-2018 Daniel Rossier ++ * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0036-capsule.h.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0036-capsule.h.patch index cbc88cb2d4..864d8cd682 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0036-capsule.h.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0036-capsule.h.patch @@ -2,7 +2,7 @@ +++ ./soo/include/soo/capsule.h 2025-08-30 15:30:27.244692708 +0200 @@ -0,0 +1,40 @@ +/* -+ * Copyright (C) 2017-2025 Daniel Rossier ++ * Copyright (C) 2017-2025 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0037-debug.h.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0037-debug.h.patch index f09aaa084f..01ab6566a5 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0037-debug.h.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0037-debug.h.patch @@ -2,7 +2,7 @@ +++ ./soo/include/soo/debug.h 2025-08-29 08:46:41.396116173 +0200 @@ -0,0 +1,27 @@ +/* -+ * Copyright (C) 2022 Daniel Rossier ++ * Copyright (C) 2022 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0050-paging.h.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0050-paging.h.patch index 6bcb4cd7ab..ea20bc9ffe 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0050-paging.h.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0050-paging.h.patch @@ -2,7 +2,7 @@ +++ ./soo/include/soo/paging.h 2025-08-29 08:46:41.395959078 +0200 @@ -0,0 +1,36 @@ +/* -+ * Copyright (C) 2016-2019 Daniel Rossier ++ * Copyright (C) 2016-2019 Daniel Rossier + * Copyright (C) 2018 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0056-sysfs.h.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0056-sysfs.h.patch index ac21c58bbb..d657d0efc9 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0056-sysfs.h.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0056-sysfs.h.patch @@ -3,7 +3,7 @@ @@ -0,0 +1,57 @@ + +/* -+ * Copyright (C) 2020 Daniel Rossier ++ * Copyright (C) 2020 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0060-debug.h.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0060-debug.h.patch index 70e95bbf53..a0f1cb9402 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0060-debug.h.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0060-debug.h.patch @@ -2,7 +2,7 @@ +++ ./soo/include/soo/uapi/debug.h 2025-08-29 08:46:41.395937531 +0200 @@ -0,0 +1,75 @@ +/* -+ * Copyright (C) 2015-2019 Daniel Rossier ++ * Copyright (C) 2015-2019 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0061-injector.h.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0061-injector.h.patch index 2d153da4a4..7b4eb6c662 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0061-injector.h.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0061-injector.h.patch @@ -2,7 +2,7 @@ +++ ./soo/include/soo/uapi/injector.h 2025-08-29 08:46:41.395900289 +0200 @@ -0,0 +1,108 @@ +/* -+ * Copyright (C) 2016 Daniel Rossier ++ * Copyright (C) 2016 Daniel Rossier + * Copyright (C) 2017,2018 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0064-vbus.h.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0064-vbus.h.patch index 7eb1d67641..a618647d40 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0064-vbus.h.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0064-vbus.h.patch @@ -2,7 +2,7 @@ +++ ./soo/include/soo/vbus.h 2025-08-29 08:46:41.396103436 +0200 @@ -0,0 +1,336 @@ +/* -+ * Copyright (C) 2014-2019 Daniel Rossier ++ * Copyright (C) 2014-2019 Daniel Rossier + * Copyright (C) 2016, 2018 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0065-vdevback.h.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0065-vdevback.h.patch index 4e31e10dea..a257a278dc 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0065-vdevback.h.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0065-vdevback.h.patch @@ -2,7 +2,7 @@ +++ ./soo/include/soo/vdevback.h 2025-08-29 08:46:41.396178895 +0200 @@ -0,0 +1,90 @@ +/* -+ * Copyright (C) 2020 Daniel Rossier ++ * Copyright (C) 2020 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0068-paging.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0068-paging.c.patch index f2f12eeee8..3927cd12cd 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0068-paging.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0068-paging.c.patch @@ -2,7 +2,7 @@ +++ ./soo/kernel/arm64/paging.c 2025-08-29 08:46:41.395097877 +0200 @@ -0,0 +1,76 @@ +/* -+ * Copyright (C) 2016-2021 Daniel Rossier ++ * Copyright (C) 2016-2021 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0074-console.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0074-console.c.patch index a75408f600..b4270b4115 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0074-console.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0074-console.c.patch @@ -2,7 +2,7 @@ +++ ./soo/kernel/console/console.c 2025-08-29 08:46:41.394716106 +0200 @@ -0,0 +1,152 @@ +/* -+ * Copyright (C) 2016-2019 Daniel Rossier ++ * Copyright (C) 2016-2019 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0075-lprintk.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0075-lprintk.c.patch index f09c6b8726..4a04d362e0 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0075-lprintk.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0075-lprintk.c.patch @@ -2,7 +2,7 @@ +++ ./soo/kernel/console/lprintk.c 2025-08-29 08:46:41.394703669 +0200 @@ -0,0 +1,203 @@ +/* -+ * Copyright (C) 2016-2018 Daniel Rossier ++ * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2019 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0077-core.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0077-core.c.patch index ed7ac1dbdd..30e7ac88a7 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0077-core.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0077-core.c.patch @@ -2,7 +2,7 @@ +++ ./soo/kernel/core.c 2025-08-30 15:29:26.627707308 +0200 @@ -0,0 +1,317 @@ +/* -+ * Copyright (C) 2014-2019 Daniel Rossier ++ * Copyright (C) 2014-2019 Daniel Rossier + * Copyright (C) 2017, 2018 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0078-debug.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0078-debug.c.patch index ce99a8c075..e8526b1e78 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0078-debug.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0078-debug.c.patch @@ -2,7 +2,7 @@ +++ ./soo/kernel/debug/debug.c 2025-08-29 08:46:41.394757773 +0200 @@ -0,0 +1,47 @@ +/* -+ * Copyright (C) 2022 Daniel Rossier ++ * Copyright (C) 2022 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0083-gnttab.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0083-gnttab.c.patch index a8c919ba6e..233239b7d2 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0083-gnttab.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0083-gnttab.c.patch @@ -2,7 +2,7 @@ +++ ./soo/kernel/gnttab.c 2025-08-29 08:46:41.394805040 +0200 @@ -0,0 +1,88 @@ +/* -+ * Copyright (C) 2016-2019 Daniel Rossier ++ * Copyright (C) 2016-2019 Daniel Rossier + * Copyright (C) 2018 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0084-hypervisor.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0084-hypervisor.c.patch index 536e031b7f..d4d9649d02 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0084-hypervisor.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0084-hypervisor.c.patch @@ -2,7 +2,7 @@ +++ ./soo/kernel/hypervisor.c 2025-08-30 15:04:15.207689288 +0200 @@ -0,0 +1,108 @@ +/* -+ * Copyright (C) 2016-2019 Daniel Rossier ++ * Copyright (C) 2016-2019 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0086-setup.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0086-setup.c.patch index 8b4e7f3594..5e1d6f18f2 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0086-setup.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0086-setup.c.patch @@ -2,7 +2,7 @@ +++ ./soo/kernel/setup.c 2025-08-29 08:46:41.394853981 +0200 @@ -0,0 +1,30 @@ +/* -+ * Copyright (C) 2014-2021 Daniel Rossier ++ * Copyright (C) 2014-2021 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0087-soo_guest_activity.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0087-soo_guest_activity.c.patch index 330bbe908f..beefdabf11 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0087-soo_guest_activity.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0087-soo_guest_activity.c.patch @@ -2,7 +2,7 @@ +++ ./soo/kernel/soo_guest_activity.c 2025-08-29 08:46:41.394793300 +0200 @@ -0,0 +1,201 @@ +/* -+ * Copyright (C) 2016-2019 Daniel Rossier ++ * Copyright (C) 2016-2019 Daniel Rossier + * Copyright (C) 2018-2019 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0088-sysfs.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0088-sysfs.c.patch index f29f61811d..d42f7beb69 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0088-sysfs.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0088-sysfs.c.patch @@ -3,7 +3,7 @@ @@ -0,0 +1,158 @@ + +/* -+ * Copyright (C) 2020 Daniel Rossier ++ * Copyright (C) 2020 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0090-vbstorage.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0090-vbstorage.c.patch index 6c4103e6d0..e3d4db810a 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0090-vbstorage.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0090-vbstorage.c.patch @@ -2,7 +2,7 @@ +++ ./soo/kernel/vbstore/vbstorage.c 2025-08-29 08:46:41.395120704 +0200 @@ -0,0 +1,518 @@ +/* -+ * Copyright (C) 2016-2019 Daniel Rossier ++ * Copyright (C) 2016-2019 Daniel Rossier + * Copyright (C) 2018 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0091-vbstore.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0091-vbstore.c.patch index b7f0be1469..c751b9480b 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0091-vbstore.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0091-vbstore.c.patch @@ -2,7 +2,7 @@ +++ ./soo/kernel/vbstore/vbstore.c 2025-08-29 08:46:41.395147867 +0200 @@ -0,0 +1,475 @@ +/* -+ * Copyright (C) 2016-2019 Daniel Rossier ++ * Copyright (C) 2016-2019 Daniel Rossier + * Copyright (C) 2018 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0093-vbus_backend.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0093-vbus_backend.c.patch index 2e92d0c724..06a77a0f23 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0093-vbus_backend.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0093-vbus_backend.c.patch @@ -2,7 +2,7 @@ +++ ./soo/kernel/vbus/vbus_backend.c 2025-08-29 08:46:41.395033838 +0200 @@ -0,0 +1,314 @@ +/* -+ * Copyright (C) 2016-2019 Daniel Rossier ++ * Copyright (C) 2016-2019 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0095-vbus_client.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0095-vbus_client.c.patch index 82a8e235cd..c0afc8bfd7 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0095-vbus_client.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0095-vbus_client.c.patch @@ -2,7 +2,7 @@ +++ ./soo/kernel/vbus/vbus_client.c 2025-08-29 08:46:41.395021714 +0200 @@ -0,0 +1,189 @@ +/* -+ * Copyright (C) 2016-2019 Daniel Rossier ++ * Copyright (C) 2016-2019 Daniel Rossier + * Copyright (C) 2018 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-linux/recipes-linux/soo/files/soo-generic/0096-vbus_vbstore.c.patch b/build/meta-linux/recipes-linux/soo/files/soo-generic/0096-vbus_vbstore.c.patch index 6b333cc74b..24764b7121 100644 --- a/build/meta-linux/recipes-linux/soo/files/soo-generic/0096-vbus_vbstore.c.patch +++ b/build/meta-linux/recipes-linux/soo/files/soo-generic/0096-vbus_vbstore.c.patch @@ -2,7 +2,7 @@ +++ ./soo/kernel/vbus/vbus_vbstore.c 2025-08-29 08:46:41.394977570 +0200 @@ -0,0 +1,974 @@ +/* -+ * Copyright (C) 2016-2019 Daniel Rossier ++ * Copyright (C) 2016-2019 Daniel Rossier + * Copyright (C) 2018 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0001-core.h.patch b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0001-core.h.patch index e7709ae9b8..65c9759259 100644 --- a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0001-core.h.patch +++ b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0001-core.h.patch @@ -2,7 +2,7 @@ +++ ./include/core/core.h 2025-10-10 17:28:33.584649635 +0200 @@ -0,0 +1,55 @@ +/* -+ * Copyright (C) 2014-2019 Daniel Rossier ++ * Copyright (C) 2014-2019 Daniel Rossier + * Copyright (C) 2018-2019 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0002-debug.h.patch b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0002-debug.h.patch index 6419cfd730..6e7add0ff6 100644 --- a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0002-debug.h.patch +++ b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0002-debug.h.patch @@ -2,7 +2,7 @@ +++ ./include/core/debug.h 2025-10-10 17:28:33.584702104 +0200 @@ -0,0 +1,48 @@ +/* -+ * Copyright (C) 2014-2019 Daniel Rossier ++ * Copyright (C) 2014-2019 Daniel Rossier + * Copyright (C) 2018-2019 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0003-device_access.h.patch b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0003-device_access.h.patch index c0ca40317a..2ee96ffe1e 100644 --- a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0003-device_access.h.patch +++ b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0003-device_access.h.patch @@ -2,7 +2,7 @@ +++ ./include/core/device_access.h 2025-10-10 17:28:33.584702104 +0200 @@ -0,0 +1,58 @@ + /* -+ * Copyright (C) 2014-2019 Daniel Rossier ++ * Copyright (C) 2014-2019 Daniel Rossier + * Copyright (c) 2018 Baptiste Delporte + * Copyright (C) 2019 David Truan + * diff --git a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0004-injector.h.patch b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0004-injector.h.patch index 0be1b5458b..c1e8bb5e08 100644 --- a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0004-injector.h.patch +++ b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0004-injector.h.patch @@ -3,7 +3,7 @@ @@ -0,0 +1,29 @@ + +/* -+ * Copyright (C) 2014-2019 Daniel Rossier ++ * Copyright (C) 2014-2019 Daniel Rossier + * Copyright (C) 2018-2019 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0006-receive.h.patch b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0006-receive.h.patch index c1b88cfa17..55ee9e9466 100644 --- a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0006-receive.h.patch +++ b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0006-receive.h.patch @@ -2,7 +2,7 @@ +++ ./include/core/receive.h 2025-10-10 17:28:33.584702104 +0200 @@ -0,0 +1,27 @@ +/* -+ * Copyright (C) 2014-2019 Daniel Rossier ++ * Copyright (C) 2014-2019 Daniel Rossier + * Copyright (C) 2018-2019 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0008-types.h.patch b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0008-types.h.patch index 3aae65c89d..238f150c75 100644 --- a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0008-types.h.patch +++ b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0008-types.h.patch @@ -2,7 +2,7 @@ +++ ./include/core/types.h 2025-10-10 17:28:33.584702104 +0200 @@ -0,0 +1,26 @@ +/* -+ * Copyright (C) 2014-2019 Daniel Rossier ++ * Copyright (C) 2014-2019 Daniel Rossier + * Copyright (C) 2018-2019 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0010-core.h.patch b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0010-core.h.patch index b0ae3c79d8..d66accc6cf 100644 --- a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0010-core.h.patch +++ b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0010-core.h.patch @@ -2,7 +2,7 @@ +++ ./include/soo/core.h 2025-10-10 17:28:33.584702104 +0200 @@ -0,0 +1,30 @@ +/* -+ * Copyright (C) 2014-2019 Daniel Rossier ++ * Copyright (C) 2014-2019 Daniel Rossier + * Copyright (C) 2018-2019 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0011-debug.h.patch b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0011-debug.h.patch index 26d5240edc..4b58f19dab 100644 --- a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0011-debug.h.patch +++ b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0011-debug.h.patch @@ -2,7 +2,7 @@ +++ ./include/soo/debug.h 2025-10-10 17:28:33.584815499 +0200 @@ -0,0 +1,48 @@ +/* -+ * Copyright (C) 2014-2019 Daniel Rossier ++ * Copyright (C) 2014-2019 Daniel Rossier + * Copyright (C) 2018-2019 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify diff --git a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0049-s3c-restore.c.patch b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0049-s3c-restore.c.patch index cdacca9cbc..345cf11bc9 100644 --- a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0049-s3c-restore.c.patch +++ b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0049-s3c-restore.c.patch @@ -2,7 +2,7 @@ +++ ./src/soo/s3c-restore.c 2025-10-10 17:28:33.594328500 +0200 @@ -0,0 +1,76 @@ +/* -+ * Copyright (C) 2014-2020 Daniel Rossier ++ * Copyright (C) 2014-2020 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as diff --git a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0051-s3c-shutdown.c.patch b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0051-s3c-shutdown.c.patch index ecdede51c6..7c279ae459 100644 --- a/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0051-s3c-shutdown.c.patch +++ b/build/meta-usr/recipes-usr/soo/files/0001-usr-linux-1.0-r0/0051-s3c-shutdown.c.patch @@ -2,7 +2,7 @@ +++ ./src/soo/s3c-shutdown.c 2025-10-10 17:28:33.594328500 +0200 @@ -0,0 +1,65 @@ +/* -+ * Copyright (C) 2014-2020 Daniel Rossier ++ * Copyright (C) 2014-2020 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/apps/refso3/refso3.c b/so3/so3/apps/refso3/refso3.c index cc5715c304..30f442319b 100644 --- a/so3/so3/apps/refso3/refso3.c +++ b/so3/so3/apps/refso3/refso3.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2026 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2016-2019 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/arch/arm32/backtrace.c b/so3/so3/arch/arm32/backtrace.c index 30540cd02f..b81e0710c8 100644 --- a/so3/so3/arch/arm32/backtrace.c +++ b/so3/so3/arch/arm32/backtrace.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017 Daniel Rossier + * Copyright (C) 2016,2017 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/arch/arm32/include/asm/backtrace.h b/so3/so3/arch/arm32/include/asm/backtrace.h index 3c79c2199e..82831e2c13 100644 --- a/so3/so3/arch/arm32/include/asm/backtrace.h +++ b/so3/so3/arch/arm32/include/asm/backtrace.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2020 Daniel Rossier + * Copyright (C) 2016-2020 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/arch/arm32/include/asm/cpregs.h b/so3/so3/arch/arm32/include/asm/cpregs.h index 01a90c5d62..d7fa2cea75 100644 --- a/so3/so3/arch/arm32/include/asm/cpregs.h +++ b/so3/so3/arch/arm32/include/asm/cpregs.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017 Daniel Rossier + * Copyright (C) 2016,2017 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/arch/arm32/virt32/platsmp.c b/so3/so3/arch/arm32/virt32/platsmp.c index d09a9524ab..ab97a25c6a 100644 --- a/so3/so3/arch/arm32/virt32/platsmp.c +++ b/so3/so3/arch/arm32/virt32/platsmp.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017 Daniel Rossier + * Copyright (C) 2016,2017 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/arch/arm64/backtrace.c b/so3/so3/arch/arm64/backtrace.c index 1b6e95932a..8cd4e30d67 100644 --- a/so3/so3/arch/arm64/backtrace.c +++ b/so3/so3/arch/arm64/backtrace.c @@ -1,6 +1,6 @@ /* - * Copyright (C) 2016,2017 Daniel Rossier + * Copyright (C) 2016,2017 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/arch/arm64/include/asm/backtrace.h b/so3/so3/arch/arm64/include/asm/backtrace.h index 19492c6422..043505e764 100644 --- a/so3/so3/arch/arm64/include/asm/backtrace.h +++ b/so3/so3/arch/arm64/include/asm/backtrace.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2020 Daniel Rossier + * Copyright (C) 2016-2020 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/arch/arm64/include/asm/cpregs.h b/so3/so3/arch/arm64/include/asm/cpregs.h index 01a90c5d62..d7fa2cea75 100644 --- a/so3/so3/arch/arm64/include/asm/cpregs.h +++ b/so3/so3/arch/arm64/include/asm/cpregs.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017 Daniel Rossier + * Copyright (C) 2016,2017 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/arch/arm64/virt64/platsmp.c b/so3/so3/arch/arm64/virt64/platsmp.c index d09a9524ab..ab97a25c6a 100644 --- a/so3/so3/arch/arm64/virt64/platsmp.c +++ b/so3/so3/arch/arm64/virt64/platsmp.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017 Daniel Rossier + * Copyright (C) 2016,2017 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/avz/include/avz/dcm.h b/so3/so3/avz/include/avz/dcm.h index 11c47be591..a6065f681b 100644 --- a/so3/so3/avz/include/avz/dcm.h +++ b/so3/so3/avz/include/avz/dcm.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2026 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2017,2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/avz/include/avz/debug.h b/so3/so3/avz/include/avz/debug.h index 5ca5eb544c..9e2a0e7364 100644 --- a/so3/so3/avz/include/avz/debug.h +++ b/so3/so3/avz/include/avz/debug.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2019 Daniel Rossier + * Copyright (C) 2015-2019 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/avz/include/avz/domain.h b/so3/so3/avz/include/avz/domain.h index 9781c173d2..43c3dfb4dd 100644 --- a/so3/so3/avz/include/avz/domain.h +++ b/so3/so3/avz/include/avz/domain.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2026 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/avz/include/avz/keyhandler.h b/so3/so3/avz/include/avz/keyhandler.h index f9cfcb8415..5db900505a 100644 --- a/so3/so3/avz/include/avz/keyhandler.h +++ b/so3/so3/avz/include/avz/keyhandler.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017 Daniel Rossier + * Copyright (C) 2016,2017 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/avz/include/avz/memslot.h b/so3/so3/avz/include/avz/memslot.h index 252ecfbaae..5b4b361307 100644 --- a/so3/so3/avz/include/avz/memslot.h +++ b/so3/so3/avz/include/avz/memslot.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2026 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/avz/include/avz/physdev.h b/so3/so3/avz/include/avz/physdev.h index 512273bded..7a75d02e21 100644 --- a/so3/so3/avz/include/avz/physdev.h +++ b/so3/so3/avz/include/avz/physdev.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2018 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/avz/include/avz/sched.h b/so3/so3/avz/include/avz/sched.h index 9a1496a221..afdb16adeb 100644 --- a/so3/so3/avz/include/avz/sched.h +++ b/so3/so3/avz/include/avz/sched.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2026 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/avz/include/avz/schedop.h b/so3/so3/avz/include/avz/schedop.h index 2c332c4bce..99c77435b2 100644 --- a/so3/so3/avz/include/avz/schedop.h +++ b/so3/so3/avz/include/avz/schedop.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2018 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/avz/kernel/console.c b/so3/so3/avz/kernel/console.c index 518fcb7be4..1f18a5c986 100644 --- a/so3/so3/avz/kernel/console.c +++ b/so3/so3/avz/kernel/console.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017 Daniel Rossier + * Copyright (C) 2016,2017 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/avz/kernel/domain_utils.c b/so3/so3/avz/kernel/domain_utils.c index 960d58f92a..4d9e540c4a 100644 --- a/so3/so3/avz/kernel/domain_utils.c +++ b/so3/so3/avz/kernel/domain_utils.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2026 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/devices/timer/soo_timer.c b/so3/so3/devices/timer/soo_timer.c index d816b1503e..a988c1cac2 100644 --- a/so3/so3/devices/timer/soo_timer.c +++ b/so3/so3/devices/timer/soo_timer.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2018 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/include/logbool.h b/so3/so3/include/logbool.h index eaa858135f..71693c9ecd 100644 --- a/so3/so3/include/logbool.h +++ b/so3/so3/include/logbool.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 Daniel Rossier + * Copyright (C) 2018 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/soo/drivers/vdevfront.c b/so3/so3/soo/drivers/vdevfront.c index f450d8c884..ef72cdf178 100644 --- a/so3/so3/soo/drivers/vdevfront.c +++ b/so3/so3/soo/drivers/vdevfront.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2026 Daniel Rossier + * Copyright (C) 2020-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/soo/drivers/vdummyfront/test.c b/so3/so3/soo/drivers/vdummyfront/test.c index a3839c3f3f..4f2d28a799 100644 --- a/so3/so3/soo/drivers/vdummyfront/test.c +++ b/so3/so3/soo/drivers/vdummyfront/test.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2019 Daniel Rossier + * Copyright (C) 2018-2019 Daniel Rossier * Copyright (C) 2018-2019 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/soo/drivers/vdummyfront/vdummy.c b/so3/so3/soo/drivers/vdummyfront/vdummy.c index d2bfcab517..fde9a9d68f 100644 --- a/so3/so3/soo/drivers/vdummyfront/vdummy.c +++ b/so3/so3/soo/drivers/vdummyfront/vdummy.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2026 Daniel Rossier + * Copyright (C) 2018-2026 Daniel Rossier * Copyright (C) 2018-2019 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/soo/drivers/vuartfront/vuart.c b/so3/so3/soo/drivers/vuartfront/vuart.c index f4d980dac0..87d466dd6e 100644 --- a/so3/so3/soo/drivers/vuartfront/vuart.c +++ b/so3/so3/soo/drivers/vuartfront/vuart.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2019 Daniel Rossier + * Copyright (C) 2018-2019 Daniel Rossier * Copyright (C) 2018-2019 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/soo/drivers/vuihandlerfront/vuihandler.c b/so3/so3/soo/drivers/vuihandlerfront/vuihandler.c index e4ff79a42f..758ef0f98c 100644 --- a/so3/so3/soo/drivers/vuihandlerfront/vuihandler.c +++ b/so3/so3/soo/drivers/vuihandlerfront/vuihandler.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2020-2022 David Truan - * Copyright (C) 2018-2026 Daniel Rossier + * Copyright (C) 2018-2026 Daniel Rossier * Copyright (C) 2018-2019 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/soo/include/soo/console.h b/so3/so3/soo/include/soo/console.h index 947b2b8baf..63e6d7b338 100644 --- a/so3/so3/soo/include/soo/console.h +++ b/so3/so3/soo/include/soo/console.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2018 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/soo/include/soo/debug.h b/so3/so3/soo/include/soo/debug.h index b5d01acfb8..1086ada153 100644 --- a/so3/so3/soo/include/soo/debug.h +++ b/so3/so3/soo/include/soo/debug.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2018 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/soo/include/soo/physdev.h b/so3/so3/soo/include/soo/physdev.h index 228317d4e4..52e2a5cd28 100644 --- a/so3/so3/soo/include/soo/physdev.h +++ b/so3/so3/soo/include/soo/physdev.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2018 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/soo/include/soo/schedop.h b/so3/so3/soo/include/soo/schedop.h index 5ab77c2754..1caa51870c 100644 --- a/so3/so3/soo/include/soo/schedop.h +++ b/so3/so3/soo/include/soo/schedop.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2018 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/soo/include/soo/soo.h b/so3/so3/soo/include/soo/soo.h index 2d2c5dc061..fc1d30f2d3 100644 --- a/so3/so3/soo/include/soo/soo.h +++ b/so3/so3/soo/include/soo/soo.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2026 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/soo/include/soo/vbus.h b/so3/so3/soo/include/soo/vbus.h index 60e209439e..845b713552 100644 --- a/so3/so3/soo/include/soo/vbus.h +++ b/so3/so3/soo/include/soo/vbus.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2026 Daniel Rossier + * Copyright (C) 2014-2026 Daniel Rossier * Copyright (C) 2016, 2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/soo/include/soo/vdevfront.h b/so3/so3/soo/include/soo/vdevfront.h index d8782610e7..51cd9be879 100644 --- a/so3/so3/soo/include/soo/vdevfront.h +++ b/so3/so3/soo/include/soo/vdevfront.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 Daniel Rossier + * Copyright (C) 2020 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/soo/kernel/console/lprintk.c b/so3/so3/soo/kernel/console/lprintk.c index 1f232d4cd2..4a74ba0291 100644 --- a/so3/so3/soo/kernel/console/lprintk.c +++ b/so3/so3/soo/kernel/console/lprintk.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2019 Daniel Rossier + * Copyright (C) 2018-2019 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/soo/kernel/debug/gpio.c b/so3/so3/soo/kernel/debug/gpio.c index bd5bac6bf1..e5ff8934a1 100644 --- a/so3/so3/soo/kernel/debug/gpio.c +++ b/so3/so3/soo/kernel/debug/gpio.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2018 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/soo/kernel/debug/time.c b/so3/so3/soo/kernel/debug/time.c index ef2795fcf5..e86f591a5d 100644 --- a/so3/so3/soo/kernel/debug/time.c +++ b/so3/so3/soo/kernel/debug/time.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2026 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/soo/kernel/gnttab.c b/so3/so3/soo/kernel/gnttab.c index d970e4e531..2ba65e21ec 100644 --- a/so3/so3/soo/kernel/gnttab.c +++ b/so3/so3/soo/kernel/gnttab.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2018 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/soo/kernel/soo_guest_activity.c b/so3/so3/soo/kernel/soo_guest_activity.c index 8ed1252149..b0a2da51c6 100644 --- a/so3/so3/soo/kernel/soo_guest_activity.c +++ b/so3/so3/soo/kernel/soo_guest_activity.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2026 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff --git a/so3/so3/soo/kernel/vbstore/vbstore_capsule.c b/so3/so3/soo/kernel/vbstore/vbstore_capsule.c index cc2880a525..54c844ce67 100644 --- a/so3/so3/soo/kernel/vbstore/vbstore_capsule.c +++ b/so3/so3/soo/kernel/vbstore/vbstore_capsule.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2026 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/soo/kernel/vbus/vbus.c b/so3/so3/soo/kernel/vbus/vbus.c index 71cf62539d..4075f2d457 100644 --- a/so3/so3/soo/kernel/vbus/vbus.c +++ b/so3/so3/soo/kernel/vbus/vbus.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2026 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/soo/kernel/vbus/vbus_client.c b/so3/so3/soo/kernel/vbus/vbus_client.c index 871b922cbb..51283583d6 100644 --- a/so3/so3/soo/kernel/vbus/vbus_client.c +++ b/so3/so3/soo/kernel/vbus/vbus_client.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2018 Daniel Rossier + * Copyright (C) 2016-2018 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/soo/kernel/vbus/vbus_frontend.c b/so3/so3/soo/kernel/vbus/vbus_frontend.c index ebe4ecb5c6..5f587aa82e 100644 --- a/so3/so3/soo/kernel/vbus/vbus_frontend.c +++ b/so3/so3/soo/kernel/vbus/vbus_frontend.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2026 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/so3/soo/kernel/vbus/vbus_vbstore.c b/so3/so3/soo/kernel/vbus/vbus_vbstore.c index 3ceb81f24a..ceb8d84541 100644 --- a/so3/so3/soo/kernel/vbus/vbus_vbstore.c +++ b/so3/so3/soo/kernel/vbus/vbus_vbstore.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016-2026 Daniel Rossier + * Copyright (C) 2016-2026 Daniel Rossier * Copyright (C) 2016-2018 Baptiste Delporte * * This program is free software; you can redistribute it and/or modify diff --git a/so3/usr/lib/lv_conf.h b/so3/usr/lib/lv_conf.h new file mode 100644 index 0000000000..7db06013e8 --- /dev/null +++ b/so3/usr/lib/lv_conf.h @@ -0,0 +1,1325 @@ +/** + * @file lv_conf.h + * Configuration file for v9.3.0-dev + */ + +/* + * Copy this file as `lv_conf.h` + * 1. simply next to `lvgl` folder + * 2. or to any other place and + * - define `LV_CONF_INCLUDE_SIMPLE`; + * - add the path as an include path. + */ + +/* clang-format off */ +#if 1 /* Set this to "1" to enable content */ + +#ifndef LV_CONF_H +#define LV_CONF_H + +/* If you need to include anything here, do it inside the `__ASSEMBLY__` guard */ +#if 0 && defined(__ASSEMBLY__) +#include "my_include.h" +#endif + +/*==================== + COLOR SETTINGS + *====================*/ + +/** Color depth: 1 (I1), 8 (L8), 16 (RGB565), 24 (RGB888), 32 (XRGB8888) */ +#define LV_COLOR_DEPTH 32 + +/*========================= + STDLIB WRAPPER SETTINGS + *=========================*/ + +/** Possible values + * - LV_STDLIB_BUILTIN: LVGL's built in implementation + * - LV_STDLIB_CLIB: Standard C functions, like malloc, strlen, etc + * - LV_STDLIB_MICROPYTHON: MicroPython implementation + * - LV_STDLIB_RTTHREAD: RT-Thread implementation + * - LV_STDLIB_CUSTOM: Implement the functions externally + */ +#define LV_USE_STDLIB_MALLOC LV_STDLIB_BUILTIN + +/** Possible values + * - LV_STDLIB_BUILTIN: LVGL's built in implementation + * - LV_STDLIB_CLIB: Standard C functions, like malloc, strlen, etc + * - LV_STDLIB_MICROPYTHON: MicroPython implementation + * - LV_STDLIB_RTTHREAD: RT-Thread implementation + * - LV_STDLIB_CUSTOM: Implement the functions externally + */ +#define LV_USE_STDLIB_STRING LV_STDLIB_BUILTIN + +/** Possible values + * - LV_STDLIB_BUILTIN: LVGL's built in implementation + * - LV_STDLIB_CLIB: Standard C functions, like malloc, strlen, etc + * - LV_STDLIB_MICROPYTHON: MicroPython implementation + * - LV_STDLIB_RTTHREAD: RT-Thread implementation + * - LV_STDLIB_CUSTOM: Implement the functions externally + */ +#define LV_USE_STDLIB_SPRINTF LV_STDLIB_BUILTIN + +#define LV_STDINT_INCLUDE +#define LV_STDDEF_INCLUDE +#define LV_STDBOOL_INCLUDE +#define LV_INTTYPES_INCLUDE +#define LV_LIMITS_INCLUDE +#define LV_STDARG_INCLUDE + +#if LV_USE_STDLIB_MALLOC == LV_STDLIB_BUILTIN + /** Size of memory available for `lv_malloc()` in bytes (>= 2kB) */ + #define LV_MEM_SIZE (4 * 1024 * 1024U) /**< [bytes] */ + + /** Size of the memory expand for `lv_malloc()` in bytes */ + #define LV_MEM_POOL_EXPAND_SIZE 0 + + /** Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too. */ + #define LV_MEM_ADR 0 /**< 0: unused*/ + /* Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc */ + #if LV_MEM_ADR == 0 + #undef LV_MEM_POOL_INCLUDE + #undef LV_MEM_POOL_ALLOC + #endif +#endif /*LV_USE_STDLIB_MALLOC == LV_STDLIB_BUILTIN*/ + +/*==================== + HAL SETTINGS + *====================*/ + +/** Default display refresh, input device read and animation step period. */ +#define LV_DEF_REFR_PERIOD 30 /**< [ms] */ + +/** Default Dots Per Inch. Used to initialize default sizes such as widgets sized, style paddings. + * (Not so important, you can adjust it to modify default sizes and spaces.) */ +#define LV_DPI_DEF 130 /**< [px/inch] */ + +/*================= + * OPERATING SYSTEM + *=================*/ +/** Select operating system to use. Possible options: + * - LV_OS_NONE + * - LV_OS_PTHREAD + * - LV_OS_FREERTOS + * - LV_OS_CMSIS_RTOS2 + * - LV_OS_RTTHREAD + * - LV_OS_WINDOWS + * - LV_OS_MQX + * - LV_OS_SDL2 + * - LV_OS_CUSTOM */ +#define LV_USE_OS LV_OS_NONE + +#if LV_USE_OS == LV_OS_CUSTOM + #define LV_OS_CUSTOM_INCLUDE +#endif +#if LV_USE_OS == LV_OS_FREERTOS + /* + * Unblocking an RTOS task with a direct notification is 45% faster and uses less RAM + * than unblocking a task using an intermediary object such as a binary semaphore. + * RTOS task notifications can only be used when there is only one task that can be the recipient of the event. + */ + #define LV_USE_FREERTOS_TASK_NOTIFY 1 +#endif + +/*======================== + * RENDERING CONFIGURATION + *========================*/ + +/** Align stride of all layers and images to this bytes */ +#define LV_DRAW_BUF_STRIDE_ALIGN 1 + +/** Align start address of draw_buf addresses to this bytes*/ +#define LV_DRAW_BUF_ALIGN 4 + +/** Using matrix for transformations. + * Requirements: + * - `LV_USE_MATRIX = 1`. + * - Rendering engine needs to support 3x3 matrix transformations. */ +#define LV_DRAW_TRANSFORM_USE_MATRIX 0 + +/* If a widget has `style_opa < 255` (not `bg_opa`, `text_opa` etc) or not NORMAL blend mode + * it is buffered into a "simple" layer before rendering. The widget can be buffered in smaller chunks. + * "Transformed layers" (if `transform_angle/zoom` are set) use larger buffers + * and can't be drawn in chunks. */ + +/** The target buffer size for simple layer chunks. */ +#define LV_DRAW_LAYER_SIMPLE_BUF_SIZE (24 * 1024) /**< [bytes]*/ + +/* Limit the max allocated memory for simple and transformed layers. + * It should be at least `LV_DRAW_LAYER_SIMPLE_BUF_SIZE` sized but if transformed layers are also used + * it should be enough to store the largest widget too (width x height x 4 area). + * Set it to 0 to have no limit. */ +#define LV_DRAW_LAYER_MAX_MEMORY 0 /**< No limit by default [bytes]*/ + +/** Stack size of drawing thread. + * NOTE: If FreeType or ThorVG is enabled, it is recommended to set it to 32KB or more. + */ +#define LV_DRAW_THREAD_STACK_SIZE (8 * 1024) /**< [bytes]*/ + +#define LV_USE_DRAW_SW 1 +#if LV_USE_DRAW_SW == 1 + /* + * Selectively disable color format support in order to reduce code size. + * NOTE: some features use certain color formats internally, e.g. + * - gradients use RGB888 + * - bitmaps with transparency may use ARGB8888 + */ + #define LV_DRAW_SW_SUPPORT_RGB565 1 + #define LV_DRAW_SW_SUPPORT_RGB565A8 1 + #define LV_DRAW_SW_SUPPORT_RGB888 1 + #define LV_DRAW_SW_SUPPORT_XRGB8888 1 + #define LV_DRAW_SW_SUPPORT_ARGB8888 1 + #define LV_DRAW_SW_SUPPORT_L8 1 + #define LV_DRAW_SW_SUPPORT_AL88 1 + #define LV_DRAW_SW_SUPPORT_A8 1 + #define LV_DRAW_SW_SUPPORT_I1 1 + + /* The threshold of the luminance to consider a pixel as + * active in indexed color format */ + #define LV_DRAW_SW_I1_LUM_THRESHOLD 127 + + /** Set number of draw units. + * - > 1 requires operating system to be enabled in `LV_USE_OS`. + * - > 1 means multiple threads will render the screen in parallel. */ + #define LV_DRAW_SW_DRAW_UNIT_CNT 1 + + /** Use Arm-2D to accelerate software (sw) rendering. */ + #define LV_USE_DRAW_ARM2D_SYNC 0 + + /** Enable native helium assembly to be compiled. */ + #define LV_USE_NATIVE_HELIUM_ASM 0 + + /** + * - 0: Use a simple renderer capable of drawing only simple rectangles with gradient, images, text, and straight lines only. + * - 1: Use a complex renderer capable of drawing rounded corners, shadow, skew lines, and arcs too. */ + #define LV_DRAW_SW_COMPLEX 1 + + #if LV_DRAW_SW_COMPLEX == 1 + /** Allow buffering some shadow calculation. + * LV_DRAW_SW_SHADOW_CACHE_SIZE is the maximum shadow size to buffer, where shadow size is + * `shadow_width + radius`. Caching has LV_DRAW_SW_SHADOW_CACHE_SIZE^2 RAM cost. */ + #define LV_DRAW_SW_SHADOW_CACHE_SIZE 0 + + /** Set number of maximally-cached circle data. + * The circumference of 1/4 circle are saved for anti-aliasing. + * `radius * 4` bytes are used per circle (the most often used radiuses are saved). + * - 0: disables caching */ + #define LV_DRAW_SW_CIRCLE_CACHE_SIZE 4 + #endif + + #define LV_USE_DRAW_SW_ASM LV_DRAW_SW_ASM_NONE + + #if LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_CUSTOM + #define LV_DRAW_SW_ASM_CUSTOM_INCLUDE "" + #endif + + /** Enable drawing complex gradients in software: linear at an angle, radial or conical */ + #define LV_USE_DRAW_SW_COMPLEX_GRADIENTS 0 +#endif + +/*Use TSi's aka (Think Silicon) NemaGFX */ +#define LV_USE_NEMA_GFX 0 + +#if LV_USE_NEMA_GFX + /** Select which NemaGFX HAL to use. Possible options: + * - LV_NEMA_HAL_CUSTOM + * - LV_NEMA_HAL_STM32 */ + #define LV_USE_NEMA_HAL LV_NEMA_HAL_CUSTOM + #if LV_USE_NEMA_HAL == LV_NEMA_HAL_STM32 + #define LV_NEMA_STM32_HAL_INCLUDE + #endif + + /*Enable Vector Graphics Operations. Available only if NemaVG library is present*/ + #define LV_USE_NEMA_VG 0 + #if LV_USE_NEMA_VG + /*Define application's resolution used for VG related buffer allocation */ + #define LV_NEMA_GFX_MAX_RESX 800 + #define LV_NEMA_GFX_MAX_RESY 600 + #endif +#endif + +/** Use NXP's VG-Lite GPU on iMX RTxxx platforms. */ +#define LV_USE_DRAW_VGLITE 0 + +#if LV_USE_DRAW_VGLITE + /** Enable blit quality degradation workaround recommended for screen's dimension > 352 pixels. */ + #define LV_USE_VGLITE_BLIT_SPLIT 0 + + #if LV_USE_OS + /** Use additional draw thread for VG-Lite processing. */ + #define LV_USE_VGLITE_DRAW_THREAD 1 + + #if LV_USE_VGLITE_DRAW_THREAD + /** Enable VGLite draw async. Queue multiple tasks and flash them once to the GPU. */ + #define LV_USE_VGLITE_DRAW_ASYNC 1 + #endif + #endif + + /** Enable VGLite asserts. */ + #define LV_USE_VGLITE_ASSERT 0 +#endif + +/** Use NXP's PXP on iMX RTxxx platforms. */ +#define LV_USE_PXP 0 + +#if LV_USE_PXP + /** Use PXP for drawing.*/ + #define LV_USE_DRAW_PXP 1 + + /** Use PXP to rotate display.*/ + #define LV_USE_ROTATE_PXP 0 + + #if LV_USE_DRAW_PXP && LV_USE_OS + /** Use additional draw thread for PXP processing.*/ + #define LV_USE_PXP_DRAW_THREAD 1 + #endif + + /** Enable PXP asserts. */ + #define LV_USE_PXP_ASSERT 0 +#endif + +/** Use Renesas Dave2D on RA platforms. */ +#define LV_USE_DRAW_DAVE2D 0 + +/** Draw using cached SDL textures*/ +#define LV_USE_DRAW_SDL 0 + +/** Use VG-Lite GPU. */ +#define LV_USE_DRAW_VG_LITE 0 + +#if LV_USE_DRAW_VG_LITE + /** Enable VG-Lite custom external 'gpu_init()' function */ + #define LV_VG_LITE_USE_GPU_INIT 0 + + /** Enable VG-Lite assert. */ + #define LV_VG_LITE_USE_ASSERT 0 + + /** VG-Lite flush commit trigger threshold. GPU will try to batch these many draw tasks. */ + #define LV_VG_LITE_FLUSH_MAX_COUNT 8 + + /** Enable border to simulate shadow. + * NOTE: which usually improves performance, + * but does not guarantee the same rendering quality as the software. */ + #define LV_VG_LITE_USE_BOX_SHADOW 0 + + /** VG-Lite gradient maximum cache number. + * @note The memory usage of a single gradient image is 4K bytes. */ + #define LV_VG_LITE_GRAD_CACHE_CNT 32 + + /** VG-Lite stroke maximum cache number. */ + #define LV_VG_LITE_STROKE_CACHE_CNT 32 +#endif + +/** Accelerate blends, fills, etc. with STM32 DMA2D */ +#define LV_USE_DRAW_DMA2D 0 + +#if LV_USE_DRAW_DMA2D + #define LV_DRAW_DMA2D_HAL_INCLUDE "stm32h7xx_hal.h" + + /* if enabled, the user is required to call `lv_draw_dma2d_transfer_complete_interrupt_handler` + * upon receiving the DMA2D global interrupt + */ + #define LV_USE_DRAW_DMA2D_INTERRUPT 0 +#endif + +/** Draw using cached OpenGLES textures */ +#define LV_USE_DRAW_OPENGLES 0 + +/*======================= + * FEATURE CONFIGURATION + *=======================*/ + +/*------------- + * Logging + *-----------*/ + +/** Enable log module */ +#define LV_USE_LOG 1 +#if LV_USE_LOG + /** Set value to one of the following levels of logging detail: + * - LV_LOG_LEVEL_TRACE Log detailed information. + * - LV_LOG_LEVEL_INFO Log important events. + * - LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem. + * - LV_LOG_LEVEL_ERROR Log only critical issues, when system may fail. + * - LV_LOG_LEVEL_USER Log only custom log messages added by the user. + * - LV_LOG_LEVEL_NONE Do not log anything. */ + #define LV_LOG_LEVEL LV_LOG_LEVEL_WARN + + /** - 1: Print log with 'printf'; + * - 0: User needs to register a callback with `lv_log_register_print_cb()`. */ + #define LV_LOG_PRINTF 1 + + /** Set callback to print logs. + * E.g `my_print`. The prototype should be `void my_print(lv_log_level_t level, const char * buf)`. + * Can be overwritten by `lv_log_register_print_cb`. */ + //#define LV_LOG_PRINT_CB + + /** - 1: Enable printing timestamp; + * - 0: Disable printing timestamp. */ + #define LV_LOG_USE_TIMESTAMP 1 + + /** - 1: Print file and line number of the log; + * - 0: Do not print file and line number of the log. */ + #define LV_LOG_USE_FILE_LINE 1 + + /* Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs. */ + #define LV_LOG_TRACE_MEM 1 /**< Enable/disable trace logs in memory operations. */ + #define LV_LOG_TRACE_TIMER 1 /**< Enable/disable trace logs in timer operations. */ + #define LV_LOG_TRACE_INDEV 1 /**< Enable/disable trace logs in input device operations. */ + #define LV_LOG_TRACE_DISP_REFR 1 /**< Enable/disable trace logs in display re-draw operations. */ + #define LV_LOG_TRACE_EVENT 1 /**< Enable/disable trace logs in event dispatch logic. */ + #define LV_LOG_TRACE_OBJ_CREATE 1 /**< Enable/disable trace logs in object creation (core `obj` creation plus every widget). */ + #define LV_LOG_TRACE_LAYOUT 1 /**< Enable/disable trace logs in flex- and grid-layout operations. */ + #define LV_LOG_TRACE_ANIM 1 /**< Enable/disable trace logs in animation logic. */ + #define LV_LOG_TRACE_CACHE 1 /**< Enable/disable trace logs in cache operations. */ +#endif /*LV_USE_LOG*/ + +/*------------- + * Asserts + *-----------*/ + +/* Enable assertion failures if an operation fails or invalid data is found. + * If LV_USE_LOG is enabled, an error message will be printed on failure. */ +#define LV_USE_ASSERT_NULL 1 /**< Check if the parameter is NULL. (Very fast, recommended) */ +#define LV_USE_ASSERT_MALLOC 1 /**< Checks is the memory is successfully allocated or no. (Very fast, recommended) */ +#define LV_USE_ASSERT_STYLE 0 /**< Check if the styles are properly initialized. (Very fast, recommended) */ +#define LV_USE_ASSERT_MEM_INTEGRITY 0 /**< Check the integrity of `lv_mem` after critical operations. (Slow) */ +#define LV_USE_ASSERT_OBJ 0 /**< Check the object's type and existence (e.g. not deleted). (Slow) */ + +/** Add a custom handler when assert happens e.g. to restart MCU. */ +#define LV_ASSERT_HANDLER_INCLUDE +#define LV_ASSERT_HANDLER while(1); /**< Halt by default */ + +/*------------- + * Debug + *-----------*/ + +/** 1: Draw random colored rectangles over the redrawn areas. */ +#define LV_USE_REFR_DEBUG 0 + +/** 1: Draw a red overlay for ARGB layers and a green overlay for RGB layers*/ +#define LV_USE_LAYER_DEBUG 0 + +/** 1: Adds the following behaviors for debugging: + * - Draw overlays with different colors for each draw_unit's tasks. + * - Draw index number of draw unit on white background. + * - For layers, draws index number of draw unit on black background. */ +#define LV_USE_PARALLEL_DRAW_DEBUG 0 + +/*------------- + * Others + *-----------*/ + +#define LV_ENABLE_GLOBAL_CUSTOM 0 +#if LV_ENABLE_GLOBAL_CUSTOM + /** Header to include for custom 'lv_global' function" */ + #define LV_GLOBAL_CUSTOM_INCLUDE +#endif + +/** Default cache size in bytes. + * Used by image decoders such as `lv_lodepng` to keep the decoded image in memory. + * If size is not set to 0, the decoder will fail to decode when the cache is full. + * If size is 0, the cache function is not enabled and the decoded memory will be + * released immediately after use. */ +#define LV_CACHE_DEF_SIZE 0 + +/** Default number of image header cache entries. The cache is used to store the headers of images + * The main logic is like `LV_CACHE_DEF_SIZE` but for image headers. */ +#define LV_IMAGE_HEADER_CACHE_DEF_CNT 0 + +/** Number of stops allowed per gradient. Increase this to allow more stops. + * This adds (sizeof(lv_color_t) + 1) bytes per additional stop. */ +#define LV_GRADIENT_MAX_STOPS 2 + +/** Adjust color mix functions rounding. GPUs might calculate color mix (blending) differently. + * - 0: round down, + * - 64: round up from x.75, + * - 128: round up from half, + * - 192: round up from x.25, + * - 254: round up */ +#define LV_COLOR_MIX_ROUND_OFS 0 + +/** Add 2 x 32-bit variables to each `lv_obj_t` to speed up getting style properties */ +#define LV_OBJ_STYLE_CACHE 0 + +/** Add `id` field to `lv_obj_t` */ +#define LV_USE_OBJ_ID 0 + +/** Automatically assign an ID when obj is created */ +#define LV_OBJ_ID_AUTO_ASSIGN LV_USE_OBJ_ID + +/** Use builtin obj ID handler functions: +* - lv_obj_assign_id: Called when a widget is created. Use a separate counter for each widget class as an ID. +* - lv_obj_id_compare: Compare the ID to decide if it matches with a requested value. +* - lv_obj_stringify_id: Return string-ified identifier, e.g. "button3". +* - lv_obj_free_id: Does nothing, as there is no memory allocation for the ID. +* When disabled these functions needs to be implemented by the user.*/ +#define LV_USE_OBJ_ID_BUILTIN 1 + +/** Use obj property set/get API. */ +#define LV_USE_OBJ_PROPERTY 0 + +/** Enable property name support. */ +#define LV_USE_OBJ_PROPERTY_NAME 1 + +/* Use VG-Lite Simulator. + * - Requires: LV_USE_THORVG_INTERNAL or LV_USE_THORVG_EXTERNAL */ +#define LV_USE_VG_LITE_THORVG 0 + +#if LV_USE_VG_LITE_THORVG + /** Enable LVGL's blend mode support */ + #define LV_VG_LITE_THORVG_LVGL_BLEND_SUPPORT 0 + + /** Enable YUV color format support */ + #define LV_VG_LITE_THORVG_YUV_SUPPORT 0 + + /** Enable Linear gradient extension support */ + #define LV_VG_LITE_THORVG_LINEAR_GRADIENT_EXT_SUPPORT 0 + + /** Enable alignment on 16 pixels */ + #define LV_VG_LITE_THORVG_16PIXELS_ALIGN 1 + + /** Buffer address alignment */ + #define LV_VG_LITE_THORVG_BUF_ADDR_ALIGN 64 + + /** Enable multi-thread render */ + #define LV_VG_LITE_THORVG_THREAD_RENDER 0 +#endif + +/* Enable the multi-touch gesture recognition feature */ +/* Gesture recognition requires the use of floats */ +#define LV_USE_GESTURE_RECOGNITION 0 + +/*===================== + * COMPILER SETTINGS + *====================*/ + +/** For big endian systems set to 1 */ +#define LV_BIG_ENDIAN_SYSTEM 0 + +/** Define a custom attribute for `lv_tick_inc` function */ +#define LV_ATTRIBUTE_TICK_INC + +/** Define a custom attribute for `lv_timer_handler` function */ +#define LV_ATTRIBUTE_TIMER_HANDLER + +/** Define a custom attribute for `lv_display_flush_ready` function */ +#define LV_ATTRIBUTE_FLUSH_READY + +/** Align VG_LITE buffers on this number of bytes. + * @note vglite_src_buf_aligned() uses this value to validate alignment of passed buffer pointers. */ +#define LV_ATTRIBUTE_MEM_ALIGN_SIZE 1 + +/** Will be added where memory needs to be aligned (with -Os data might not be aligned to boundary by default). + * E.g. __attribute__((aligned(4)))*/ +#define LV_ATTRIBUTE_MEM_ALIGN + +/** Attribute to mark large constant arrays, for example for font bitmaps */ +#define LV_ATTRIBUTE_LARGE_CONST + +/** Compiler prefix for a large array declaration in RAM */ +#define LV_ATTRIBUTE_LARGE_RAM_ARRAY + +/** Place performance critical functions into a faster memory (e.g RAM) */ +#define LV_ATTRIBUTE_FAST_MEM + +/** Export integer constant to binding. This macro is used with constants in the form of LV_ that + * should also appear on LVGL binding API such as MicroPython. */ +#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning /**< The default value just prevents GCC warning */ + +/** Prefix all global extern data with this */ +#define LV_ATTRIBUTE_EXTERN_DATA + +/** Use `float` as `lv_value_precise_t` */ +#define LV_USE_FLOAT 0 + +/** Enable matrix support + * - Requires `LV_USE_FLOAT = 1` */ +#define LV_USE_MATRIX 0 + +/** Include `lvgl_private.h` in `lvgl.h` to access internal data and functions by default */ +#define LV_USE_PRIVATE_API 0 + +/*================== + * FONT USAGE + *===================*/ + +/* Montserrat fonts with ASCII range and some symbols using bpp = 4 + * https://fonts.google.com/specimen/Montserrat */ +#define LV_FONT_MONTSERRAT_8 0 +#define LV_FONT_MONTSERRAT_10 1 +#define LV_FONT_MONTSERRAT_12 1 +#define LV_FONT_MONTSERRAT_14 1 +#define LV_FONT_MONTSERRAT_16 1 +#define LV_FONT_MONTSERRAT_18 1 +#define LV_FONT_MONTSERRAT_20 1 +#define LV_FONT_MONTSERRAT_22 1 +#define LV_FONT_MONTSERRAT_24 1 +#define LV_FONT_MONTSERRAT_26 1 +#define LV_FONT_MONTSERRAT_28 1 +#define LV_FONT_MONTSERRAT_30 0 +#define LV_FONT_MONTSERRAT_32 0 +#define LV_FONT_MONTSERRAT_34 0 +#define LV_FONT_MONTSERRAT_36 0 +#define LV_FONT_MONTSERRAT_38 0 +#define LV_FONT_MONTSERRAT_40 0 +#define LV_FONT_MONTSERRAT_42 0 +#define LV_FONT_MONTSERRAT_44 0 +#define LV_FONT_MONTSERRAT_46 0 +#define LV_FONT_MONTSERRAT_48 0 + +/* Demonstrate special features */ +#define LV_FONT_MONTSERRAT_28_COMPRESSED 0 /**< bpp = 3 */ +#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0 /**< Hebrew, Arabic, Persian letters and all their forms */ +#define LV_FONT_SIMSUN_14_CJK 0 /**< 1000 most common CJK radicals */ +#define LV_FONT_SIMSUN_16_CJK 0 /**< 1000 most common CJK radicals */ + +/** Pixel perfect monospaced fonts */ +#define LV_FONT_UNSCII_8 0 +#define LV_FONT_UNSCII_16 0 + +/** Optionally declare custom fonts here. + * + * You can use any of these fonts as the default font too and they will be available + * globally. Example: + * + * @code + * #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2) + * @endcode + */ +#define LV_FONT_CUSTOM_DECLARE + +/** Always set a default font */ +#define LV_FONT_DEFAULT &lv_font_montserrat_14 + +/** Enable handling large font and/or fonts with a lot of characters. + * The limit depends on the font size, font face and bpp. + * A compiler error will be triggered if a font needs it. */ +#define LV_FONT_FMT_TXT_LARGE 0 + +/** Enables/disables support for compressed fonts. */ +#define LV_USE_FONT_COMPRESSED 0 + +/** Enable drawing placeholders when glyph dsc is not found. */ +#define LV_USE_FONT_PLACEHOLDER 1 + +/*================= + * TEXT SETTINGS + *=================*/ + +/** + * Select a character encoding for strings. + * Your IDE or editor should have the same character encoding. + * - LV_TXT_ENC_UTF8 + * - LV_TXT_ENC_ASCII + */ +#define LV_TXT_ENC LV_TXT_ENC_UTF8 + +/** While rendering text strings, break (wrap) text on these chars. */ +#define LV_TXT_BREAK_CHARS " ,.;:-_)]}" + +/** If a word is at least this long, will break wherever "prettiest". + * To disable, set to a value <= 0. */ +#define LV_TXT_LINE_BREAK_LONG_LEN 0 + +/** Minimum number of characters in a long word to put on a line before a break. + * Depends on LV_TXT_LINE_BREAK_LONG_LEN. */ +#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3 + +/** Minimum number of characters in a long word to put on a line after a break. + * Depends on LV_TXT_LINE_BREAK_LONG_LEN. */ +#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3 + +/** Support bidirectional text. Allows mixing Left-to-Right and Right-to-Left text. + * The direction will be processed according to the Unicode Bidirectional Algorithm: + * https://www.w3.org/International/articles/inline-bidi-markup/uba-basics */ +#define LV_USE_BIDI 0 +#if LV_USE_BIDI + /*Set the default direction. Supported values: + *`LV_BASE_DIR_LTR` Left-to-Right + *`LV_BASE_DIR_RTL` Right-to-Left + *`LV_BASE_DIR_AUTO` detect text base direction*/ + #define LV_BIDI_BASE_DIR_DEF LV_BASE_DIR_AUTO +#endif + +/** Enable Arabic/Persian processing + * In these languages characters should be replaced with another form based on their position in the text */ +#define LV_USE_ARABIC_PERSIAN_CHARS 0 + +/*The control character to use for signaling text recoloring*/ +#define LV_TXT_COLOR_CMD "#" + +/*================== + * WIDGETS + *================*/ +/* Documentation for widgets can be found here: https://docs.lvgl.io/latest/en/html/widgets/index.html . */ + +/** 1: Causes these widgets to be given default values at creation time. + * - lv_buttonmatrix_t: Get default maps: {"Btn1", "Btn2", "Btn3", "\n", "Btn4", "Btn5", ""}, else map not set. + * - lv_checkbox_t : String label set to "Check box", else set to empty string. + * - lv_dropdown_t : Options set to "Option 1", "Option 2", "Option 3", else no values are set. + * - lv_roller_t : Options set to "Option 1", "Option 2", "Option 3", "Option 4", "Option 5", else no values are set. + * - lv_label_t : Text set to "Text", else empty string. + * */ +#define LV_WIDGETS_HAS_DEFAULT_VALUE 1 + +#define LV_USE_ANIMIMG 1 + +#define LV_USE_ARC 1 + +#define LV_USE_BAR 1 + +#define LV_USE_BUTTON 1 + +#define LV_USE_BUTTONMATRIX 1 + +#define LV_USE_CALENDAR 1 +#if LV_USE_CALENDAR + #define LV_CALENDAR_WEEK_STARTS_MONDAY 0 + #if LV_CALENDAR_WEEK_STARTS_MONDAY + #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"} + #else + #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"} + #endif + + #define LV_CALENDAR_DEFAULT_MONTH_NAMES {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} + #define LV_USE_CALENDAR_HEADER_ARROW 1 + #define LV_USE_CALENDAR_HEADER_DROPDOWN 1 + #define LV_USE_CALENDAR_CHINESE 0 +#endif /*LV_USE_CALENDAR*/ + +#define LV_USE_CANVAS 1 + +#define LV_USE_CHART 1 + +#define LV_USE_CHECKBOX 1 + +#define LV_USE_DROPDOWN 1 /**< Requires: lv_label */ + +#define LV_USE_IMAGE 1 /**< Requires: lv_label */ + +#define LV_USE_IMAGEBUTTON 1 + +#define LV_USE_KEYBOARD 1 + +#define LV_USE_LABEL 1 +#if LV_USE_LABEL + #define LV_LABEL_TEXT_SELECTION 1 /**< Enable selecting text of the label */ + #define LV_LABEL_LONG_TXT_HINT 1 /**< Store some extra info in labels to speed up drawing of very long text */ + #define LV_LABEL_WAIT_CHAR_COUNT 3 /**< The count of wait chart */ +#endif + +#define LV_USE_LED 1 + +#define LV_USE_LINE 1 + +#define LV_USE_LIST 1 + +#define LV_USE_LOTTIE 0 /**< Requires: lv_canvas, thorvg */ + +#define LV_USE_MENU 1 + +#define LV_USE_MSGBOX 1 + +#define LV_USE_ROLLER 1 /**< Requires: lv_label */ + +#define LV_USE_SCALE 1 + +#define LV_USE_SLIDER 1 /**< Requires: lv_bar */ + +#define LV_USE_SPAN 1 +#if LV_USE_SPAN + /** A line of text can contain this maximum number of span descriptors. */ + #define LV_SPAN_SNIPPET_STACK_SIZE 64 +#endif + +#define LV_USE_SPINBOX 1 + +#define LV_USE_SPINNER 1 + +#define LV_USE_SWITCH 1 + +#define LV_USE_TABLE 1 + +#define LV_USE_TABVIEW 1 + +#define LV_USE_TEXTAREA 1 /**< Requires: lv_label */ +#if LV_USE_TEXTAREA != 0 + #define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 /**< [ms] */ +#endif + +#define LV_USE_TILEVIEW 1 + +#define LV_USE_WIN 1 + +/*================== + * THEMES + *==================*/ +/* Documentation for themes can be found here: https://docs.lvgl.io/master/overview/style.html#themes . */ + +/** A simple, impressive and very complete theme */ +#define LV_USE_THEME_DEFAULT 1 +#if LV_USE_THEME_DEFAULT + /** 0: Light mode; 1: Dark mode */ + #define LV_THEME_DEFAULT_DARK 0 + + /** 1: Enable grow on press */ + #define LV_THEME_DEFAULT_GROW 1 + + /** Default transition time in ms. */ + #define LV_THEME_DEFAULT_TRANSITION_TIME 80 +#endif /*LV_USE_THEME_DEFAULT*/ + +/** A very simple theme that is a good starting point for a custom theme */ +#define LV_USE_THEME_SIMPLE 1 + +/** A theme designed for monochrome displays */ +#define LV_USE_THEME_MONO 1 + +/*================== + * LAYOUTS + *==================*/ +/* Documentation for layouts can be found here: https://docs.lvgl.io/master/layouts/index.html . */ + +/** A layout similar to Flexbox in CSS. */ +#define LV_USE_FLEX 1 + +/** A layout similar to Grid in CSS. */ +#define LV_USE_GRID 1 + +/*==================== + * 3RD PARTS LIBRARIES + *====================*/ +/* Documentation for libraries can be found here: https://docs.lvgl.io/master/libs/index.html . */ + +/* File system interfaces for common APIs */ + +/** Setting a default driver letter allows skipping the driver prefix in filepaths. + * Documentation about how to use the below driver-identifier letters can be found at + * https://docs.lvgl.io/master/details/main-components/fs.html#lv-fs-identifier-letters . */ +#define LV_FS_DEFAULT_DRIVER_LETTER '\0' + +/** API for fopen, fread, etc. */ +#define LV_USE_FS_STDIO 0 +#if LV_USE_FS_STDIO + #define LV_FS_STDIO_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ + #define LV_FS_STDIO_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ + #define LV_FS_STDIO_CACHE_SIZE 0 /**< >0 to cache this number of bytes in lv_fs_read() */ +#endif + +/** API for open, read, etc. */ +#define LV_USE_FS_POSIX 0 +#if LV_USE_FS_POSIX + #define LV_FS_POSIX_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ + #define LV_FS_POSIX_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ + #define LV_FS_POSIX_CACHE_SIZE 0 /**< >0 to cache this number of bytes in lv_fs_read() */ +#endif + +/** API for CreateFile, ReadFile, etc. */ +#define LV_USE_FS_WIN32 0 +#if LV_USE_FS_WIN32 + #define LV_FS_WIN32_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ + #define LV_FS_WIN32_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ + #define LV_FS_WIN32_CACHE_SIZE 0 /**< >0 to cache this number of bytes in lv_fs_read() */ +#endif + +/** API for FATFS (needs to be added separately). Uses f_open, f_read, etc. */ +#define LV_USE_FS_FATFS 0 +#if LV_USE_FS_FATFS + #define LV_FS_FATFS_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ + #define LV_FS_FATFS_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ + #define LV_FS_FATFS_CACHE_SIZE 0 /**< >0 to cache this number of bytes in lv_fs_read() */ +#endif + +/** API for memory-mapped file access. */ +#define LV_USE_FS_MEMFS 0 +#if LV_USE_FS_MEMFS + #define LV_FS_MEMFS_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ +#endif + +/** API for LittleFs. */ +#define LV_USE_FS_LITTLEFS 0 +#if LV_USE_FS_LITTLEFS + #define LV_FS_LITTLEFS_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ + #define LV_FS_LITTLEFS_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ +#endif + +/** API for Arduino LittleFs. */ +#define LV_USE_FS_ARDUINO_ESP_LITTLEFS 0 +#if LV_USE_FS_ARDUINO_ESP_LITTLEFS + #define LV_FS_ARDUINO_ESP_LITTLEFS_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ + #define LV_FS_ARDUINO_ESP_LITTLEFS_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ +#endif + +/** API for Arduino Sd. */ +#define LV_USE_FS_ARDUINO_SD 0 +#if LV_USE_FS_ARDUINO_SD + #define LV_FS_ARDUINO_SD_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ + #define LV_FS_ARDUINO_SD_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ +#endif + +/** API for UEFI */ +#define LV_USE_FS_UEFI 0 +#if LV_USE_FS_UEFI + #define LV_FS_UEFI_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ +#endif + +/** LODEPNG decoder library */ +#define LV_USE_LODEPNG 0 + +/** PNG decoder(libpng) library */ +#define LV_USE_LIBPNG 0 + +/** BMP decoder library */ +#define LV_USE_BMP 0 + +/** JPG + split JPG decoder library. + * Split JPG is a custom format optimized for embedded systems. */ +#define LV_USE_TJPGD 0 + +/** libjpeg-turbo decoder library. + * - Supports complete JPEG specifications and high-performance JPEG decoding. */ +#define LV_USE_LIBJPEG_TURBO 0 + +/** GIF decoder library */ +#define LV_USE_GIF 0 +#if LV_USE_GIF + /** GIF decoder accelerate */ + #define LV_GIF_CACHE_DECODE_DATA 0 +#endif + + +/** Decode bin images to RAM */ +#define LV_BIN_DECODER_RAM_LOAD 0 + +/** RLE decompress library */ +#define LV_USE_RLE 0 + +/** QR code library */ +#define LV_USE_QRCODE 0 + +/** Barcode code library */ +#define LV_USE_BARCODE 0 + +/** FreeType library */ +#define LV_USE_FREETYPE 0 +#if LV_USE_FREETYPE + /** Let FreeType use LVGL memory and file porting */ + #define LV_FREETYPE_USE_LVGL_PORT 0 + + /** Cache count of glyphs in FreeType, i.e. number of glyphs that can be cached. + * The higher the value, the more memory will be used. */ + #define LV_FREETYPE_CACHE_FT_GLYPH_CNT 256 +#endif + +/** Built-in TTF decoder */ +#define LV_USE_TINY_TTF 0 +#if LV_USE_TINY_TTF + /* Enable loading TTF data from files */ + #define LV_TINY_TTF_FILE_SUPPORT 0 + #define LV_TINY_TTF_CACHE_GLYPH_CNT 256 +#endif + +/** Rlottie library */ +#define LV_USE_RLOTTIE 0 + +/** Enable Vector Graphic APIs + * - Requires `LV_USE_MATRIX = 1` */ +#define LV_USE_VECTOR_GRAPHIC 0 + +/** Enable ThorVG (vector graphics library) from the src/libs folder */ +#define LV_USE_THORVG_INTERNAL 0 + +/** Enable ThorVG by assuming that its installed and linked to the project */ +#define LV_USE_THORVG_EXTERNAL 0 + +/** Use lvgl built-in LZ4 lib */ +#define LV_USE_LZ4_INTERNAL 0 + +/** Use external LZ4 library */ +#define LV_USE_LZ4_EXTERNAL 0 + +/*SVG library + * - Requires `LV_USE_VECTOR_GRAPHIC = 1` */ +#define LV_USE_SVG 0 +#define LV_USE_SVG_ANIMATION 0 +#define LV_USE_SVG_DEBUG 0 + +/** FFmpeg library for image decoding and playing videos. + * Supports all major image formats so do not enable other image decoder with it. */ +#define LV_USE_FFMPEG 0 +#if LV_USE_FFMPEG + /** Dump input information to stderr */ + #define LV_FFMPEG_DUMP_FORMAT 0 + /** Use lvgl file path in FFmpeg Player widget + * You won't be able to open URLs after enabling this feature. + * Note that FFmpeg image decoder will always use lvgl file system. */ + #define LV_FFMPEG_PLAYER_USE_LV_FS 0 +#endif + +/*================== + * OTHERS + *==================*/ +/* Documentation for several of the below items can be found here: https://docs.lvgl.io/master/others/index.html . */ + +/** 1: Enable API to take snapshot for object */ +#define LV_USE_SNAPSHOT 0 + +/** 1: Enable system monitor component */ +#define LV_USE_SYSMON 1 +#if LV_USE_SYSMON + /** Get the idle percentage. E.g. uint32_t my_get_idle(void); */ + #define LV_SYSMON_GET_IDLE lv_os_get_idle_percent + + /** 1: Show CPU usage and FPS count. + * - Requires `LV_USE_SYSMON = 1` */ + #define LV_USE_PERF_MONITOR 1 + #if LV_USE_PERF_MONITOR + #define LV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT + + /** 0: Displays performance data on the screen; 1: Prints performance data using log. */ + #define LV_USE_PERF_MONITOR_LOG_MODE 0 + #endif + + /** 1: Show used memory and memory fragmentation. + * - Requires `LV_USE_STDLIB_MALLOC = LV_STDLIB_BUILTIN` + * - Requires `LV_USE_SYSMON = 1`*/ + #define LV_USE_MEM_MONITOR 1 + #if LV_USE_MEM_MONITOR + #define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT + #endif +#endif /*LV_USE_SYSMON*/ + +/** 1: Enable runtime performance profiler */ +#define LV_USE_PROFILER 0 +#if LV_USE_PROFILER + /** 1: Enable the built-in profiler */ + #define LV_USE_PROFILER_BUILTIN 1 + #if LV_USE_PROFILER_BUILTIN + /** Default profiler trace buffer size */ + #define LV_PROFILER_BUILTIN_BUF_SIZE (16 * 1024) /**< [bytes] */ + #endif + + /** Header to include for profiler */ + #define LV_PROFILER_INCLUDE "lvgl/src/misc/lv_profiler_builtin.h" + + /** Profiler start point function */ + #define LV_PROFILER_BEGIN LV_PROFILER_BUILTIN_BEGIN + + /** Profiler end point function */ + #define LV_PROFILER_END LV_PROFILER_BUILTIN_END + + /** Profiler start point function with custom tag */ + #define LV_PROFILER_BEGIN_TAG LV_PROFILER_BUILTIN_BEGIN_TAG + + /** Profiler end point function with custom tag */ + #define LV_PROFILER_END_TAG LV_PROFILER_BUILTIN_END_TAG + + /*Enable layout profiler*/ + #define LV_PROFILER_LAYOUT 1 + + /*Enable disp refr profiler*/ + #define LV_PROFILER_REFR 1 + + /*Enable draw profiler*/ + #define LV_PROFILER_DRAW 1 + + /*Enable indev profiler*/ + #define LV_PROFILER_INDEV 1 + + /*Enable decoder profiler*/ + #define LV_PROFILER_DECODER 1 + + /*Enable font profiler*/ + #define LV_PROFILER_FONT 1 + + /*Enable fs profiler*/ + #define LV_PROFILER_FS 1 + + /*Enable style profiler*/ + #define LV_PROFILER_STYLE 0 + + /*Enable timer profiler*/ + #define LV_PROFILER_TIMER 1 + + /*Enable cache profiler*/ + #define LV_PROFILER_CACHE 1 + + /*Enable event profiler*/ + #define LV_PROFILER_EVENT 1 +#endif + +/** 1: Enable Monkey test */ +#define LV_USE_MONKEY 0 + +/** 1: Enable grid navigation */ +#define LV_USE_GRIDNAV 0 + +/** 1: Enable `lv_obj` fragment logic */ +#define LV_USE_FRAGMENT 0 + +/** 1: Support using images as font in label or span widgets */ +#define LV_USE_IMGFONT 0 + +/** 1: Enable an observer pattern implementation */ +#define LV_USE_OBSERVER 1 + +/** 1: Enable Pinyin input method + * - Requires: lv_keyboard */ +#define LV_USE_IME_PINYIN 0 +#if LV_USE_IME_PINYIN + /** 1: Use default thesaurus. + * @note If you do not use the default thesaurus, be sure to use `lv_ime_pinyin` after setting the thesaurus. */ + #define LV_IME_PINYIN_USE_DEFAULT_DICT 1 + /** Set maximum number of candidate panels that can be displayed. + * @note This needs to be adjusted according to size of screen. */ + #define LV_IME_PINYIN_CAND_TEXT_NUM 6 + + /** Use 9-key input (k9). */ + #define LV_IME_PINYIN_USE_K9_MODE 1 + #if LV_IME_PINYIN_USE_K9_MODE == 1 + #define LV_IME_PINYIN_K9_CAND_TEXT_NUM 3 + #endif /*LV_IME_PINYIN_USE_K9_MODE*/ +#endif + +/** 1: Enable file explorer. + * - Requires: lv_table */ +#define LV_USE_FILE_EXPLORER 0 +#if LV_USE_FILE_EXPLORER + /** Maximum length of path */ + #define LV_FILE_EXPLORER_PATH_MAX_LEN (128) + /** Quick access bar, 1:use, 0:do not use. + * - Requires: lv_list */ + #define LV_FILE_EXPLORER_QUICK_ACCESS 1 +#endif + +/** 1: Enable freetype font manager + * - Requires: LV_USE_FREETYPE */ +#define LV_USE_FONT_MANAGER 0 +#if LV_USE_FONT_MANAGER + +/**Font manager name max length*/ +#define LV_FONT_MANAGER_NAME_MAX_LEN 32 + +#endif + +/** Enable loading XML UIs runtime */ +#define LV_USE_XML 0 + +/*================== + * DEVICES + *==================*/ + +/** Use SDL to open window on PC and handle mouse and keyboard. */ +#define LV_USE_SDL 0 +#if LV_USE_SDL + #define LV_SDL_INCLUDE_PATH + #define LV_SDL_RENDER_MODE LV_DISPLAY_RENDER_MODE_DIRECT /**< LV_DISPLAY_RENDER_MODE_DIRECT is recommended for best performance */ + #define LV_SDL_BUF_COUNT 1 /**< 1 or 2 */ + #define LV_SDL_ACCELERATED 1 /**< 1: Use hardware acceleration*/ + #define LV_SDL_FULLSCREEN 0 /**< 1: Make the window full screen by default */ + #define LV_SDL_DIRECT_EXIT 1 /**< 1: Exit the application when all SDL windows are closed */ + #define LV_SDL_MOUSEWHEEL_MODE LV_SDL_MOUSEWHEEL_MODE_ENCODER /*LV_SDL_MOUSEWHEEL_MODE_ENCODER/CROWN*/ +#endif + +/** Use X11 to open window on Linux desktop and handle mouse and keyboard */ +#define LV_USE_X11 0 +#if LV_USE_X11 + #define LV_X11_DIRECT_EXIT 1 /**< Exit application when all X11 windows have been closed */ + #define LV_X11_DOUBLE_BUFFER 1 /**< Use double buffers for rendering */ + /* Select only 1 of the following render modes (LV_X11_RENDER_MODE_PARTIAL preferred!). */ + #define LV_X11_RENDER_MODE_PARTIAL 1 /**< Partial render mode (preferred) */ + #define LV_X11_RENDER_MODE_DIRECT 0 /**< Direct render mode */ + #define LV_X11_RENDER_MODE_FULL 0 /**< Full render mode */ +#endif + +/** Use Wayland to open a window and handle input on Linux or BSD desktops */ +#define LV_USE_WAYLAND 0 +#if LV_USE_WAYLAND + #define LV_WAYLAND_WINDOW_DECORATIONS 0 /**< Draw client side window decorations only necessary on Mutter/GNOME */ + #define LV_WAYLAND_WL_SHELL 0 /**< Use the legacy wl_shell protocol instead of the default XDG shell */ +#endif + +/** Driver for /dev/fb */ +#define LV_USE_LINUX_FBDEV 0 +#if LV_USE_LINUX_FBDEV + #define LV_LINUX_FBDEV_BSD 0 + #define LV_LINUX_FBDEV_RENDER_MODE LV_DISPLAY_RENDER_MODE_PARTIAL + #define LV_LINUX_FBDEV_BUFFER_COUNT 0 + #define LV_LINUX_FBDEV_BUFFER_SIZE 60 +#endif + +/** Use Nuttx to open window and handle touchscreen */ +#define LV_USE_NUTTX 0 + +#if LV_USE_NUTTX + #define LV_USE_NUTTX_INDEPENDENT_IMAGE_HEAP 0 + + #define LV_USE_NUTTX_LIBUV 0 + + /** Use Nuttx custom init API to open window and handle touchscreen */ + #define LV_USE_NUTTX_CUSTOM_INIT 0 + + /** Driver for /dev/lcd */ + #define LV_USE_NUTTX_LCD 0 + #if LV_USE_NUTTX_LCD + #define LV_NUTTX_LCD_BUFFER_COUNT 0 + #define LV_NUTTX_LCD_BUFFER_SIZE 60 + #endif + + /** Driver for /dev/input */ + #define LV_USE_NUTTX_TOUCHSCREEN 0 + + /*Touchscreen cursor size in pixels(<=0: disable cursor)*/ + #define LV_NUTTX_TOUCHSCREEN_CURSOR_SIZE 0 +#endif + +/** Driver for /dev/dri/card */ +#define LV_USE_LINUX_DRM 0 + +#if LV_USE_LINUX_DRM + + /* Use the MESA GBM library to allocate DMA buffers that can be + * shared across sub-systems and libraries using the Linux DMA-BUF API. + * The GBM library aims to provide a platform independent memory management system + * it supports the major GPU vendors - This option requires linking with libgbm */ + #define LV_LINUX_DRM_GBM_BUFFERS 0 +#endif + +/** Interface for TFT_eSPI */ +#define LV_USE_TFT_ESPI 0 + +/** Driver for evdev input devices */ +#define LV_USE_EVDEV 0 + +/** Driver for libinput input devices */ +#define LV_USE_LIBINPUT 0 + +#if LV_USE_LIBINPUT + #define LV_LIBINPUT_BSD 0 + + /** Full keyboard support */ + #define LV_LIBINPUT_XKB 0 + #if LV_LIBINPUT_XKB + /** "setxkbmap -query" can help find the right values for your keyboard */ + #define LV_LIBINPUT_XKB_KEY_MAP { .rules = NULL, .model = "pc101", .layout = "us", .variant = NULL, .options = NULL } + #endif +#endif + +/* Drivers for LCD devices connected via SPI/parallel port */ +#define LV_USE_ST7735 0 +#define LV_USE_ST7789 0 +#define LV_USE_ST7796 0 +#define LV_USE_ILI9341 0 + +#if (LV_USE_ST7735 | LV_USE_ST7789 | LV_USE_ST7796 | LV_USE_ILI9341) + +#define LV_USE_GENERIC_MIPI 1 + +#else + +#define LV_USE_GENERIC_MIPI 0 + +#endif + +/** Driver for Renesas GLCD */ +#define LV_USE_RENESAS_GLCDC 0 + +/** Driver for ST LTDC */ +#define LV_USE_ST_LTDC 0 +#if LV_USE_ST_LTDC + /* Only used for partial. */ + #define LV_ST_LTDC_USE_DMA2D_FLUSH 0 +#endif + +/** LVGL Windows backend */ +#define LV_USE_WINDOWS 0 + +/** LVGL UEFI backend */ +#define LV_USE_UEFI 0 +#if LV_USE_UEFI + #define LV_USE_UEFI_INCLUDE "myefi.h" /**< Header that hides the actual framework (EDK2, gnu-efi, ...) */ + #define LV_UEFI_USE_MEMORY_SERVICES 0 /**< Use the memory functions from the boot services table */ +#endif + +/** Use OpenGL to open window on PC and handle mouse and keyboard */ +#define LV_USE_OPENGLES 0 +#if LV_USE_OPENGLES + #define LV_USE_OPENGLES_DEBUG 1 /**< Enable or disable debug for opengles */ +#endif + +/** QNX Screen display and input drivers */ +#define LV_USE_QNX 0 +#if LV_USE_QNX + #define LV_QNX_BUF_COUNT 1 /**< 1 or 2 */ +#endif + +/*================== +* EXAMPLES +*==================*/ + +/** Enable examples to be built with the library. */ +#define LV_BUILD_EXAMPLES 0 + +/*=================== + * DEMO USAGE + ====================*/ + +/** Show some widgets. This might be required to increase `LV_MEM_SIZE`. */ +#define LV_USE_DEMO_WIDGETS 1 + +/** Demonstrate usage of encoder and keyboard. */ +#define LV_USE_DEMO_KEYPAD_AND_ENCODER 0 + +/** Benchmark your system */ +#define LV_USE_DEMO_BENCHMARK 1 + +/** Render test for each primitive. + * - Requires at least 480x272 display. */ +#define LV_USE_DEMO_RENDER 0 + +/** Stress test for LVGL */ +#define LV_USE_DEMO_STRESS 1 + +/** Music player demo */ +#define LV_USE_DEMO_MUSIC 0 +#if LV_USE_DEMO_MUSIC + #define LV_DEMO_MUSIC_SQUARE 0 + #define LV_DEMO_MUSIC_LANDSCAPE 0 + #define LV_DEMO_MUSIC_ROUND 0 + #define LV_DEMO_MUSIC_LARGE 0 + #define LV_DEMO_MUSIC_AUTO_PLAY 0 +#endif + +/** Flex layout demo */ +#define LV_USE_DEMO_FLEX_LAYOUT 0 + +/** Smart-phone like multi-language demo */ +#define LV_USE_DEMO_MULTILANG 0 + +/** Widget transformation demo */ +#define LV_USE_DEMO_TRANSFORM 0 + +/** Demonstrate scroll settings */ +#define LV_USE_DEMO_SCROLL 0 + +/** Vector graphic demo */ +#define LV_USE_DEMO_VECTOR_GRAPHIC 0 + +/*E-bike demo with Lottie animations (if LV_USE_LOTTIE is enabled)*/ +#define LV_USE_DEMO_EBIKE 0 +#if LV_USE_DEMO_EBIKE + #define LV_DEMO_EBIKE_PORTRAIT 0 /*0: for 480x270..480x320, 1: for 480x800..720x1280*/ +#endif + +/** High-resolution demo */ +#define LV_USE_DEMO_HIGH_RES 0 + +/* Smart watch demo */ +#define LV_USE_DEMO_SMARTWATCH 0 + +/*--END OF LV_CONF_H--*/ + +#endif /*LV_CONF_H*/ + +#endif /*End of "Content enable"*/ diff --git a/so3/usr/lib/slv/CMakeLists.txt b/so3/usr/lib/slv/CMakeLists.txt new file mode 100644 index 0000000000..ecc569df31 --- /dev/null +++ b/so3/usr/lib/slv/CMakeLists.txt @@ -0,0 +1,7 @@ +add_library(slv STATIC + slv.c + slv_fb.c + slv_fs.c + slv_keyboard.c + slv_mouse.c +) diff --git a/so3/usr/lib/slv/slv.c b/so3/usr/lib/slv/slv.c new file mode 100644 index 0000000000..945a2522f2 --- /dev/null +++ b/so3/usr/lib/slv/slv.c @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2025 André Costa + * Copyright (C) 2020 Nikolaos Garanis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "slv.h" +#include "slv_fb.h" +#include "slv_keyboard.h" +#include "slv_fs.h" +#include "slv_mouse.h" + +static void *slv_loop_inner(void *args); + +/* + * LVGL tick source. Read the monotonic clock (microsecond resolution, backed + * by the ARM generic timer) and return milliseconds. This replaces the old + * 10 ms lv_tick_inc helper thread: at 10 ms granularity the perf benchmark + * measured 0 render/flush time for any frame shorter than 10 ms — i.e. every + * frame on virt32 and the light scenes on virt64. + */ +static uint32_t slv_tick_get_ms(void) +{ + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (uint32_t) (ts.tv_sec * 1000u + ts.tv_nsec / 1000000u); +} + +int slv_init(slv_t *slv) +{ + lv_init(); + slv_fs_init(); + int err = slv_fb_init(&slv->fb); + if (err < 0) { + goto fb_err; + } + slv->kfd = slv_keyboard_init(); + if (slv->kfd < 0) { + err = slv->kfd; + goto kb_err; + } + slv->mfd = slv_mouse_init(slv->fb.hres, slv->fb.vres); + if (slv->mfd < 0) { + err = slv->mfd; + goto mouse_err; + } + slv->terminate = false; + + /* Drive LVGL's tick from the monotonic clock instead of a 10 ms thread. */ + lv_tick_set_cb(slv_tick_get_ms); + + return 0; + +fb_err: + lv_deinit(); +kb_err: + slv_fb_terminate(&slv->fb); +mouse_err: + slv_keyboard_terminate(slv->kfd); + slv_mouse_terminate(slv->mfd); + return err; +} + +void slv_loop(slv_t *slv) +{ + slv_loop_inner(slv); +} + +int slv_loop_start(slv_t *slv) +{ + int err = pthread_create(&slv->loop_thread, NULL, slv_loop_inner, NULL); + slv->has_loop_thread = err >= 0; + return err; +} + +void slv_terminate(slv_t *slv) +{ + slv->terminate = true; + if (slv->has_loop_thread) { + pthread_join(slv->loop_thread, NULL); + } + + lv_deinit(); + slv_fs_terminate(); + slv_fb_terminate(&slv->fb); + slv_keyboard_terminate(slv->kfd); + slv_mouse_terminate(slv->mfd); +} +static void *slv_loop_inner(void *args) +{ + slv_t *slv = (slv_t *) args; + while (!slv->terminate) { + const uint32_t next_timer = lv_timer_handler(); + if (next_timer == LV_NO_TIMER_READY) { + usleep(LV_DEF_REFR_PERIOD * 1000); + } else { + usleep((uint64_t) next_timer * 1000); + } + } + return NULL; +} diff --git a/so3/usr/lib/slv/slv.h b/so3/usr/lib/slv/slv.h new file mode 100644 index 0000000000..3cd85945b5 --- /dev/null +++ b/so3/usr/lib/slv/slv.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2025 André Costa + * Copyright (C) 2020 Nikolaos Garanis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/* + * So3-LVgl bridge (SLV) + * + * SLV adds the necessary HAL to run LVGL apps + * + */ + +#ifndef SLV_H +#define SLV_H + +#include +#include + +#include "slv_fb.h" + +typedef struct { + int mfd, kfd; + slv_fb_t fb; + pthread_t tick_thread, loop_thread; + bool has_loop_thread; + bool terminate; +} slv_t; + +/* + * Inits LVGL and necessary drivers + * Returns 0 on success or negative value on error. + */ +int slv_init(slv_t *slv); + +/* + * Loops forever + */ +void slv_loop(slv_t *slv); + +/* + * Start the Main Loop in a different thread. + * Returns 0 on success or negative value on error. + */ +int slv_loop_start(slv_t *slv); + +/* + * Terminates SLV and LVGL + */ +void slv_terminate(slv_t *data); + +#endif diff --git a/so3/usr/lib/slv/slv_fb.c b/so3/usr/lib/slv/slv_fb.c new file mode 100644 index 0000000000..42ec6c8c6c --- /dev/null +++ b/so3/usr/lib/slv/slv_fb.c @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2025 André Costa + * Copyright (C) 2020 Nikolaos Garanis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include "unistd.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "slv_fb.h" + +typedef struct { + int fd; + void *fbp; + size_t fb_size; + uint32_t bpp; + bool is_real; +} slv_fb_priv_t; + +static void my_fb_cb(lv_display_t *disp, const lv_area_t *area, uint8_t *px_map); + +static void dummy_fb_cb(lv_display_t *disp, const lv_area_t *area, uint8_t *px_map); + +int slv_fb_init(slv_fb_t *fb) +{ + fb->priv = calloc(1, sizeof(slv_fb_priv_t)); + if (!fb->priv) { + printf("Couldn't allocate fb data\n"); + return -1; + } + + slv_fb_priv_t *priv = (slv_fb_priv_t *) fb->priv; + + /* Get file descriptor. */ + priv->fd = open(FB_DEV, 0); + if (priv->fd < 0) { + printf("Couldn't open framebuffer.\n"); + return -1; + } + + /* Get screen resolution. */ + if (ioctl(priv->fd, IOCTL_FB_HRES, &fb->hres) || ioctl(priv->fd, IOCTL_FB_VRES, &fb->vres) || + ioctl(priv->fd, IOCTL_FB_SIZE, &priv->fb_size) || ioctl(priv->fd, IOCTL_FB_BPP, &priv->bpp)) { + printf("Couldn't get framebuffer resolution.\n"); + return -1; + } + + /* + * We need to check if we're dealing with a real framebuffer or not + * so we know if we can use mmap + */ + int is_real; + if (ioctl(priv->fd, IOCTL_FB_IS_REAL, &is_real)) { + /* Only a fake framebuffer defines this ioctl */ + priv->is_real = true; + } else { + priv->is_real = is_real != 0; + } + + uint8_t *buf = malloc(priv->fb_size); + if (!buf) { + printf("Couldn't allocate draw buffer\n"); + return -1; + } + + /* + * Unfortunately, there's not really a good way to + * allocate memory for user-space from kernel space as + * the prefix of the virtual addresses will not be the same + * for 64 bit architectures + */ + if (priv->is_real) { + /* Map the framebuffer into process memory. */ + priv->fbp = mmap(NULL, priv->fb_size, 0, 0, priv->fd, 0); + if (priv->fbp == MAP_FAILED) { + printf("Couldn't map framebuffer.\n"); + return -1; + } + } + + /* + * Initialisation and registration of the display driver. + * Also setting the flush callback function (flush_cb) which will write + * the lvgl buffer (buf) into our real framebuffer. + */ + lv_display_t *disp = lv_display_create(fb->hres, fb->vres); + + switch (priv->bpp) { + case 16: + lv_display_set_color_format(disp, LV_COLOR_FORMAT_RGB565); + break; + case 24: + lv_display_set_color_format(disp, LV_COLOR_FORMAT_RGB888); + break; + case 32: + lv_display_set_color_format(disp, LV_COLOR_FORMAT_XRGB8888); + break; + default: + printf("Not supported color format (%d bits)\n", priv->bpp); + return -1; + } + + lv_display_set_buffers(disp, buf, NULL, priv->fb_size, LV_DISPLAY_RENDER_MODE_DIRECT); + + const lv_display_flush_cb_t cb = priv->is_real ? my_fb_cb : dummy_fb_cb; + lv_display_set_flush_cb(disp, cb); + lv_display_set_user_data(disp, priv); + + return 0; +} +void slv_fb_terminate(slv_fb_t *data) +{ + slv_fb_priv_t *priv = (slv_fb_priv_t *) data->priv; + if (priv->fd > 0) { + close(priv->fd); + } + free(data->priv); +} + +/* + * Framebuffer callback. LVGL calls this function to redraw a screen area. If + * the buffer given to LVGL is smaller than the framebuffer, this function will + * be called multiple times until the whole screen has been redrawn. + * + * https://docs.lvgl.io/9.2/porting/display.html + */ +static void my_fb_cb(lv_display_t *disp, const lv_area_t *area, uint8_t *px_map) +{ + slv_fb_priv_t *priv = (slv_fb_priv_t *) lv_display_get_user_data(disp); + memcpy(priv->fbp, px_map, priv->fb_size); + lv_display_flush_ready(disp); +} +static void dummy_fb_cb(lv_display_t *disp, const lv_area_t *area, uint8_t *px_map) +{ + lv_display_flush_ready(disp); +} diff --git a/so3/usr/lib/slv/slv_fb.h b/so3/usr/lib/slv/slv_fb.h new file mode 100644 index 0000000000..d4dc7768a0 --- /dev/null +++ b/so3/usr/lib/slv/slv_fb.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2025 André Costa + * Copyright (C) 2020 Nikolaos Garanis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef SLV_FB_H +#define SLV_FB_H + +#include + +/* Framebuffer ioctl commands. */ +#define IOCTL_FB_HRES 1 +#define IOCTL_FB_VRES 2 +#define IOCTL_FB_SIZE 3 +#define IOCTL_FB_IS_REAL 4 +#define IOCTL_FB_BPP 5 + +#define FB_DEV "/dev/fb" + +typedef struct { + uint32_t hres, vres; + void *priv; +} slv_fb_t; + +int slv_fb_init(slv_fb_t *data); +void slv_fb_terminate(slv_fb_t *data); +#endif diff --git a/so3/usr/lib/slv/slv_fs.c b/so3/usr/lib/slv/slv_fs.c new file mode 100644 index 0000000000..8479ba7393 --- /dev/null +++ b/so3/usr/lib/slv/slv_fs.c @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2025 André Costa + * Copyright (C) 2020 Nikolaos Garanis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include + +#include + +static bool fs_ready_cb(struct _lv_fs_drv_t *drv); +static void *fs_open_cb(struct _lv_fs_drv_t *drv, const char *path, lv_fs_mode_t mode); +static lv_fs_res_t fs_close_cb(struct _lv_fs_drv_t *drv, void *file_p); + +static lv_fs_res_t fs_read_cb(struct _lv_fs_drv_t *drv, void *file_p, void *buf, uint32_t btr, uint32_t *br); + +static lv_fs_res_t fs_seek_cb(struct _lv_fs_drv_t *drv, void *file_p, uint32_t pos, lv_fs_whence_t whence); + +static lv_fs_res_t fs_tell_cb(struct _lv_fs_drv_t *drv, void *file_p, uint32_t *pos_p); + +int slv_fs_init(void) +{ + static lv_fs_drv_t drv; + lv_fs_drv_init(&drv); + + drv.letter = 'S'; /* An uppercase letter to identify the drive */ + drv.ready_cb = fs_ready_cb; /* Callback to tell if the drive is ready to use */ + + drv.open_cb = fs_open_cb; /* Callback to open a file */ + drv.close_cb = fs_close_cb; /* Callback to close a file */ + drv.read_cb = fs_read_cb; + drv.seek_cb = fs_seek_cb; /* Callback to seek in a file (Move cursor) */ + drv.tell_cb = fs_tell_cb; /* Callback to tell the cursor position */ + + lv_fs_drv_register(&drv); + return 0; +} + +void slv_fs_terminate(void) +{ +} + +static bool fs_ready_cb(struct _lv_fs_drv_t *drv) +{ + return true; +} + +static void *fs_open_cb(struct _lv_fs_drv_t *drv, const char *path, lv_fs_mode_t mode) +{ + FILE *fp = fopen(path, (mode & LV_FS_MODE_WR) ? "w" : "r"); + if (!fp) { + return NULL; + } + + return fp; +} + +static lv_fs_res_t fs_close_cb(struct _lv_fs_drv_t *drv, void *file_p) +{ + if (0 != fclose(file_p)) { + return LV_FS_RES_UNKNOWN; + } + + return LV_FS_RES_OK; +} + +static lv_fs_res_t fs_read_cb(struct _lv_fs_drv_t *drv, void *file_p, void *buf, uint32_t btr, uint32_t *br) +{ + *br = fread(buf, sizeof(uint8_t), btr, file_p); + return LV_FS_RES_OK; +} + +static lv_fs_res_t fs_seek_cb(struct _lv_fs_drv_t *drv, void *file_p, uint32_t pos, lv_fs_whence_t whence) +{ + if (0 != fseek(file_p, pos, SEEK_SET)) { + return LV_FS_RES_UNKNOWN; + } + + return LV_FS_RES_OK; +} + +static lv_fs_res_t fs_tell_cb(struct _lv_fs_drv_t *drv, void *file_p, uint32_t *pos_p) +{ + *pos_p = ftell(file_p); + return LV_FS_RES_OK; +} diff --git a/so3/usr/lib/slv/slv_fs.h b/so3/usr/lib/slv/slv_fs.h new file mode 100644 index 0000000000..539ac5d7d0 --- /dev/null +++ b/so3/usr/lib/slv/slv_fs.h @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2025 André Costa + * Copyright (C) 2020 Nikolaos Garanis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef SLV_FS_H +#define SLV_FS_H + +int slv_fs_init(void); +void slv_fs_terminate(void); + +#endif diff --git a/so3/usr/lib/slv/slv_keyboard.c b/so3/usr/lib/slv/slv_keyboard.c new file mode 100644 index 0000000000..d6fbbf777b --- /dev/null +++ b/so3/usr/lib/slv/slv_keyboard.c @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2025 André Costa + * Copyright (C) 2020 Nikolaos Garanis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include +#include +#include +#include +#include + +#include "slv_keyboard.h" + +#include + +static void slv_keyboard_cb(lv_indev_t *indev, lv_indev_data_t *data); + +int slv_keyboard_init(void) +{ + int kfd = open(KB_DEV, 0); + if (kfd < 0) { + printf("Couldn't open input device.\n"); + return -1; + } + + /** + * Initialisation of the keyboard input driver. + */ + lv_indev_t *keyboard = lv_indev_create(); + lv_indev_set_type(keyboard, LV_INDEV_TYPE_KEYPAD); + lv_indev_set_read_cb(keyboard, slv_keyboard_cb); + lv_indev_set_user_data(keyboard, (void *) (ssize_t) kfd); + + return kfd; +} + +void slv_keyboard_terminate(int kfd) +{ + if (kfd > 0) { + close(kfd); + } +} + +static void slv_keyboard_cb(lv_indev_t *indev, lv_indev_data_t *data) +{ + /* Retrieve mouse state from the driver. */ + static struct ps2_key key; + int kfd = (int) (ssize_t) lv_indev_get_user_data(indev); + + ioctl(kfd, IOCTL_KB_GET_KEY, &key); + + if (key.value != 0) { + data->key = key.value; + data->state = key.state & 1; + } +} diff --git a/so3/usr/lib/slv/slv_keyboard.h b/so3/usr/lib/slv/slv_keyboard.h new file mode 100644 index 0000000000..52ba20a1fd --- /dev/null +++ b/so3/usr/lib/slv/slv_keyboard.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2025 André Costa + * Copyright (C) 2020 Nikolaos Garanis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef SLV_KEYBOARD_H +#define SLV_KEYBOARD_H + +#include + +#define IOCTL_KB_GET_KEY 0 + +#define KB_DEV "/dev/keyboard" + +struct ps2_key { + /* UTF-8 char */ + uint32_t value; + + /* + * 1st bit -> whether key was pressed or released + * 2nd bit -> whether the shift modifier was activated or not + * 3rd bit -> indicates if the first scan codes was 0xE0 + */ + uint8_t state; +}; + +int slv_keyboard_init(void); +void slv_keyboard_terminate(int fd); + +#endif diff --git a/so3/usr/lib/slv/slv_mouse.c b/so3/usr/lib/slv/slv_mouse.c new file mode 100644 index 0000000000..b878a030ef --- /dev/null +++ b/so3/usr/lib/slv/slv_mouse.c @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2025 André Costa + * Copyright (C) 2020 Nikolaos Garanis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include +#include +#include +#include +#include +#include + +#include "slv_mouse.h" + +static void slv_mouse_cb(lv_indev_t *indev, lv_indev_data_t *data); + +int slv_mouse_init(uint16_t h, uint16_t v) +{ + ssize_t mfd = open(MOUSE_DEV, 0); + if (mfd < 0) { + printf("Couldn't open input device.\n"); + return -1; + } + + /* + * Informing the driver of the screen size so it knows the bounds for + * the cursor coordinates. + */ + struct display_res res = { .h = h, .v = v }; + + ioctl(mfd, IOCTL_MOUSE_SET_RES, &res); + + /* + * Initialisation of an input driver, in our case for a mouse. Also set + * a cursor image. We also set a callback function which will be called + * by lvgl periodically. This function queries the mouse driver for the + * xy coordinates and button states. + */ + + lv_indev_t *mouse = lv_indev_create(); + lv_indev_set_type(mouse, LV_INDEV_TYPE_POINTER); + lv_indev_set_read_cb(mouse, slv_mouse_cb); + lv_indev_set_user_data(mouse, (void *) (ssize_t) mfd); + + lv_obj_t *cursor_obj = lv_image_create(lv_display_get_screen_active(NULL)); + lv_image_set_src(cursor_obj, LV_SYMBOL_PLUS); + lv_indev_set_cursor(mouse, cursor_obj); + + return mfd; +} + +void slv_mouse_terminate(int fd) +{ + if (fd > 0) { + close(fd); + } +} + +static void slv_mouse_cb(lv_indev_t *indev, lv_indev_data_t *data) +{ + /* Retrieve mouse state from the driver. */ + static struct ps2_mouse mouse; + int mfd = (int) (ssize_t) lv_indev_get_user_data(indev); + + ioctl(mfd, IOCTL_MOUSE_GET_STATE, &mouse); + + data->state = mouse.left ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL; + + data->point.x = mouse.x; + data->point.y = mouse.y; +} diff --git a/so3/usr/lib/slv/slv_mouse.h b/so3/usr/lib/slv/slv_mouse.h new file mode 100644 index 0000000000..2e7203f615 --- /dev/null +++ b/so3/usr/lib/slv/slv_mouse.h @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2025 André Costa + * Copyright (C) 2020 Nikolaos Garanis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef SLV_MOUSE_H +#define SLV_MOUSE_H + +#include + +#define IOCTL_MOUSE_GET_STATE 0 +#define IOCTL_MOUSE_SET_RES 1 + +#define MOUSE_DEV "/dev/mouse" + +struct ps2_mouse { + uint16_t x, y; + uint8_t left, right, middle; +}; + +struct display_res { + uint16_t h, v; +}; + +int slv_mouse_init(uint16_t hres, uint16_t vres); +void slv_mouse_terminate(int fd); + +#endif diff --git a/so3/usr/patches/0001-lv_conf.h.patch b/so3/usr/patches/0001-lv_conf.h.patch new file mode 100644 index 0000000000..2547582ad9 --- /dev/null +++ b/so3/usr/patches/0001-lv_conf.h.patch @@ -0,0 +1,1328 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./lib/lv_conf.h 2026-06-27 17:31:04.223981308 +0200 +@@ -0,0 +1,1325 @@ ++/** ++ * @file lv_conf.h ++ * Configuration file for v9.3.0-dev ++ */ ++ ++/* ++ * Copy this file as `lv_conf.h` ++ * 1. simply next to `lvgl` folder ++ * 2. or to any other place and ++ * - define `LV_CONF_INCLUDE_SIMPLE`; ++ * - add the path as an include path. ++ */ ++ ++/* clang-format off */ ++#if 1 /* Set this to "1" to enable content */ ++ ++#ifndef LV_CONF_H ++#define LV_CONF_H ++ ++/* If you need to include anything here, do it inside the `__ASSEMBLY__` guard */ ++#if 0 && defined(__ASSEMBLY__) ++#include "my_include.h" ++#endif ++ ++/*==================== ++ COLOR SETTINGS ++ *====================*/ ++ ++/** Color depth: 1 (I1), 8 (L8), 16 (RGB565), 24 (RGB888), 32 (XRGB8888) */ ++#define LV_COLOR_DEPTH 32 ++ ++/*========================= ++ STDLIB WRAPPER SETTINGS ++ *=========================*/ ++ ++/** Possible values ++ * - LV_STDLIB_BUILTIN: LVGL's built in implementation ++ * - LV_STDLIB_CLIB: Standard C functions, like malloc, strlen, etc ++ * - LV_STDLIB_MICROPYTHON: MicroPython implementation ++ * - LV_STDLIB_RTTHREAD: RT-Thread implementation ++ * - LV_STDLIB_CUSTOM: Implement the functions externally ++ */ ++#define LV_USE_STDLIB_MALLOC LV_STDLIB_BUILTIN ++ ++/** Possible values ++ * - LV_STDLIB_BUILTIN: LVGL's built in implementation ++ * - LV_STDLIB_CLIB: Standard C functions, like malloc, strlen, etc ++ * - LV_STDLIB_MICROPYTHON: MicroPython implementation ++ * - LV_STDLIB_RTTHREAD: RT-Thread implementation ++ * - LV_STDLIB_CUSTOM: Implement the functions externally ++ */ ++#define LV_USE_STDLIB_STRING LV_STDLIB_BUILTIN ++ ++/** Possible values ++ * - LV_STDLIB_BUILTIN: LVGL's built in implementation ++ * - LV_STDLIB_CLIB: Standard C functions, like malloc, strlen, etc ++ * - LV_STDLIB_MICROPYTHON: MicroPython implementation ++ * - LV_STDLIB_RTTHREAD: RT-Thread implementation ++ * - LV_STDLIB_CUSTOM: Implement the functions externally ++ */ ++#define LV_USE_STDLIB_SPRINTF LV_STDLIB_BUILTIN ++ ++#define LV_STDINT_INCLUDE ++#define LV_STDDEF_INCLUDE ++#define LV_STDBOOL_INCLUDE ++#define LV_INTTYPES_INCLUDE ++#define LV_LIMITS_INCLUDE ++#define LV_STDARG_INCLUDE ++ ++#if LV_USE_STDLIB_MALLOC == LV_STDLIB_BUILTIN ++ /** Size of memory available for `lv_malloc()` in bytes (>= 2kB) */ ++ #define LV_MEM_SIZE (4 * 1024 * 1024U) /**< [bytes] */ ++ ++ /** Size of the memory expand for `lv_malloc()` in bytes */ ++ #define LV_MEM_POOL_EXPAND_SIZE 0 ++ ++ /** Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too. */ ++ #define LV_MEM_ADR 0 /**< 0: unused*/ ++ /* Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc */ ++ #if LV_MEM_ADR == 0 ++ #undef LV_MEM_POOL_INCLUDE ++ #undef LV_MEM_POOL_ALLOC ++ #endif ++#endif /*LV_USE_STDLIB_MALLOC == LV_STDLIB_BUILTIN*/ ++ ++/*==================== ++ HAL SETTINGS ++ *====================*/ ++ ++/** Default display refresh, input device read and animation step period. */ ++#define LV_DEF_REFR_PERIOD 30 /**< [ms] */ ++ ++/** Default Dots Per Inch. Used to initialize default sizes such as widgets sized, style paddings. ++ * (Not so important, you can adjust it to modify default sizes and spaces.) */ ++#define LV_DPI_DEF 130 /**< [px/inch] */ ++ ++/*================= ++ * OPERATING SYSTEM ++ *=================*/ ++/** Select operating system to use. Possible options: ++ * - LV_OS_NONE ++ * - LV_OS_PTHREAD ++ * - LV_OS_FREERTOS ++ * - LV_OS_CMSIS_RTOS2 ++ * - LV_OS_RTTHREAD ++ * - LV_OS_WINDOWS ++ * - LV_OS_MQX ++ * - LV_OS_SDL2 ++ * - LV_OS_CUSTOM */ ++#define LV_USE_OS LV_OS_NONE ++ ++#if LV_USE_OS == LV_OS_CUSTOM ++ #define LV_OS_CUSTOM_INCLUDE ++#endif ++#if LV_USE_OS == LV_OS_FREERTOS ++ /* ++ * Unblocking an RTOS task with a direct notification is 45% faster and uses less RAM ++ * than unblocking a task using an intermediary object such as a binary semaphore. ++ * RTOS task notifications can only be used when there is only one task that can be the recipient of the event. ++ */ ++ #define LV_USE_FREERTOS_TASK_NOTIFY 1 ++#endif ++ ++/*======================== ++ * RENDERING CONFIGURATION ++ *========================*/ ++ ++/** Align stride of all layers and images to this bytes */ ++#define LV_DRAW_BUF_STRIDE_ALIGN 1 ++ ++/** Align start address of draw_buf addresses to this bytes*/ ++#define LV_DRAW_BUF_ALIGN 4 ++ ++/** Using matrix for transformations. ++ * Requirements: ++ * - `LV_USE_MATRIX = 1`. ++ * - Rendering engine needs to support 3x3 matrix transformations. */ ++#define LV_DRAW_TRANSFORM_USE_MATRIX 0 ++ ++/* If a widget has `style_opa < 255` (not `bg_opa`, `text_opa` etc) or not NORMAL blend mode ++ * it is buffered into a "simple" layer before rendering. The widget can be buffered in smaller chunks. ++ * "Transformed layers" (if `transform_angle/zoom` are set) use larger buffers ++ * and can't be drawn in chunks. */ ++ ++/** The target buffer size for simple layer chunks. */ ++#define LV_DRAW_LAYER_SIMPLE_BUF_SIZE (24 * 1024) /**< [bytes]*/ ++ ++/* Limit the max allocated memory for simple and transformed layers. ++ * It should be at least `LV_DRAW_LAYER_SIMPLE_BUF_SIZE` sized but if transformed layers are also used ++ * it should be enough to store the largest widget too (width x height x 4 area). ++ * Set it to 0 to have no limit. */ ++#define LV_DRAW_LAYER_MAX_MEMORY 0 /**< No limit by default [bytes]*/ ++ ++/** Stack size of drawing thread. ++ * NOTE: If FreeType or ThorVG is enabled, it is recommended to set it to 32KB or more. ++ */ ++#define LV_DRAW_THREAD_STACK_SIZE (8 * 1024) /**< [bytes]*/ ++ ++#define LV_USE_DRAW_SW 1 ++#if LV_USE_DRAW_SW == 1 ++ /* ++ * Selectively disable color format support in order to reduce code size. ++ * NOTE: some features use certain color formats internally, e.g. ++ * - gradients use RGB888 ++ * - bitmaps with transparency may use ARGB8888 ++ */ ++ #define LV_DRAW_SW_SUPPORT_RGB565 1 ++ #define LV_DRAW_SW_SUPPORT_RGB565A8 1 ++ #define LV_DRAW_SW_SUPPORT_RGB888 1 ++ #define LV_DRAW_SW_SUPPORT_XRGB8888 1 ++ #define LV_DRAW_SW_SUPPORT_ARGB8888 1 ++ #define LV_DRAW_SW_SUPPORT_L8 1 ++ #define LV_DRAW_SW_SUPPORT_AL88 1 ++ #define LV_DRAW_SW_SUPPORT_A8 1 ++ #define LV_DRAW_SW_SUPPORT_I1 1 ++ ++ /* The threshold of the luminance to consider a pixel as ++ * active in indexed color format */ ++ #define LV_DRAW_SW_I1_LUM_THRESHOLD 127 ++ ++ /** Set number of draw units. ++ * - > 1 requires operating system to be enabled in `LV_USE_OS`. ++ * - > 1 means multiple threads will render the screen in parallel. */ ++ #define LV_DRAW_SW_DRAW_UNIT_CNT 1 ++ ++ /** Use Arm-2D to accelerate software (sw) rendering. */ ++ #define LV_USE_DRAW_ARM2D_SYNC 0 ++ ++ /** Enable native helium assembly to be compiled. */ ++ #define LV_USE_NATIVE_HELIUM_ASM 0 ++ ++ /** ++ * - 0: Use a simple renderer capable of drawing only simple rectangles with gradient, images, text, and straight lines only. ++ * - 1: Use a complex renderer capable of drawing rounded corners, shadow, skew lines, and arcs too. */ ++ #define LV_DRAW_SW_COMPLEX 1 ++ ++ #if LV_DRAW_SW_COMPLEX == 1 ++ /** Allow buffering some shadow calculation. ++ * LV_DRAW_SW_SHADOW_CACHE_SIZE is the maximum shadow size to buffer, where shadow size is ++ * `shadow_width + radius`. Caching has LV_DRAW_SW_SHADOW_CACHE_SIZE^2 RAM cost. */ ++ #define LV_DRAW_SW_SHADOW_CACHE_SIZE 0 ++ ++ /** Set number of maximally-cached circle data. ++ * The circumference of 1/4 circle are saved for anti-aliasing. ++ * `radius * 4` bytes are used per circle (the most often used radiuses are saved). ++ * - 0: disables caching */ ++ #define LV_DRAW_SW_CIRCLE_CACHE_SIZE 4 ++ #endif ++ ++ #define LV_USE_DRAW_SW_ASM LV_DRAW_SW_ASM_NONE ++ ++ #if LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_CUSTOM ++ #define LV_DRAW_SW_ASM_CUSTOM_INCLUDE "" ++ #endif ++ ++ /** Enable drawing complex gradients in software: linear at an angle, radial or conical */ ++ #define LV_USE_DRAW_SW_COMPLEX_GRADIENTS 0 ++#endif ++ ++/*Use TSi's aka (Think Silicon) NemaGFX */ ++#define LV_USE_NEMA_GFX 0 ++ ++#if LV_USE_NEMA_GFX ++ /** Select which NemaGFX HAL to use. Possible options: ++ * - LV_NEMA_HAL_CUSTOM ++ * - LV_NEMA_HAL_STM32 */ ++ #define LV_USE_NEMA_HAL LV_NEMA_HAL_CUSTOM ++ #if LV_USE_NEMA_HAL == LV_NEMA_HAL_STM32 ++ #define LV_NEMA_STM32_HAL_INCLUDE ++ #endif ++ ++ /*Enable Vector Graphics Operations. Available only if NemaVG library is present*/ ++ #define LV_USE_NEMA_VG 0 ++ #if LV_USE_NEMA_VG ++ /*Define application's resolution used for VG related buffer allocation */ ++ #define LV_NEMA_GFX_MAX_RESX 800 ++ #define LV_NEMA_GFX_MAX_RESY 600 ++ #endif ++#endif ++ ++/** Use NXP's VG-Lite GPU on iMX RTxxx platforms. */ ++#define LV_USE_DRAW_VGLITE 0 ++ ++#if LV_USE_DRAW_VGLITE ++ /** Enable blit quality degradation workaround recommended for screen's dimension > 352 pixels. */ ++ #define LV_USE_VGLITE_BLIT_SPLIT 0 ++ ++ #if LV_USE_OS ++ /** Use additional draw thread for VG-Lite processing. */ ++ #define LV_USE_VGLITE_DRAW_THREAD 1 ++ ++ #if LV_USE_VGLITE_DRAW_THREAD ++ /** Enable VGLite draw async. Queue multiple tasks and flash them once to the GPU. */ ++ #define LV_USE_VGLITE_DRAW_ASYNC 1 ++ #endif ++ #endif ++ ++ /** Enable VGLite asserts. */ ++ #define LV_USE_VGLITE_ASSERT 0 ++#endif ++ ++/** Use NXP's PXP on iMX RTxxx platforms. */ ++#define LV_USE_PXP 0 ++ ++#if LV_USE_PXP ++ /** Use PXP for drawing.*/ ++ #define LV_USE_DRAW_PXP 1 ++ ++ /** Use PXP to rotate display.*/ ++ #define LV_USE_ROTATE_PXP 0 ++ ++ #if LV_USE_DRAW_PXP && LV_USE_OS ++ /** Use additional draw thread for PXP processing.*/ ++ #define LV_USE_PXP_DRAW_THREAD 1 ++ #endif ++ ++ /** Enable PXP asserts. */ ++ #define LV_USE_PXP_ASSERT 0 ++#endif ++ ++/** Use Renesas Dave2D on RA platforms. */ ++#define LV_USE_DRAW_DAVE2D 0 ++ ++/** Draw using cached SDL textures*/ ++#define LV_USE_DRAW_SDL 0 ++ ++/** Use VG-Lite GPU. */ ++#define LV_USE_DRAW_VG_LITE 0 ++ ++#if LV_USE_DRAW_VG_LITE ++ /** Enable VG-Lite custom external 'gpu_init()' function */ ++ #define LV_VG_LITE_USE_GPU_INIT 0 ++ ++ /** Enable VG-Lite assert. */ ++ #define LV_VG_LITE_USE_ASSERT 0 ++ ++ /** VG-Lite flush commit trigger threshold. GPU will try to batch these many draw tasks. */ ++ #define LV_VG_LITE_FLUSH_MAX_COUNT 8 ++ ++ /** Enable border to simulate shadow. ++ * NOTE: which usually improves performance, ++ * but does not guarantee the same rendering quality as the software. */ ++ #define LV_VG_LITE_USE_BOX_SHADOW 0 ++ ++ /** VG-Lite gradient maximum cache number. ++ * @note The memory usage of a single gradient image is 4K bytes. */ ++ #define LV_VG_LITE_GRAD_CACHE_CNT 32 ++ ++ /** VG-Lite stroke maximum cache number. */ ++ #define LV_VG_LITE_STROKE_CACHE_CNT 32 ++#endif ++ ++/** Accelerate blends, fills, etc. with STM32 DMA2D */ ++#define LV_USE_DRAW_DMA2D 0 ++ ++#if LV_USE_DRAW_DMA2D ++ #define LV_DRAW_DMA2D_HAL_INCLUDE "stm32h7xx_hal.h" ++ ++ /* if enabled, the user is required to call `lv_draw_dma2d_transfer_complete_interrupt_handler` ++ * upon receiving the DMA2D global interrupt ++ */ ++ #define LV_USE_DRAW_DMA2D_INTERRUPT 0 ++#endif ++ ++/** Draw using cached OpenGLES textures */ ++#define LV_USE_DRAW_OPENGLES 0 ++ ++/*======================= ++ * FEATURE CONFIGURATION ++ *=======================*/ ++ ++/*------------- ++ * Logging ++ *-----------*/ ++ ++/** Enable log module */ ++#define LV_USE_LOG 1 ++#if LV_USE_LOG ++ /** Set value to one of the following levels of logging detail: ++ * - LV_LOG_LEVEL_TRACE Log detailed information. ++ * - LV_LOG_LEVEL_INFO Log important events. ++ * - LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem. ++ * - LV_LOG_LEVEL_ERROR Log only critical issues, when system may fail. ++ * - LV_LOG_LEVEL_USER Log only custom log messages added by the user. ++ * - LV_LOG_LEVEL_NONE Do not log anything. */ ++ #define LV_LOG_LEVEL LV_LOG_LEVEL_WARN ++ ++ /** - 1: Print log with 'printf'; ++ * - 0: User needs to register a callback with `lv_log_register_print_cb()`. */ ++ #define LV_LOG_PRINTF 1 ++ ++ /** Set callback to print logs. ++ * E.g `my_print`. The prototype should be `void my_print(lv_log_level_t level, const char * buf)`. ++ * Can be overwritten by `lv_log_register_print_cb`. */ ++ //#define LV_LOG_PRINT_CB ++ ++ /** - 1: Enable printing timestamp; ++ * - 0: Disable printing timestamp. */ ++ #define LV_LOG_USE_TIMESTAMP 1 ++ ++ /** - 1: Print file and line number of the log; ++ * - 0: Do not print file and line number of the log. */ ++ #define LV_LOG_USE_FILE_LINE 1 ++ ++ /* Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs. */ ++ #define LV_LOG_TRACE_MEM 1 /**< Enable/disable trace logs in memory operations. */ ++ #define LV_LOG_TRACE_TIMER 1 /**< Enable/disable trace logs in timer operations. */ ++ #define LV_LOG_TRACE_INDEV 1 /**< Enable/disable trace logs in input device operations. */ ++ #define LV_LOG_TRACE_DISP_REFR 1 /**< Enable/disable trace logs in display re-draw operations. */ ++ #define LV_LOG_TRACE_EVENT 1 /**< Enable/disable trace logs in event dispatch logic. */ ++ #define LV_LOG_TRACE_OBJ_CREATE 1 /**< Enable/disable trace logs in object creation (core `obj` creation plus every widget). */ ++ #define LV_LOG_TRACE_LAYOUT 1 /**< Enable/disable trace logs in flex- and grid-layout operations. */ ++ #define LV_LOG_TRACE_ANIM 1 /**< Enable/disable trace logs in animation logic. */ ++ #define LV_LOG_TRACE_CACHE 1 /**< Enable/disable trace logs in cache operations. */ ++#endif /*LV_USE_LOG*/ ++ ++/*------------- ++ * Asserts ++ *-----------*/ ++ ++/* Enable assertion failures if an operation fails or invalid data is found. ++ * If LV_USE_LOG is enabled, an error message will be printed on failure. */ ++#define LV_USE_ASSERT_NULL 1 /**< Check if the parameter is NULL. (Very fast, recommended) */ ++#define LV_USE_ASSERT_MALLOC 1 /**< Checks is the memory is successfully allocated or no. (Very fast, recommended) */ ++#define LV_USE_ASSERT_STYLE 0 /**< Check if the styles are properly initialized. (Very fast, recommended) */ ++#define LV_USE_ASSERT_MEM_INTEGRITY 0 /**< Check the integrity of `lv_mem` after critical operations. (Slow) */ ++#define LV_USE_ASSERT_OBJ 0 /**< Check the object's type and existence (e.g. not deleted). (Slow) */ ++ ++/** Add a custom handler when assert happens e.g. to restart MCU. */ ++#define LV_ASSERT_HANDLER_INCLUDE ++#define LV_ASSERT_HANDLER while(1); /**< Halt by default */ ++ ++/*------------- ++ * Debug ++ *-----------*/ ++ ++/** 1: Draw random colored rectangles over the redrawn areas. */ ++#define LV_USE_REFR_DEBUG 0 ++ ++/** 1: Draw a red overlay for ARGB layers and a green overlay for RGB layers*/ ++#define LV_USE_LAYER_DEBUG 0 ++ ++/** 1: Adds the following behaviors for debugging: ++ * - Draw overlays with different colors for each draw_unit's tasks. ++ * - Draw index number of draw unit on white background. ++ * - For layers, draws index number of draw unit on black background. */ ++#define LV_USE_PARALLEL_DRAW_DEBUG 0 ++ ++/*------------- ++ * Others ++ *-----------*/ ++ ++#define LV_ENABLE_GLOBAL_CUSTOM 0 ++#if LV_ENABLE_GLOBAL_CUSTOM ++ /** Header to include for custom 'lv_global' function" */ ++ #define LV_GLOBAL_CUSTOM_INCLUDE ++#endif ++ ++/** Default cache size in bytes. ++ * Used by image decoders such as `lv_lodepng` to keep the decoded image in memory. ++ * If size is not set to 0, the decoder will fail to decode when the cache is full. ++ * If size is 0, the cache function is not enabled and the decoded memory will be ++ * released immediately after use. */ ++#define LV_CACHE_DEF_SIZE 0 ++ ++/** Default number of image header cache entries. The cache is used to store the headers of images ++ * The main logic is like `LV_CACHE_DEF_SIZE` but for image headers. */ ++#define LV_IMAGE_HEADER_CACHE_DEF_CNT 0 ++ ++/** Number of stops allowed per gradient. Increase this to allow more stops. ++ * This adds (sizeof(lv_color_t) + 1) bytes per additional stop. */ ++#define LV_GRADIENT_MAX_STOPS 2 ++ ++/** Adjust color mix functions rounding. GPUs might calculate color mix (blending) differently. ++ * - 0: round down, ++ * - 64: round up from x.75, ++ * - 128: round up from half, ++ * - 192: round up from x.25, ++ * - 254: round up */ ++#define LV_COLOR_MIX_ROUND_OFS 0 ++ ++/** Add 2 x 32-bit variables to each `lv_obj_t` to speed up getting style properties */ ++#define LV_OBJ_STYLE_CACHE 0 ++ ++/** Add `id` field to `lv_obj_t` */ ++#define LV_USE_OBJ_ID 0 ++ ++/** Automatically assign an ID when obj is created */ ++#define LV_OBJ_ID_AUTO_ASSIGN LV_USE_OBJ_ID ++ ++/** Use builtin obj ID handler functions: ++* - lv_obj_assign_id: Called when a widget is created. Use a separate counter for each widget class as an ID. ++* - lv_obj_id_compare: Compare the ID to decide if it matches with a requested value. ++* - lv_obj_stringify_id: Return string-ified identifier, e.g. "button3". ++* - lv_obj_free_id: Does nothing, as there is no memory allocation for the ID. ++* When disabled these functions needs to be implemented by the user.*/ ++#define LV_USE_OBJ_ID_BUILTIN 1 ++ ++/** Use obj property set/get API. */ ++#define LV_USE_OBJ_PROPERTY 0 ++ ++/** Enable property name support. */ ++#define LV_USE_OBJ_PROPERTY_NAME 1 ++ ++/* Use VG-Lite Simulator. ++ * - Requires: LV_USE_THORVG_INTERNAL or LV_USE_THORVG_EXTERNAL */ ++#define LV_USE_VG_LITE_THORVG 0 ++ ++#if LV_USE_VG_LITE_THORVG ++ /** Enable LVGL's blend mode support */ ++ #define LV_VG_LITE_THORVG_LVGL_BLEND_SUPPORT 0 ++ ++ /** Enable YUV color format support */ ++ #define LV_VG_LITE_THORVG_YUV_SUPPORT 0 ++ ++ /** Enable Linear gradient extension support */ ++ #define LV_VG_LITE_THORVG_LINEAR_GRADIENT_EXT_SUPPORT 0 ++ ++ /** Enable alignment on 16 pixels */ ++ #define LV_VG_LITE_THORVG_16PIXELS_ALIGN 1 ++ ++ /** Buffer address alignment */ ++ #define LV_VG_LITE_THORVG_BUF_ADDR_ALIGN 64 ++ ++ /** Enable multi-thread render */ ++ #define LV_VG_LITE_THORVG_THREAD_RENDER 0 ++#endif ++ ++/* Enable the multi-touch gesture recognition feature */ ++/* Gesture recognition requires the use of floats */ ++#define LV_USE_GESTURE_RECOGNITION 0 ++ ++/*===================== ++ * COMPILER SETTINGS ++ *====================*/ ++ ++/** For big endian systems set to 1 */ ++#define LV_BIG_ENDIAN_SYSTEM 0 ++ ++/** Define a custom attribute for `lv_tick_inc` function */ ++#define LV_ATTRIBUTE_TICK_INC ++ ++/** Define a custom attribute for `lv_timer_handler` function */ ++#define LV_ATTRIBUTE_TIMER_HANDLER ++ ++/** Define a custom attribute for `lv_display_flush_ready` function */ ++#define LV_ATTRIBUTE_FLUSH_READY ++ ++/** Align VG_LITE buffers on this number of bytes. ++ * @note vglite_src_buf_aligned() uses this value to validate alignment of passed buffer pointers. */ ++#define LV_ATTRIBUTE_MEM_ALIGN_SIZE 1 ++ ++/** Will be added where memory needs to be aligned (with -Os data might not be aligned to boundary by default). ++ * E.g. __attribute__((aligned(4)))*/ ++#define LV_ATTRIBUTE_MEM_ALIGN ++ ++/** Attribute to mark large constant arrays, for example for font bitmaps */ ++#define LV_ATTRIBUTE_LARGE_CONST ++ ++/** Compiler prefix for a large array declaration in RAM */ ++#define LV_ATTRIBUTE_LARGE_RAM_ARRAY ++ ++/** Place performance critical functions into a faster memory (e.g RAM) */ ++#define LV_ATTRIBUTE_FAST_MEM ++ ++/** Export integer constant to binding. This macro is used with constants in the form of LV_ that ++ * should also appear on LVGL binding API such as MicroPython. */ ++#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning /**< The default value just prevents GCC warning */ ++ ++/** Prefix all global extern data with this */ ++#define LV_ATTRIBUTE_EXTERN_DATA ++ ++/** Use `float` as `lv_value_precise_t` */ ++#define LV_USE_FLOAT 0 ++ ++/** Enable matrix support ++ * - Requires `LV_USE_FLOAT = 1` */ ++#define LV_USE_MATRIX 0 ++ ++/** Include `lvgl_private.h` in `lvgl.h` to access internal data and functions by default */ ++#define LV_USE_PRIVATE_API 0 ++ ++/*================== ++ * FONT USAGE ++ *===================*/ ++ ++/* Montserrat fonts with ASCII range and some symbols using bpp = 4 ++ * https://fonts.google.com/specimen/Montserrat */ ++#define LV_FONT_MONTSERRAT_8 0 ++#define LV_FONT_MONTSERRAT_10 1 ++#define LV_FONT_MONTSERRAT_12 1 ++#define LV_FONT_MONTSERRAT_14 1 ++#define LV_FONT_MONTSERRAT_16 1 ++#define LV_FONT_MONTSERRAT_18 1 ++#define LV_FONT_MONTSERRAT_20 1 ++#define LV_FONT_MONTSERRAT_22 1 ++#define LV_FONT_MONTSERRAT_24 1 ++#define LV_FONT_MONTSERRAT_26 1 ++#define LV_FONT_MONTSERRAT_28 1 ++#define LV_FONT_MONTSERRAT_30 0 ++#define LV_FONT_MONTSERRAT_32 0 ++#define LV_FONT_MONTSERRAT_34 0 ++#define LV_FONT_MONTSERRAT_36 0 ++#define LV_FONT_MONTSERRAT_38 0 ++#define LV_FONT_MONTSERRAT_40 0 ++#define LV_FONT_MONTSERRAT_42 0 ++#define LV_FONT_MONTSERRAT_44 0 ++#define LV_FONT_MONTSERRAT_46 0 ++#define LV_FONT_MONTSERRAT_48 0 ++ ++/* Demonstrate special features */ ++#define LV_FONT_MONTSERRAT_28_COMPRESSED 0 /**< bpp = 3 */ ++#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0 /**< Hebrew, Arabic, Persian letters and all their forms */ ++#define LV_FONT_SIMSUN_14_CJK 0 /**< 1000 most common CJK radicals */ ++#define LV_FONT_SIMSUN_16_CJK 0 /**< 1000 most common CJK radicals */ ++ ++/** Pixel perfect monospaced fonts */ ++#define LV_FONT_UNSCII_8 0 ++#define LV_FONT_UNSCII_16 0 ++ ++/** Optionally declare custom fonts here. ++ * ++ * You can use any of these fonts as the default font too and they will be available ++ * globally. Example: ++ * ++ * @code ++ * #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2) ++ * @endcode ++ */ ++#define LV_FONT_CUSTOM_DECLARE ++ ++/** Always set a default font */ ++#define LV_FONT_DEFAULT &lv_font_montserrat_14 ++ ++/** Enable handling large font and/or fonts with a lot of characters. ++ * The limit depends on the font size, font face and bpp. ++ * A compiler error will be triggered if a font needs it. */ ++#define LV_FONT_FMT_TXT_LARGE 0 ++ ++/** Enables/disables support for compressed fonts. */ ++#define LV_USE_FONT_COMPRESSED 0 ++ ++/** Enable drawing placeholders when glyph dsc is not found. */ ++#define LV_USE_FONT_PLACEHOLDER 1 ++ ++/*================= ++ * TEXT SETTINGS ++ *=================*/ ++ ++/** ++ * Select a character encoding for strings. ++ * Your IDE or editor should have the same character encoding. ++ * - LV_TXT_ENC_UTF8 ++ * - LV_TXT_ENC_ASCII ++ */ ++#define LV_TXT_ENC LV_TXT_ENC_UTF8 ++ ++/** While rendering text strings, break (wrap) text on these chars. */ ++#define LV_TXT_BREAK_CHARS " ,.;:-_)]}" ++ ++/** If a word is at least this long, will break wherever "prettiest". ++ * To disable, set to a value <= 0. */ ++#define LV_TXT_LINE_BREAK_LONG_LEN 0 ++ ++/** Minimum number of characters in a long word to put on a line before a break. ++ * Depends on LV_TXT_LINE_BREAK_LONG_LEN. */ ++#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3 ++ ++/** Minimum number of characters in a long word to put on a line after a break. ++ * Depends on LV_TXT_LINE_BREAK_LONG_LEN. */ ++#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3 ++ ++/** Support bidirectional text. Allows mixing Left-to-Right and Right-to-Left text. ++ * The direction will be processed according to the Unicode Bidirectional Algorithm: ++ * https://www.w3.org/International/articles/inline-bidi-markup/uba-basics */ ++#define LV_USE_BIDI 0 ++#if LV_USE_BIDI ++ /*Set the default direction. Supported values: ++ *`LV_BASE_DIR_LTR` Left-to-Right ++ *`LV_BASE_DIR_RTL` Right-to-Left ++ *`LV_BASE_DIR_AUTO` detect text base direction*/ ++ #define LV_BIDI_BASE_DIR_DEF LV_BASE_DIR_AUTO ++#endif ++ ++/** Enable Arabic/Persian processing ++ * In these languages characters should be replaced with another form based on their position in the text */ ++#define LV_USE_ARABIC_PERSIAN_CHARS 0 ++ ++/*The control character to use for signaling text recoloring*/ ++#define LV_TXT_COLOR_CMD "#" ++ ++/*================== ++ * WIDGETS ++ *================*/ ++/* Documentation for widgets can be found here: https://docs.lvgl.io/latest/en/html/widgets/index.html . */ ++ ++/** 1: Causes these widgets to be given default values at creation time. ++ * - lv_buttonmatrix_t: Get default maps: {"Btn1", "Btn2", "Btn3", "\n", "Btn4", "Btn5", ""}, else map not set. ++ * - lv_checkbox_t : String label set to "Check box", else set to empty string. ++ * - lv_dropdown_t : Options set to "Option 1", "Option 2", "Option 3", else no values are set. ++ * - lv_roller_t : Options set to "Option 1", "Option 2", "Option 3", "Option 4", "Option 5", else no values are set. ++ * - lv_label_t : Text set to "Text", else empty string. ++ * */ ++#define LV_WIDGETS_HAS_DEFAULT_VALUE 1 ++ ++#define LV_USE_ANIMIMG 1 ++ ++#define LV_USE_ARC 1 ++ ++#define LV_USE_BAR 1 ++ ++#define LV_USE_BUTTON 1 ++ ++#define LV_USE_BUTTONMATRIX 1 ++ ++#define LV_USE_CALENDAR 1 ++#if LV_USE_CALENDAR ++ #define LV_CALENDAR_WEEK_STARTS_MONDAY 0 ++ #if LV_CALENDAR_WEEK_STARTS_MONDAY ++ #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"} ++ #else ++ #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"} ++ #endif ++ ++ #define LV_CALENDAR_DEFAULT_MONTH_NAMES {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} ++ #define LV_USE_CALENDAR_HEADER_ARROW 1 ++ #define LV_USE_CALENDAR_HEADER_DROPDOWN 1 ++ #define LV_USE_CALENDAR_CHINESE 0 ++#endif /*LV_USE_CALENDAR*/ ++ ++#define LV_USE_CANVAS 1 ++ ++#define LV_USE_CHART 1 ++ ++#define LV_USE_CHECKBOX 1 ++ ++#define LV_USE_DROPDOWN 1 /**< Requires: lv_label */ ++ ++#define LV_USE_IMAGE 1 /**< Requires: lv_label */ ++ ++#define LV_USE_IMAGEBUTTON 1 ++ ++#define LV_USE_KEYBOARD 1 ++ ++#define LV_USE_LABEL 1 ++#if LV_USE_LABEL ++ #define LV_LABEL_TEXT_SELECTION 1 /**< Enable selecting text of the label */ ++ #define LV_LABEL_LONG_TXT_HINT 1 /**< Store some extra info in labels to speed up drawing of very long text */ ++ #define LV_LABEL_WAIT_CHAR_COUNT 3 /**< The count of wait chart */ ++#endif ++ ++#define LV_USE_LED 1 ++ ++#define LV_USE_LINE 1 ++ ++#define LV_USE_LIST 1 ++ ++#define LV_USE_LOTTIE 0 /**< Requires: lv_canvas, thorvg */ ++ ++#define LV_USE_MENU 1 ++ ++#define LV_USE_MSGBOX 1 ++ ++#define LV_USE_ROLLER 1 /**< Requires: lv_label */ ++ ++#define LV_USE_SCALE 1 ++ ++#define LV_USE_SLIDER 1 /**< Requires: lv_bar */ ++ ++#define LV_USE_SPAN 1 ++#if LV_USE_SPAN ++ /** A line of text can contain this maximum number of span descriptors. */ ++ #define LV_SPAN_SNIPPET_STACK_SIZE 64 ++#endif ++ ++#define LV_USE_SPINBOX 1 ++ ++#define LV_USE_SPINNER 1 ++ ++#define LV_USE_SWITCH 1 ++ ++#define LV_USE_TABLE 1 ++ ++#define LV_USE_TABVIEW 1 ++ ++#define LV_USE_TEXTAREA 1 /**< Requires: lv_label */ ++#if LV_USE_TEXTAREA != 0 ++ #define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 /**< [ms] */ ++#endif ++ ++#define LV_USE_TILEVIEW 1 ++ ++#define LV_USE_WIN 1 ++ ++/*================== ++ * THEMES ++ *==================*/ ++/* Documentation for themes can be found here: https://docs.lvgl.io/master/overview/style.html#themes . */ ++ ++/** A simple, impressive and very complete theme */ ++#define LV_USE_THEME_DEFAULT 1 ++#if LV_USE_THEME_DEFAULT ++ /** 0: Light mode; 1: Dark mode */ ++ #define LV_THEME_DEFAULT_DARK 0 ++ ++ /** 1: Enable grow on press */ ++ #define LV_THEME_DEFAULT_GROW 1 ++ ++ /** Default transition time in ms. */ ++ #define LV_THEME_DEFAULT_TRANSITION_TIME 80 ++#endif /*LV_USE_THEME_DEFAULT*/ ++ ++/** A very simple theme that is a good starting point for a custom theme */ ++#define LV_USE_THEME_SIMPLE 1 ++ ++/** A theme designed for monochrome displays */ ++#define LV_USE_THEME_MONO 1 ++ ++/*================== ++ * LAYOUTS ++ *==================*/ ++/* Documentation for layouts can be found here: https://docs.lvgl.io/master/layouts/index.html . */ ++ ++/** A layout similar to Flexbox in CSS. */ ++#define LV_USE_FLEX 1 ++ ++/** A layout similar to Grid in CSS. */ ++#define LV_USE_GRID 1 ++ ++/*==================== ++ * 3RD PARTS LIBRARIES ++ *====================*/ ++/* Documentation for libraries can be found here: https://docs.lvgl.io/master/libs/index.html . */ ++ ++/* File system interfaces for common APIs */ ++ ++/** Setting a default driver letter allows skipping the driver prefix in filepaths. ++ * Documentation about how to use the below driver-identifier letters can be found at ++ * https://docs.lvgl.io/master/details/main-components/fs.html#lv-fs-identifier-letters . */ ++#define LV_FS_DEFAULT_DRIVER_LETTER '\0' ++ ++/** API for fopen, fread, etc. */ ++#define LV_USE_FS_STDIO 0 ++#if LV_USE_FS_STDIO ++ #define LV_FS_STDIO_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ ++ #define LV_FS_STDIO_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ ++ #define LV_FS_STDIO_CACHE_SIZE 0 /**< >0 to cache this number of bytes in lv_fs_read() */ ++#endif ++ ++/** API for open, read, etc. */ ++#define LV_USE_FS_POSIX 0 ++#if LV_USE_FS_POSIX ++ #define LV_FS_POSIX_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ ++ #define LV_FS_POSIX_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ ++ #define LV_FS_POSIX_CACHE_SIZE 0 /**< >0 to cache this number of bytes in lv_fs_read() */ ++#endif ++ ++/** API for CreateFile, ReadFile, etc. */ ++#define LV_USE_FS_WIN32 0 ++#if LV_USE_FS_WIN32 ++ #define LV_FS_WIN32_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ ++ #define LV_FS_WIN32_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ ++ #define LV_FS_WIN32_CACHE_SIZE 0 /**< >0 to cache this number of bytes in lv_fs_read() */ ++#endif ++ ++/** API for FATFS (needs to be added separately). Uses f_open, f_read, etc. */ ++#define LV_USE_FS_FATFS 0 ++#if LV_USE_FS_FATFS ++ #define LV_FS_FATFS_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ ++ #define LV_FS_FATFS_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ ++ #define LV_FS_FATFS_CACHE_SIZE 0 /**< >0 to cache this number of bytes in lv_fs_read() */ ++#endif ++ ++/** API for memory-mapped file access. */ ++#define LV_USE_FS_MEMFS 0 ++#if LV_USE_FS_MEMFS ++ #define LV_FS_MEMFS_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ ++#endif ++ ++/** API for LittleFs. */ ++#define LV_USE_FS_LITTLEFS 0 ++#if LV_USE_FS_LITTLEFS ++ #define LV_FS_LITTLEFS_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ ++ #define LV_FS_LITTLEFS_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ ++#endif ++ ++/** API for Arduino LittleFs. */ ++#define LV_USE_FS_ARDUINO_ESP_LITTLEFS 0 ++#if LV_USE_FS_ARDUINO_ESP_LITTLEFS ++ #define LV_FS_ARDUINO_ESP_LITTLEFS_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ ++ #define LV_FS_ARDUINO_ESP_LITTLEFS_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ ++#endif ++ ++/** API for Arduino Sd. */ ++#define LV_USE_FS_ARDUINO_SD 0 ++#if LV_USE_FS_ARDUINO_SD ++ #define LV_FS_ARDUINO_SD_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ ++ #define LV_FS_ARDUINO_SD_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ ++#endif ++ ++/** API for UEFI */ ++#define LV_USE_FS_UEFI 0 ++#if LV_USE_FS_UEFI ++ #define LV_FS_UEFI_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ ++#endif ++ ++/** LODEPNG decoder library */ ++#define LV_USE_LODEPNG 0 ++ ++/** PNG decoder(libpng) library */ ++#define LV_USE_LIBPNG 0 ++ ++/** BMP decoder library */ ++#define LV_USE_BMP 0 ++ ++/** JPG + split JPG decoder library. ++ * Split JPG is a custom format optimized for embedded systems. */ ++#define LV_USE_TJPGD 0 ++ ++/** libjpeg-turbo decoder library. ++ * - Supports complete JPEG specifications and high-performance JPEG decoding. */ ++#define LV_USE_LIBJPEG_TURBO 0 ++ ++/** GIF decoder library */ ++#define LV_USE_GIF 0 ++#if LV_USE_GIF ++ /** GIF decoder accelerate */ ++ #define LV_GIF_CACHE_DECODE_DATA 0 ++#endif ++ ++ ++/** Decode bin images to RAM */ ++#define LV_BIN_DECODER_RAM_LOAD 0 ++ ++/** RLE decompress library */ ++#define LV_USE_RLE 0 ++ ++/** QR code library */ ++#define LV_USE_QRCODE 0 ++ ++/** Barcode code library */ ++#define LV_USE_BARCODE 0 ++ ++/** FreeType library */ ++#define LV_USE_FREETYPE 0 ++#if LV_USE_FREETYPE ++ /** Let FreeType use LVGL memory and file porting */ ++ #define LV_FREETYPE_USE_LVGL_PORT 0 ++ ++ /** Cache count of glyphs in FreeType, i.e. number of glyphs that can be cached. ++ * The higher the value, the more memory will be used. */ ++ #define LV_FREETYPE_CACHE_FT_GLYPH_CNT 256 ++#endif ++ ++/** Built-in TTF decoder */ ++#define LV_USE_TINY_TTF 0 ++#if LV_USE_TINY_TTF ++ /* Enable loading TTF data from files */ ++ #define LV_TINY_TTF_FILE_SUPPORT 0 ++ #define LV_TINY_TTF_CACHE_GLYPH_CNT 256 ++#endif ++ ++/** Rlottie library */ ++#define LV_USE_RLOTTIE 0 ++ ++/** Enable Vector Graphic APIs ++ * - Requires `LV_USE_MATRIX = 1` */ ++#define LV_USE_VECTOR_GRAPHIC 0 ++ ++/** Enable ThorVG (vector graphics library) from the src/libs folder */ ++#define LV_USE_THORVG_INTERNAL 0 ++ ++/** Enable ThorVG by assuming that its installed and linked to the project */ ++#define LV_USE_THORVG_EXTERNAL 0 ++ ++/** Use lvgl built-in LZ4 lib */ ++#define LV_USE_LZ4_INTERNAL 0 ++ ++/** Use external LZ4 library */ ++#define LV_USE_LZ4_EXTERNAL 0 ++ ++/*SVG library ++ * - Requires `LV_USE_VECTOR_GRAPHIC = 1` */ ++#define LV_USE_SVG 0 ++#define LV_USE_SVG_ANIMATION 0 ++#define LV_USE_SVG_DEBUG 0 ++ ++/** FFmpeg library for image decoding and playing videos. ++ * Supports all major image formats so do not enable other image decoder with it. */ ++#define LV_USE_FFMPEG 0 ++#if LV_USE_FFMPEG ++ /** Dump input information to stderr */ ++ #define LV_FFMPEG_DUMP_FORMAT 0 ++ /** Use lvgl file path in FFmpeg Player widget ++ * You won't be able to open URLs after enabling this feature. ++ * Note that FFmpeg image decoder will always use lvgl file system. */ ++ #define LV_FFMPEG_PLAYER_USE_LV_FS 0 ++#endif ++ ++/*================== ++ * OTHERS ++ *==================*/ ++/* Documentation for several of the below items can be found here: https://docs.lvgl.io/master/others/index.html . */ ++ ++/** 1: Enable API to take snapshot for object */ ++#define LV_USE_SNAPSHOT 0 ++ ++/** 1: Enable system monitor component */ ++#define LV_USE_SYSMON 1 ++#if LV_USE_SYSMON ++ /** Get the idle percentage. E.g. uint32_t my_get_idle(void); */ ++ #define LV_SYSMON_GET_IDLE lv_os_get_idle_percent ++ ++ /** 1: Show CPU usage and FPS count. ++ * - Requires `LV_USE_SYSMON = 1` */ ++ #define LV_USE_PERF_MONITOR 1 ++ #if LV_USE_PERF_MONITOR ++ #define LV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT ++ ++ /** 0: Displays performance data on the screen; 1: Prints performance data using log. */ ++ #define LV_USE_PERF_MONITOR_LOG_MODE 0 ++ #endif ++ ++ /** 1: Show used memory and memory fragmentation. ++ * - Requires `LV_USE_STDLIB_MALLOC = LV_STDLIB_BUILTIN` ++ * - Requires `LV_USE_SYSMON = 1`*/ ++ #define LV_USE_MEM_MONITOR 1 ++ #if LV_USE_MEM_MONITOR ++ #define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT ++ #endif ++#endif /*LV_USE_SYSMON*/ ++ ++/** 1: Enable runtime performance profiler */ ++#define LV_USE_PROFILER 0 ++#if LV_USE_PROFILER ++ /** 1: Enable the built-in profiler */ ++ #define LV_USE_PROFILER_BUILTIN 1 ++ #if LV_USE_PROFILER_BUILTIN ++ /** Default profiler trace buffer size */ ++ #define LV_PROFILER_BUILTIN_BUF_SIZE (16 * 1024) /**< [bytes] */ ++ #endif ++ ++ /** Header to include for profiler */ ++ #define LV_PROFILER_INCLUDE "lvgl/src/misc/lv_profiler_builtin.h" ++ ++ /** Profiler start point function */ ++ #define LV_PROFILER_BEGIN LV_PROFILER_BUILTIN_BEGIN ++ ++ /** Profiler end point function */ ++ #define LV_PROFILER_END LV_PROFILER_BUILTIN_END ++ ++ /** Profiler start point function with custom tag */ ++ #define LV_PROFILER_BEGIN_TAG LV_PROFILER_BUILTIN_BEGIN_TAG ++ ++ /** Profiler end point function with custom tag */ ++ #define LV_PROFILER_END_TAG LV_PROFILER_BUILTIN_END_TAG ++ ++ /*Enable layout profiler*/ ++ #define LV_PROFILER_LAYOUT 1 ++ ++ /*Enable disp refr profiler*/ ++ #define LV_PROFILER_REFR 1 ++ ++ /*Enable draw profiler*/ ++ #define LV_PROFILER_DRAW 1 ++ ++ /*Enable indev profiler*/ ++ #define LV_PROFILER_INDEV 1 ++ ++ /*Enable decoder profiler*/ ++ #define LV_PROFILER_DECODER 1 ++ ++ /*Enable font profiler*/ ++ #define LV_PROFILER_FONT 1 ++ ++ /*Enable fs profiler*/ ++ #define LV_PROFILER_FS 1 ++ ++ /*Enable style profiler*/ ++ #define LV_PROFILER_STYLE 0 ++ ++ /*Enable timer profiler*/ ++ #define LV_PROFILER_TIMER 1 ++ ++ /*Enable cache profiler*/ ++ #define LV_PROFILER_CACHE 1 ++ ++ /*Enable event profiler*/ ++ #define LV_PROFILER_EVENT 1 ++#endif ++ ++/** 1: Enable Monkey test */ ++#define LV_USE_MONKEY 0 ++ ++/** 1: Enable grid navigation */ ++#define LV_USE_GRIDNAV 0 ++ ++/** 1: Enable `lv_obj` fragment logic */ ++#define LV_USE_FRAGMENT 0 ++ ++/** 1: Support using images as font in label or span widgets */ ++#define LV_USE_IMGFONT 0 ++ ++/** 1: Enable an observer pattern implementation */ ++#define LV_USE_OBSERVER 1 ++ ++/** 1: Enable Pinyin input method ++ * - Requires: lv_keyboard */ ++#define LV_USE_IME_PINYIN 0 ++#if LV_USE_IME_PINYIN ++ /** 1: Use default thesaurus. ++ * @note If you do not use the default thesaurus, be sure to use `lv_ime_pinyin` after setting the thesaurus. */ ++ #define LV_IME_PINYIN_USE_DEFAULT_DICT 1 ++ /** Set maximum number of candidate panels that can be displayed. ++ * @note This needs to be adjusted according to size of screen. */ ++ #define LV_IME_PINYIN_CAND_TEXT_NUM 6 ++ ++ /** Use 9-key input (k9). */ ++ #define LV_IME_PINYIN_USE_K9_MODE 1 ++ #if LV_IME_PINYIN_USE_K9_MODE == 1 ++ #define LV_IME_PINYIN_K9_CAND_TEXT_NUM 3 ++ #endif /*LV_IME_PINYIN_USE_K9_MODE*/ ++#endif ++ ++/** 1: Enable file explorer. ++ * - Requires: lv_table */ ++#define LV_USE_FILE_EXPLORER 0 ++#if LV_USE_FILE_EXPLORER ++ /** Maximum length of path */ ++ #define LV_FILE_EXPLORER_PATH_MAX_LEN (128) ++ /** Quick access bar, 1:use, 0:do not use. ++ * - Requires: lv_list */ ++ #define LV_FILE_EXPLORER_QUICK_ACCESS 1 ++#endif ++ ++/** 1: Enable freetype font manager ++ * - Requires: LV_USE_FREETYPE */ ++#define LV_USE_FONT_MANAGER 0 ++#if LV_USE_FONT_MANAGER ++ ++/**Font manager name max length*/ ++#define LV_FONT_MANAGER_NAME_MAX_LEN 32 ++ ++#endif ++ ++/** Enable loading XML UIs runtime */ ++#define LV_USE_XML 0 ++ ++/*================== ++ * DEVICES ++ *==================*/ ++ ++/** Use SDL to open window on PC and handle mouse and keyboard. */ ++#define LV_USE_SDL 0 ++#if LV_USE_SDL ++ #define LV_SDL_INCLUDE_PATH ++ #define LV_SDL_RENDER_MODE LV_DISPLAY_RENDER_MODE_DIRECT /**< LV_DISPLAY_RENDER_MODE_DIRECT is recommended for best performance */ ++ #define LV_SDL_BUF_COUNT 1 /**< 1 or 2 */ ++ #define LV_SDL_ACCELERATED 1 /**< 1: Use hardware acceleration*/ ++ #define LV_SDL_FULLSCREEN 0 /**< 1: Make the window full screen by default */ ++ #define LV_SDL_DIRECT_EXIT 1 /**< 1: Exit the application when all SDL windows are closed */ ++ #define LV_SDL_MOUSEWHEEL_MODE LV_SDL_MOUSEWHEEL_MODE_ENCODER /*LV_SDL_MOUSEWHEEL_MODE_ENCODER/CROWN*/ ++#endif ++ ++/** Use X11 to open window on Linux desktop and handle mouse and keyboard */ ++#define LV_USE_X11 0 ++#if LV_USE_X11 ++ #define LV_X11_DIRECT_EXIT 1 /**< Exit application when all X11 windows have been closed */ ++ #define LV_X11_DOUBLE_BUFFER 1 /**< Use double buffers for rendering */ ++ /* Select only 1 of the following render modes (LV_X11_RENDER_MODE_PARTIAL preferred!). */ ++ #define LV_X11_RENDER_MODE_PARTIAL 1 /**< Partial render mode (preferred) */ ++ #define LV_X11_RENDER_MODE_DIRECT 0 /**< Direct render mode */ ++ #define LV_X11_RENDER_MODE_FULL 0 /**< Full render mode */ ++#endif ++ ++/** Use Wayland to open a window and handle input on Linux or BSD desktops */ ++#define LV_USE_WAYLAND 0 ++#if LV_USE_WAYLAND ++ #define LV_WAYLAND_WINDOW_DECORATIONS 0 /**< Draw client side window decorations only necessary on Mutter/GNOME */ ++ #define LV_WAYLAND_WL_SHELL 0 /**< Use the legacy wl_shell protocol instead of the default XDG shell */ ++#endif ++ ++/** Driver for /dev/fb */ ++#define LV_USE_LINUX_FBDEV 0 ++#if LV_USE_LINUX_FBDEV ++ #define LV_LINUX_FBDEV_BSD 0 ++ #define LV_LINUX_FBDEV_RENDER_MODE LV_DISPLAY_RENDER_MODE_PARTIAL ++ #define LV_LINUX_FBDEV_BUFFER_COUNT 0 ++ #define LV_LINUX_FBDEV_BUFFER_SIZE 60 ++#endif ++ ++/** Use Nuttx to open window and handle touchscreen */ ++#define LV_USE_NUTTX 0 ++ ++#if LV_USE_NUTTX ++ #define LV_USE_NUTTX_INDEPENDENT_IMAGE_HEAP 0 ++ ++ #define LV_USE_NUTTX_LIBUV 0 ++ ++ /** Use Nuttx custom init API to open window and handle touchscreen */ ++ #define LV_USE_NUTTX_CUSTOM_INIT 0 ++ ++ /** Driver for /dev/lcd */ ++ #define LV_USE_NUTTX_LCD 0 ++ #if LV_USE_NUTTX_LCD ++ #define LV_NUTTX_LCD_BUFFER_COUNT 0 ++ #define LV_NUTTX_LCD_BUFFER_SIZE 60 ++ #endif ++ ++ /** Driver for /dev/input */ ++ #define LV_USE_NUTTX_TOUCHSCREEN 0 ++ ++ /*Touchscreen cursor size in pixels(<=0: disable cursor)*/ ++ #define LV_NUTTX_TOUCHSCREEN_CURSOR_SIZE 0 ++#endif ++ ++/** Driver for /dev/dri/card */ ++#define LV_USE_LINUX_DRM 0 ++ ++#if LV_USE_LINUX_DRM ++ ++ /* Use the MESA GBM library to allocate DMA buffers that can be ++ * shared across sub-systems and libraries using the Linux DMA-BUF API. ++ * The GBM library aims to provide a platform independent memory management system ++ * it supports the major GPU vendors - This option requires linking with libgbm */ ++ #define LV_LINUX_DRM_GBM_BUFFERS 0 ++#endif ++ ++/** Interface for TFT_eSPI */ ++#define LV_USE_TFT_ESPI 0 ++ ++/** Driver for evdev input devices */ ++#define LV_USE_EVDEV 0 ++ ++/** Driver for libinput input devices */ ++#define LV_USE_LIBINPUT 0 ++ ++#if LV_USE_LIBINPUT ++ #define LV_LIBINPUT_BSD 0 ++ ++ /** Full keyboard support */ ++ #define LV_LIBINPUT_XKB 0 ++ #if LV_LIBINPUT_XKB ++ /** "setxkbmap -query" can help find the right values for your keyboard */ ++ #define LV_LIBINPUT_XKB_KEY_MAP { .rules = NULL, .model = "pc101", .layout = "us", .variant = NULL, .options = NULL } ++ #endif ++#endif ++ ++/* Drivers for LCD devices connected via SPI/parallel port */ ++#define LV_USE_ST7735 0 ++#define LV_USE_ST7789 0 ++#define LV_USE_ST7796 0 ++#define LV_USE_ILI9341 0 ++ ++#if (LV_USE_ST7735 | LV_USE_ST7789 | LV_USE_ST7796 | LV_USE_ILI9341) ++ ++#define LV_USE_GENERIC_MIPI 1 ++ ++#else ++ ++#define LV_USE_GENERIC_MIPI 0 ++ ++#endif ++ ++/** Driver for Renesas GLCD */ ++#define LV_USE_RENESAS_GLCDC 0 ++ ++/** Driver for ST LTDC */ ++#define LV_USE_ST_LTDC 0 ++#if LV_USE_ST_LTDC ++ /* Only used for partial. */ ++ #define LV_ST_LTDC_USE_DMA2D_FLUSH 0 ++#endif ++ ++/** LVGL Windows backend */ ++#define LV_USE_WINDOWS 0 ++ ++/** LVGL UEFI backend */ ++#define LV_USE_UEFI 0 ++#if LV_USE_UEFI ++ #define LV_USE_UEFI_INCLUDE "myefi.h" /**< Header that hides the actual framework (EDK2, gnu-efi, ...) */ ++ #define LV_UEFI_USE_MEMORY_SERVICES 0 /**< Use the memory functions from the boot services table */ ++#endif ++ ++/** Use OpenGL to open window on PC and handle mouse and keyboard */ ++#define LV_USE_OPENGLES 0 ++#if LV_USE_OPENGLES ++ #define LV_USE_OPENGLES_DEBUG 1 /**< Enable or disable debug for opengles */ ++#endif ++ ++/** QNX Screen display and input drivers */ ++#define LV_USE_QNX 0 ++#if LV_USE_QNX ++ #define LV_QNX_BUF_COUNT 1 /**< 1 or 2 */ ++#endif ++ ++/*================== ++* EXAMPLES ++*==================*/ ++ ++/** Enable examples to be built with the library. */ ++#define LV_BUILD_EXAMPLES 0 ++ ++/*=================== ++ * DEMO USAGE ++ ====================*/ ++ ++/** Show some widgets. This might be required to increase `LV_MEM_SIZE`. */ ++#define LV_USE_DEMO_WIDGETS 1 ++ ++/** Demonstrate usage of encoder and keyboard. */ ++#define LV_USE_DEMO_KEYPAD_AND_ENCODER 0 ++ ++/** Benchmark your system */ ++#define LV_USE_DEMO_BENCHMARK 1 ++ ++/** Render test for each primitive. ++ * - Requires at least 480x272 display. */ ++#define LV_USE_DEMO_RENDER 0 ++ ++/** Stress test for LVGL */ ++#define LV_USE_DEMO_STRESS 1 ++ ++/** Music player demo */ ++#define LV_USE_DEMO_MUSIC 0 ++#if LV_USE_DEMO_MUSIC ++ #define LV_DEMO_MUSIC_SQUARE 0 ++ #define LV_DEMO_MUSIC_LANDSCAPE 0 ++ #define LV_DEMO_MUSIC_ROUND 0 ++ #define LV_DEMO_MUSIC_LARGE 0 ++ #define LV_DEMO_MUSIC_AUTO_PLAY 0 ++#endif ++ ++/** Flex layout demo */ ++#define LV_USE_DEMO_FLEX_LAYOUT 0 ++ ++/** Smart-phone like multi-language demo */ ++#define LV_USE_DEMO_MULTILANG 0 ++ ++/** Widget transformation demo */ ++#define LV_USE_DEMO_TRANSFORM 0 ++ ++/** Demonstrate scroll settings */ ++#define LV_USE_DEMO_SCROLL 0 ++ ++/** Vector graphic demo */ ++#define LV_USE_DEMO_VECTOR_GRAPHIC 0 ++ ++/*E-bike demo with Lottie animations (if LV_USE_LOTTIE is enabled)*/ ++#define LV_USE_DEMO_EBIKE 0 ++#if LV_USE_DEMO_EBIKE ++ #define LV_DEMO_EBIKE_PORTRAIT 0 /*0: for 480x270..480x320, 1: for 480x800..720x1280*/ ++#endif ++ ++/** High-resolution demo */ ++#define LV_USE_DEMO_HIGH_RES 0 ++ ++/* Smart watch demo */ ++#define LV_USE_DEMO_SMARTWATCH 0 ++ ++/*--END OF LV_CONF_H--*/ ++ ++#endif /*LV_CONF_H*/ ++ ++#endif /*End of "Content enable"*/ diff --git a/so3/usr/patches/0002-CMakeLists.txt.patch b/so3/usr/patches/0002-CMakeLists.txt.patch new file mode 100644 index 0000000000..3e0ccb4b5d --- /dev/null +++ b/so3/usr/patches/0002-CMakeLists.txt.patch @@ -0,0 +1,10 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./lib/slv/CMakeLists.txt 2026-06-27 17:31:04.224217170 +0200 +@@ -0,0 +1,7 @@ ++add_library(slv STATIC ++ slv.c ++ slv_fb.c ++ slv_fs.c ++ slv_keyboard.c ++ slv_mouse.c ++) diff --git a/so3/usr/patches/0003-slv.c.patch b/so3/usr/patches/0003-slv.c.patch new file mode 100644 index 0000000000..208d841d93 --- /dev/null +++ b/so3/usr/patches/0003-slv.c.patch @@ -0,0 +1,128 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./lib/slv/slv.c 2026-06-27 17:31:04.224144794 +0200 +@@ -0,0 +1,125 @@ ++/* ++ * Copyright (C) 2025 André Costa ++ * Copyright (C) 2020 Nikolaos Garanis ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include "slv.h" ++#include "slv_fb.h" ++#include "slv_keyboard.h" ++#include "slv_fs.h" ++#include "slv_mouse.h" ++ ++static void *slv_loop_inner(void *args); ++ ++/* ++ * LVGL tick source. Read the monotonic clock (microsecond resolution, backed ++ * by the ARM generic timer) and return milliseconds. This replaces the old ++ * 10 ms lv_tick_inc helper thread: at 10 ms granularity the perf benchmark ++ * measured 0 render/flush time for any frame shorter than 10 ms — i.e. every ++ * frame on virt32 and the light scenes on virt64. ++ */ ++static uint32_t slv_tick_get_ms(void) ++{ ++ struct timespec ts; ++ clock_gettime(CLOCK_MONOTONIC, &ts); ++ return (uint32_t) (ts.tv_sec * 1000u + ts.tv_nsec / 1000000u); ++} ++ ++int slv_init(slv_t *slv) ++{ ++ lv_init(); ++ slv_fs_init(); ++ int err = slv_fb_init(&slv->fb); ++ if (err < 0) { ++ goto fb_err; ++ } ++ slv->kfd = slv_keyboard_init(); ++ if (slv->kfd < 0) { ++ err = slv->kfd; ++ goto kb_err; ++ } ++ slv->mfd = slv_mouse_init(slv->fb.hres, slv->fb.vres); ++ if (slv->mfd < 0) { ++ err = slv->mfd; ++ goto mouse_err; ++ } ++ slv->terminate = false; ++ ++ /* Drive LVGL's tick from the monotonic clock instead of a 10 ms thread. */ ++ lv_tick_set_cb(slv_tick_get_ms); ++ ++ return 0; ++ ++fb_err: ++ lv_deinit(); ++kb_err: ++ slv_fb_terminate(&slv->fb); ++mouse_err: ++ slv_keyboard_terminate(slv->kfd); ++ slv_mouse_terminate(slv->mfd); ++ return err; ++} ++ ++void slv_loop(slv_t *slv) ++{ ++ slv_loop_inner(slv); ++} ++ ++int slv_loop_start(slv_t *slv) ++{ ++ int err = pthread_create(&slv->loop_thread, NULL, slv_loop_inner, NULL); ++ slv->has_loop_thread = err >= 0; ++ return err; ++} ++ ++void slv_terminate(slv_t *slv) ++{ ++ slv->terminate = true; ++ if (slv->has_loop_thread) { ++ pthread_join(slv->loop_thread, NULL); ++ } ++ ++ lv_deinit(); ++ slv_fs_terminate(); ++ slv_fb_terminate(&slv->fb); ++ slv_keyboard_terminate(slv->kfd); ++ slv_mouse_terminate(slv->mfd); ++} ++static void *slv_loop_inner(void *args) ++{ ++ slv_t *slv = (slv_t *) args; ++ while (!slv->terminate) { ++ const uint32_t next_timer = lv_timer_handler(); ++ if (next_timer == LV_NO_TIMER_READY) { ++ usleep(LV_DEF_REFR_PERIOD * 1000); ++ } else { ++ usleep((uint64_t) next_timer * 1000); ++ } ++ } ++ return NULL; ++} diff --git a/so3/usr/patches/0004-slv.h.patch b/so3/usr/patches/0004-slv.h.patch new file mode 100644 index 0000000000..d4f3776b55 --- /dev/null +++ b/so3/usr/patches/0004-slv.h.patch @@ -0,0 +1,68 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./lib/slv/slv.h 2026-06-27 17:31:04.224126581 +0200 +@@ -0,0 +1,65 @@ ++/* ++ * Copyright (C) 2025 André Costa ++ * Copyright (C) 2020 Nikolaos Garanis ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++/* ++ * So3-LVgl bridge (SLV) ++ * ++ * SLV adds the necessary HAL to run LVGL apps ++ * ++ */ ++ ++#ifndef SLV_H ++#define SLV_H ++ ++#include ++#include ++ ++#include "slv_fb.h" ++ ++typedef struct { ++ int mfd, kfd; ++ slv_fb_t fb; ++ pthread_t tick_thread, loop_thread; ++ bool has_loop_thread; ++ bool terminate; ++} slv_t; ++ ++/* ++ * Inits LVGL and necessary drivers ++ * Returns 0 on success or negative value on error. ++ */ ++int slv_init(slv_t *slv); ++ ++/* ++ * Loops forever ++ */ ++void slv_loop(slv_t *slv); ++ ++/* ++ * Start the Main Loop in a different thread. ++ * Returns 0 on success or negative value on error. ++ */ ++int slv_loop_start(slv_t *slv); ++ ++/* ++ * Terminates SLV and LVGL ++ */ ++void slv_terminate(slv_t *data); ++ ++#endif diff --git a/so3/usr/patches/0005-slv_fb.c.patch b/so3/usr/patches/0005-slv_fb.c.patch new file mode 100644 index 0000000000..ff119e1b08 --- /dev/null +++ b/so3/usr/patches/0005-slv_fb.c.patch @@ -0,0 +1,161 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./lib/slv/slv_fb.c 2026-06-27 17:31:04.224236374 +0200 +@@ -0,0 +1,158 @@ ++/* ++ * Copyright (C) 2025 André Costa ++ * Copyright (C) 2020 Nikolaos Garanis ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++#include "unistd.h" ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include "slv_fb.h" ++ ++typedef struct { ++ int fd; ++ void *fbp; ++ size_t fb_size; ++ uint32_t bpp; ++ bool is_real; ++} slv_fb_priv_t; ++ ++static void my_fb_cb(lv_display_t *disp, const lv_area_t *area, uint8_t *px_map); ++ ++static void dummy_fb_cb(lv_display_t *disp, const lv_area_t *area, uint8_t *px_map); ++ ++int slv_fb_init(slv_fb_t *fb) ++{ ++ fb->priv = calloc(1, sizeof(slv_fb_priv_t)); ++ if (!fb->priv) { ++ printf("Couldn't allocate fb data\n"); ++ return -1; ++ } ++ ++ slv_fb_priv_t *priv = (slv_fb_priv_t *) fb->priv; ++ ++ /* Get file descriptor. */ ++ priv->fd = open(FB_DEV, 0); ++ if (priv->fd < 0) { ++ printf("Couldn't open framebuffer.\n"); ++ return -1; ++ } ++ ++ /* Get screen resolution. */ ++ if (ioctl(priv->fd, IOCTL_FB_HRES, &fb->hres) || ioctl(priv->fd, IOCTL_FB_VRES, &fb->vres) || ++ ioctl(priv->fd, IOCTL_FB_SIZE, &priv->fb_size) || ioctl(priv->fd, IOCTL_FB_BPP, &priv->bpp)) { ++ printf("Couldn't get framebuffer resolution.\n"); ++ return -1; ++ } ++ ++ /* ++ * We need to check if we're dealing with a real framebuffer or not ++ * so we know if we can use mmap ++ */ ++ int is_real; ++ if (ioctl(priv->fd, IOCTL_FB_IS_REAL, &is_real)) { ++ /* Only a fake framebuffer defines this ioctl */ ++ priv->is_real = true; ++ } else { ++ priv->is_real = is_real != 0; ++ } ++ ++ uint8_t *buf = malloc(priv->fb_size); ++ if (!buf) { ++ printf("Couldn't allocate draw buffer\n"); ++ return -1; ++ } ++ ++ /* ++ * Unfortunately, there's not really a good way to ++ * allocate memory for user-space from kernel space as ++ * the prefix of the virtual addresses will not be the same ++ * for 64 bit architectures ++ */ ++ if (priv->is_real) { ++ /* Map the framebuffer into process memory. */ ++ priv->fbp = mmap(NULL, priv->fb_size, 0, 0, priv->fd, 0); ++ if (priv->fbp == MAP_FAILED) { ++ printf("Couldn't map framebuffer.\n"); ++ return -1; ++ } ++ } ++ ++ /* ++ * Initialisation and registration of the display driver. ++ * Also setting the flush callback function (flush_cb) which will write ++ * the lvgl buffer (buf) into our real framebuffer. ++ */ ++ lv_display_t *disp = lv_display_create(fb->hres, fb->vres); ++ ++ switch (priv->bpp) { ++ case 16: ++ lv_display_set_color_format(disp, LV_COLOR_FORMAT_RGB565); ++ break; ++ case 24: ++ lv_display_set_color_format(disp, LV_COLOR_FORMAT_RGB888); ++ break; ++ case 32: ++ lv_display_set_color_format(disp, LV_COLOR_FORMAT_XRGB8888); ++ break; ++ default: ++ printf("Not supported color format (%d bits)\n", priv->bpp); ++ return -1; ++ } ++ ++ lv_display_set_buffers(disp, buf, NULL, priv->fb_size, LV_DISPLAY_RENDER_MODE_DIRECT); ++ ++ const lv_display_flush_cb_t cb = priv->is_real ? my_fb_cb : dummy_fb_cb; ++ lv_display_set_flush_cb(disp, cb); ++ lv_display_set_user_data(disp, priv); ++ ++ return 0; ++} ++void slv_fb_terminate(slv_fb_t *data) ++{ ++ slv_fb_priv_t *priv = (slv_fb_priv_t *) data->priv; ++ if (priv->fd > 0) { ++ close(priv->fd); ++ } ++ free(data->priv); ++} ++ ++/* ++ * Framebuffer callback. LVGL calls this function to redraw a screen area. If ++ * the buffer given to LVGL is smaller than the framebuffer, this function will ++ * be called multiple times until the whole screen has been redrawn. ++ * ++ * https://docs.lvgl.io/9.2/porting/display.html ++ */ ++static void my_fb_cb(lv_display_t *disp, const lv_area_t *area, uint8_t *px_map) ++{ ++ slv_fb_priv_t *priv = (slv_fb_priv_t *) lv_display_get_user_data(disp); ++ memcpy(priv->fbp, px_map, priv->fb_size); ++ lv_display_flush_ready(disp); ++} ++static void dummy_fb_cb(lv_display_t *disp, const lv_area_t *area, uint8_t *px_map) ++{ ++ lv_display_flush_ready(disp); ++} diff --git a/so3/usr/patches/0006-slv_fb.h.patch b/so3/usr/patches/0006-slv_fb.h.patch new file mode 100644 index 0000000000..a8842d8953 --- /dev/null +++ b/so3/usr/patches/0006-slv_fb.h.patch @@ -0,0 +1,44 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./lib/slv/slv_fb.h 2026-06-27 17:31:04.224257562 +0200 +@@ -0,0 +1,41 @@ ++/* ++ * Copyright (C) 2025 André Costa ++ * Copyright (C) 2020 Nikolaos Garanis ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++#ifndef SLV_FB_H ++#define SLV_FB_H ++ ++#include ++ ++/* Framebuffer ioctl commands. */ ++#define IOCTL_FB_HRES 1 ++#define IOCTL_FB_VRES 2 ++#define IOCTL_FB_SIZE 3 ++#define IOCTL_FB_IS_REAL 4 ++#define IOCTL_FB_BPP 5 ++ ++#define FB_DEV "/dev/fb" ++ ++typedef struct { ++ uint32_t hres, vres; ++ void *priv; ++} slv_fb_t; ++ ++int slv_fb_init(slv_fb_t *data); ++void slv_fb_terminate(slv_fb_t *data); ++#endif diff --git a/so3/usr/patches/0007-slv_fs.c.patch b/so3/usr/patches/0007-slv_fs.c.patch new file mode 100644 index 0000000000..c8de91be49 --- /dev/null +++ b/so3/usr/patches/0007-slv_fs.c.patch @@ -0,0 +1,102 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./lib/slv/slv_fs.c 2026-06-27 17:31:04.224198369 +0200 +@@ -0,0 +1,99 @@ ++/* ++ * Copyright (C) 2025 André Costa ++ * Copyright (C) 2020 Nikolaos Garanis ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++#include ++ ++#include ++ ++static bool fs_ready_cb(struct _lv_fs_drv_t *drv); ++static void *fs_open_cb(struct _lv_fs_drv_t *drv, const char *path, lv_fs_mode_t mode); ++static lv_fs_res_t fs_close_cb(struct _lv_fs_drv_t *drv, void *file_p); ++ ++static lv_fs_res_t fs_read_cb(struct _lv_fs_drv_t *drv, void *file_p, void *buf, uint32_t btr, uint32_t *br); ++ ++static lv_fs_res_t fs_seek_cb(struct _lv_fs_drv_t *drv, void *file_p, uint32_t pos, lv_fs_whence_t whence); ++ ++static lv_fs_res_t fs_tell_cb(struct _lv_fs_drv_t *drv, void *file_p, uint32_t *pos_p); ++ ++int slv_fs_init(void) ++{ ++ static lv_fs_drv_t drv; ++ lv_fs_drv_init(&drv); ++ ++ drv.letter = 'S'; /* An uppercase letter to identify the drive */ ++ drv.ready_cb = fs_ready_cb; /* Callback to tell if the drive is ready to use */ ++ ++ drv.open_cb = fs_open_cb; /* Callback to open a file */ ++ drv.close_cb = fs_close_cb; /* Callback to close a file */ ++ drv.read_cb = fs_read_cb; ++ drv.seek_cb = fs_seek_cb; /* Callback to seek in a file (Move cursor) */ ++ drv.tell_cb = fs_tell_cb; /* Callback to tell the cursor position */ ++ ++ lv_fs_drv_register(&drv); ++ return 0; ++} ++ ++void slv_fs_terminate(void) ++{ ++} ++ ++static bool fs_ready_cb(struct _lv_fs_drv_t *drv) ++{ ++ return true; ++} ++ ++static void *fs_open_cb(struct _lv_fs_drv_t *drv, const char *path, lv_fs_mode_t mode) ++{ ++ FILE *fp = fopen(path, (mode & LV_FS_MODE_WR) ? "w" : "r"); ++ if (!fp) { ++ return NULL; ++ } ++ ++ return fp; ++} ++ ++static lv_fs_res_t fs_close_cb(struct _lv_fs_drv_t *drv, void *file_p) ++{ ++ if (0 != fclose(file_p)) { ++ return LV_FS_RES_UNKNOWN; ++ } ++ ++ return LV_FS_RES_OK; ++} ++ ++static lv_fs_res_t fs_read_cb(struct _lv_fs_drv_t *drv, void *file_p, void *buf, uint32_t btr, uint32_t *br) ++{ ++ *br = fread(buf, sizeof(uint8_t), btr, file_p); ++ return LV_FS_RES_OK; ++} ++ ++static lv_fs_res_t fs_seek_cb(struct _lv_fs_drv_t *drv, void *file_p, uint32_t pos, lv_fs_whence_t whence) ++{ ++ if (0 != fseek(file_p, pos, SEEK_SET)) { ++ return LV_FS_RES_UNKNOWN; ++ } ++ ++ return LV_FS_RES_OK; ++} ++ ++static lv_fs_res_t fs_tell_cb(struct _lv_fs_drv_t *drv, void *file_p, uint32_t *pos_p) ++{ ++ *pos_p = ftell(file_p); ++ return LV_FS_RES_OK; ++} diff --git a/so3/usr/patches/0008-slv_fs.h.patch b/so3/usr/patches/0008-slv_fs.h.patch new file mode 100644 index 0000000000..55d1ae06fe --- /dev/null +++ b/so3/usr/patches/0008-slv_fs.h.patch @@ -0,0 +1,29 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./lib/slv/slv_fs.h 2026-06-27 17:31:04.224107754 +0200 +@@ -0,0 +1,26 @@ ++/* ++ * Copyright (C) 2025 André Costa ++ * Copyright (C) 2020 Nikolaos Garanis ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++#ifndef SLV_FS_H ++#define SLV_FS_H ++ ++int slv_fs_init(void); ++void slv_fs_terminate(void); ++ ++#endif diff --git a/so3/usr/patches/0009-slv_keyboard.c.patch b/so3/usr/patches/0009-slv_keyboard.c.patch new file mode 100644 index 0000000000..78e05a0b4b --- /dev/null +++ b/so3/usr/patches/0009-slv_keyboard.c.patch @@ -0,0 +1,73 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./lib/slv/slv_keyboard.c 2026-06-27 17:31:04.224161780 +0200 +@@ -0,0 +1,70 @@ ++/* ++ * Copyright (C) 2025 André Costa ++ * Copyright (C) 2020 Nikolaos Garanis ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "slv_keyboard.h" ++ ++#include ++ ++static void slv_keyboard_cb(lv_indev_t *indev, lv_indev_data_t *data); ++ ++int slv_keyboard_init(void) ++{ ++ int kfd = open(KB_DEV, 0); ++ if (kfd < 0) { ++ printf("Couldn't open input device.\n"); ++ return -1; ++ } ++ ++ /** ++ * Initialisation of the keyboard input driver. ++ */ ++ lv_indev_t *keyboard = lv_indev_create(); ++ lv_indev_set_type(keyboard, LV_INDEV_TYPE_KEYPAD); ++ lv_indev_set_read_cb(keyboard, slv_keyboard_cb); ++ lv_indev_set_user_data(keyboard, (void *) (ssize_t) kfd); ++ ++ return kfd; ++} ++ ++void slv_keyboard_terminate(int kfd) ++{ ++ if (kfd > 0) { ++ close(kfd); ++ } ++} ++ ++static void slv_keyboard_cb(lv_indev_t *indev, lv_indev_data_t *data) ++{ ++ /* Retrieve mouse state from the driver. */ ++ static struct ps2_key key; ++ int kfd = (int) (ssize_t) lv_indev_get_user_data(indev); ++ ++ ioctl(kfd, IOCTL_KB_GET_KEY, &key); ++ ++ if (key.value != 0) { ++ data->key = key.value; ++ data->state = key.state & 1; ++ } ++} diff --git a/so3/usr/patches/0010-slv_keyboard.h.patch b/so3/usr/patches/0010-slv_keyboard.h.patch new file mode 100644 index 0000000000..6941700b72 --- /dev/null +++ b/so3/usr/patches/0010-slv_keyboard.h.patch @@ -0,0 +1,47 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./lib/slv/slv_keyboard.h 2026-06-27 17:31:04.224179986 +0200 +@@ -0,0 +1,44 @@ ++/* ++ * Copyright (C) 2025 André Costa ++ * Copyright (C) 2020 Nikolaos Garanis ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++#ifndef SLV_KEYBOARD_H ++#define SLV_KEYBOARD_H ++ ++#include ++ ++#define IOCTL_KB_GET_KEY 0 ++ ++#define KB_DEV "/dev/keyboard" ++ ++struct ps2_key { ++ /* UTF-8 char */ ++ uint32_t value; ++ ++ /* ++ * 1st bit -> whether key was pressed or released ++ * 2nd bit -> whether the shift modifier was activated or not ++ * 3rd bit -> indicates if the first scan codes was 0xE0 ++ */ ++ uint8_t state; ++}; ++ ++int slv_keyboard_init(void); ++void slv_keyboard_terminate(int fd); ++ ++#endif diff --git a/so3/usr/patches/0011-slv_mouse.c.patch b/so3/usr/patches/0011-slv_mouse.c.patch new file mode 100644 index 0000000000..8722a500c2 --- /dev/null +++ b/so3/usr/patches/0011-slv_mouse.c.patch @@ -0,0 +1,88 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./lib/slv/slv_mouse.c 2026-06-27 17:31:04.224062240 +0200 +@@ -0,0 +1,85 @@ ++/* ++ * Copyright (C) 2025 André Costa ++ * Copyright (C) 2020 Nikolaos Garanis ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "slv_mouse.h" ++ ++static void slv_mouse_cb(lv_indev_t *indev, lv_indev_data_t *data); ++ ++int slv_mouse_init(uint16_t h, uint16_t v) ++{ ++ ssize_t mfd = open(MOUSE_DEV, 0); ++ if (mfd < 0) { ++ printf("Couldn't open input device.\n"); ++ return -1; ++ } ++ ++ /* ++ * Informing the driver of the screen size so it knows the bounds for ++ * the cursor coordinates. ++ */ ++ struct display_res res = { .h = h, .v = v }; ++ ++ ioctl(mfd, IOCTL_MOUSE_SET_RES, &res); ++ ++ /* ++ * Initialisation of an input driver, in our case for a mouse. Also set ++ * a cursor image. We also set a callback function which will be called ++ * by lvgl periodically. This function queries the mouse driver for the ++ * xy coordinates and button states. ++ */ ++ ++ lv_indev_t *mouse = lv_indev_create(); ++ lv_indev_set_type(mouse, LV_INDEV_TYPE_POINTER); ++ lv_indev_set_read_cb(mouse, slv_mouse_cb); ++ lv_indev_set_user_data(mouse, (void *) (ssize_t) mfd); ++ ++ lv_obj_t *cursor_obj = lv_image_create(lv_display_get_screen_active(NULL)); ++ lv_image_set_src(cursor_obj, LV_SYMBOL_PLUS); ++ lv_indev_set_cursor(mouse, cursor_obj); ++ ++ return mfd; ++} ++ ++void slv_mouse_terminate(int fd) ++{ ++ if (fd > 0) { ++ close(fd); ++ } ++} ++ ++static void slv_mouse_cb(lv_indev_t *indev, lv_indev_data_t *data) ++{ ++ /* Retrieve mouse state from the driver. */ ++ static struct ps2_mouse mouse; ++ int mfd = (int) (ssize_t) lv_indev_get_user_data(indev); ++ ++ ioctl(mfd, IOCTL_MOUSE_GET_STATE, &mouse); ++ ++ data->state = mouse.left ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL; ++ ++ data->point.x = mouse.x; ++ data->point.y = mouse.y; ++} diff --git a/so3/usr/patches/0012-slv_mouse.h.patch b/so3/usr/patches/0012-slv_mouse.h.patch new file mode 100644 index 0000000000..2e351e386e --- /dev/null +++ b/so3/usr/patches/0012-slv_mouse.h.patch @@ -0,0 +1,45 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./lib/slv/slv_mouse.h 2026-06-27 17:31:04.224088786 +0200 +@@ -0,0 +1,42 @@ ++/* ++ * Copyright (C) 2025 André Costa ++ * Copyright (C) 2020 Nikolaos Garanis ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++#ifndef SLV_MOUSE_H ++#define SLV_MOUSE_H ++ ++#include ++ ++#define IOCTL_MOUSE_GET_STATE 0 ++#define IOCTL_MOUSE_SET_RES 1 ++ ++#define MOUSE_DEV "/dev/mouse" ++ ++struct ps2_mouse { ++ uint16_t x, y; ++ uint8_t left, right, middle; ++}; ++ ++struct display_res { ++ uint16_t h, v; ++}; ++ ++int slv_mouse_init(uint16_t hres, uint16_t vres); ++void slv_mouse_terminate(int fd); ++ ++#endif diff --git a/so3/usr/patches/0013-fillfb.c.patch b/so3/usr/patches/0013-fillfb.c.patch new file mode 100644 index 0000000000..d30b652bf9 --- /dev/null +++ b/so3/usr/patches/0013-fillfb.c.patch @@ -0,0 +1,82 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./src/fillfb.c 2026-06-27 17:31:04.277736306 +0200 +@@ -0,0 +1,79 @@ ++/* ++ * Copyright (C) 2020 Nikolaos Garanis ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++/* ++ * Demo application to show how to open a framebuffer file, use mmap to access ++ * its framebuffer and write into it. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* Framebuffer ioctl commands. */ ++#define IOCTL_FB_HRES 1 ++#define IOCTL_FB_VRES 2 ++#define IOCTL_FB_SIZE 3 ++ ++static uint32_t hres; ++ ++void display_line(uint32_t *fbp, uint32_t start, uint32_t px) ++{ ++ uint32_t i; ++ for (i = 0; i < hres; i++) ++ fbp[start + i] = px; ++} ++ ++uint32_t create_px(uint8_t r, uint8_t g, uint8_t b) ++{ ++ return (b << 16) | (g << 8) | r; /* 24bpp BGR mode */ ++} ++ ++int main(int argc, char **argv) ++{ ++ int fd; ++ uint32_t i, px, vres, fb_size, *fbp; ++ uint32_t colors[] = { create_px(0xff, 0, 0), create_px(0, 0xff, 0), create_px(0, 0, 0xff) }; ++ ++ /* Get file descriptor for /dev/fb0, i.e. the first fb device registered. */ ++ fd = open("/dev/fb0", O_WRONLY); ++ ++ ioctl(fd, IOCTL_FB_HRES, &hres); ++ ioctl(fd, IOCTL_FB_VRES, &vres); ++ ioctl(fd, IOCTL_FB_SIZE, &fb_size); ++ ++ /* Map the framebuffer memory to a process virtual address. */ ++ fbp = mmap(NULL, fb_size, 0, 0, fd, 0); ++ if (fbp == MAP_FAILED) { ++ printf("Couldn't map framebuffer.\n"); ++ return -1; ++ } ++ ++ /* Display lines of different colors. */ ++ for (i = 0; i < vres; i++) { ++ px = colors[(i / 12) % 3]; ++ display_line(fbp, i * hres, px); ++ } ++ ++ close(fd); ++ return EXIT_SUCCESS; ++} diff --git a/so3/usr/patches/0014-lvgl_demo.c.patch b/so3/usr/patches/0014-lvgl_demo.c.patch new file mode 100644 index 0000000000..b55fa01038 --- /dev/null +++ b/so3/usr/patches/0014-lvgl_demo.c.patch @@ -0,0 +1,52 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./src/lvgl_demo.c 2026-06-27 17:31:04.230838593 +0200 +@@ -0,0 +1,49 @@ ++/* ++ * Copyright (C) 2025 André Costa ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++/* Launch a named LVGL demo (from lv_demos) on the SO3 framebuffer via the slv ++ * port; the demo name is given as the first command-line argument. */ ++ ++#include ++ ++#include ++ ++#include ++#include ++ ++int main(int argc, char **argv) ++{ ++ if (argc < 2) { ++ printf("Usage %s \n", argv[0]); ++ lv_demos_show_help(); ++ return EXIT_FAILURE; ++ } ++ slv_t slv; ++ int err = slv_init(&slv); ++ if (err < 0) { ++ printf("Failed to init SLV\n"); ++ return EXIT_FAILURE; ++ } ++ lv_demos_create(argv + 1, argc - 1); ++ ++ slv_loop(&slv); ++ ++ slv_terminate(&slv); ++ ++ return EXIT_SUCCESS; ++} diff --git a/so3/usr/patches/0015-lvgl_perf.c.patch b/so3/usr/patches/0015-lvgl_perf.c.patch new file mode 100644 index 0000000000..d9ca92cf42 --- /dev/null +++ b/so3/usr/patches/0015-lvgl_perf.c.patch @@ -0,0 +1,69 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./src/lvgl_perf.c 2026-06-27 17:31:04.230801466 +0200 +@@ -0,0 +1,66 @@ ++/* ++ * Copyright (C) 2020 Nikolaos Garanis ++ * Copyright (C) 2021 Daniel Rossier ++ * Copyright (C) 2025 André Costa ++ * ++ * ++ * With the kind support and contribution of Gabor Kiss-Vamosi from LVGL. Thank You! ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++/* LVGL performance probe: bring up the framebuffer via slv, build the ++ * lv_demo_stress UI and time a single lv_timer_handler() pass. */ ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include ++ ++int main(int argc, char **argv) ++{ ++ printf("LVGL Performance test\n"); ++ struct timeval tv_start, tv_end; ++ ++ /* Initialization of lvgl. */ ++ slv_t slv; ++ int err = slv_init(&slv); ++ if (err < 0) { ++ printf("Couldn't init SVL\n"); ++ return EXIT_FAILURE; ++ } ++ ++ /* Creating the UI. */ ++ lv_demo_stress(); ++ ++ gettimeofday(&tv_start, NULL); ++ lv_timer_handler(); ++ gettimeofday(&tv_end, NULL); ++ ++ uint64_t delta = tv_end.tv_usec - tv_start.tv_usec; ++ ++ printf("Performance test result:\n\n"); ++ printf("# Elapsed time of lv_timer_handler() function: %ld microseconds.\n", delta); ++ printf("\n***************************************************************************\n"); ++ ++ slv_terminate(&slv); ++ ++ return EXIT_SUCCESS; ++} diff --git a/so3/usr/patches/0016-lvgl_benchmark.c.patch b/so3/usr/patches/0016-lvgl_benchmark.c.patch new file mode 100644 index 0000000000..a1bc7ce64e --- /dev/null +++ b/so3/usr/patches/0016-lvgl_benchmark.c.patch @@ -0,0 +1,58 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./src/lvgl_benchmark.c 2026-06-27 17:31:04.277542349 +0200 +@@ -0,0 +1,55 @@ ++/* ++ * Copyright (C) 2025 André Costa ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++/* Run the LVGL benchmark demo (lv_demo_benchmark) on the SO3 framebuffer via ++ * the slv port, printing a summary when it completes. */ ++ ++#include ++#include ++ ++#include ++ ++#include ++#include ++ ++static slv_t slv; ++ ++void on_benchmark_end(const lv_demo_benchmark_summary_t *summary) ++{ ++ lv_demo_benchmark_summary_display(summary); ++ slv.terminate = true; ++} ++ ++int main(int argc, char **argv) ++{ ++ printf("Starting LVGL Benchmark\n"); ++ int err = slv_init(&slv); ++ if (err < 0) { ++ printf("Failed to init SLV\n"); ++ return EXIT_FAILURE; ++ } ++ lv_demo_benchmark_set_end_cb(on_benchmark_end); ++ lv_demo_benchmark(); ++ ++ slv_loop(&slv); ++ ++ slv_terminate(&slv); ++ printf("LVGL Benchmark Over\n"); ++ ++ return EXIT_SUCCESS; ++} diff --git a/so3/usr/patches/0017-lvgl_widgets.c.patch b/so3/usr/patches/0017-lvgl_widgets.c.patch new file mode 100644 index 0000000000..7475f51c37 --- /dev/null +++ b/so3/usr/patches/0017-lvgl_widgets.c.patch @@ -0,0 +1,58 @@ +--- /dev/null 2026-06-22 09:52:29.860520107 +0200 ++++ ./src/lvgl_widgets.c 2026-06-27 17:31:04.230819854 +0200 +@@ -0,0 +1,55 @@ ++/* ++ * Copyright (C) 2026 REDS Institute, HEIG-VD, Yverdon ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * ++ */ ++ ++/* ++ * Standalone LVGL widgets demo (lvgl/demos/widgets/lv_demo_widgets.c). ++ * slv_init() brings up the LCD (PL111 framebuffer), the keyboard and mouse ++ * (PL050) and the LVGL tick thread; then we build the widgets UI and run ++ * the LVGL event loop until the app is killed (Ctrl-C). ++ */ ++ ++#include ++#include ++ ++#include ++ ++#include ++#include ++ ++int main(int argc, char **argv) ++{ ++ printf("Starting LVGL widgets demo\n"); ++ ++ /* Initialise the display (LCD), keyboard and mouse + tick thread. */ ++ slv_t slv; ++ int err = slv_init(&slv); ++ if (err < 0) { ++ printf("Failed to init SLV\n"); ++ return EXIT_FAILURE; ++ } ++ ++ /* Build the widgets demo UI. */ ++ lv_demo_widgets(); ++ ++ /* Run the LVGL loop (renders + dispatches keyboard/mouse input). */ ++ slv_loop(&slv); ++ ++ slv_terminate(&slv); ++ ++ return EXIT_SUCCESS; ++} diff --git a/so3/usr/patches/0018-CMakeLists.txt.patch b/so3/usr/patches/0018-CMakeLists.txt.patch new file mode 100644 index 0000000000..832ae98f55 --- /dev/null +++ b/so3/usr/patches/0018-CMakeLists.txt.patch @@ -0,0 +1,19 @@ +--- a/lib/CMakeLists.txt ++++ b/lib/CMakeLists.txt +@@ -1,2 +1,16 @@ ++# Hacky fix to make sure we don't compile external libs with -Werror flag ++set(ORIGINAL_C_FLAGS "${CMAKE_C_FLAGS}") ++string(REPLACE "-Werror" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") ++ ++set(LV_BUILD_CONF_DIR ++ ${CMAKE_CURRENT_SOURCE_DIR} ++ CACHE PATH "Directory containing lv_conf.h") ++add_subdirectory(lvgl) ++ ++set(CMAKE_C_FLAGS "${ORIGINAL_C_FLAGS}") ++ ++# Non external libs ++add_subdirectory(slv) ++ + # logs functionality - it only works with SOO environment + add_subdirectory(logs) diff --git a/so3/usr/patches/0019-CMakeLists.txt.patch b/so3/usr/patches/0019-CMakeLists.txt.patch new file mode 100644 index 0000000000..e760a1019c --- /dev/null +++ b/so3/usr/patches/0019-CMakeLists.txt.patch @@ -0,0 +1,19 @@ +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -15,8 +15,16 @@ + add_executable(ping.elf ping.c) + add_executable(mydev_test.elf mydev_test.c) + add_executable(fb_test.elf fb_test.c) ++add_executable(lvgl_demo.elf lvgl_demo.c) ++add_executable(lvgl_perf.elf lvgl_perf.c) ++add_executable(lvgl_benchmark.elf lvgl_benchmark.c) ++add_executable(lvgl_widgets.elf lvgl_widgets.c) + add_executable(logs_example.elf logs_example.c) + ++target_link_libraries(lvgl_demo.elf slv lvgl lvgl_demos) ++target_link_libraries(lvgl_perf.elf slv lvgl lvgl_demos) ++target_link_libraries(lvgl_benchmark.elf slv lvgl lvgl_demos) ++target_link_libraries(lvgl_widgets.elf slv lvgl lvgl_demos) + target_link_libraries(logs_example.elf capsule_logs) + + if (MICROPYTHON AND (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64")) diff --git a/so3/usr/patches/series b/so3/usr/patches/series new file mode 100644 index 0000000000..5bb72b6064 --- /dev/null +++ b/so3/usr/patches/series @@ -0,0 +1,19 @@ +0001-lv_conf.h.patch,1 +0002-CMakeLists.txt.patch,1 +0003-slv.c.patch,1 +0004-slv.h.patch,1 +0005-slv_fb.c.patch,1 +0006-slv_fb.h.patch,1 +0007-slv_fs.c.patch,1 +0008-slv_fs.h.patch,1 +0009-slv_keyboard.c.patch,1 +0010-slv_keyboard.h.patch,1 +0011-slv_mouse.c.patch,1 +0012-slv_mouse.h.patch,1 +0013-fillfb.c.patch,1 +0014-lvgl_demo.c.patch,1 +0015-lvgl_perf.c.patch,1 +0016-lvgl_benchmark.c.patch,1 +0017-lvgl_widgets.c.patch,1 +0018-CMakeLists.txt.patch,1 +0019-CMakeLists.txt.patch,1 diff --git a/so3/usr/src/fillfb.c b/so3/usr/src/fillfb.c new file mode 100644 index 0000000000..ae7fb03b7d --- /dev/null +++ b/so3/usr/src/fillfb.c @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2020 Nikolaos Garanis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/* + * Demo application to show how to open a framebuffer file, use mmap to access + * its framebuffer and write into it. + */ + +#include +#include +#include +#include +#include +#include +#include + +/* Framebuffer ioctl commands. */ +#define IOCTL_FB_HRES 1 +#define IOCTL_FB_VRES 2 +#define IOCTL_FB_SIZE 3 + +static uint32_t hres; + +void display_line(uint32_t *fbp, uint32_t start, uint32_t px) +{ + uint32_t i; + for (i = 0; i < hres; i++) + fbp[start + i] = px; +} + +uint32_t create_px(uint8_t r, uint8_t g, uint8_t b) +{ + return (b << 16) | (g << 8) | r; /* 24bpp BGR mode */ +} + +int main(int argc, char **argv) +{ + int fd; + uint32_t i, px, vres, fb_size, *fbp; + uint32_t colors[] = { create_px(0xff, 0, 0), create_px(0, 0xff, 0), create_px(0, 0, 0xff) }; + + /* Get file descriptor for /dev/fb0, i.e. the first fb device registered. */ + fd = open("/dev/fb0", O_WRONLY); + + ioctl(fd, IOCTL_FB_HRES, &hres); + ioctl(fd, IOCTL_FB_VRES, &vres); + ioctl(fd, IOCTL_FB_SIZE, &fb_size); + + /* Map the framebuffer memory to a process virtual address. */ + fbp = mmap(NULL, fb_size, 0, 0, fd, 0); + if (fbp == MAP_FAILED) { + printf("Couldn't map framebuffer.\n"); + return -1; + } + + /* Display lines of different colors. */ + for (i = 0; i < vres; i++) { + px = colors[(i / 12) % 3]; + display_line(fbp, i * hres, px); + } + + close(fd); + return EXIT_SUCCESS; +} diff --git a/so3/usr/src/lvgl_benchmark.c b/so3/usr/src/lvgl_benchmark.c new file mode 100644 index 0000000000..70110975d5 --- /dev/null +++ b/so3/usr/src/lvgl_benchmark.c @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2025 André Costa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/* Run the LVGL benchmark demo (lv_demo_benchmark) on the SO3 framebuffer via + * the slv port, printing a summary when it completes. */ + +#include +#include + +#include + +#include +#include + +static slv_t slv; + +void on_benchmark_end(const lv_demo_benchmark_summary_t *summary) +{ + lv_demo_benchmark_summary_display(summary); + slv.terminate = true; +} + +int main(int argc, char **argv) +{ + printf("Starting LVGL Benchmark\n"); + int err = slv_init(&slv); + if (err < 0) { + printf("Failed to init SLV\n"); + return EXIT_FAILURE; + } + lv_demo_benchmark_set_end_cb(on_benchmark_end); + lv_demo_benchmark(); + + slv_loop(&slv); + + slv_terminate(&slv); + printf("LVGL Benchmark Over\n"); + + return EXIT_SUCCESS; +} diff --git a/so3/usr/src/lvgl_demo.c b/so3/usr/src/lvgl_demo.c new file mode 100644 index 0000000000..d5025168da --- /dev/null +++ b/so3/usr/src/lvgl_demo.c @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2025 André Costa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/* Launch a named LVGL demo (from lv_demos) on the SO3 framebuffer via the slv + * port; the demo name is given as the first command-line argument. */ + +#include + +#include + +#include +#include + +int main(int argc, char **argv) +{ + if (argc < 2) { + printf("Usage %s \n", argv[0]); + lv_demos_show_help(); + return EXIT_FAILURE; + } + slv_t slv; + int err = slv_init(&slv); + if (err < 0) { + printf("Failed to init SLV\n"); + return EXIT_FAILURE; + } + lv_demos_create(argv + 1, argc - 1); + + slv_loop(&slv); + + slv_terminate(&slv); + + return EXIT_SUCCESS; +} diff --git a/so3/usr/src/lvgl_perf.c b/so3/usr/src/lvgl_perf.c new file mode 100644 index 0000000000..c1e5155e0f --- /dev/null +++ b/so3/usr/src/lvgl_perf.c @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2020 Nikolaos Garanis + * Copyright (C) 2021 Daniel Rossier + * Copyright (C) 2025 André Costa + * + * + * With the kind support and contribution of Gabor Kiss-Vamosi from LVGL. Thank You! + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/* LVGL performance probe: bring up the framebuffer via slv, build the + * lv_demo_stress UI and time a single lv_timer_handler() pass. */ + +#include +#include +#include +#include + +#include +#include + +#include + +int main(int argc, char **argv) +{ + printf("LVGL Performance test\n"); + struct timeval tv_start, tv_end; + + /* Initialization of lvgl. */ + slv_t slv; + int err = slv_init(&slv); + if (err < 0) { + printf("Couldn't init SVL\n"); + return EXIT_FAILURE; + } + + /* Creating the UI. */ + lv_demo_stress(); + + gettimeofday(&tv_start, NULL); + lv_timer_handler(); + gettimeofday(&tv_end, NULL); + + uint64_t delta = tv_end.tv_usec - tv_start.tv_usec; + + printf("Performance test result:\n\n"); + printf("# Elapsed time of lv_timer_handler() function: %ld microseconds.\n", delta); + printf("\n***************************************************************************\n"); + + slv_terminate(&slv); + + return EXIT_SUCCESS; +} diff --git a/so3/usr/src/lvgl_widgets.c b/so3/usr/src/lvgl_widgets.c new file mode 100644 index 0000000000..c951ebd28b --- /dev/null +++ b/so3/usr/src/lvgl_widgets.c @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2026 REDS Institute, HEIG-VD, Yverdon + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/* + * Standalone LVGL widgets demo (lvgl/demos/widgets/lv_demo_widgets.c). + * slv_init() brings up the LCD (PL111 framebuffer), the keyboard and mouse + * (PL050) and the LVGL tick thread; then we build the widgets UI and run + * the LVGL event loop until the app is killed (Ctrl-C). + */ + +#include +#include + +#include + +#include +#include + +int main(int argc, char **argv) +{ + printf("Starting LVGL widgets demo\n"); + + /* Initialise the display (LCD), keyboard and mouse + tick thread. */ + slv_t slv; + int err = slv_init(&slv); + if (err < 0) { + printf("Failed to init SLV\n"); + return EXIT_FAILURE; + } + + /* Build the widgets demo UI. */ + lv_demo_widgets(); + + /* Run the LVGL loop (renders + dispatches keyboard/mouse input). */ + slv_loop(&slv); + + slv_terminate(&slv); + + return EXIT_SUCCESS; +}