* **New Features**
* Added App Hub browsing with All, Installed, and Updates filters, plus options to install, remove, or update apps.
* Added an installation activity indicator in the status bar.
* Added a mesh command-line app for checking status and managing mesh settings and channels.
* Radio region settings now persist across restarts and are applied to radio devices.
* Added audio codec support for the LilyGo T-LoRa Pager.
* Settings screens now use icons for selection actions.
* **Improvements**
* App Hub displays cached catalog results while a refresh is in progress.
* System menu close controls receive focus automatically when no pointer is available.
- Create `USB_HOST_TYPE` base driver in TactilityKernel
- Refactor esp32_usbhost dts format, and create child devices dynamically
- Use PSRAM for task stacks where possible: saving 20 kB from just the task stacks, but roughly 30 kB when nothing is connected.
- Allow the user to disable USB host interface in the USB settings app, saving an additionaly 20 kB of IRAM when nothing was connected.
- Change listener-based APIs to subscribe and poll/await pattern. This avoids callstacks of apps and services leaking into the USB API
This results in big IRAM savings: 30 kB when USB host is on and nothing is connected, and 50 kB total when USB host is disabled.
This brings the total free IRAM after boot from roughly 170 kB to 200 kB (host enabled) or 220 kB (host disabled).
- Implement ST7305 driver at `Drivers/st7305-module`
- Rename `cl32` device project to `cl32-v02-v03` and removed v0.4 drivers
- Implement CL-32 v0.4 device as `cl32-v04`: display, keyboard, backlight/frontlight driver and power supply
- Remove `TT_LAUNCHER_APP_ID` (it was always the same setting)
- Remove `TT_LVGL_STATUSBAR_COLORS_INVERTED` (unused since recent changes)
- Wi-Fi only refreshes once, so users can navigate with the keyboard through the results, without constently resetting focus/selection. After initial scan, manual scans can be requested via the toolbar.
- Themes: material and material_mono theme don't show post-selection border animation anymore. It looks weird on monochrome devices and it doesn't add anything on other devices either.
- Made `merge.sh` executable
- backlight driver API change: min/max brightness functions are now optional, defaults to [0, 255]
- Implemented themes with LSS: material, material mono
- Implemented grid-based navigation
- Added new Launcher
- Updated Appearance app to add theme configuration
- Updated various apps to improve UX/UI
- Added LVGL widgets: cards, badges, chips, icon buttons
- Added support for round/rounded displays
- Added the concept of insets to LVGL and implemented it in toolbar + statusbar
- Terminal app now hides toolbar by default, but tapping the terminal toggles visibility
- File browsing now opens the configured user-data location by default
- Added missing licenses to subprojects
- Updated README.md screenshots and intro text
USB Audio Class (UAC) output
Audio codec re-binding
Keyboard / Bluetooth HID
HID Consumer Control (media keys)
Symbol exports
Other fixes
IMU-based screen auto-rotate
See PR for details: https://github.com/TactilityProject/Tactility/pull/655
- CL-32 features added:
- Hardware revision detection
- v0.3 and v0.4 keyboard
- v0.4 power supply
- Inlined epd library (was a module) and made changes to the device definition (don't do full update after 5 small updates)
- Statusbar: add support for inverted colors
- e-paper driver improvements and warning fixes
- Implemented gpio_controller_get_level()
- Keyboard support improvements (unicode for tca drivers)
- Removed TactilityC, moved its symbols to existing modules and several new ones (pthread-module, c-symbols-module, cpp-symbols-module, posix-symbols-module, freertos-module).
- Removed Firmware subproject and moved main() into Tactility subproject.
- Strengthened application archive, path, version, stack-size, and device validation.
- Moved symbol resolution for elf_loader to app-esp32-module.
- Improved `struct Module` declarations and made module and symbol definitions in modules more consistent.
- Removed old http download code from Tactility subproject.
- Rename app-module's source files for consistency.
- Add missing pthread symbols.
- Kernel module symbols are now resolvable on all platforms.
- Enable BT by default in DTS, and create separate radio on/of functionality (like recent Wi-Fi changes)
- Bluetooth event handling now uses queued subscriptions, improving event delivery and application responsiveness.
- Improved synchronization of Bluetooth advertising, connections, HID, MIDI, and SPP operations.
- Enhanced cleanup during Bluetooth shutdown and subscription removal.
- Clarified Bluetooth start and stop behavior.
- Improved wifi driver subscription stability to prevent endless loops
Event handling:
- Added unified event handling for application, system, and Wi‑Fi events.
- Updated all apps to reflect event handling changes
Wi-Fi:
- Refactored event handling from listener interface to task & event group.
- Added direct Wi‑Fi radio controls and improved event subscriptions.
- Wi‑Fi screens now refresh asynchronously and handle unavailable devices more gracefully.
- Enabled Wi‑Fi by default on in dts files, but radio on/off is still done by code. The main reason was reliable event subscription and consistent devicetree states.
- Improved Wi‑Fi shutdown cleanup and radio-state handling.
Other:
- Renamed the Kernel Display app to Display.
- And Tab5 keyboard improvements
- Usb host keyboard improvements
- Symbols
- Requires the device.py change from CL-32 PR but that only affects visuals and not build breaking
Adds sub-GHz radio support to Tactility as a first-class kernel device type, plus a
driver for the Semtech SX1262. Continues the radio work discussed in #342, brought up to
the current kernel driver model (rather than the deprecated tt::hal layer the earlier
prototype targeted).
- Added generic GPS/GNSS support with device detection, configuration, and persistent settings.
- Improved device and module lifecycle management.
- Added flexible filesystem locking support for displays and storage.
- Improved display-idle and keyboard backlight handling.
- Updated architecture, driver, module, testing, and licensing documentation.
- Removed old HAL device and related code.
* **New Features**
* Added native display support for ST7796, ILI9341, and ST7789 panels across supported boards.
* Added FT5x06 and FT6x36 touchscreen support.
* Generic PWM driver
* ESP32 PWM driver
* Generic RGB LED driver
* RGB PWM LED driver
* RGB GPIO LED driver
* Implementation of RGB LED for various boards
* **Improvements**
* Updated board hardware descriptions to use explicit display/touch/backlight device-tree bindings and disabled deprecated HAL usage.
* Improved display and touch-driver cleanup to prevent stale resources and improve shutdown reliability.
* Pinned esp-hosted library to a fixed version
* **Deletions**
* Obsolete placeholder display
* Legacy ILI9488 support.
* ESP32-specific LEDC PWM implementation
- RGB display driver added
- display_driver API:
- Added software-based display rotation for screens without hardware rotation support.
- Improved display capability detection across supported display drivers.
- lvgl_display driver:
- Improved framebuffer handling for smoother, more reliable display updates.
- Display gap and rotation behavior now adapts more accurately to hardware capabilities.
- Migration Crowpanel 5" basic & advance to kernel drivers
- Improve KernelDisplay app: brightness controls are hidden for displays that only support on/off operation
- device.py now allows for (non-ambiguous) partial device IDs
- TactilityKernel: Implement more tests
- Added kernel base drivers for: display, pointer (touch, mouse, etc.), keyboard, adc, power supply and backlight
- Implement new kernel driver modules: `st7789-module` and `gt911-module`
- Implement ESP32 ADC "oneshot" kernel driver
- Implement ESP32 backlight kernel driver with ledc API
- Implemented `battery-sense` driver that allows for voltage measurement and creates a power supply child device
- Updated github actions
- Updated flash scripts
- Fix for esp32 legacy driver conflict with ADC
- Created separate `lilygo-tdeck` and `lilygo-tdeck-plus` devices
- Created `lilygo-module` with LilyGO kernel drivers
- Fix for intermittent errors in build related to code generation of `devicetree.c`
- `lvgl-module` can now map kernel drivers onto LVGL devices
- Created `KernelDisplayApp` as a mirror of `HalDisplayApp` (formerly `DisplayApp`)
- Removed `struct` and `enum` prefix in a lot of kernel driver cpp source files
- `lilygo-tdeck` and `lilygo-tdeck-plus` are now fully relying on kernel drivers and don't use any of the old HAL
* Tab5 camera + other stuff
Tab5 camera driver - SC2356
Custom SliderBox widget - slider with plus and minus buttons + value label and snapping
Rtc Time service + rtc api
Sdk release - only include drivers built for that specific target, eg: sc2356 driver is mipi / p4 only.
No more hardcoded manual sdk cmakelists
New function to find device by compatible string match. no more static cast bool wildness when trying to match a single device (like M5Stack PaperS3 for example)
* feedback + fixes
Fixed external app user data path.
fix(gui): block app teardown until onHide() completes, preventing ELF unload racing a still-running app
added camera device type and api
* drain the snake sssem
---------
Co-authored-by: Ken Van Hoeylandt <git@kenvanhoeylandt.net>
- Fixed crash when returning to Setup app (from any of the steps)
- Fixed crash when returning to TimeDateSettings app (after locale selection)
- Fixed GuiService inconsistent behaviour: now always perform operations async (e.g. to show/hide apps). This fixes crashes in some onHide() calls where onHide() might be called before onShow() was called.
- Fix for incorrect WebServService path
- Remove CYD-4848S040C SD card functionality, but added a GPIO fix for releasing 3-wire SPI pin sharing.
- Fix for saving/loading settings for various apps
- New drivers:
- SD SPI
- spi_peripheral
- touch_placeholder
- display_placeholder
- Devicetree compiler:
- Implement phandle-arrays
- Implement device addresses
- Add placeholder drivers to all devices with a SPI display
- SPI driver: add `cs-pins` and set them to high on driver start
- FileSystem: add `file_system_set_owner()` and `file_system_get_owner()`
- File locking is now checking if the related `FileSystem` is part of a shared SPI bus
- Add `device_get_child_count()`
- SDMMC driver: Remove default of `slot` value
- Fix for Crowpanel Basic 3.5" display (add delay to booting)
- Fix for LilyGO T-HMI SD card mounting (delayed mounting by disabling it initially in the dts)
* Bluetooth LE addition
* fixes
* use the psram!
helps a little on S3 (t-deck)
* custom device name
* Update symbols.c
* Feedback + fixes
Fixes external app start/stop server (child devices)
Fixes BtManage causing a full system hang upon disabling bt when a device is connected to the host.
* updoot
* more updoot
* move back!
* Revert "move back!"
This reverts commit d3694365c634acc5db62ac59771c496cb971a727.
* fix some of the things
* Addressing feedback? hmm
* Fixes
Bug 1 — Reconnect loop / Reconnect not working fixed
Bug 2 — Name-only advertising overwrites HID advertising
Bug 3 — BleHidDeviceCtx leak on re-enable
Enhancement — HID device auto-start on radio re-enable
* stuff...
* update for consistency with others
* fix crashes
and some bonus symbols
* a few symbols, i2c speed, cdn message
100kHz i2c speed seems to be more compatible with m5stack modules...and probably in general.
cdn message no longer applies
* Hide BT Settings when bt not enabled
* Addressing things and device fixes
* Missed one!
* stuff
Font size set to 18 for 800x480 displays
Fix web server dashboard not rendering when sdcard isn't present
Added new driver modules
- BM8563 RTC
- RX8130CE RTC
- MPU6886 IMU
- QMI8658 IMU
- M5PM1 Power Management Chip
Applied the above modules to applicable devicetrees.
Added new device: M5Stack StickS3
Added new M5Stack Tab5 St7123 variant.
ButtonControl changed to use interupts and xQueue, added AppClose action.
And some bonus symbols of course, the apps are hungry for symbols.
- UiDensity moved to lvgl-module
- Deleted tt_hal and tt_hal_gpio (breaks apps, but will fix those right after merging)
- Added I2C 8 bit register operations
- Added device.properties to simulator
- Improved Tab5 hardware init, implement audio
- Add README.md to kernel
**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