cs-midi Roadmap
Extraction status of tttapa/Control-Surface (GPL-3.0) into cs-midi for pico-sdk + BTstack.
Implemented
MIDI Output Elements
-
NoteButton— momentary note on/off -
NoteButtons<N>— multiple sequential note buttons -
NoteButtonLatched— toggle note on first press, off second -
NoteButtonLatching— note on while held, toggles state -
NoteButtonMatrix<R,C>— row/column scanned note grid -
NoteChordButton— plays chord on press -
CCButton— momentary CC 127/0 -
CCButtons<N>— multiple sequential CC buttons -
CCButtonLatched— toggle CC -
CCButtonLatching— latching CC -
CCButtonMatrix<R,C>— row/column scanned CC grid -
CCPotentiometer— analog input to CC 0-127 -
PBPotentiometer— analog input to 14-bit Pitch Bend -
CCRotaryEncoder— relative CC encoder -
CCAbsoluteEncoder— absolute CC encoder -
PBAbsoluteEncoder— absolute Pitch Bend encoder -
CCIncrementDecrementButtons— inc/dec CC with reset -
PCButton— Program Change on press -
ProgramChanger<N>— bank-selectable program changes
MIDI Input Elements
-
NoteValue/CCValue/KPValue— 8-bit value readers -
PBValue— 14-bit Pitch Bend reader -
NoteRange<N>/CCRange<N>/KPRange<N>— range readers -
NoteLED/CCLED/KPLED— LED output from MIDI input - All bankable variants (
Bankable::NoteValue<N>, etc.)
Banks & Selectors
-
Bank<N>— groups bankable elements, manages bank switching -
Transposer<Min,Max>— specialized bank for note transposition -
EncoderSelector<N>— rotary encoder bank selection -
IncrementDecrementSelector<N>— two-button bank selection -
IncrementSelector<N>— single-button wrapping selector -
ManyButtonsSelector<N>— direct bank selection per button -
SwitchSelector— two-state toggle selector -
ProgramChangeSelector<N>— MIDI-driven bank selection
MIDI Interfaces
-
BluetoothMIDI_Interface— BLE MIDI via BTstack (pico-native) -
USBMIDI_Interface— USB MIDI device via TinyUSB -
HardwareSerialMIDI_Interface— 5-pin DIN MIDI over UART (31250 baud) -
AppleMIDI_Interface— RTP-MIDI over WiFi with mDNS/Bonjour discovery -
MIDI_Pipe/MIDI_PipeFactory<N>/BidirectionalMIDI_PipeFactory<N> -
Control_Surfacesingleton — declarative begin/loop lifecycle
Infrastructure
-
AHEncoder— pico-native interrupt-driven rotary encoder -
ExtendedInputOutput— GPIO abstraction (direct pins) - MIDI constants (notes, CC numbers, PC programs, chords/intervals)
- Platform shim (
pico_shim.h) — replaces Arduino runtime - 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
- AppleMIDI (RTP-MIDI over WiFi)