Expand description
Unified controller: single entry point for all input processing.
Owns all timing-sensitive state (long-press detection, encoder acceleration, tap tempo, preset state) and delegates pure logic to the engine.
The Controller handles system actions (preset switching) internally, including on_enter/on_exit actions and recall MIDI. Callers only need to send the resulting MIDI output — no orchestration required.
Both firmware and simulator use the same Controller — the only difference
is where now_ms comes from (hardware monotonic vs std::Instant).
Structs§
- Controller
- Unified timing controller. Owns all stateful input processing.
- Output
- Result of processing an input event through the Controller. Contains everything the caller needs to emit — no further logic required.
Enums§
- Event
- Abstract input event. Hardware-agnostic — firmware maps GPIO edges to these, the simulator maps keyboard/WebSocket events to these.
Type Aliases§
- Default
Controller - Type alias for the default controller configuration (6 buttons, 2 encoders).