cs-midi-docs/docs/roadmap.md

88 lines
3.6 KiB
Markdown

# cs-midi Roadmap
Extraction status of [tttapa/Control-Surface](https://github.com/tttapa/Control-Surface) (GPL-3.0) into cs-midi for pico-sdk + BTstack.
## Implemented
### MIDI Output Elements
- [x] `NoteButton` — momentary note on/off
- [x] `NoteButtons<N>` — multiple sequential note buttons
- [x] `NoteButtonLatched` — toggle note on first press, off second
- [x] `NoteButtonLatching` — note on while held, toggles state
- [x] `NoteButtonMatrix<R,C>` — row/column scanned note grid
- [x] `NoteChordButton` — plays chord on press
- [x] `CCButton` — momentary CC 127/0
- [x] `CCButtons<N>` — multiple sequential CC buttons
- [x] `CCButtonLatched` — toggle CC
- [x] `CCButtonLatching` — latching CC
- [x] `CCButtonMatrix<R,C>` — row/column scanned CC grid
- [x] `CCPotentiometer` — analog input to CC 0-127
- [x] `PBPotentiometer` — analog input to 14-bit Pitch Bend
- [x] `CCRotaryEncoder` — relative CC encoder
- [x] `CCAbsoluteEncoder` — absolute CC encoder
- [x] `PBAbsoluteEncoder` — absolute Pitch Bend encoder
- [x] `CCIncrementDecrementButtons` — inc/dec CC with reset
- [x] `PCButton` — Program Change on press
- [x] `ProgramChanger<N>` — bank-selectable program changes
### MIDI Input Elements
- [x] `NoteValue` / `CCValue` / `KPValue` — 8-bit value readers
- [x] `PBValue` — 14-bit Pitch Bend reader
- [x] `NoteRange<N>` / `CCRange<N>` / `KPRange<N>` — range readers
- [x] `NoteLED` / `CCLED` / `KPLED` — LED output from MIDI input
- [x] All bankable variants (`Bankable::NoteValue<N>`, etc.)
### Banks & Selectors
- [x] `Bank<N>` — groups bankable elements, manages bank switching
- [x] `Transposer<Min,Max>` — specialized bank for note transposition
- [x] `EncoderSelector<N>` — rotary encoder bank selection
- [x] `IncrementDecrementSelector<N>` — two-button bank selection
- [x] `IncrementSelector<N>` — single-button wrapping selector
- [x] `ManyButtonsSelector<N>` — direct bank selection per button
- [x] `SwitchSelector` — two-state toggle selector
- [x] `ProgramChangeSelector<N>` — MIDI-driven bank selection
### MIDI Interfaces
- [x] `BluetoothMIDI_Interface` — BLE MIDI via BTstack (pico-native)
- [x] `MIDI_Pipe` / `MIDI_PipeFactory<N>` / `BidirectionalMIDI_PipeFactory<N>`
- [x] `Control_Surface` singleton — declarative begin/loop lifecycle
### Infrastructure
- [x] `AHEncoder` — pico-native interrupt-driven rotary encoder
- [x] `ExtendedInputOutput` — GPIO abstraction (direct pins)
- [x] MIDI constants (notes, CC numbers, PC programs, chords/intervals)
- [x] Platform shim (`pico_shim.h`) — replaces Arduino runtime
## Not Yet Implemented
### Bankable Output Elements
- [ ] `Bankable::NoteButton` / `Bankable::CCButton` / etc.
- [ ] `Bankable::CCPotentiometer` / `Bankable::PBPotentiometer`
- [ ] `Bankable::CCRotaryEncoder` / `Bankable::CCAbsoluteEncoder`
- [ ] `Bankable::NoteChordButton` (with Transposer)
- [ ] `Bankable::NoteButtonMatrix` / `Bankable::CCButtonMatrix`
*Blocked Phase 11 of the extraction. Required for Bank.ino and Transposer.ino
output-side examples.*
### Additional MIDI Interfaces
- [ ] USB MIDI Interface (TinyUSB)
- [ ] Serial/Hardware MIDI Interface
- [ ] Debug MIDI Interface (serial monitor output)
### Display Elements
- [ ] OLED display support
- [ ] VU meter elements
- [ ] NoteLEDBar
### Hardware Expansion
- [ ] MCP23017 I2C I/O expander
- [ ] MAX7219 LED driver
- [ ] Shift register chains (74HC595, etc.)
- [ ] FastLED / NeoPixel integration
### Advanced Features
- [ ] MIDI input fine-grained callbacks (per-message-type)
- [ ] SysEx send/receive helpers
- [ ] AppleMIDI (RTP-MIDI over WiFi)