From 6c93bd80a41cc1d0dc9d6f1c0658f3b40bd4fc69 Mon Sep 17 00:00:00 2001 From: Christos Themelis Date: Mon, 10 Nov 2025 21:51:44 +0200 Subject: [PATCH 1/5] lvgl 9.4 --- Weather/lib/lvgl/lv_conf.h | 1597 +++++++++++++++++++++++++---------- Weather/platformio.ini | 4 +- Weather/src/UI/ui.c | 9 +- Weather/src/UI/ui.h | 12 +- Weather/src/UI/ui_Screen1.c | 38 +- Weather/src/UI/ui_helpers.c | 56 +- Weather/src/UI/ui_helpers.h | 19 +- Weather/src/main.cpp | 66 +- 8 files changed, 1238 insertions(+), 563 deletions(-) diff --git a/Weather/lib/lvgl/lv_conf.h b/Weather/lib/lvgl/lv_conf.h index f944ce8..897ff07 100644 --- a/Weather/lib/lvgl/lv_conf.h +++ b/Weather/lib/lvgl/lv_conf.h @@ -1,366 +1,608 @@ /** * @file lv_conf.h - * Configuration file for v8.3.11 + * Configuration file for v9.4.0 */ /* * Copy this file as `lv_conf.h` - * 1. simply next to the `lvgl` folder - * 2. or any other places and - * - define `LV_CONF_INCLUDE_SIMPLE` - * - add the path as include path + * 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 it to "1" to enable content*/ +#if 1 /* Set this to "1" to enable content */ #ifndef LV_CONF_H #define LV_CONF_H -#include +/* 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 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/ +/** Color depth: 1 (I1), 8 (L8), 16 (RGB565), 24 (RGB888), 32 (XRGB8888) */ #define LV_COLOR_DEPTH 16 -/*Swap the 2 bytes of RGB565 color. Useful if the display has an 8-bit interface (e.g. SPI)*/ -#define LV_COLOR_16_SWAP 0 - -/*Enable features to draw on transparent background. - *It's required if opa, and transform_* style properties are used. - *Can be also used if the UI is above another layer, e.g. an OSD menu or video player.*/ -#define LV_COLOR_SCREEN_TRANSP 0 +/*========================= + STDLIB WRAPPER SETTINGS + *=========================*/ -/* 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 +/** 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 -/*Images pixels with this color will not be drawn if they are chroma keyed)*/ -#define LV_COLOR_CHROMA_KEY lv_color_hex(0x00ff00) /*pure green*/ +#define LV_STDINT_INCLUDE +#define LV_STDDEF_INCLUDE +#define LV_STDBOOL_INCLUDE +#define LV_INTTYPES_INCLUDE +#define LV_LIMITS_INCLUDE +#define LV_STDARG_INCLUDE -/*========================= - MEMORY SETTINGS - *=========================*/ +#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] */ -/*1: use custom malloc/free, 0: use the built-in `lv_mem_alloc()` and `lv_mem_free()`*/ -#define LV_MEM_CUSTOM 0 -#if LV_MEM_CUSTOM == 0 - /*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/ - #define LV_MEM_SIZE (48U * 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*/ + /** 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 - -#else /*LV_MEM_CUSTOM*/ - #define LV_MEM_CUSTOM_INCLUDE /*Header for the dynamic memory function*/ - #define LV_MEM_CUSTOM_ALLOC malloc - #define LV_MEM_CUSTOM_FREE free - #define LV_MEM_CUSTOM_REALLOC realloc -#endif /*LV_MEM_CUSTOM*/ - -/*Number of the intermediate memory buffer used during rendering and other internal processing mechanisms. - *You will see an error log message if there wasn't enough buffers. */ -#define LV_MEM_BUF_MAX_NUM 16 - -/*Use the standard `memcpy` and `memset` instead of LVGL's own functions. (Might or might not be faster).*/ -#define LV_MEMCPY_MEMSET_STD 0 +#endif /*LV_USE_STDLIB_MALLOC == LV_STDLIB_BUILTIN*/ /*==================== HAL SETTINGS *====================*/ -/*Default display refresh period. LVG will redraw changed areas with this period time*/ -#define LV_DISP_DEF_REFR_PERIOD 10 /*[ms]*/ +/** Default display refresh, input device read and animation step period. */ +#define LV_DEF_REFR_PERIOD 33 /**< [ms] */ -/*Input device read period in milliseconds*/ -#define LV_INDEV_DEF_READ_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] */ -/*Use a custom tick source that tells the elapsed time in milliseconds. - *It removes the need to manually update the tick with `lv_tick_inc()`)*/ -#define LV_TICK_CUSTOM 1 -#if LV_TICK_CUSTOM - #define LV_TICK_CUSTOM_INCLUDE "Arduino.h" /*Header for the system time function*/ - #define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /*Expression evaluating to current system time in ms*/ - /*If using lvgl as ESP32 component*/ - // #define LV_TICK_CUSTOM_INCLUDE "esp_timer.h" - // #define LV_TICK_CUSTOM_SYS_TIME_EXPR ((esp_timer_get_time() / 1000LL)) -#endif /*LV_TICK_CUSTOM*/ +/*================= + * 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 -/*Default Dot 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]*/ +/*======================== + * RENDERING CONFIGURATION + *========================*/ -/*======================= - * FEATURE CONFIGURATION - *=======================*/ +/** Align stride of all layers and images to this bytes */ +#define LV_DRAW_BUF_STRIDE_ALIGN 1 -/*------------- - * Drawing - *-----------*/ +/** Align start address of draw_buf addresses to this bytes*/ +#define LV_DRAW_BUF_ALIGN 4 -/*Enable complex draw engine. - *Required to draw shadow, gradient, rounded corners, circles, arc, skew lines, image transformations or any masks*/ -#define LV_DRAW_COMPLEX 1 -#if LV_DRAW_COMPLEX != 0 +/** Using matrix for transformations. + * Requirements: + * - `LV_USE_MATRIX = 1`. + * - Rendering engine needs to support 3x3 matrix transformations. */ +#define LV_DRAW_TRANSFORM_USE_MATRIX 0 - /*Allow buffering some shadow calculation. - *LV_SHADOW_CACHE_SIZE is the max. shadow size to buffer, where shadow size is `shadow_width + radius` - *Caching has LV_SHADOW_CACHE_SIZE^2 RAM cost*/ - #define LV_SHADOW_CACHE_SIZE 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. */ - /* 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: to disable caching */ - #define LV_CIRCLE_CACHE_SIZE 4 -#endif /*LV_DRAW_COMPLEX*/ +/** The target buffer size for simple layer chunks. */ +#define LV_DRAW_LAYER_SIMPLE_BUF_SIZE (24 * 1024) /**< [bytes]*/ -/** - * "Simple layers" are used when a widget has `style_opa < 255` to buffer the widget into a layer - * and blend it as an image with the given opacity. - * Note that `bg_opa`, `text_opa` etc don't require buffering into layer) - * The widget can be buffered in smaller chunks to avoid using large buffers. - * - * - LV_LAYER_SIMPLE_BUF_SIZE: [bytes] the optimal target buffer size. LVGL will try to allocate it - * - LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE: [bytes] used if `LV_LAYER_SIMPLE_BUF_SIZE` couldn't be allocated. - * - * Both buffer sizes are in bytes. - * "Transformed layers" (where transform_angle/zoom properties are used) use larger buffers - * and can't be drawn in chunks. So these settings affects only widgets with opacity. +/* 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_LAYER_SIMPLE_BUF_SIZE (24 * 1024) -#define LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE (3 * 1024) - -/*Default image cache size. Image caching keeps the images opened. - *If only the built-in image formats are used there is no real advantage of caching. (I.e. if no new image decoder is added) - *With complex image decoders (e.g. PNG or JPG) caching can save the continuous open/decode of images. - *However the opened images might consume additional RAM. - *0: to disable caching*/ -#define LV_IMG_CACHE_DEF_SIZE 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 - -/*Default gradient buffer size. - *When LVGL calculates the gradient "maps" it can save them into a cache to avoid calculating them again. - *LV_GRAD_CACHE_DEF_SIZE sets the size of this cache in bytes. - *If the cache is too small the map will be allocated only while it's required for the drawing. - *0 mean no caching.*/ -#define LV_GRAD_CACHE_DEF_SIZE 0 - -/*Allow dithering the gradients (to achieve visual smooth color gradients on limited color depth display) - *LV_DITHER_GRADIENT implies allocating one or two more lines of the object's rendering surface - *The increase in memory consumption is (32 bits * object width) plus 24 bits * object width if using error diffusion */ -#define LV_DITHER_GRADIENT 0 -#if LV_DITHER_GRADIENT - /*Add support for error diffusion dithering. - *Error diffusion dithering gets a much better visual result, but implies more CPU consumption and memory when drawing. - *The increase in memory consumption is (24 bits * object's width)*/ - #define LV_DITHER_ERROR_DIFFUSION 0 -#endif - -/*Maximum buffer size to allocate for rotation. - *Only used if software rotation is enabled in the display driver.*/ -#define LV_DISP_ROT_MAX_BUF (10*1024) +#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 -/*------------- - * GPU - *-----------*/ + #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 -/*Use Arm's 2D acceleration library Arm-2D */ -#define LV_USE_GPU_ARM2D 0 + /** Enable drawing complex gradients in software: linear at an angle, radial or conical */ + #define LV_USE_DRAW_SW_COMPLEX_GRADIENTS 0 -/*Use STM32's DMA2D (aka Chrom Art) GPU*/ -#define LV_USE_GPU_STM32_DMA2D 0 -#if LV_USE_GPU_STM32_DMA2D - /*Must be defined to include path of CMSIS header of target processor - e.g. "stm32f7xx.h" or "stm32f4xx.h"*/ - #define LV_GPU_DMA2D_CMSIS_INCLUDE #endif -/*Enable RA6M3 G2D GPU*/ -#define LV_USE_GPU_RA6M3_G2D 0 -#if LV_USE_GPU_RA6M3_G2D - /*include path of target processor - e.g. "hal_data.h"*/ - #define LV_GPU_RA6M3_G2D_INCLUDE "hal_data.h" +/*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 SWM341's DMA2D GPU*/ -#define LV_USE_GPU_SWM341_DMA2D 0 -#if LV_USE_GPU_SWM341_DMA2D - #define LV_GPU_SWM341_DMA2D_INCLUDE "SWM341.h" +/** 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 PXP GPU iMX RTxxx platforms*/ -#define LV_USE_GPU_NXP_PXP 0 -#if LV_USE_GPU_NXP_PXP - /*1: Add default bare metal and FreeRTOS interrupt handling routines for PXP (lv_gpu_nxp_pxp_osa.c) - * and call lv_gpu_nxp_pxp_init() automatically during lv_init(). Note that symbol SDK_OS_FREE_RTOS - * has to be defined in order to use FreeRTOS OSA, otherwise bare-metal implementation is selected. - *0: lv_gpu_nxp_pxp_init() has to be called manually before lv_init() - */ - #define LV_USE_GPU_NXP_PXP_AUTO_INIT 0 +/** Use NXP's G2D on MPU platforms. */ +#define LV_USE_G2D 0 + +#if LV_USE_G2D + /** Use G2D for drawing. **/ + #define LV_USE_DRAW_G2D 1 + + /** Use G2D to rotate display. **/ + #define LV_USE_ROTATE_G2D 0 + + /** 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_DRAW_G2D && 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 + + /** Remove VLC_OP_CLOSE path instruction (Workaround for NXP) **/ + #define LV_VG_LITE_DISABLE_VLC_OP_CLOSE 0 + + /** Disable linear gradient extension for some older versions of drivers. */ + #define LV_VG_LITE_DISABLE_LINEAR_GRADIENT_EXT 0 + + /** Enable usage of the LVGL's built-in vg_lite driver */ + #define LV_USE_VG_LITE_DRIVER 0 + #if LV_USE_VG_LITE_DRIVER + /** Used to pick the correct GPU series folder valid options are gc255, gc355 and gc555*/ + #define LV_VG_LITE_HAL_GPU_SERIES gc255 + + /** Used to pick the correct GPU revision header it depends on the vendor */ + #define LV_VG_LITE_HAL_GPU_REVISION 0x40 + + /** Base memory address of the GPU IP it depends on SoC, + * default value is for NXP based devices */ + #define LV_VG_LITE_HAL_GPU_BASE_ADDRESS 0x40240000 + #endif /*LV_USE_VG_LITE_DRIVER*/ + + /** Use ThorVG (a software vector library) as VG-Lite driver to allow testing VGLite on PC + * 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 /*LV_USE_VG_LITE_THORVG*/ #endif -/*Use NXP's VG-Lite GPU iMX RTxxx platforms*/ -#define LV_USE_GPU_NXP_VG_LITE 0 +/** 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" -/*Use SDL renderer API*/ -#define LV_USE_GPU_SDL 0 -#if LV_USE_GPU_SDL - #define LV_GPU_SDL_INCLUDE_PATH - /*Texture cache size, 8MB by default*/ - #define LV_GPU_SDL_LRU_SIZE (1024 * 1024 * 8) - /*Custom blend mode for mask drawing, disable if you need to link with older SDL2 lib*/ - #define LV_GPU_SDL_CUSTOM_BLEND_MODE (SDL_VERSION_ATLEAST(2, 0, 6)) + /* 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. Requires LV_USE_OPENGLES */ +#define LV_USE_DRAW_OPENGLES 0 +#if LV_USE_DRAW_OPENGLES + #define LV_DRAW_OPENGLES_TEXTURE_CACHE_COUNT 64 +#endif + +/** Draw using espressif PPA accelerator */ +#define LV_USE_PPA 0 +#if LV_USE_PPA + #define LV_USE_PPA_IMG 0 +#endif + +/* Use EVE FT81X GPU. */ +#define LV_USE_DRAW_EVE 0 +#if LV_USE_DRAW_EVE + /* EVE_GEN value: 2, 3, or 4 */ + #define LV_DRAW_EVE_EVE_GENERATION 4 + + /* The maximum number of bytes to buffer before a single SPI transmission. + * Set it to 0 to disable write buffering. + */ + #define LV_DRAW_EVE_WRITE_BUFFER_SIZE 2048 +#endif + +/*======================= + * FEATURE CONFIGURATION + *=======================*/ + /*------------- * Logging *-----------*/ -/*Enable the log module*/ +/** Enable log module */ #define LV_USE_LOG 0 #if LV_USE_LOG - - /*How important log should be added: - *LV_LOG_LEVEL_TRACE A lot of logs to give 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 Only critical issue, when the system may fail - *LV_LOG_LEVEL_USER Only logs added by the user - *LV_LOG_LEVEL_NONE Do not log anything*/ + /** 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 the log with 'printf'; - *0: User need to register a callback with `lv_log_register_print_cb()`*/ + /** - 1: Print log with 'printf'; + * - 0: User needs to register a callback with `lv_log_register_print_cb()`. */ #define LV_LOG_PRINTF 0 - /*Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs*/ - #define LV_LOG_TRACE_MEM 1 - #define LV_LOG_TRACE_TIMER 1 - #define LV_LOG_TRACE_INDEV 1 - #define LV_LOG_TRACE_DISP_REFR 1 - #define LV_LOG_TRACE_EVENT 1 - #define LV_LOG_TRACE_OBJ_CREATE 1 - #define LV_LOG_TRACE_LAYOUT 1 - #define LV_LOG_TRACE_ANIM 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 asserts if an operation is failed or an 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)*/ +/* 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 the MCU*/ +/** 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*/ +#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 *-----------*/ -/*1: Show CPU usage and FPS count*/ -#define LV_USE_PERF_MONITOR 0 -#if LV_USE_PERF_MONITOR - #define LV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT +#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 -/*1: Show the used memory and the memory fragmentation - * Requires LV_MEM_CUSTOM = 0*/ -#define LV_USE_MEM_MONITOR 0 -#if LV_USE_MEM_MONITOR - #define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT -#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 -/*1: Draw random colored rectangles over the redrawn areas*/ -#define LV_USE_REFR_DEBUG 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 -/*Change the built in (v)snprintf functions*/ -#define LV_SPRINTF_CUSTOM 0 -#if LV_SPRINTF_CUSTOM - #define LV_SPRINTF_INCLUDE - #define lv_snprintf snprintf - #define lv_vsnprintf vsnprintf -#else /*LV_SPRINTF_CUSTOM*/ - #define LV_SPRINTF_USE_FLOAT 0 -#endif /*LV_SPRINTF_CUSTOM*/ - -#define LV_USE_USER_DATA 1 - -/*Garbage Collector settings - *Used if lvgl is bound to higher level language and the memory is managed by that language*/ -#define LV_ENABLE_GC 0 -#if LV_ENABLE_GC != 0 - #define LV_GC_INCLUDE "gc.h" /*Include Garbage Collector related things*/ -#endif /*LV_ENABLE_GC*/ +/* 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*/ +/** For big endian systems set to 1 */ #define LV_BIG_ENDIAN_SYSTEM 0 -/*Define a custom attribute to `lv_tick_inc` function*/ +/** Define a custom attribute for `lv_tick_inc` function */ #define LV_ATTRIBUTE_TICK_INC -/*Define a custom attribute to `lv_timer_handler` function*/ +/** Define a custom attribute for `lv_timer_handler` function */ #define LV_ATTRIBUTE_TIMER_HANDLER -/*Define a custom attribute to `lv_disp_flush_ready` function*/ +/** Define a custom attribute for `lv_display_flush_ready` function */ #define LV_ATTRIBUTE_FLUSH_READY -/*Required alignment size for buffers*/ +/** 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 memories needs to be aligned (with -Os data might not be aligned to boundary by default). - * E.g. __attribute__((aligned(4)))*/ +/** 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 font's bitmaps*/ +/** Attribute to mark large constant arrays, for example for font bitmaps */ #define LV_ATTRIBUTE_LARGE_CONST -/*Compiler prefix for a big array declaration in RAM*/ +/** 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)*/ +/** Place performance critical functions into a faster memory (e.g RAM) */ #define LV_ATTRIBUTE_FAST_MEM -/*Prefix variables that are used in GPU accelerated operations, often these need to be placed in RAM sections that are DMA accessible*/ -#define LV_ATTRIBUTE_DMA +/** 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 */ -/*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 -/*Extend the default -32k..32k coordinate range to -4M..4M by using int32_t for coordinates instead of int16_t*/ -#define LV_USE_LARGE_COORD 0 +/** 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*/ +/* 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 @@ -383,40 +625,39 @@ #define LV_FONT_MONTSERRAT_46 0 #define LV_FONT_MONTSERRAT_48 1 -/*Demonstrate special features*/ -#define LV_FONT_MONTSERRAT_12_SUBPX 0 -#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_16_CJK 0 /*1000 most common CJK radicals*/ +/* 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_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 monospace fonts*/ +/** Pixel perfect monospaced fonts */ #define LV_FONT_UNSCII_8 0 #define LV_FONT_UNSCII_16 0 -/*Optionally declare custom fonts here. - *You can use these fonts as default font too and they will be available globally. - *E.g. #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2)*/ -#define LV_FONT_CUSTOM_DECLARE +/** 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*/ +/** 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. - *Compiler error will be triggered if a font needs it.*/ +/** 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.*/ +/** Enables/disables support for compressed fonts. */ #define LV_USE_FONT_COMPRESSED 0 -/*Enable subpixel rendering*/ -#define LV_USE_FONT_SUBPX 0 -#if LV_USE_FONT_SUBPX - /*Set the pixel order of the display. Physical order of RGB channels. Doesn't matter with "normal" fonts.*/ - #define LV_FONT_SUBPX_BGR 0 /*0: RGB; 1:BGR order*/ -#endif - -/*Enable drawing placeholders when glyph dsc is not found*/ +/** Enable drawing placeholders when glyph dsc is not found. */ #define LV_USE_FONT_PLACEHOLDER 1 /*================= @@ -425,100 +666,72 @@ /** * Select a character encoding for strings. - * Your IDE or editor should have the same character encoding + * 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 -/*Can break (wrap) texts on these chars*/ -#define LV_TXT_BREAK_CHARS " ,.;:-_" +/** 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*/ +/** 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.*/ +/** 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.*/ +/** 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 -/*The control character to use for signalling text recoloring.*/ -#define LV_TXT_COLOR_CMD "#" - -/*Support bidirectional texts. Allows mixing Left-to-Right and Right-to-Left texts. - *The direction will be processed according to the Unicode Bidirectional Algorithm: - *https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/ +/** 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 texts base direction*/ + *`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 an other form based on their position in the text*/ +/** 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 "#" + /*================== - * WIDGET USAGE + * 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. + * - lv_arclabel_t : Text set to "Arced Text", else empty string. + * */ +#define LV_WIDGETS_HAS_DEFAULT_VALUE 1 -/*Documentation of the widgets: https://docs.lvgl.io/latest/en/html/widgets/index.html*/ +#define LV_USE_ANIMIMG 0 #define LV_USE_ARC 0 -#define LV_USE_BAR 0 - -#define LV_USE_BTN 1 - -#define LV_USE_BTNMATRIX 1 - -#define LV_USE_CANVAS 1 - -#define LV_USE_CHECKBOX 1 - -#define LV_USE_DROPDOWN 0 /*Requires: lv_label*/ - -#define LV_USE_IMG 1 /*Requires: lv_label*/ - -#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 texts*/ -#endif +#define LV_USE_ARCLABEL 0 -#define LV_USE_LINE 0 - -#define LV_USE_ROLLER 1 /*Requires: lv_label*/ -#if LV_USE_ROLLER - #define LV_ROLLER_INF_PAGES 7 /*Number of extra "pages" when the roller is infinite*/ -#endif - -#define LV_USE_SLIDER 0 /*Requires: lv_bar*/ - -#define LV_USE_SWITCH 0 - -#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_TABLE 0 +#define LV_USE_BAR 0 -/*================== - * EXTRA COMPONENTS - *==================*/ +#define LV_USE_BUTTON 1 -/*----------- - * Widgets - *----------*/ -#define LV_USE_ANIMIMG 0 +#define LV_USE_BUTTONMATRIX 0 #define LV_USE_CALENDAR 0 #if LV_USE_CALENDAR @@ -532,29 +745,51 @@ #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 0 -#define LV_USE_COLORWHEEL 0 +#define LV_USE_CHECKBOX 1 + +#define LV_USE_DROPDOWN 0 /**< Requires: lv_label */ + +#define LV_USE_IMAGE 1 /**< Requires: lv_label */ -#define LV_USE_IMGBTN 0 +#define LV_USE_IMAGEBUTTON 1 #define LV_USE_KEYBOARD 0 -#define LV_USE_LED 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 1 + +#define LV_USE_LINE 0 #define LV_USE_LIST 0 -#define LV_USE_MENU 1 +#define LV_USE_LOTTIE 0 /**< Requires: lv_canvas, thorvg */ -#define LV_USE_METER 0 +#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 1 #if LV_USE_SPAN - /*A line text can contain maximum num of span descriptor */ + /** A line of text can contain this maximum number of span descriptors. */ #define LV_SPAN_SNIPPET_STACK_SIZE 64 #endif @@ -562,223 +797,679 @@ #define LV_USE_SPINNER 0 +#define LV_USE_SWITCH 0 + +#define LV_USE_TABLE 0 + #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 0 -#define LV_USE_WIN 0 +#define LV_USE_WIN 0 -/*----------- - * Themes - *----------*/ +#define LV_USE_3DTEXTURE 0 -/*A simple, impressive and very complete theme*/ +/*================== + * THEMES + *==================*/ +/* Documentation for themes can be found here: https://docs.lvgl.io/master/details/common-widget-features/styles/styles.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*/ + /** 0: Light mode; 1: Dark mode */ #define LV_THEME_DEFAULT_DARK 0 - /*1: Enable grow on press*/ + /** 1: Enable grow on press */ #define LV_THEME_DEFAULT_GROW 1 - /*Default transition time in [ms]*/ + /** 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_BASIC 1 +/** 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*/ +/** A theme designed for monochrome displays */ #define LV_USE_THEME_MONO 1 -/*----------- - * Layouts - *----------*/ +/*================== + * 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.*/ +/** A layout similar to Flexbox in CSS. */ #define LV_USE_FLEX 1 -/*A layout similar to Grid in CSS.*/ +/** A layout similar to Grid in CSS. */ #define LV_USE_GRID 1 -/*--------------------- - * 3rd party libraries - *--------------------*/ +/*==================== + * 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 */ +/* File system interfaces for common APIs */ -/*API for fopen, fread, etc*/ +/** 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 cased letter on which the drive will accessible (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()*/ + #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*/ +/** 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 cased letter on which the drive will accessible (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()*/ + #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*/ +/** 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 cased letter on which the drive will accessible (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()*/ + #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*/ +/** 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 cased letter on which the drive will accessible (e.g. 'A')*/ - #define LV_FS_FATFS_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ + #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 LittleFS (library needs to be added separately). Uses lfs_file_open, lfs_file_read, etc*/ +/** 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 cased letter on which the drive will accessible (e.g. 'A')*/ - #define LV_FS_LITTLEFS_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ + #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 + +#define LV_USE_FS_FROGFS 0 +#if LV_USE_FS_FROGFS + #define LV_FS_FROGFS_LETTER '\0' #endif -/*PNG decoder library*/ -#define LV_USE_PNG 0 +/** LODEPNG decoder library */ +#define LV_USE_LODEPNG 0 -/*BMP decoder library*/ +/** 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_SJPG 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*/ +/** GIF decoder library */ #define LV_USE_GIF 0 +#if LV_USE_GIF + /** GIF decoder accelerate */ + #define LV_GIF_CACHE_DECODE_DATA 0 +#endif + +/** GStreamer library */ +#define LV_USE_GSTREAMER 0 + +/** Decode bin images to RAM */ +#define LV_BIN_DECODER_RAM_LOAD 0 -/*QR code library*/ +/** RLE decompress library */ +#define LV_USE_RLE 0 + +/** QR code library */ #define LV_USE_QRCODE 0 -/*FreeType library*/ +/** Barcode code library */ +#define LV_USE_BARCODE 0 + +/** FreeType library */ #define LV_USE_FREETYPE 0 #if LV_USE_FREETYPE - /*Memory used by FreeType to cache characters [bytes] (-1: no caching)*/ - #define LV_FREETYPE_CACHE_SIZE (16 * 1024) - #if LV_FREETYPE_CACHE_SIZE >= 0 - /* 1: bitmap cache use the sbit cache, 0:bitmap cache use the image cache. */ - /* sbit cache:it is much more memory efficient for small bitmaps(font size < 256) */ - /* if font size >= 256, must be configured as image cache */ - #define LV_FREETYPE_SBIT_CACHE 0 - /* Maximum number of opened FT_Face/FT_Size objects managed by this cache instance. */ - /* (0:use system defaults) */ - #define LV_FREETYPE_CACHE_FT_FACES 0 - #define LV_FREETYPE_CACHE_FT_SIZES 0 - #endif + /** 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 -/*Tiny TTF library*/ +/** Built-in TTF decoder */ #define LV_USE_TINY_TTF 0 #if LV_USE_TINY_TTF - /*Load TTF data from files*/ + /* Enable loading TTF data from files */ #define LV_TINY_TTF_FILE_SUPPORT 0 + #define LV_TINY_TTF_CACHE_GLYPH_CNT 128 + #define LV_TINY_TTF_CACHE_KERNING_CNT 256 #endif -/*Rlottie library*/ +/** Rlottie library */ #define LV_USE_RLOTTIE 0 -/*FFmpeg library for image decoding and playing videos - *Supports all major image formats so do not enable other image decoder with it*/ +/** Requires `LV_USE_3DTEXTURE = 1` */ +#define LV_USE_GLTF 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. + * Requires LV_USE_VECTOR_GRAPHIC */ +#define LV_USE_THORVG_INTERNAL 0 + +/** Enable ThorVG by assuming that its installed and linked to the project + * Requires LV_USE_VECTOR_GRAPHIC */ +#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*/ + /** 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 - *----------*/ +/*================== + * 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*/ +/** 1: Enable API to take snapshot for object */ #define LV_USE_SNAPSHOT 0 -/*1: Enable Monkey test*/ +/** 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: Enable usage of lv_os_get_proc_idle_percent.*/ + #define LV_SYSMON_PROC_IDLE_AVAILABLE 0 + #if LV_SYSMON_PROC_IDLE_AVAILABLE + /** Get the applications idle percentage. + * - Requires `LV_USE_OS == LV_OS_PTHREAD` */ + #define LV_SYSMON_GET_PROC_IDLE lv_os_get_proc_idle_percent + #endif + + /** 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 + #define LV_USE_PROFILER_BUILTIN_POSIX 0 /**< Enable POSIX profiler port */ + #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*/ +/** 1: Enable grid navigation */ #define LV_USE_GRIDNAV 0 -/*1: Enable lv_obj fragment*/ +/** 1: Enable `lv_obj` fragment logic */ #define LV_USE_FRAGMENT 0 -/*1: Support using images as font in label or span widgets */ +/** 1: Support using images as font in label or span widgets */ #define LV_USE_IMGFONT 0 -/*1: Enable a published subscriber based messaging system */ -#define LV_USE_MSG 0 +/** 1: Enable an observer pattern implementation */ +#define LV_USE_OBSERVER 1 -/*1: Enable Pinyin input method*/ -/*Requires: lv_keyboard*/ +/** 1: Enable Pinyin input method + * - Requires: lv_keyboard */ #define LV_USE_IME_PINYIN 0 #if LV_USE_IME_PINYIN - /*1: Use default thesaurus*/ - /*If you do not use the default thesaurus, be sure to use `lv_ime_pinyin` after setting the thesauruss*/ + /** 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 the maximum number of candidate panels that can be displayed*/ - /*This needs to be adjusted according to the size of the screen*/ + /** 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)*/ + /** 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 /*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 lodepng 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 text translation support */ +#define LV_USE_TRANSLATION 0 + +/*1: Enable color filter style*/ +#define LV_USE_COLOR_FILTER 0 + /*================== -* EXAMPLES -*==================*/ + * 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 -/*Enable the examples to be built with the library*/ -#define LV_BUILD_EXAMPLES 0 +/** 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 -/*=================== - * DEMO USAGE - ====================*/ +/** 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*/ +#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 + + /** Driver for /dev/mouse */ + #define LV_USE_NUTTX_MOUSE 0 + + /** Mouse movement step (pixels) */ + #define LV_USE_NUTTX_MOUSE_MOVE_STEP 1 + + /*NuttX trace file and its path*/ + #define LV_USE_NUTTX_TRACE_FILE 0 + #if LV_USE_NUTTX_TRACE_FILE + #define LV_NUTTX_TRACE_FILE_PATH "/data/lvgl-trace.log" + #endif + +#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_USE_LINUX_DRM_GBM_BUFFERS 0 + + #define LV_LINUX_DRM_USE_EGL 0 +#endif + +/** Interface for TFT_eSPI */ +#define LV_USE_TFT_ESPI 0 + +/** Interface for Lovyan_GFX */ +#define LV_USE_LOVYAN_GFX 0 + +#if LV_USE_LOVYAN_GFX + #define LV_LGFX_USER_INCLUDE "lv_lgfx_user.hpp" + +#endif /*LV_USE_LOVYAN_GFX*/ + +/** Driver for evdev input devices */ +#define LV_USE_EVDEV 0 -/*Show some widget. It might be required to increase `LV_MEM_SIZE` */ -#define LV_USE_DEMO_WIDGETS 0 -#if LV_USE_DEMO_WIDGETS -#define LV_DEMO_WIDGETS_SLIDESHOW 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 +#define LV_USE_NV3007 0 + +#if (LV_USE_ST7735 | LV_USE_ST7789 | LV_USE_ST7796 | LV_USE_ILI9341 | LV_USE_NV3007) + #define LV_USE_GENERIC_MIPI 1 +#else + #define LV_USE_GENERIC_MIPI 0 #endif -/*Demonstrate the usage of encoder and keyboard*/ -#define LV_USE_DEMO_KEYPAD_AND_ENCODER 0 +/** Driver for Renesas GLCD */ +#define LV_USE_RENESAS_GLCDC 0 -/*Benchmark your system*/ -#define LV_USE_DEMO_BENCHMARK 0 -#if LV_USE_DEMO_BENCHMARK -/*Use RGB565A8 images with 16 bit color depth instead of ARGB8565*/ -#define LV_DEMO_BENCHMARK_RGB565A8 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 -/*Stress test for LVGL*/ -#define LV_USE_DEMO_STRESS 0 +/** Driver for NXP ELCDIF */ +#define LV_USE_NXP_ELCDIF 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 +/** 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 a generic OpenGL driver that can be used to embed in other applications or used with GLFW/EGL */ +#define LV_USE_OPENGLES 0 +#if LV_USE_OPENGLES + #define LV_USE_OPENGLES_DEBUG 1 /**< Enable or disable debug for opengles */ #endif +/** Use GLFW to open window on PC and handle mouse and keyboard. Requires*/ +#define LV_USE_GLFW 0 + + +/** 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 1 + +/** Build the demos */ +#define LV_BUILD_DEMOS 1 + +/*=================== + * 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 + + /** GLTF demo */ + #define LV_USE_DEMO_GLTF 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"*/ +#endif /*End of "Content enable"*/ \ No newline at end of file diff --git a/Weather/platformio.ini b/Weather/platformio.ini index 9a5c326..bb022f0 100644 --- a/Weather/platformio.ini +++ b/Weather/platformio.ini @@ -28,10 +28,10 @@ platform_packages = platformio/framework-arduinoespressif32 build_flags = -I./include -D${PIOENV} - -D LV_CONF_PATH=lv_conf.h + -D LV_CONF_PATH=\"lv_conf.h\" lib_deps = - lvgl/lvgl@8.3.11 + lvgl/lvgl@^9.4.0 bblanchon/ArduinoJson@^7.4.2 bitbank2/PNGdec@^1.1.6 lovyan03/LovyanGFX@^1.2.7 diff --git a/Weather/src/UI/ui.c b/Weather/src/UI/ui.c index 51b3fb9..8ab0c47 100644 --- a/Weather/src/UI/ui.c +++ b/Weather/src/UI/ui.c @@ -1,7 +1,7 @@ // This file was generated by SquareLine Studio // SquareLine Studio version: SquareLine Studio 1.4.1 -// LVGL version: 8.3.11 // Project name: SquareLine_Project +// LVGL version: 9.1.0 #include "ui.h" #include "ui_helpers.h" @@ -47,9 +47,6 @@ lv_obj_t * ui____initial_actions0; #if LV_COLOR_DEPTH != 16 #error "LV_COLOR_DEPTH should be 16bit to match SquareLine Studio's settings" #endif -#if LV_COLOR_16_SWAP !=0 - #error "LV_COLOR_16_SWAP should be 0 to match SquareLine Studio's settings" -#endif ///////////////////// ANIMATIONS //////////////////// @@ -59,11 +56,11 @@ lv_obj_t * ui____initial_actions0; void ui_init(void) { - lv_disp_t * dispp = lv_disp_get_default(); + lv_disp_t * dispp = lv_display_get_default(); lv_theme_t * theme = lv_theme_default_init(dispp, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED), false, LV_FONT_DEFAULT); lv_disp_set_theme(dispp, theme); ui_Screen1_screen_init(); ui____initial_actions0 = lv_obj_create(NULL); lv_disp_load_scr(ui_Screen1); -} +} \ No newline at end of file diff --git a/Weather/src/UI/ui.h b/Weather/src/UI/ui.h index 235ded9..e59d722 100644 --- a/Weather/src/UI/ui.h +++ b/Weather/src/UI/ui.h @@ -1,15 +1,11 @@ // This file was generated by SquareLine Studio // SquareLine Studio version: SquareLine Studio 1.4.1 -// LVGL version: 8.3.11 // Project name: SquareLine_Project +// LVGL version: 9.1.0 #ifndef _SQUARELINE_PROJECT_UI_H #define _SQUARELINE_PROJECT_UI_H -#ifdef __cplusplus -extern "C" { -#endif - #if defined __has_include #if __has_include("lvgl.h") #include "lvgl.h" @@ -64,8 +60,4 @@ extern void onDayLightPressed(bool pressed); void ui_init(void); -#ifdef __cplusplus -} /*extern "C"*/ -#endif - -#endif +#endif \ No newline at end of file diff --git a/Weather/src/UI/ui_Screen1.c b/Weather/src/UI/ui_Screen1.c index 5209cd2..7b6ed6e 100644 --- a/Weather/src/UI/ui_Screen1.c +++ b/Weather/src/UI/ui_Screen1.c @@ -1,9 +1,10 @@ // This file was generated by SquareLine Studio // SquareLine Studio version: SquareLine Studio 1.4.1 -// LVGL version: 8.3.11 // Project name: SquareLine_Project +// LVGL version: 9.1.0 #include "ui.h" +#include #include "../include/configuration.h" static void scroll_begin_event(lv_event_t* e) @@ -11,7 +12,7 @@ static void scroll_begin_event(lv_event_t* e) /*Disable the scroll animations. Triggered when a tab button is clicked */ if (lv_event_get_code(e) == LV_EVENT_SCROLL_BEGIN) { lv_anim_t* a = (lv_anim_t*)lv_event_get_param(e); - if (a) a->time = 0; + if (a) a->act_time = 0; } } @@ -19,7 +20,7 @@ static void scroll_begin_event(lv_event_t* e) void event_handler(lv_event_t * e) { lv_event_code_t code = lv_event_get_code(e); - lv_obj_t * target = lv_event_get_target(e); + lv_obj_t * target = (lv_obj_t *)lv_event_get_target(e); if(code == LV_EVENT_VALUE_CHANGED) { if (target == ui_DayLight) { @@ -31,27 +32,28 @@ void event_handler(lv_event_t * e) void ui_Screen1_screen_init(void) { ui_Screen1 = lv_obj_create(NULL); - lv_obj_clear_flag(ui_Screen1, LV_OBJ_FLAG_SCROLLABLE); /// Flags + lv_obj_remove_flag(ui_Screen1, LV_OBJ_FLAG_SCROLLABLE); /// Flags lv_obj_set_style_bg_color(ui_Screen1, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); lv_obj_set_style_bg_opa(ui_Screen1, 255, LV_PART_MAIN | LV_STATE_DEFAULT); - ui_TabView1 = lv_tabview_create(ui_Screen1, LV_DIR_TOP, 50); + ui_TabView1 = lv_tabview_create(ui_Screen1); lv_obj_add_event_cb(lv_tabview_get_content(ui_TabView1), scroll_begin_event,LV_EVENT_SCROLL_BEGIN, NULL); lv_obj_clear_flag(lv_tabview_get_content(ui_TabView1), LV_OBJ_FLAG_SCROLLABLE); + lv_tabview_set_tab_bar_size(ui_TabView1, 50); lv_obj_set_width(ui_TabView1, 800); lv_obj_set_height(ui_TabView1, 480); lv_obj_set_align(ui_TabView1, LV_ALIGN_CENTER); - lv_obj_clear_flag(ui_TabView1, LV_OBJ_FLAG_SCROLLABLE); /// Flags + lv_obj_remove_flag(ui_TabView1, LV_OBJ_FLAG_SCROLLABLE); /// Flags lv_obj_set_style_bg_color(ui_TabView1, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); lv_obj_set_style_bg_opa(ui_TabView1, 255, LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_bg_color(lv_tabview_get_tab_btns(ui_TabView1), lv_color_hex(0x424242), + lv_obj_set_style_bg_color(lv_tabview_get_tab_bar(ui_TabView1), lv_color_hex(0x424242), LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_bg_opa(lv_tabview_get_tab_btns(ui_TabView1), 255, LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_bg_opa(lv_tabview_get_tab_bar(ui_TabView1), 255, LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_text_color(lv_tabview_get_tab_btns(ui_TabView1), lv_color_hex(0xFFFFFF), + lv_obj_set_style_text_color(lv_tabview_get_tab_bar(ui_TabView1), lv_color_hex(0xFFFFFF), LV_PART_ITEMS | LV_STATE_DEFAULT); lv_obj_set_style_text_opa(lv_tabview_get_tab_btns(ui_TabView1), 255, LV_PART_ITEMS | LV_STATE_DEFAULT); lv_obj_set_style_text_font(lv_tabview_get_tab_btns(ui_TabView1), &lv_font_arial_18, @@ -72,7 +74,8 @@ void ui_Screen1_screen_init(void) lv_obj_set_align(ui_Container1, LV_ALIGN_CENTER); lv_obj_set_flex_flow(ui_Container1, LV_FLEX_FLOW_COLUMN); lv_obj_set_flex_align(ui_Container1, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); - lv_obj_clear_flag(ui_Container1, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_SCROLLABLE); /// Flags + lv_obj_remove_flag(ui_Container1, LV_OBJ_FLAG_CLICKABLE); + lv_obj_remove_flag(ui_Container1, LV_OBJ_FLAG_SCROLLABLE); lv_obj_set_style_pad_row(ui_Container1, 15, LV_PART_MAIN | LV_STATE_DEFAULT); lv_obj_set_style_pad_column(ui_Container1, 0, LV_PART_MAIN | LV_STATE_DEFAULT); @@ -104,7 +107,7 @@ void ui_Screen1_screen_init(void) lv_obj_set_x(ui_Panel1, 0); lv_obj_set_y(ui_Panel1, -8); lv_obj_set_align(ui_Panel1, LV_ALIGN_CENTER); - lv_obj_clear_flag(ui_Panel1, LV_OBJ_FLAG_SCROLLABLE); /// Flags + lv_obj_remove_flag(ui_Panel1, LV_OBJ_FLAG_SCROLLABLE); /// Flags ui_Label3 = lv_label_create(ui_Container1); lv_obj_set_width(ui_Label3, LV_SIZE_CONTENT); /// 1 @@ -193,7 +196,8 @@ void ui_Screen1_screen_init(void) lv_obj_set_align(ui_Container2, LV_ALIGN_CENTER); lv_obj_set_flex_flow(ui_Container2, LV_FLEX_FLOW_COLUMN); lv_obj_set_flex_align(ui_Container2, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); - lv_obj_clear_flag(ui_Container2, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_SCROLLABLE); /// Flags + lv_obj_remove_flag(ui_Container2, LV_OBJ_FLAG_CLICKABLE); + lv_obj_remove_flag(ui_Container2, LV_OBJ_FLAG_SCROLLABLE); lv_obj_set_style_pad_row(ui_Container2, 15, LV_PART_MAIN | LV_STATE_DEFAULT); lv_obj_set_style_pad_column(ui_Container2, 0, LV_PART_MAIN | LV_STATE_DEFAULT); @@ -223,7 +227,7 @@ void ui_Screen1_screen_init(void) lv_obj_set_height(ui_Panel3, 1); lv_obj_set_width(ui_Panel3, lv_pct(90)); lv_obj_set_align(ui_Panel3, LV_ALIGN_CENTER); - lv_obj_clear_flag(ui_Panel3, LV_OBJ_FLAG_SCROLLABLE); /// Flags + lv_obj_remove_flag(ui_Panel3, LV_OBJ_FLAG_SCROLLABLE); /// Flags ui_Pressure = lv_label_create(ui_Container2); lv_obj_set_width(ui_Pressure, LV_SIZE_CONTENT); /// 1 @@ -251,7 +255,7 @@ void ui_Screen1_screen_init(void) lv_obj_set_height(ui_Panel2, 1); lv_obj_set_width(ui_Panel2, lv_pct(90)); lv_obj_set_align(ui_Panel2, LV_ALIGN_CENTER); - lv_obj_clear_flag(ui_Panel2, LV_OBJ_FLAG_SCROLLABLE); /// Flags + lv_obj_remove_flag(ui_Panel2, LV_OBJ_FLAG_SCROLLABLE); /// Flags ui_Label2 = lv_label_create(ui_Container2); lv_obj_set_width(ui_Label2, LV_SIZE_CONTENT); /// 1 @@ -289,14 +293,14 @@ void ui_Screen1_screen_init(void) lv_obj_set_style_text_opa(ui_ValueWindDirection, 255, LV_PART_MAIN | LV_STATE_DEFAULT); lv_obj_set_style_text_font(ui_ValueWindDirection, &lv_font_arial_20, LV_PART_MAIN | LV_STATE_DEFAULT); - ui_Image1 = lv_img_create(ui_TabPageWeather); + ui_Image1 = lv_image_create(ui_TabPageWeather); lv_obj_set_width(ui_Image1, LV_SIZE_CONTENT); /// 1 lv_obj_set_height(ui_Image1, LV_SIZE_CONTENT); /// 1 lv_obj_set_x(ui_Image1, 0); lv_obj_set_y(ui_Image1, 14); lv_obj_set_align(ui_Image1, LV_ALIGN_CENTER); lv_obj_add_flag(ui_Image1, LV_OBJ_FLAG_ADV_HITTEST); /// Flags - lv_obj_clear_flag(ui_Image1, LV_OBJ_FLAG_SCROLLABLE); /// Flags + lv_obj_remove_flag(ui_Image1, LV_OBJ_FLAG_SCROLLABLE); /// Flags ui_ValueDate = lv_label_create(ui_TabPageWeather); lv_obj_set_width(ui_ValueDate, LV_SIZE_CONTENT); /// 1 @@ -360,4 +364,4 @@ void ui_Screen1_screen_init(void) lv_obj_add_event_cb(ui_DayLight, event_handler, LV_EVENT_ALL, NULL); lv_obj_add_state(ui_DayLight, LV_STATE_DEFAULT); -} +} \ No newline at end of file diff --git a/Weather/src/UI/ui_helpers.c b/Weather/src/UI/ui_helpers.c index df151fc..4b01058 100644 --- a/Weather/src/UI/ui_helpers.c +++ b/Weather/src/UI/ui_helpers.c @@ -1,7 +1,7 @@ // This file was generated by SquareLine Studio // SquareLine Studio version: SquareLine Studio 1.4.1 -// LVGL version: 8.3.11 // Project name: SquareLine_Project +// LVGL version: 9.1.0 #include "ui_helpers.h" @@ -27,7 +27,7 @@ void _ui_dropdown_set_property(lv_obj_t * target, int id, int val) void _ui_image_set_property(lv_obj_t * target, int id, uint8_t * val) { - if(id == _UI_IMAGE_PROPERTY_IMAGE) lv_img_set_src(target, val); + if(id == _UI_IMAGE_PROPERTY_IMAGE) lv_image_set_src(target, val); } void _ui_label_set_property(lv_obj_t * target, int id, const char * val) @@ -49,17 +49,18 @@ void _ui_slider_set_property(lv_obj_t * target, int id, int val) } -void _ui_screen_change(lv_obj_t ** target, lv_scr_load_anim_t fademode, int spd, int delay, void (*target_init)(void)) +void _ui_screen_change(lv_obj_t ** target, lv_screen_load_anim_t fademode, int spd, int delay, + void (*target_init)(void)) { if(*target == NULL) target_init(); - lv_scr_load_anim(*target, fademode, spd, delay, false); + lv_screen_load_anim(*target, fademode, spd, delay, false); } void _ui_screen_delete(lv_obj_t ** target) { if(*target == NULL) { - lv_obj_del(*target); + lv_obj_delete(*target); target = NULL; } } @@ -68,7 +69,7 @@ void _ui_arc_increment(lv_obj_t * target, int val) { int old = lv_arc_get_value(target); lv_arc_set_value(target, old + val); - lv_event_send(target, LV_EVENT_VALUE_CHANGED, 0); + lv_obj_send_event(target, LV_EVENT_VALUE_CHANGED, 0); } void _ui_bar_increment(lv_obj_t * target, int val, int anm) @@ -81,7 +82,7 @@ void _ui_slider_increment(lv_obj_t * target, int val, int anm) { int old = lv_slider_get_value(target); lv_slider_set_value(target, old + val, anm); - lv_event_send(target, LV_EVENT_VALUE_CHANGED, 0); + lv_obj_send_event(target, LV_EVENT_VALUE_CHANGED, 0); } void _ui_keyboard_set_target(lv_obj_t * keyboard, lv_obj_t * textarea) @@ -89,23 +90,23 @@ void _ui_keyboard_set_target(lv_obj_t * keyboard, lv_obj_t * textarea) lv_keyboard_set_textarea(keyboard, textarea); } -void _ui_flag_modify(lv_obj_t * target, int32_t flag, int value) +void _ui_flag_modify(lv_obj_t * target, lv_obj_flag_t flag, int value) { if(value == _UI_MODIFY_FLAG_TOGGLE) { - if(lv_obj_has_flag(target, flag)) lv_obj_clear_flag(target, flag); + if(lv_obj_has_flag(target, flag)) lv_obj_remove_flag(target, flag); else lv_obj_add_flag(target, flag); } else if(value == _UI_MODIFY_FLAG_ADD) lv_obj_add_flag(target, flag); - else lv_obj_clear_flag(target, flag); + else lv_obj_remove_flag(target, flag); } -void _ui_state_modify(lv_obj_t * target, int32_t state, int value) +void _ui_state_modify(lv_obj_t * target, lv_state_t state, int value) { if(value == _UI_MODIFY_STATE_TOGGLE) { - if(lv_obj_has_state(target, state)) lv_obj_clear_state(target, state); + if(lv_obj_has_state(target, state)) lv_obj_remove_state(target, state); else lv_obj_add_state(target, state); } else if(value == _UI_MODIFY_STATE_ADD) lv_obj_add_state(target, state); - else lv_obj_clear_state(target, state); + else lv_obj_remove_state(target, state); } @@ -121,13 +122,10 @@ void _ui_textarea_move_cursor(lv_obj_t * target, int val) } void scr_unloaded_delete_cb(lv_event_t * e) - { - - lv_obj_t ** var = lv_event_get_user_data(e); - lv_obj_del(*var); - (*var) = NULL; - + lv_obj_t ** var = (lv_obj_t **) lv_event_get_user_data(e); + lv_obj_delete(*var); + *var = NULL; } void _ui_opacity_set(lv_obj_t * target, int val) @@ -137,7 +135,7 @@ void _ui_opacity_set(lv_obj_t * target, int val) void _ui_anim_callback_free_user_data(lv_anim_t * a) { - lv_mem_free(a->user_data); + lv_free(a->user_data); a->user_data = NULL; } @@ -196,7 +194,7 @@ void _ui_anim_callback_set_image_zoom(lv_anim_t * a, int32_t v) { ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; - lv_img_set_zoom(usr->target, v); + lv_image_set_scale(usr->target, v); } @@ -206,7 +204,7 @@ void _ui_anim_callback_set_image_angle(lv_anim_t * a, int32_t v) { ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; - lv_img_set_angle(usr->target, v); + lv_image_set_rotation(usr->target, v); } @@ -220,7 +218,7 @@ void _ui_anim_callback_set_image_frame(lv_anim_t * a, int32_t v) if(v < 0) v = 0; if(v >= usr->imgset_size) v = usr->imgset_size - 1; - lv_img_set_src(usr->target, usr->imgset[v]); + lv_image_set_src(usr->target, usr->imgset[v]); } int32_t _ui_anim_callback_get_x(lv_anim_t * a) @@ -268,7 +266,7 @@ int32_t _ui_anim_callback_get_opacity(lv_anim_t * a) { ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; - return lv_obj_get_style_opa(usr->target, 0); + return lv_obj_get_style_opa(usr->target, LV_PART_MAIN); } @@ -277,7 +275,7 @@ int32_t _ui_anim_callback_get_image_zoom(lv_anim_t * a) { ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; - return lv_img_get_zoom(usr->target); + return lv_image_get_scale(usr->target); } @@ -286,7 +284,7 @@ int32_t _ui_anim_callback_get_image_angle(lv_anim_t * a) { ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; - return lv_img_get_angle(usr->target); + return lv_image_get_rotation(usr->target); } @@ -332,7 +330,7 @@ void _ui_spinbox_step(lv_obj_t * target, int val) else lv_spinbox_decrement(target); - lv_event_send(target, LV_EVENT_VALUE_CHANGED, 0); + lv_obj_send_event(target, LV_EVENT_VALUE_CHANGED, 0); } void _ui_switch_theme(int val) @@ -342,6 +340,4 @@ void _ui_switch_theme(int val) #ifdef UI_THEME_ACTIVE ui_theme_set(val); #endif -} - - +} \ No newline at end of file diff --git a/Weather/src/UI/ui_helpers.h b/Weather/src/UI/ui_helpers.h index 7b00b78..443ebb8 100644 --- a/Weather/src/UI/ui_helpers.h +++ b/Weather/src/UI/ui_helpers.h @@ -1,15 +1,11 @@ // This file was generated by SquareLine Studio // SquareLine Studio version: SquareLine Studio 1.4.1 -// LVGL version: 8.3.11 // Project name: SquareLine_Project +// LVGL version: 9.1.0 #ifndef _SQUARELINE_PROJECT_UI_HELPERS_H #define _SQUARELINE_PROJECT_UI_HELPERS_H -#ifdef __cplusplus -extern "C" { -#endif - #include "ui.h" #define _UI_TEMPORARY_STRING_BUFFER_SIZE 32 @@ -40,7 +36,8 @@ void _ui_roller_set_property(lv_obj_t * target, int id, int val); #define _UI_SLIDER_PROPERTY_VALUE_WITH_ANIM 1 void _ui_slider_set_property(lv_obj_t * target, int id, int val); -void _ui_screen_change(lv_obj_t ** target, lv_scr_load_anim_t fademode, int spd, int delay, void (*target_init)(void)); +void _ui_screen_change(lv_obj_t ** target, lv_screen_load_anim_t fademode, int spd, int delay, + void (*target_init)(void)); void _ui_screen_delete(lv_obj_t ** target); @@ -77,7 +74,7 @@ void _ui_opacity_set(lv_obj_t * target, int val); /** Describes an animation*/ typedef struct _ui_anim_user_data_t { lv_obj_t * target; - lv_img_dsc_t ** imgset; + lv_image_dsc_t ** imgset; int32_t imgset_size; int32_t val; } ui_anim_user_data_t; @@ -139,10 +136,4 @@ void _ui_spinbox_step(lv_obj_t * target, int val) void _ui_switch_theme(int val) ; - - -#ifdef __cplusplus -} /*extern "C"*/ -#endif - -#endif +#endif \ No newline at end of file diff --git a/Weather/src/main.cpp b/Weather/src/main.cpp index 5490c5c..ae83ca0 100644 --- a/Weather/src/main.cpp +++ b/Weather/src/main.cpp @@ -49,9 +49,7 @@ static int val = 100; static uint32_t screenWidth; static uint32_t screenHeight; -static lv_disp_draw_buf_t draw_buf; static lv_color_t disp_draw_buf[800 * 480 / 10]; -static lv_disp_drv_t disp_drv; MyDebug *myDebug; MyClock *myClock; @@ -66,23 +64,28 @@ OpenWeather *openWeather; LGFX lcd; #include "touch.h" -/* Display flushing */ -void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p) +void my_disp_flush(lv_display_t * disp, const lv_area_t * area, uint8_t * px_map) { uint32_t w = (area->x2 - area->x1 + 1); - uint32_t h = (area->y2 - area->y1 + 1); - lcd.pushImageDMA(area->x1, area->y1, w, h,(lgfx::rgb565_t*)&color_p->full);// - lv_disp_flush_ready(disp); + uint32_t h = (area->y2 - area->y1 + 1); + // px_map είναι raw pixel map (here we assume LV_COLOR_DEPTH == 16 => RGB565) + // Cast to the type LGFX expects for pushImageDMA: + lcd.pushImageDMA(area->x1, area->y1, w, h, (lgfx::rgb565_t*)px_map); + + /* Tell LVGL we're done */ + lv_display_flush_ready(disp); } -void my_touchpad_read(lv_indev_drv_t *indev_driver, lv_indev_data_t *data) + +/* Input read callback — LVGL v9 signature */ +void my_touchpad_read(lv_indev_t * indev, lv_indev_data_t * data) { - if (touch_has_signal()) { - if (touch_touched()) { + if (touch_has_signal()) + { + if (touch_touched()) + { data->state = LV_INDEV_STATE_PR; - - /*Set the coordinates*/ data->point.x = touch_last_x; data->point.y = touch_last_y; #ifndef MODE_RELEASE @@ -90,11 +93,13 @@ void my_touchpad_read(lv_indev_drv_t *indev_driver, lv_indev_data_t *data) myDebug->println(DEBUG_LEVEL_DEBUG2, "Data y: %d", touch_last_y ); #endif } - else if (touch_released()) { + else if (touch_released()) + { data->state = LV_INDEV_STATE_REL; } } - else { + else + { data->state = LV_INDEV_STATE_REL; } delay(15); @@ -115,23 +120,22 @@ void configureDisplay() { screenWidth = lcd.width(); screenHeight = lcd.height(); - lv_disp_draw_buf_init(&draw_buf, disp_draw_buf, NULL, screenWidth * screenHeight / 10); - - /* Initialize the display */ - lv_disp_drv_init(&disp_drv); - /* Change the following line to your display resolution */ - disp_drv.hor_res = screenWidth; - disp_drv.ver_res = screenHeight; - disp_drv.flush_cb = my_disp_flush; - disp_drv.draw_buf = &draw_buf; - lv_disp_drv_register(&disp_drv); - - /* Initialize the (dummy) input device driver */ - static lv_indev_drv_t indev_drv; - lv_indev_drv_init(&indev_drv); - indev_drv.type = LV_INDEV_TYPE_POINTER; - indev_drv.read_cb = my_touchpad_read; - lv_indev_drv_register(&indev_drv); + lv_display_t * disp = lv_display_create(screenWidth, screenHeight); + + static lv_color_t *disp_draw_buf = (lv_color_t *)malloc(screenWidth * 10 * sizeof(lv_color_t)); + + lv_display_set_buffers(disp, + disp_draw_buf, + NULL, + screenWidth * 10 * sizeof(lv_color_t), + LV_DISPLAY_RENDER_MODE_PARTIAL); + + lv_display_set_flush_cb(disp, my_disp_flush); + + lv_indev_t * indev = lv_indev_create(); + lv_indev_set_type(indev, LV_INDEV_TYPE_POINTER); + lv_indev_set_read_cb(indev, my_touchpad_read); + #ifdef TFT_BL pinMode(TFT_BL, OUTPUT); digitalWrite(TFT_BL, HIGH); From c1ef3cb47a1b45c552cd75b0951d2673b3fbaabf Mon Sep 17 00:00:00 2001 From: Christos Themelis Date: Mon, 10 Nov 2025 22:11:31 +0200 Subject: [PATCH 2/5] wip --- Weather/src/UI/ui.h | 8 ++++++++ Weather/src/UI/ui_helpers.c | 1 + Weather/src/UI/ui_helpers.h | 19 +++++++++++++------ Weather/src/openWeather.cpp | 4 +--- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/Weather/src/UI/ui.h b/Weather/src/UI/ui.h index e59d722..c1996fe 100644 --- a/Weather/src/UI/ui.h +++ b/Weather/src/UI/ui.h @@ -6,6 +6,10 @@ #ifndef _SQUARELINE_PROJECT_UI_H #define _SQUARELINE_PROJECT_UI_H +#ifdef __cplusplus +extern "C" { +#endif + #if defined __has_include #if __has_include("lvgl.h") #include "lvgl.h" @@ -60,4 +64,8 @@ extern void onDayLightPressed(bool pressed); void ui_init(void); +#ifdef __cplusplus +} /*extern "C"*/ +#endif + #endif \ No newline at end of file diff --git a/Weather/src/UI/ui_helpers.c b/Weather/src/UI/ui_helpers.c index 4b01058..047acaf 100644 --- a/Weather/src/UI/ui_helpers.c +++ b/Weather/src/UI/ui_helpers.c @@ -3,6 +3,7 @@ // Project name: SquareLine_Project // LVGL version: 9.1.0 +#include "lvgl.h" #include "ui_helpers.h" void _ui_bar_set_property(lv_obj_t * target, int id, int val) diff --git a/Weather/src/UI/ui_helpers.h b/Weather/src/UI/ui_helpers.h index 443ebb8..4c92ae6 100644 --- a/Weather/src/UI/ui_helpers.h +++ b/Weather/src/UI/ui_helpers.h @@ -6,6 +6,11 @@ #ifndef _SQUARELINE_PROJECT_UI_HELPERS_H #define _SQUARELINE_PROJECT_UI_HELPERS_H +#ifdef __cplusplus +extern "C" { +#endif + +#include "lvgl.h" #include "ui.h" #define _UI_TEMPORARY_STRING_BUFFER_SIZE 32 @@ -52,12 +57,12 @@ void _ui_keyboard_set_target(lv_obj_t * keyboard, lv_obj_t * textarea); #define _UI_MODIFY_FLAG_ADD 0 #define _UI_MODIFY_FLAG_REMOVE 1 #define _UI_MODIFY_FLAG_TOGGLE 2 -void _ui_flag_modify(lv_obj_t * target, int32_t flag, int value); +void _ui_flag_modify(lv_obj_t * target, lv_obj_flag_t flag, int value); #define _UI_MODIFY_STATE_ADD 0 #define _UI_MODIFY_STATE_REMOVE 1 #define _UI_MODIFY_STATE_TOGGLE 2 -void _ui_state_modify(lv_obj_t * target, int32_t state, int value); +void _ui_state_modify(lv_obj_t * target, lv_state_t state, int value); #define UI_MOVE_CURSOR_UP 0 #define UI_MOVE_CURSOR_RIGHT 1 @@ -129,11 +134,13 @@ void _ui_slider_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * pref void _ui_checked_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * txt_on, const char * txt_off); -void _ui_spinbox_step(lv_obj_t * target, int val) -; +void _ui_spinbox_step(lv_obj_t * target, int val); -void _ui_switch_theme(int val) -; +void _ui_switch_theme(int val); + +#ifdef __cplusplus +} /*extern "C"*/ +#endif #endif \ No newline at end of file diff --git a/Weather/src/openWeather.cpp b/Weather/src/openWeather.cpp index b68ed89..e7c20e0 100644 --- a/Weather/src/openWeather.cpp +++ b/Weather/src/openWeather.cpp @@ -187,13 +187,11 @@ void OpenWeather::downloadImageToMemory(const char *url) { if (decodePngToRgb565(imageBuffer, bytesRead)) { int w = png.getWidth(); int h = png.getHeight(); - img_dsc.header.always_zero = 0; img_dsc.header.w = w; img_dsc.header.h = h; img_dsc.data_size = bytesRead; - img_dsc.header.cf = LV_IMG_CF_TRUE_COLOR; + img_dsc.header.cf = LV_COLOR_FORMAT_RGB565; img_dsc.data = (const uint8_t *)rgb565_buffer; - lv_img_set_src(ui_Image1, &img_dsc); } } From 97efd2006119ae3088aab203b7c0c01197dc4b25 Mon Sep 17 00:00:00 2001 From: Christos Themelis Date: Mon, 10 Nov 2025 22:33:24 +0200 Subject: [PATCH 3/5] Update main.cpp --- Weather/src/main.cpp | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/Weather/src/main.cpp b/Weather/src/main.cpp index ae83ca0..d92486e 100644 --- a/Weather/src/main.cpp +++ b/Weather/src/main.cpp @@ -64,12 +64,11 @@ OpenWeather *openWeather; LGFX lcd; #include "touch.h" -void my_disp_flush(lv_display_t * disp, const lv_area_t * area, uint8_t * px_map) +void my_disp_flush(lv_display_t * disp, const lv_area_t *area, uint8_t *px_map) { uint32_t w = (area->x2 - area->x1 + 1); uint32_t h = (area->y2 - area->y1 + 1); - // px_map είναι raw pixel map (here we assume LV_COLOR_DEPTH == 16 => RGB565) // Cast to the type LGFX expects for pushImageDMA: lcd.pushImageDMA(area->x1, area->y1, w, h, (lgfx::rgb565_t*)px_map); @@ -81,10 +80,8 @@ void my_disp_flush(lv_display_t * disp, const lv_area_t * area, uint8_t * px_map /* Input read callback — LVGL v9 signature */ void my_touchpad_read(lv_indev_t * indev, lv_indev_data_t * data) { - if (touch_has_signal()) - { - if (touch_touched()) - { + if (touch_has_signal()) { + if (touch_touched()) { data->state = LV_INDEV_STATE_PR; data->point.x = touch_last_x; data->point.y = touch_last_y; @@ -93,13 +90,10 @@ void my_touchpad_read(lv_indev_t * indev, lv_indev_data_t * data) myDebug->println(DEBUG_LEVEL_DEBUG2, "Data y: %d", touch_last_y ); #endif } - else if (touch_released()) - { + else if (touch_released()) { data->state = LV_INDEV_STATE_REL; } - } - else - { + } else { data->state = LV_INDEV_STATE_REL; } delay(15); From 963126b43e1fb18789e6bf340114a480e78b7614 Mon Sep 17 00:00:00 2001 From: Christos Themelis Date: Mon, 10 Nov 2025 22:57:49 +0200 Subject: [PATCH 4/5] wip --- Weather/src/main.cpp | 57 +++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/Weather/src/main.cpp b/Weather/src/main.cpp index d92486e..f0746ca 100644 --- a/Weather/src/main.cpp +++ b/Weather/src/main.cpp @@ -50,6 +50,8 @@ static int val = 100; static uint32_t screenWidth; static uint32_t screenHeight; static lv_color_t disp_draw_buf[800 * 480 / 10]; +static lv_display_t *disp; +static lv_indev_t *indev; MyDebug *myDebug; MyClock *myClock; @@ -64,39 +66,33 @@ OpenWeather *openWeather; LGFX lcd; #include "touch.h" -void my_disp_flush(lv_display_t * disp, const lv_area_t *area, uint8_t *px_map) +void my_disp_flush(lv_display_t *disp, const lv_area_t *area, uint8_t *color_p) { uint32_t w = (area->x2 - area->x1 + 1); uint32_t h = (area->y2 - area->y1 + 1); - // Cast to the type LGFX expects for pushImageDMA: - lcd.pushImageDMA(area->x1, area->y1, w, h, (lgfx::rgb565_t*)px_map); + lcd.pushImageDMA(area->x1, area->y1, w, h, (lgfx::rgb565_t*)color_p); - /* Tell LVGL we're done */ lv_display_flush_ready(disp); } - -/* Input read callback — LVGL v9 signature */ -void my_touchpad_read(lv_indev_t * indev, lv_indev_data_t * data) +void my_touchpad_read(lv_indev_t *indev, lv_indev_data_t *data) { if (touch_has_signal()) { - if (touch_touched()) { - data->state = LV_INDEV_STATE_PR; - data->point.x = touch_last_x; - data->point.y = touch_last_y; - #ifndef MODE_RELEASE - myDebug->println(DEBUG_LEVEL_DEBUG2, "Data x: %d", touch_last_x); - myDebug->println(DEBUG_LEVEL_DEBUG2, "Data y: %d", touch_last_y ); - #endif - } - else if (touch_released()) { - data->state = LV_INDEV_STATE_REL; - } + if (touch_touched()) { + data->state = LV_INDEV_STATE_PR; + data->point.x = touch_last_x; + data->point.y = touch_last_y; + #ifndef MODE_RELEASE + myDebug->println(DEBUG_LEVEL_DEBUG2, "Data x: %d", touch_last_x); + myDebug->println(DEBUG_LEVEL_DEBUG2, "Data y: %d", touch_last_y ); + #endif + } else if (touch_released()) { + data->state = LV_INDEV_STATE_REL; + } } else { - data->state = LV_INDEV_STATE_REL; + data->state = LV_INDEV_STATE_REL; } - delay(15); } void initializeUI() { @@ -110,23 +106,24 @@ void initializeUI() { void configureDisplay() { myDebug->println(DEBUG_LEVEL_INFO, "Configuring display..."); - screenWidth = lcd.width(); screenHeight = lcd.height(); - lv_display_t * disp = lv_display_create(screenWidth, screenHeight); - - static lv_color_t *disp_draw_buf = (lv_color_t *)malloc(screenWidth * 10 * sizeof(lv_color_t)); + // Δημιουργία display + disp = lv_display_create(screenWidth, screenHeight); + // Buffer για partial render (1/10 της οθόνης) lv_display_set_buffers(disp, - disp_draw_buf, - NULL, - screenWidth * 10 * sizeof(lv_color_t), - LV_DISPLAY_RENDER_MODE_PARTIAL); + disp_draw_buf, + NULL, + sizeof(disp_draw_buf), + LV_DISPLAY_RENDER_MODE_PARTIAL); + // Flush callback lv_display_set_flush_cb(disp, my_disp_flush); - lv_indev_t * indev = lv_indev_create(); + // Touch input + indev = lv_indev_create(); lv_indev_set_type(indev, LV_INDEV_TYPE_POINTER); lv_indev_set_read_cb(indev, my_touchpad_read); From 35113ef89912c595fdf42fe2125bb1a7bac9500b Mon Sep 17 00:00:00 2001 From: Christos Themelis Date: Sat, 24 Jan 2026 15:17:49 +0200 Subject: [PATCH 5/5] setNightMode --- Weather/src/UI/ui_Screen1.c | 10 ++++++++++ Weather/src/main.cpp | 3 +-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Weather/src/UI/ui_Screen1.c b/Weather/src/UI/ui_Screen1.c index 825a857..e2a7136 100644 --- a/Weather/src/UI/ui_Screen1.c +++ b/Weather/src/UI/ui_Screen1.c @@ -365,3 +365,13 @@ void ui_Screen1_screen_init(void) lv_obj_add_state(ui_DayLight, LV_STATE_DEFAULT); } + +void setNightMode(bool night) { + + if (!ui_DimOverlay) return; + if (night) { + lv_obj_set_style_bg_opa(ui_DimOverlay, 192, 0); // 75% dark + } else { + lv_obj_set_style_bg_opa(ui_DimOverlay, 0, 0); // none + } +} diff --git a/Weather/src/main.cpp b/Weather/src/main.cpp index aa927a2..824e419 100644 --- a/Weather/src/main.cpp +++ b/Weather/src/main.cpp @@ -100,8 +100,7 @@ void initializeUI() { ui_init(); setNightMode(false); - uiManager = new UIManager(); - + uiManager = new UIManager(); } void configureDisplay() {