# 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` — multiple sequential note buttons - [x] `NoteButtonLatched` — toggle note on first press, off second - [x] `NoteButtonLatching` — note on while held, toggles state - [x] `NoteButtonMatrix` — row/column scanned note grid - [x] `NoteChordButton` — plays chord on press - [x] `CCButton` — momentary CC 127/0 - [x] `CCButtons` — multiple sequential CC buttons - [x] `CCButtonLatched` — toggle CC - [x] `CCButtonLatching` — latching CC - [x] `CCButtonMatrix` — 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` — bank-selectable program changes ### MIDI Input Elements - [x] `NoteValue` / `CCValue` / `KPValue` — 8-bit value readers - [x] `PBValue` — 14-bit Pitch Bend reader - [x] `NoteRange` / `CCRange` / `KPRange` — range readers - [x] `NoteLED` / `CCLED` / `KPLED` — LED output from MIDI input - [x] All bankable variants (`Bankable::NoteValue`, etc.) ### Banks & Selectors - [x] `Bank` — groups bankable elements, manages bank switching - [x] `Transposer` — specialized bank for note transposition - [x] `EncoderSelector` — rotary encoder bank selection - [x] `IncrementDecrementSelector` — two-button bank selection - [x] `IncrementSelector` — single-button wrapping selector - [x] `ManyButtonsSelector` — direct bank selection per button - [x] `SwitchSelector` — two-state toggle selector - [x] `ProgramChangeSelector` — MIDI-driven bank selection ### MIDI Interfaces - [x] `BluetoothMIDI_Interface` — BLE MIDI via BTstack (pico-native) - [x] `USBMIDI_Interface` — USB MIDI device via TinyUSB - [x] `HardwareSerialMIDI_Interface` — 5-pin DIN MIDI over UART (31250 baud) - [x] `AppleMIDI_Interface` — RTP-MIDI over WiFi with mDNS/Bonjour discovery - [x] `MIDI_Pipe` / `MIDI_PipeFactory` / `BidirectionalMIDI_PipeFactory` - [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 - [x] HID over GATT (HoG) keyboard + Battery Service — BLE auto-reconnect and battery level via `CS_MIDI_HID_KEYBOARD` ## 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 - [ ] 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 - [x] AppleMIDI (RTP-MIDI over WiFi)