Tactility/.claude/rules/hardware-abstraction-layer.md
Ken Van Hoeylandt d6b1d15e56
Various improvements (#614)
- Auto-select widgets in Launcher and apps with toolbars on devices without touch.
- Improved USB HID input reliability, cleanup
- Updated PSRAM settings to improve boot stability on supported devices.
- Prevented duplicate Wi-Fi event subscriptions during screen rebuilds.
- Updated docs
- Fixes in WifiManage and WifiConnect
- Reduced main task stack size
- Moved USB HID stack size to PSRAM when available
- app_manager_find_manifest() now returns a copy instead of a pointer
2026-08-13 20:30:47 +02:00

1.1 KiB

Architecture: Hardware Abstraction Layer

Driver

A driver generally consists of:

  • Registration of driver in parent module (optional, but desirable)
  • YAML bindings in the bindings/ folder
  • An #include that is used in the .dts file. The include is in [projectname]/bindings/[drivername].h
  • The driver implementation: a .cpp and .h file. The implementation is C++, but the header exposes pure C functions. C implementations are allowed, but C++ is preferred.

Drivers are part of a kernel module.

Modules with drivers can be stored in:

  • TactilityKernel
  • A subproject in Platforms folder
  • A subproject in Devices folder
  • A subproject in Drivers folder

Kernel Modules

Kernel module names are lower case and postfixed with -module.

Projects that are kernel modules:

  1. Declare a struct Module
  2. Contain a devicetree.yaml file that declares a list of dependencies (for parsing the devicetree) and specifies the bindings folder that contains the drivers' YAML definitions. For example:
dependencies:
  - TactilityKernel
bindings: bindings