cs-midi-docs/docs/roadmap.md

3.6 KiB

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)
  • MIDI_Pipe / MIDI_PipeFactory<N> / BidirectionalMIDI_PipeFactory<N>
  • Control_Surface singleton — 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

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)