**New Features**
* Runtime font accessors and new symbol fonts for text, launcher, statusbar, and shared icons.
* Added font height base setting to device.properties
* Text fonts now have 3 sizes: small, default, large
**Improvements**
* Renamed `UiScale` to `UiDensity`
* Statusbar, toolbar and many UI components now compute heights and spacing from fonts/density.
* SSD1306 initialization sequence refined for more stable startup.
* Multiple image assets replaced by symbol-font rendering.
* Many layout improvements related to density, font scaling and icon scaling
* Updated folder name capitalization for newer style
* **New Features**
* Added Material Design symbol fonts and LVGL font aliases for launcher, status bar, and shared UI icons.
* **Style**
* Migrated app icons across the UI to the new symbol font system.
* Updated launcher button sizing, font styling, recoloring and icon text color for consistency.
* Default text/icon font macros set for consistent sizing across the UI.
* **Documentation**
* Updated third‑party notices to include Material Design Icons links.
Auto starts the web server in AP mode with generated SSID and Password.
For small devices.... or any i guess.
Hidden by default.
May need adjustments to suit even smaller screens than the waveshare GEEK.
And a few symbols for good measure. :)
* **Refactor**
* GPIO subsystem moved to a descriptor-based model for per-pin ownership and runtime pin management; many platform drivers now acquire/release descriptors.
* Device trees and drivers now use GPIO phandle-style pin specifications across all boards and all drivers.
* **Behavior**
* Device list now encodes per-device status (ok/disabled); boot will skip disabled devices accordingly.
* **Deprecation**
* Legacy GPIO HAL marked deprecated and replaced with descriptor-based interfaces.
* **Chores**
* Bindings and platform configs updated to the new GPIO pin-spec format.
* Updated runtime gating to enable LilyGO T-Deck specific apps and services
* New device compatibility and model-detection APIs
* Added a buffer-overflow error code and message
* Updated GitHub Actions checkout to v4
* Adjusted an LVGL-related library version
* Device config now emits a T-Deck workaround flag when applicable
* Removed internal developer comments and minor cleanups
* **DevicetreeCompiler**
* Binding properties now support default values.
* Compiler returns meaningful exit codes and reports errors more clearly.
* Stronger validation of device configurations with unified error handling.
* Added integration tests and a dedicated Devicetree test workflow.
* **Changes**
* Platform binding schemas updated: some fields made required, others gained explicit defaults.
* Many device-tree files simplified by removing unused/placeholder pin and transfer-size entries.
* **Documentation**
* Removed several outdated TODO items.
- Implement SPI devices in dts files for all devices
- Removed `tt::hal::spi` HAL and its configurations
- Fix for devicetree generator "boolean" support
- Remove unused custom locks in all `DisplayDevice` implementations
- Fixed some bugs with devices
- Updated XPT2046 driver
- Fix for `WifiEsp` deadlock
- Export a lot of new `math.h` symbols with `tt_init.cpp`
- Created `SpiDeviceLock` in `TactilityCore` as a wrapper for kernel SPI locking
- Improved `TactilityKernel` SPI driver.
- Add kernel support for SPI driver
- Add kernel support for UART driver
- Implemented ESP32 UART kernel driver
- Update existing UART-related code in Tactility to use new kernel driver
- Remove UART from tt::hal::Configuration
- Remove tt_hal_uart functionality but keep functions for now
- Update devicetrees for UART changes
- Kernel mutex and recursive mutex: improved locking API design
- Other kernel improvements
- Added device_exists_of_type() and device_find_by_name()
* Implement pagination for file entries in View class
* Add resolveDirentFromListIndex method and refactor entry handling in View class
* Fix current_start_index calculation in View::update to prevent out-of-bounds access
* **New Features**
* Added a full SDK integration test suite with a minimal sample app and automated multi-platform build/run flows.
* Added a new CLI build tool to orchestrate SDK download, build, packaging, and device install/run.
* **Documentation**
* Added typography design token suggestion to ideas.
* **Chores**
* Updated CI to run SDK integration prep and test steps.
* Adjusted build artifact paths, license mappings, and repository ignore rules (including .tactility).
* **New Features**
* Added public accessors for querying module/device start and ready state.
* **Refactor**
* Internal state moved to opaque internal objects; module/device/driver initializers now explicitly initialize internal pointers.
* Lifecycle handling updated to construct/destruct internal state and use accessors.
* **Tests**
* Tests updated to use public accessors and explicit construct/destruct lifecycle calls.
* **Chores**
* Test build/include paths and small metadata updated.
* **New Features**
* Phandle support for device-to-device property references.
* Recognition of #define-style declarations in device trees.
* Device nodes may include optional aliases alongside node names.
* **Improvements**
* Flatter, consistent device hierarchy processing for generation.
* Error and log messages now reference node names for clearer diagnostics.
* **Other**
* Added a static ESP32-based device tree and minor DTS comment updates.
* **New Features**
* Expanded public device and driver APIs (accessors, sync, lifecycle, binding) and a module construct+start helper.
* Added kernel symbol registry and new exported symbols (lvgl, C++ nothrow, I2S APIs, additional math funcs).
* **Refactor**
* Renamed device traversal APIs for consistency (device_for_each*).
* Moved inline helpers to explicit public declarations.
* **Chores**
* Replaced several shell release scripts with Python-based SDK release tooling.
* **Style**
* Header naming consistency fixes.
* **New Features**
* Centralized module management with global symbol resolution
* Level-aware logging with colored prefixes and millisecond timestamps
* **Breaking Changes**
* ModuleParent hierarchy and getModuleParent() removed
* Logging API and adapter model replaced; LogLevel-driven log_generic signature changed
* **Improvements**
* Unified, simplified module registration across build targets
* Tests updated to reflect new module lifecycle and global symbol resolution
* **Export more symbols:**
* Expanded standard library support with additional math functions (trigonometric, exponential, and rounding operations), string comparison, directory operations, and locale configuration
* Added C++ static initialization guard utilities to enhance object initialization support
* **New Features**
- Adds module symbol support and per-module symbol tables, including LVGL symbol exports moved into a dedicated table.
* **API**
- Adds symbol-resolution APIs and an accessor to enable dynamic lookup between modules.
* **Bug Fixes / Chores**
- Explicitly initializes module symbol pointers across device and platform modules to avoid uninitialized state.
* **Tests**
- Updates tests to account for symbol pointer initialization.
* **New Features**
* Added a standalone LVGL module and enabled LVGL support in the simulator for richer local UI testing.
* **Refactor**
* HAL and LVGL split into distinct modules; startup and device attach/detach flows reorganized for clearer lifecycle management.
* Public APIs tightened with clearer nullability/documentation.
* **Bug Fixes**
* More consistent LVGL start/stop and device attach/detach behavior for improved stability.
* **New Features**
* Added a HAL device module providing device enumeration, type queries and a HAL↔kernel bridge.
* **Improvements**
* Integrated HAL module into startup; standardized module names, includes and lifecycle logging; safer file append behavior; broader build support.
* **API Changes**
* Driver lifecycle now uses explicit add/remove semantics; C and HAL device type/lookup APIs clarified.
* **Chores**
* Added module README and Apache‑2.0 license; updated build configuration to include the new module.
* **Fixes**
* Updated tests and object file handling to behave correctly.
Standardised device module identifiers across all supported devices to use consistent naming conventions with lowercase alphanumeric and hyphen-separated formats.
* **New Features**
* Added a GPIO hardware abstraction layer for reading pin levels from applications.
* Applications can now query the number of available GPIO pins so they can adapt to different devices.
* **Chores**
* Integrations updated so GPIO capabilities are discoverable and exported to running applications.
* **New Features**
* Plugin-style modules for platforms and devices with start/stop lifecycle and a runtime-consumable device tree array.
* **Refactor**
* Consolidated initialization into a kernel/module startup flow.
* Generated devicetree artifacts moved to the build Generated directory.
* **Changes**
* Removed legacy no-op registration hooks and I2C lock/unlock wrappers.
* Driver ownership and private state moved to explicit module/owner model.
* Added ERROR_NOT_ALLOWED error code.
Devictree changes:
- Create DTS files for all remaining devices
- Update corresponding `devicetree.yaml`
- Remove `i2c` configuration from corresponding `tt::hal::Configuration`
Apps & HAL:
- Removed I2C Settings (we'll make a new one later after I rework that part of the HAL)
- Delete TactilityC GPIO and I2C functionality
- Delete Related SystemEvent types
- Refactor `tt::hal::i2c` to only use `struct Device*` wrapping
Scripting:
- Fix DevicetreeCompiler boolean parsing
- Create `build-all.py`
* **Documentation**
* Added new C coding style guide detailing naming conventions for files, directories, macros, constants, variables, functions, and type definitions with illustrative examples.
* Updated C++ coding style documentation with clarifications on C naming conventions and header directory organization patterns.
* **Refactor**
* Updated header include paths throughout the codebase to use lowercase naming conventions consistently.
Adds screensavers in addition to the backlight idle off.
More info in screensavers.md
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit
* **New Features**
* Added a screensaver system with multiple styles (Bouncing Balls, Mystify, Matrix Rain) and a common screensaver interface; auto-starts after inactivity, dismisses on interaction, and supports auto-off/backlight behavior.
* New Display setting and UI dropdown to choose and persist the screensaver.
* **Documentation**
* Added comprehensive screensaver docs covering usage, extension, and configuration.
* **Chores**
* Registered the display-idle service.
* **Bug Fixes**
* Updated LVGL API calls to match renamed functions.
<sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub>
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
* **New Features**
* Time and delay utilities added (ticks, ms, µs); SD card now uses an expansion-header CS pin; HTTP downloads warn when run on the GUI task and yield to avoid blocking.
* **Bug Fixes / Reliability**
* Many hard-crash paths converted to guarded checks to reduce abrupt termination and improve stability.
* **Tests**
* Unit tests added to validate time and delay accuracy.
* **Chores**
* License header and build/macro updates.
Replace LGPL from past commit with Apache License 2.0 for the newly created projects:
- in Platforms/*
- TactilityKernel
Add license headers to source code in:
- in Platforms/*
- TactilityKernel
- TactilityFreeRtos
Updated LICENSE.md