Files
tactility/Modules/lvgl-module/README.md
T
Ken Van Hoeylandt db48dfe812 Fixes and improvements (#620)
- Standardized keyboard input using Unicode-based key codes across supported devices and the simulator. Keyboards don't emit `LV_KEY_*` anymore.
- Refactored lilygo encoder driver into a reusable GPIO rotary encoder driver (see `Drivers/gpio-encoder-module/`). Added more features to the config file.
- Improved LVGL keyboard device management, including duplicate prevention and reliable reconnects.
- LVGL file mutex now registers with lvgl start/stop
- Improved LVGL startup/shutdown stability and memory allocation reliability.
- Increased simulator LVGL memory capacity and improved USB device-class handling.
2026-08-23 17:21:16 +02:00

68 lines
2.6 KiB
Markdown

# lvgl-module
This module manages the lifecycle of the [LVGL](https://lvgl.io/) library within the Tactility ecosystem.
## What the library does
The `lvgl-module` provides:
- **Lifecycle Management**: Handles initialization and termination of the LVGL library.
- **Task Management**: Manages the LVGL main loop task.
- **Thread-Safety**: Provides mutex-based locking mechanisms (`lvgl_lock`, `lvgl_unlock`) to ensure safe access to LVGL APIs from multiple tasks.
- **Font Access**: Provides a unified interface to access pre-configured text and icon fonts.
## Different types of fonts
The module supports two main categories of fonts:
### Text Fonts
Standard text rendering uses the **Montserrat** font. Three sizes are pre-configured:
- `FONT_SIZE_SMALL`
- `FONT_SIZE_DEFAULT`
- `FONT_SIZE_LARGE`
### Icon Fonts
Icons are provided by the **Material Symbols** font, divided into three usage-specific sets:
- **Statusbar Icons**: Optimized for the system status bar.
- **Launcher Icons**: Sized for application launchers.
- **Shared Icons**: General purpose icons used across the system.
## How to update the fonts
Font sizes and symbols are configurable:
- **On ESP32 (IDF)**: Sizes can be updated via `menuconfig` or by editing `sdkconfig`. Look for `CONFIG_TT_LVGL_FONT_SIZE_*` and `CONFIG_TT_LVGL_*_ICON_SIZE` parameters.
- **On Simulator/POSIX**: Default sizes are defined in `Modules/lvgl-module/CMakeLists.txt`.
If you change an icon font size, ensure that a corresponding C file exists in `source-fonts/` (e.g., `material_symbols_shared_24.c`). These files are generated from TTF/OTF fonts using the LVGL font converter.
## Custom memory allocator
LVGL's malloc/realloc/free can be routed through a custom backend instead of its built-in pool or
plain `malloc`. Three things are required:
**1. Select the backend.** On ESP32, via Kconfig (`sdkconfig`):
```sdkconfig
CONFIG_LV_USE_CUSTOM_MALLOC=y
```
On Simulator/POSIX, ESP-IDF's Kconfig doesn't apply - select it in `lv_conf.h` instead:
```c
#define LV_USE_STDLIB_MALLOC LV_STDLIB_CUSTOM
```
**2. Force the module into the link.** LVGL's own init code calls back into the functions above
a reverse reference a normal single-pass static-archive link can't resolve on its own:
```cmake
tactility_add_module(lvgl-module
...
WHOLE_ARCHIVE
)
```
Without `WHOLE_ARCHIVE`, or without step 1 selecting the custom backend, ESP-IDF's LVGL component
compiles its own allocator using these same symbol names - whichever one the linker happens to
pull in first silently wins, with no error and no guarantee it's the intended one.
## License
This module is licensed under the [Apache v2.0](LICENSE-Apache-2.0.md) license.