diff --git a/vendor/developers/build_config.json b/vendor/developers/build_config.json index e8cdd56b3614eb7d656c4ff34a82e9f1094bb6a5..03c1c907d6d3603d8b30c04932518cab16c59c1d 100644 --- a/vendor/developers/build_config.json +++ b/vendor/developers/build_config.json @@ -68,5 +68,15 @@ "key": "6", "name": "SLEController", "description": "星闪控制器" + }, + { + "buildTarget": "ws63-liteos-app", + "relativePath": "demo/lcd_st7789_lvgl9", + "chip": "WS63", + "buildDef": "", + "needSmoke": "false", + "key": "8", + "name": "lcd_st7789_lvgl9", + "description": "LVGL9移植范例" } ] diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/README.md b/vendor/developers/demo/lcd_st7789_lvgl9/README.md new file mode 100644 index 0000000000000000000000000000000000000000..29ceee63c5f943488dc72b687107662ac9be1572 --- /dev/null +++ b/vendor/developers/demo/lcd_st7789_lvgl9/README.md @@ -0,0 +1,56 @@ +# LVGL 9.3 移植适配 + +## 案例目的 + +LVGL作为一个流行的图形库,提供了丰富的UI组件和功能,适用于嵌入式系统的图形界面开发。本案例旨在帮助开发者了解如何在ws63开发板上移植LVGL 9.3版本。 + +## 效果展示 + + + +## 硬件资料 + +- WS63E开发板 +- 2.0英寸 IPS 液晶屏,分辨率240*320,IC为ST7789V2 + +## 移植步骤 + +1. 在SDK的`open_source`新建文件夹`lvgl`。 + + + +2. 下载LVGL源码,切换到9.3.0 release分支,把`src`文件夹复制到SDK的`open_source`的`lvgl`目录下。 + + + +3. 在LVGL源码根目录找到四个头文件`lvgl.h`,`lv_version.h`,`lvgl_private.h`,`lv_conf_template.h`,把这四个文件复制到`open_source\lvgl`目录下。 + + + +4. 上一步的`lv_conf_template.h`是配置文件,正确操作是改名为`lv_conf.h`后可以打开后根据LVGL官方手册进行配置,本例程已经提供一个配置好的`lv_conf.h`文件,所以直接复制到SDK的`open_source`的`lvgl`目录下即可,同时把本例程的编译文件`CMakeList.txt`也复制到该目录下,最终效果如图。 + + + +5. 在`open_source`目录下找到`CMakeList.txt`文件,把lvgl文件夹加进去。 + + + +6. 根据官方的三方库移植手册,在`build/config/target_config/ws63/config.py`文件中,找到`ram_component`,添加`lvgl`名称,以便构建脚本进行搜索。 + + + +7. 将`src\application\samples\peripheral\spi`文件夹删除,本例程下的`spi`文件夹整个复制过去替换原有位置。 + + + +8. 启动Menuconfig,启用samples、外设、spi三个选项,具体配置看图。 + + + +9. 启动Menuconfig,启用drivers、spi选项,具体配置看图。 + + + +10. 编译烧录即可运行,接线可以参考Kconfig里面的定义。 + + diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/open_source/CMakeLists.txt b/vendor/developers/demo/lcd_st7789_lvgl9/open_source/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..d939e53d721730c2beed8b4ca554a4cdc266256f --- /dev/null +++ b/vendor/developers/demo/lcd_st7789_lvgl9/open_source/CMakeLists.txt @@ -0,0 +1,50 @@ +#=============================================================================== +# @brief cmake file +# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2023-2023. All rights reserved. +#=============================================================================== +set(COMPONENT_NAME "lvgl") + +set(CMAKE_LVGL_SOURCE_DIR + ${CMAKE_CURRENT_SOURCE_DIR}) + +file(GLOB_RECURSE SOURCES ${CMAKE_LVGL_SOURCE_DIR}/src/*.c) + +set(PUBLIC_HEADER + ${CMAKE_LVGL_SOURCE_DIR} + ${CMAKE_LVGL_SOURCE_DIR}/src + +) + +set(PRIVATE_HEADER + ${CMAKE_LVGL_SOURCE_DIR} + ${CMAKE_LVGL_SOURCE_DIR}/src +) + +# use this when you want to add ccflags like -include xxx +set(COMPONENT_PUBLIC_CCFLAGS +) + +set(COMPONENT_CCFLAGS +-DLV_CONF_INCLUDE_SIMPLE + # -Wno-error=logical-op + # -Wno-error=sign-compare + # -Wno-error=jump-misses-init + # -Wno-sign-compare + -Wno-jump-misses-init + -Wno-error=unused-parameter + # -Wno-unused-parameter + # -Wno-unused-but-set-variable + # -Wno-error=unused-variable +) + +set(WHOLE_LINK + true +) + +set(MAIN_COMPONENT + false +) + +set(LIB_OUT_PATH ${BIN_DIR}/${CHIP}/libs/wifi/${TARGET_COMMAND}) + +build_component() \ No newline at end of file diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/open_source/lv_conf.h b/vendor/developers/demo/lcd_st7789_lvgl9/open_source/lv_conf.h new file mode 100644 index 0000000000000000000000000000000000000000..f61319875c56591f8bed061600b75ecfb2ef22d7 --- /dev/null +++ b/vendor/developers/demo/lcd_st7789_lvgl9/open_source/lv_conf.h @@ -0,0 +1,1399 @@ +/** + * @file lv_conf.h + * Configuration file for v9.3.0 + */ + +/* + * 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 16 + +/** Swap the high and low bytes for RGB565 */ +#define LV_COLOR_16_SWAP 1 + +/*========================= + 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 (64 * 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 33 /**< [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]*/ + +/** Thread priority of the drawing task. + * Higher values mean higher priority. + * Can use values from lv_thread_prio_t enum in lv_os.h: LV_THREAD_PRIO_LOWEST, + * LV_THREAD_PRIO_LOW, LV_THREAD_PRIO_MID, LV_THREAD_PRIO_HIGH, LV_THREAD_PRIO_HIGHEST + * Make sure the priority value aligns with the OS-specific priority levels. + * On systems with limited priority levels (e.g., FreeRTOS), a higher value can improve + * rendering performance but might cause other tasks to starve. */ +#define LV_DRAW_THREAD_PRIO LV_THREAD_PRIO_HIGH + +#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_RGB565_SWAPPED 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_ARGB8888_PREMULTIPLIED 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 + + /** Enable VGLite error checks. */ + #define LV_USE_VGLITE_CHECK_ERROR 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 NXP's G2D on MPU platforms. */ +#define LV_USE_DRAW_G2D 0 + +#if LV_USE_DRAW_G2D + /** Maximum number of buffers that can be stored for G2D draw unit. + * Includes the frame buffers and assets. */ + #define LV_G2D_HASH_TABLE_SIZE 50 + + #if LV_USE_OS + /** Use additional draw thread for G2D processing.*/ + #define LV_USE_G2D_DRAW_THREAD 1 + #endif + + /** Enable G2D asserts. */ + #define LV_USE_G2D_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 1 + + /** 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 0 +#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 0 + + /** 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 + +/** Enable support widget names*/ +#define LV_USE_OBJ_NAME 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 */ +#ifndef LV_USE_PRIVATE_API + #define LV_USE_PRIVATE_API 0 +#endif + +/*================== + * 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 0 +#define LV_FONT_MONTSERRAT_12 0 +#define LV_FONT_MONTSERRAT_14 0 +#define LV_FONT_MONTSERRAT_16 0 +#define LV_FONT_MONTSERRAT_18 0 +#define LV_FONT_MONTSERRAT_20 0 +#define LV_FONT_MONTSERRAT_22 1 +#define LV_FONT_MONTSERRAT_24 0 +#define LV_FONT_MONTSERRAT_26 0 +#define LV_FONT_MONTSERRAT_28 0 +#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 */ +#define LV_FONT_SOURCE_HAN_SANS_SC_14_CJK 0 /**< 1338 most common CJK radicals */ +#define LV_FONT_SOURCE_HAN_SANS_SC_16_CJK 0 /**< 1338 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_22 + +/** 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/master/details/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 0 + +#define LV_USE_ARC 0 + +#define LV_USE_BAR 0 + +#define LV_USE_BUTTON 1 + +#define LV_USE_BUTTONMATRIX 0 + +#define LV_USE_CALENDAR 0 +#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 0 + +#define LV_USE_CHART 0 + +#define LV_USE_CHECKBOX 0 + +#define LV_USE_DROPDOWN 0 /**< Requires: lv_label */ + +#define LV_USE_IMAGE 0 /**< Requires: lv_label */ + +#define LV_USE_IMAGEBUTTON 0 + +#define LV_USE_KEYBOARD 0 + +#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 0 + +#define LV_USE_LINE 0 + +#define LV_USE_LIST 0 + +#define LV_USE_LOTTIE 0 /**< Requires: lv_canvas, thorvg */ + +#define LV_USE_MENU 0 + +#define LV_USE_MSGBOX 0 + +#define LV_USE_ROLLER 0 /**< Requires: lv_label */ + +#define LV_USE_SCALE 0 + +#define LV_USE_SLIDER 0 /**< Requires: lv_bar */ + +#define LV_USE_SPAN 0 +#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 0 + +#define LV_USE_SPINNER 0 + +#define LV_USE_SWITCH 0 + +#define LV_USE_TABLE 0 + +#define LV_USE_TABVIEW 0 + +#define LV_USE_TEXTAREA 0 /**< Requires: lv_label */ +#if LV_USE_TEXTAREA != 0 + #define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 /**< [ms] */ +#endif + +#define LV_USE_TILEVIEW 0 + +#define LV_USE_WIN 0 + +#define LV_USE_3DTEXTURE 0 + +/*================== + * THEMES + *==================*/ +/* Documentation for themes can be found here: https://docs.lvgl.io/master/details/common-widget-features/styles/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/details/common-widget-features/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/details/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-modules/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/details/auxiliary-modules/index.html . */ + +/** 1: Enable API to take snapshot for object */ +#define LV_USE_SNAPSHOT 0 + +/** 1: Enable system monitor component */ +#define LV_USE_SYSMON 0 +#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 0 + #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 0 + #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] */ + #define LV_PROFILER_BUILTIN_DEFAULT_ENABLE 1 + #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 Font manager */ +#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 emulated input devices, time emulation, and screenshot compares. */ +#define LV_USE_TEST 0 +#if LV_USE_TEST + +/** Enable `lv_test_screenshot_compare`. + * Requires libpng and a few MB of extra RAM. */ +#define LV_USE_TEST_SCREENSHOT_COMPARE 0 +#endif /*LV_USE_TEST*/ + +/** Enable loading XML UIs runtime */ +#define LV_USE_XML 0 + +/*1: Enable color filter style*/ +#define LV_USE_COLOR_FILTER 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_BUF_COUNT 1 /**< Use 1 for single buffer with partial render mode or 2 for double buffer with full render mode*/ + #define LV_WAYLAND_USE_DMABUF 0 /**< Use DMA buffers for frame buffers. Requires LV_DRAW_USE_G2D */ + #define LV_WAYLAND_RENDER_MODE LV_DISPLAY_RENDER_MODE_PARTIAL /**< DMABUF supports LV_DISPLAY_RENDER_MODE_FULL and LV_DISPLAY_RENDER_MODE_DIRECT*/ + /**< When LV_WAYLAND_USE_DMABUF is disabled, only LV_DISPLAY_RENDER_MODE_PARTIAL is supported*/ + #define LV_WAYLAND_WINDOW_DECORATIONS 0 /**< Draw client side window decorations only necessary on Mutter/GNOME. Not supported using DMABUF*/ + #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 + #define LV_LINUX_FBDEV_MMAP 1 +#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 + + /** Use independent image heap for default draw buffer */ + #define LV_NUTTX_DEFAULT_DRAW_BUF_USE_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 +#define LV_USE_FT81X 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 + +/*===================== +* BUILD OPTIONS +*======================*/ + +/** Enable examples to be built with the library. */ +#define LV_BUILD_EXAMPLES 0 + +/** Build the demos */ +#define LV_BUILD_DEMOS 0 + +/*=================== + * DEMO USAGE + ====================*/ + +#if LV_BUILD_DEMOS + /** Show some widgets. This might be required to increase `LV_MEM_SIZE`. */ + #define LV_USE_DEMO_WIDGETS 0 + + /** Demonstrate usage of encoder and keyboard. */ + #define LV_USE_DEMO_KEYPAD_AND_ENCODER 0 + + /** Benchmark your system */ + #define LV_USE_DEMO_BENCHMARK 0 + + #if LV_USE_DEMO_BENCHMARK + /** Use fonts where bitmaps are aligned 16 byte and has Nx16 byte stride */ + #define LV_DEMO_BENCHMARK_ALIGNED_FONTS 0 + #endif + + /** 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 0 + + /** 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 + + /** Vector graphic demo */ + #define LV_USE_DEMO_VECTOR_GRAPHIC 0 + + /*--------------------------- + * Demos from lvgl/lv_demos + ---------------------------*/ + + /** 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 + + /*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 +#endif /* LV_BUILD_DEMOS */ + +/*--END OF LV_CONF_H--*/ + +#endif /*LV_CONF_H*/ + +#endif /*End of "Content enable"*/ diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/open_source/src/README.md b/vendor/developers/demo/lcd_st7789_lvgl9/open_source/src/README.md new file mode 100644 index 0000000000000000000000000000000000000000..071657c0c8a9cf466e384b4d946377443682fd64 --- /dev/null +++ b/vendor/developers/demo/lcd_st7789_lvgl9/open_source/src/README.md @@ -0,0 +1 @@ +这里是LVGL的源码放置位置,拉取lvgl后切换到9.3.0release分支,然后把src文件夹直接覆盖这个文件夹即可 \ No newline at end of file diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/picture/1.jpg b/vendor/developers/demo/lcd_st7789_lvgl9/picture/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c38bed086a44014262135fcc33e7ae4559ea990 Binary files /dev/null and b/vendor/developers/demo/lcd_st7789_lvgl9/picture/1.jpg differ diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/picture/10.jpg b/vendor/developers/demo/lcd_st7789_lvgl9/picture/10.jpg new file mode 100644 index 0000000000000000000000000000000000000000..73229889cf979b641eb9982792f54985f09cecdd Binary files /dev/null and b/vendor/developers/demo/lcd_st7789_lvgl9/picture/10.jpg differ diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/picture/2.jpg b/vendor/developers/demo/lcd_st7789_lvgl9/picture/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e7346c0fc325b978a4e7369ead8959e2ca35b8cd Binary files /dev/null and b/vendor/developers/demo/lcd_st7789_lvgl9/picture/2.jpg differ diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/picture/3.jpg b/vendor/developers/demo/lcd_st7789_lvgl9/picture/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1eda166713abe9371eff28f0ca7b881ee806027a Binary files /dev/null and b/vendor/developers/demo/lcd_st7789_lvgl9/picture/3.jpg differ diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/picture/4.jpg b/vendor/developers/demo/lcd_st7789_lvgl9/picture/4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9586eb090be49fbfed96ca380868f075ad54a280 Binary files /dev/null and b/vendor/developers/demo/lcd_st7789_lvgl9/picture/4.jpg differ diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/picture/5.jpg b/vendor/developers/demo/lcd_st7789_lvgl9/picture/5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f19d1d729326e966fa572f582330bffa7507fe8 Binary files /dev/null and b/vendor/developers/demo/lcd_st7789_lvgl9/picture/5.jpg differ diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/picture/6.jpg b/vendor/developers/demo/lcd_st7789_lvgl9/picture/6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3a6cecf4ffa1264be388c317d11a0082fff700c Binary files /dev/null and b/vendor/developers/demo/lcd_st7789_lvgl9/picture/6.jpg differ diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/picture/7.jpg b/vendor/developers/demo/lcd_st7789_lvgl9/picture/7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1e3a99b529720490773b2012f9698acfbbf18b9 Binary files /dev/null and b/vendor/developers/demo/lcd_st7789_lvgl9/picture/7.jpg differ diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/picture/8.jpg b/vendor/developers/demo/lcd_st7789_lvgl9/picture/8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c8fa17dfc2512199b79084e89eef874580ecf8ab Binary files /dev/null and b/vendor/developers/demo/lcd_st7789_lvgl9/picture/8.jpg differ diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/picture/9.jpg b/vendor/developers/demo/lcd_st7789_lvgl9/picture/9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e4ed0e1a7992bfcdeb6474cdeefe07547180291 Binary files /dev/null and b/vendor/developers/demo/lcd_st7789_lvgl9/picture/9.jpg differ diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/spi/CMakeLists.txt b/vendor/developers/demo/lcd_st7789_lvgl9/spi/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..e15626b9af61586c5902e9519f9acd5e7fbf8168 --- /dev/null +++ b/vendor/developers/demo/lcd_st7789_lvgl9/spi/CMakeLists.txt @@ -0,0 +1,5 @@ +set(SOURCES "${SOURCES}" +"${CMAKE_CURRENT_SOURCE_DIR}/spi_driver.c" +"${CMAKE_CURRENT_SOURCE_DIR}/display.c" +"${CMAKE_CURRENT_SOURCE_DIR}/st7789.c" + PARENT_SCOPE) diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/spi/Kconfig b/vendor/developers/demo/lcd_st7789_lvgl9/spi/Kconfig new file mode 100644 index 0000000000000000000000000000000000000000..e4546b4b06744cde733d42314cbcaf3450a83915 --- /dev/null +++ b/vendor/developers/demo/lcd_st7789_lvgl9/spi/Kconfig @@ -0,0 +1,41 @@ +config SPI_MASTER_BUS_ID + int + prompt "Choose SPI master bus id." + depends on SAMPLE_SUPPORT_SPI + default 0 + +config SPI_DI_MASTER_PIN + int + prompt "Choose SPI DI master pin." + depends on SAMPLE_SUPPORT_SPI + default 11 + +config SPI_DO_MASTER_PIN + int + prompt "Choose SPI DO master pin." + depends on SAMPLE_SUPPORT_SPI + default 9 + +config SPI_CLK_MASTER_PIN + int + prompt "Choose SPI CLK master pin." + depends on SAMPLE_SUPPORT_SPI + default 7 + +config SPI_CS_MASTER_PIN + int + prompt "Choose SPI CS master pin." + depends on SAMPLE_SUPPORT_SPI + default 10 + +config SPI_RESET_MASTER_PIN + int + prompt "Choose SPI RESET master pin." + depends on SAMPLE_SUPPORT_SPI + default 3 + +config SPI_DC_MASTER_PIN + int + prompt "Choose SPI DC master pin." + depends on SAMPLE_SUPPORT_SPI + default 6 diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/spi/display.c b/vendor/developers/demo/lcd_st7789_lvgl9/spi/display.c new file mode 100644 index 0000000000000000000000000000000000000000..ff54358157554a67a0229ddf106575b19d07f223 --- /dev/null +++ b/vendor/developers/demo/lcd_st7789_lvgl9/spi/display.c @@ -0,0 +1,68 @@ +/** + * Copyright (c) EndyTsang 2025. All rights reserved. \n + * + * Description: LVGL9 DEMO. \n + * + */ + +#include "display.h" + +static timer_handle_t timer_handle = NULL; // 定时器句柄 +static uint8_t buf_1_1[MY_DISP_HOR_RES * 10 * BYTE_PER_PIXEL]; /*A buffer for 10 rows*/ +void TimerCallback(uintptr_t data) +{ + unused(data); + lv_tick_inc(1); // 告诉LVGL时间过去1毫秒 + uapi_timer_start(timer_handle, TICK_US, TimerCallback, 0); +} + +static void disp_flush(lv_display_t *disp_drv, const lv_area_t *area, uint8_t *px_map) +{ + st7789_set_window(area->x1, area->y1, area->x2, area->y2); + st7789_write_data(px_map, (area->x2 - area->x1 + 1) * (area->y2 - area->y1 + 1) * 2); // 2字节每个像素 + lv_display_flush_ready(disp_drv); +} + +static void *spi_master_task(const char *arg) +{ + unused(arg); + + st7789_init(); + + lv_init(); + + lv_display_t *disp = lv_display_create(MY_DISP_HOR_RES, MY_DISP_VER_RES); + lv_display_set_flush_cb(disp, disp_flush); + lv_display_set_buffers(disp, buf_1_1, NULL, sizeof(buf_1_1), LV_DISPLAY_RENDER_MODE_PARTIAL); + + uapi_timer_init(); // 初始化定时器模块 + uapi_timer_adapter(TIMER_INDEX, TIMER_1_IRQN, TIMER_PRIORITY); // 配置定时器适配器 + uapi_timer_create(TIMER_INDEX, &timer_handle); // 创建定时器,并获取定时器句柄 + uapi_timer_start(timer_handle, TICK_US, TimerCallback, 0); // 启动定时器,设置触发时间和回调函数 + + lv_obj_t *label = lv_label_create(lv_scr_act()); + lv_label_set_text(label, "Hello WS63"); + lv_obj_center(label); + + while (1) { + lv_timer_handler(); + osal_msleep(SPI_TASK_DURATION_MS); + } + + return NULL; +} + +static void spi_master_entry(void) +{ + osal_task *task_handle = NULL; + osal_kthread_lock(); + task_handle = osal_kthread_create((osal_kthread_handler)spi_master_task, 0, "SpiMasterTask", SPI_TASK_STACK_SIZE); + if (task_handle != NULL) { + osal_kthread_set_priority(task_handle, SPI_TASK_PRIORITY); + osal_kfree(task_handle); + } + osal_kthread_unlock(); +} + +/* Run the spi_master_entry. */ +app_run(spi_master_entry); \ No newline at end of file diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/spi/display.h b/vendor/developers/demo/lcd_st7789_lvgl9/spi/display.h new file mode 100644 index 0000000000000000000000000000000000000000..23577fe56eaee83a5c7e34300c843fc1d7325178 --- /dev/null +++ b/vendor/developers/demo/lcd_st7789_lvgl9/spi/display.h @@ -0,0 +1,27 @@ +/** + * Copyright (c) EndyTsang 2025. All rights reserved. \n + * + * Description: LVGL9 DEMO. \n + * + */ + +#ifndef _DISPLAY_H +#define _DISPLAY_H + +#include "st7789.h" +#include "timer.h" +#include "chip_core_irq.h" +#include "lvgl.h" + +#define TIMER_INDEX 1 +#define TIMER_PRIORITY 1 +#define TICK_US 1000 + +#define MY_DISP_HOR_RES ST7789_WIDTH +#define MY_DISP_VER_RES ST7789_HEIGHT +#define BYTE_PER_PIXEL 2 +#define SPI_TASK_DURATION_MS 33 +#define SPI_TASK_PRIORITY 24 +#define SPI_TASK_STACK_SIZE 0x1000 + +#endif diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/spi/spi_driver.c b/vendor/developers/demo/lcd_st7789_lvgl9/spi/spi_driver.c new file mode 100644 index 0000000000000000000000000000000000000000..9c0585d55400497ba507cef3fd19c4e6d223ea63 --- /dev/null +++ b/vendor/developers/demo/lcd_st7789_lvgl9/spi/spi_driver.c @@ -0,0 +1,75 @@ +/** + * Copyright (c) EndyTsang 2025. All rights reserved. \n + * + * Description: LVGL9 DEMO. \n + * + */ +#include "spi_driver.h" + +void spi_init(void) +{ + uapi_pin_set_mode(CONFIG_SPI_DI_MASTER_PIN, SPI_PINMODE); + uapi_pin_set_mode(CONFIG_SPI_DO_MASTER_PIN, SPI_PINMODE); + uapi_pin_set_mode(CONFIG_SPI_CLK_MASTER_PIN, SPI_PINMODE); + uapi_pin_set_mode(CONFIG_SPI_CS_MASTER_PIN, SPI_PINMODE); + + uapi_pin_set_mode(CONFIG_SPI_RESET_MASTER_PIN, GPIO_PINMODE); + uapi_gpio_set_dir(CONFIG_SPI_RESET_MASTER_PIN, GPIO_DIRECTION_OUTPUT); + uapi_pin_set_mode(CONFIG_SPI_DC_MASTER_PIN, GPIO_PINMODE); + uapi_gpio_set_dir(CONFIG_SPI_DC_MASTER_PIN, GPIO_DIRECTION_OUTPUT); + + spi_attr_t config = {0}; + spi_extra_attr_t ext_config = {0}; + + config.is_slave = false; + config.slave_num = SPI_SLAVE_NUM; + config.bus_clk = SPI_CLK_FREQ; + config.freq_mhz = SPI_FREQUENCY; + config.clk_polarity = SPI_CLK_POLARITY; + config.clk_phase = SPI_CLK_PHASE; + config.frame_format = SPI_CFG_FRAME_FORMAT_MOTOROLA_SPI; + config.spi_frame_format = HAL_SPI_FRAME_FORMAT_STANDARD; + config.frame_size = HAL_SPI_FRAME_SIZE_8; + config.tmod = HAL_SPI_TRANS_MODE_TX; + config.sste = 0; + + int ret = uapi_spi_init(CONFIG_SPI_MASTER_BUS_ID, &config, &ext_config); + if (ret != 0) { + osal_printk("spi init fail %0x\r\n", ret); + } + uapi_dma_init(); + uapi_dma_open(); +} + +void send_cmd(uint8_t cmd) +{ + uint8_t d = cmd; + spi_xfer_data_t spi_data = { + .tx_buff = &d, + .tx_bytes = 1, + }; + uapi_gpio_set_val(CONFIG_SPI_DC_MASTER_PIN, GPIO_LEVEL_LOW); + uapi_spi_master_write(CONFIG_SPI_MASTER_BUS_ID, &spi_data, 0xFFFFFFFF); +} + +void send_data(uint8_t data) +{ + + uint8_t d = data; + spi_xfer_data_t spi_data = { + .tx_buff = &d, + .tx_bytes = 1, + }; + uapi_gpio_set_val(CONFIG_SPI_DC_MASTER_PIN, GPIO_LEVEL_HIGH); + uapi_spi_master_write(CONFIG_SPI_MASTER_BUS_ID, &spi_data, 0xFFFFFFFF); +} + +void send_data_array(uint8_t *data, uint32_t len) +{ + spi_xfer_data_t spi_data = { + .tx_buff = data, + .tx_bytes = len, + }; + uapi_gpio_set_val(CONFIG_SPI_DC_MASTER_PIN, GPIO_LEVEL_HIGH); + uapi_spi_master_write(CONFIG_SPI_MASTER_BUS_ID, &spi_data, 0xFFFFFFFF); +} \ No newline at end of file diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/spi/spi_driver.h b/vendor/developers/demo/lcd_st7789_lvgl9/spi/spi_driver.h new file mode 100644 index 0000000000000000000000000000000000000000..2abd8b07fbde6bae5351d7d257c79e02310ed025 --- /dev/null +++ b/vendor/developers/demo/lcd_st7789_lvgl9/spi/spi_driver.h @@ -0,0 +1,30 @@ +/** + * Copyright (c) EndyTsang 2025. All rights reserved. \n + * + * Description: LVGL9 DEMO. \n + * + */ + +#ifndef _SPI_DRIVER_H +#define _SPI_DRIVER_H + +#include "pinctrl.h" +#include "spi.h" +#include "soc_osal.h" +#include "app_init.h" +#include "gpio.h" + +#define SPI_FREQUENCY 32 +#define SPI_CLK_POLARITY 0 +#define SPI_CLK_PHASE 0 +#define SPI_SLAVE_NUM 1 + +#define GPIO_PINMODE 0 +#define SPI_PINMODE 3 + +void spi_init(void); +void send_cmd(uint8_t cmd); +void send_data(uint8_t data); +void send_data_array(uint8_t *data, uint32_t len); + +#endif diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/spi/st7789.c b/vendor/developers/demo/lcd_st7789_lvgl9/spi/st7789.c new file mode 100644 index 0000000000000000000000000000000000000000..7b0e58363ab647da5ca3913b809b573d5292aeae --- /dev/null +++ b/vendor/developers/demo/lcd_st7789_lvgl9/spi/st7789.c @@ -0,0 +1,114 @@ +/** + * Copyright (c) EndyTsang 2025. All rights reserved. \n + * + * Description: LVGL9 DEMO. \n + * + */ + +#include "st7789.h" + +void st7789_set_window(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) +{ + { + uint8_t data[] = {x0 >> HIGH_BYTE_SHIFT, x0 & LOW_BYTE_MASK, x1 >> HIGH_BYTE_SHIFT, x1 & LOW_BYTE_MASK}; + send_cmd(ST7789_CASET); + send_data_array(data, sizeof(data)); + } + + { + uint8_t data[] = {y0 >> HIGH_BYTE_SHIFT, y0 & LOW_BYTE_MASK, y1 >> HIGH_BYTE_SHIFT, y1 & LOW_BYTE_MASK}; + send_cmd(ST7789_RASET); + send_data_array(data, sizeof(data)); + } +} + +void st7789_write_data(uint8_t *data, uint32_t len) +{ + send_cmd(ST7789_RAMWR); + send_data_array(data, len); +} + +void st7789_init(void) +{ + spi_init(); + osal_printk("spi init\r\n"); + + uapi_gpio_set_val(CONFIG_SPI_RESET_MASTER_PIN, GPIO_LEVEL_LOW); + osal_msleep(100); // 延时100毫秒 + uapi_gpio_set_val(CONFIG_SPI_RESET_MASTER_PIN, GPIO_LEVEL_HIGH); + osal_msleep(100); // 延时100毫秒 + + send_cmd(ST7789_SLPOUT); + + send_cmd(ST7789_COLMOD); + send_data(0x55); // 5 565 6 666 + + send_cmd(0xB2); + send_data(0x0C); + send_data(0x0C); + send_data(0x00); + send_data(0x33); + send_data(0x33); + + send_cmd(0xB7); + send_data(0x35); + + send_cmd(0xBB); + send_data(0x32); // Vcom=1.35V + + send_cmd(0xC2); + send_data(0x01); + + send_cmd(0xC3); + send_data(0x19); // GVDD=4.8V + + send_cmd(0xC4); + send_data(0x20); // VDV, 0x20:0v + + send_cmd(0xC6); + send_data(0x0F); // 0x0F:60Hz + + send_cmd(0xD0); + send_data(0xA4); + send_data(0xA1); + + send_cmd(0xE0); + send_data(0xD0); + send_data(0x08); + send_data(0x0E); + send_data(0x09); + send_data(0x09); + send_data(0x05); + send_data(0x31); + send_data(0x33); + send_data(0x48); + send_data(0x17); + send_data(0x14); + send_data(0x15); + send_data(0x31); + send_data(0x34); + + send_cmd(0xE1); + send_data(0xD0); + send_data(0x08); + send_data(0x0E); + send_data(0x09); + send_data(0x09); + send_data(0x15); + send_data(0x31); + send_data(0x33); + send_data(0x48); + send_data(0x17); + send_data(0x14); + send_data(0x15); + send_data(0x31); + send_data(0x34); + + send_cmd(ST7789_INVON); + + send_cmd(ST7789_MADCTL); // MX, MY, RGB mode + + send_data(0x00); + + send_cmd(ST7789_DISPON); +} diff --git a/vendor/developers/demo/lcd_st7789_lvgl9/spi/st7789.h b/vendor/developers/demo/lcd_st7789_lvgl9/spi/st7789.h new file mode 100644 index 0000000000000000000000000000000000000000..cda727cb617805dd851da101c044dc41b09424b1 --- /dev/null +++ b/vendor/developers/demo/lcd_st7789_lvgl9/spi/st7789.h @@ -0,0 +1,59 @@ +/** + * Copyright (c) EndyTsang 2025. All rights reserved. \n + * + * Description: LVGL9 DEMO. \n + * + */ + +#ifndef _ST7789_H +#define _ST7789_H + +#include "spi_driver.h" + +#define ST7789_NOP 0x00 +#define ST7789_SWRESET 0x01 +#define ST7789_RDDID 0x04 +#define ST7789_RDDST 0x09 + +#define ST7789_SLPIN 0x10 +#define ST7789_SLPOUT 0x11 +#define ST7789_PTLON 0x12 +#define ST7789_NORON 0x13 + +#define ST7789_INVOFF 0x20 +#define ST7789_INVON 0x21 +#define ST7789_DISPOFF 0x28 +#define ST7789_DISPON 0x29 +#define ST7789_CASET 0x2A +#define ST7789_RASET 0x2B +#define ST7789_RAMWR 0x2C +#define ST7789_RAMRD 0x2E + +#define ST7789_PTLAR 0x30 +#define ST7789_COLMOD 0x3A +#define ST7789_MADCTL 0x36 + +/* Page Address Order ('0': Top to Bottom, '1': the opposite) */ +#define ST7789_MADCTL_MY 0x80 +/* Column Address Order ('0': Left to Right, '1': the opposite) */ +#define ST7789_MADCTL_MX 0x40 +/* Page/Column Order ('0' = Normal Mode, '1' = Reverse Mode) */ +#define ST7789_MADCTL_MV 0x20 +/* Line Address Order ('0' = LCD Refresh Top to Bottom, '1' = the opposite) */ +#define ST7789_MADCTL_ML 0x10 +/* RGB/BGR Order ('0' = RGB, '1' = BGR) */ +#define ST7789_MADCTL_RGB 0x00 + +#define ST7789_COLOR_MODE_16bit 0x55 // RGB565 (16bit) + +#define HIGH_BYTE_SHIFT 8 +#define LOW_BYTE_MASK 0xFF + +#define ST7789_WIDTH 240 +#define ST7789_HEIGHT 320 + +void st7789_init(void); +void st7789_set_window(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1); +void st7789_write_data(uint8_t *data, uint32_t len); + +#endif