diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d8aa3b9a84..4551a110b1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,8 +4,9 @@ on: push: branches: - main + - "release/**" pull_request: - branches: ["main"] + branches: ["main", "release/**"] # Smoke-build SO3 with Infrabase (bitbake) inside the so3-env image. Both the # kernel (build.sh -x so3) and the user space (build.sh -x usr-so3, which also diff --git a/.github/workflows/style.yml b/.github/workflows/style.yml index 94a9d373fb..3d64bb9361 100644 --- a/.github/workflows/style.yml +++ b/.github/workflows/style.yml @@ -8,9 +8,9 @@ concurrency: on: push: - branches: ["main"] + branches: ["main", "release/**"] pull_request: - branches: ["main"] + branches: ["main", "release/**"] jobs: formatting-check: diff --git a/.gitignore b/.gitignore index 229768a1b5..946af4f90a 100755 --- a/.gitignore +++ b/.gitignore @@ -88,6 +88,17 @@ so3/usr/lib/libc/include/asm so3/rootfs/rootfs.fat # lvgl is fetched at build time (meta-usr lvgl bbappend, :lvgl override), not a submodule so3/usr/lib/lvgl/ +# ... and everything below is materialized into the usr tree by the lvgl +# patch set / quilt at build time — never track it (a tracked copy makes +# do_patch fail on a fresh clone with "would create ... which already exists") +so3/usr/patches/ +so3/usr/lib/slv/ +so3/usr/lib/lv_conf.h +so3/usr/src/fillfb.c +so3/usr/src/lvgl_demo.c +so3/usr/src/lvgl_perf.c +so3/usr/src/lvgl_benchmark.c +so3/usr/src/lvgl_widgets.c # The whole linux/ tree is a build working area, not committed: linux/linux # is the fetched agency kernel, linux/usr is regenerated from the meta-usr # patch set (base + :soo), linux/images holds rendered ITS + .itb output. diff --git a/build/meta-toolchain/recipes-toolchain/musl/files/config.mak b/build/meta-toolchain/recipes-toolchain/musl/files/config.mak index 8c9f0ea6c9..35971340ef 100644 --- a/build/meta-toolchain/recipes-toolchain/musl/files/config.mak +++ b/build/meta-toolchain/recipes-toolchain/musl/files/config.mak @@ -19,6 +19,17 @@ GNU_SITE = https://ftp.gnu.org/gnu DL_CMD = wget -c --tries=5 --waitretry=10 --timeout=30 -O +# Same story for the musl tarball itself: musl.libc.org is a single host with +# no mirror rotation, and when it goes down (timeouts, then "Unable to +# establish SSL connection" — observed 2026-08-10, both CI platforms and from +# outside CI) the toolchain build fails at ~2 min and no amount of retrying +# helps. Fetch it from the MacPorts distfiles mirror, which carries the exact +# upstream tarball. musl-cross-make checks every download against +# hashes/.sha1, so a mirror serving anything else fails the build loudly +# rather than silently building something different (verified: the mirrored +# musl-1.2.5.tar.gz matches hashes/musl-1.2.5.tar.gz.sha1). +MUSL_SITE = https://distfiles.macports.org/musl + BINUTILS_VER = 2.44 GCC_VER = 12.4.0 # MUSL_VER = git-master diff --git a/doc/source/release_process.rst b/doc/source/release_process.rst index 3315387c2e..d37ed7174b 100644 --- a/doc/source/release_process.rst +++ b/doc/source/release_process.rst @@ -141,6 +141,20 @@ release (they drift silently otherwise): ``PREFERRED_VERSION_avz`` entries in ``build/conf/local.conf`` (see the ``v6.2.3`` bump for a template). +Before tagging: check the CI +*************************** + +The ``Build`` workflow runs on ``main`` **and on every** ``release/**`` +**branch**, so the commit a tag will point at has always been built. Check it +before tagging:: + + gh run list --workflow Build --branch release/v6.2 + +Tagging a red commit is how ``v6.2.4`` shipped a tree that no fresh clone +could build. ``build (virt32)`` and ``build (virt64)`` are required status +checks on ``main`` for the same reason: merging on red stays possible for a +maintainer, but never by accident. + Rules of thumb ************** diff --git a/so3/so3/include/version.h b/so3/so3/include/version.h index 9dcfa77947..d6e10237f4 100644 --- a/so3/so3/include/version.h +++ b/so3/so3/include/version.h @@ -35,7 +35,7 @@ * (see scripts/so3version.sh and include/generated/autoversion.h). Keep this in * sync with the current release tag as a safety net. */ -#define SO3_KERNEL_VERSION_FALLBACK "6.2.3" +#define SO3_KERNEL_VERSION_FALLBACK "6.2.5" /* Release version resolved at build time (git tag -> base version). */ #include diff --git a/so3/usr/lib/lv_conf.h b/so3/usr/lib/lv_conf.h deleted file mode 100644 index 7db06013e8..0000000000 --- a/so3/usr/lib/lv_conf.h +++ /dev/null @@ -1,1325 +0,0 @@ -/** - * @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 deleted file mode 100644 index ecc569df31..0000000000 --- a/so3/usr/lib/slv/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -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 deleted file mode 100644 index 945a2522f2..0000000000 --- a/so3/usr/lib/slv/slv.c +++ /dev/null @@ -1,125 +0,0 @@ -/* - * 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 deleted file mode 100644 index 3cd85945b5..0000000000 --- a/so3/usr/lib/slv/slv.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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 deleted file mode 100644 index 42ec6c8c6c..0000000000 --- a/so3/usr/lib/slv/slv_fb.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * 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 deleted file mode 100644 index d4dc7768a0..0000000000 --- a/so3/usr/lib/slv/slv_fb.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 deleted file mode 100644 index 8479ba7393..0000000000 --- a/so3/usr/lib/slv/slv_fs.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - * 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 deleted file mode 100644 index 539ac5d7d0..0000000000 --- a/so3/usr/lib/slv/slv_fs.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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 deleted file mode 100644 index d6fbbf777b..0000000000 --- a/so3/usr/lib/slv/slv_keyboard.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * 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 deleted file mode 100644 index 52ba20a1fd..0000000000 --- a/so3/usr/lib/slv/slv_keyboard.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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 deleted file mode 100644 index b878a030ef..0000000000 --- a/so3/usr/lib/slv/slv_mouse.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 deleted file mode 100644 index 2e7203f615..0000000000 --- a/so3/usr/lib/slv/slv_mouse.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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 deleted file mode 100644 index 2547582ad9..0000000000 --- a/so3/usr/patches/0001-lv_conf.h.patch +++ /dev/null @@ -1,1328 +0,0 @@ ---- /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 deleted file mode 100644 index 3e0ccb4b5d..0000000000 --- a/so3/usr/patches/0002-CMakeLists.txt.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- /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 deleted file mode 100644 index 208d841d93..0000000000 --- a/so3/usr/patches/0003-slv.c.patch +++ /dev/null @@ -1,128 +0,0 @@ ---- /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 deleted file mode 100644 index d4f3776b55..0000000000 --- a/so3/usr/patches/0004-slv.h.patch +++ /dev/null @@ -1,68 +0,0 @@ ---- /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 deleted file mode 100644 index ff119e1b08..0000000000 --- a/so3/usr/patches/0005-slv_fb.c.patch +++ /dev/null @@ -1,161 +0,0 @@ ---- /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 deleted file mode 100644 index a8842d8953..0000000000 --- a/so3/usr/patches/0006-slv_fb.h.patch +++ /dev/null @@ -1,44 +0,0 @@ ---- /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 deleted file mode 100644 index c8de91be49..0000000000 --- a/so3/usr/patches/0007-slv_fs.c.patch +++ /dev/null @@ -1,102 +0,0 @@ ---- /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 deleted file mode 100644 index 55d1ae06fe..0000000000 --- a/so3/usr/patches/0008-slv_fs.h.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- /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 deleted file mode 100644 index 78e05a0b4b..0000000000 --- a/so3/usr/patches/0009-slv_keyboard.c.patch +++ /dev/null @@ -1,73 +0,0 @@ ---- /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 deleted file mode 100644 index 6941700b72..0000000000 --- a/so3/usr/patches/0010-slv_keyboard.h.patch +++ /dev/null @@ -1,47 +0,0 @@ ---- /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 deleted file mode 100644 index 8722a500c2..0000000000 --- a/so3/usr/patches/0011-slv_mouse.c.patch +++ /dev/null @@ -1,88 +0,0 @@ ---- /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 deleted file mode 100644 index 2e351e386e..0000000000 --- a/so3/usr/patches/0012-slv_mouse.h.patch +++ /dev/null @@ -1,45 +0,0 @@ ---- /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 deleted file mode 100644 index d30b652bf9..0000000000 --- a/so3/usr/patches/0013-fillfb.c.patch +++ /dev/null @@ -1,82 +0,0 @@ ---- /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 deleted file mode 100644 index b55fa01038..0000000000 --- a/so3/usr/patches/0014-lvgl_demo.c.patch +++ /dev/null @@ -1,52 +0,0 @@ ---- /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 deleted file mode 100644 index d9ca92cf42..0000000000 --- a/so3/usr/patches/0015-lvgl_perf.c.patch +++ /dev/null @@ -1,69 +0,0 @@ ---- /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 deleted file mode 100644 index a1bc7ce64e..0000000000 --- a/so3/usr/patches/0016-lvgl_benchmark.c.patch +++ /dev/null @@ -1,58 +0,0 @@ ---- /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 deleted file mode 100644 index 7475f51c37..0000000000 --- a/so3/usr/patches/0017-lvgl_widgets.c.patch +++ /dev/null @@ -1,58 +0,0 @@ ---- /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 deleted file mode 100644 index 832ae98f55..0000000000 --- a/so3/usr/patches/0018-CMakeLists.txt.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- 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 deleted file mode 100644 index e760a1019c..0000000000 --- a/so3/usr/patches/0019-CMakeLists.txt.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- 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 deleted file mode 100644 index 5bb72b6064..0000000000 --- a/so3/usr/patches/series +++ /dev/null @@ -1,19 +0,0 @@ -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 deleted file mode 100644 index ae7fb03b7d..0000000000 --- a/so3/usr/src/fillfb.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * 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 deleted file mode 100644 index 70110975d5..0000000000 --- a/so3/usr/src/lvgl_benchmark.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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 deleted file mode 100644 index d5025168da..0000000000 --- a/so3/usr/src/lvgl_demo.c +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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 deleted file mode 100644 index c1e5155e0f..0000000000 --- a/so3/usr/src/lvgl_perf.c +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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 deleted file mode 100644 index c951ebd28b..0000000000 --- a/so3/usr/src/lvgl_widgets.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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; -}