88 lines
3.6 KiB
Markdown
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)
|