# Class Reference Cross-reference between cs-midi and the original [Control Surface](https://tttapa.github.io/Control-Surface/Doxygen/annotated.html) library. ## Ported Classes These classes are available in cs-midi and work identically to their Control Surface equivalents (within the `cs::` namespace unless noted). ### MIDI Output Elements | Class | Template | Description | |-------|----------|-------------| | `NoteButton` | | Note On/Off on button press/release | | `NoteButtonLatched` | | Toggle Note On/Off on each press | | `NoteButtonLatching` | | Note On while held, toggles | | `NoteChordButton` | | Chord (multiple notes) on press | | `NoteButtons` | `` | Array of sequential note buttons | | `NoteButtonMatrix` | `` | Row/column scanned note grid | | `CCButton` | | CC 127/0 on press/release | | `CCButtonLatched` | | Toggle CC 127/0 on each press | | `CCButtonLatching` | | CC 127 while held, toggles | | `CCButtons` | `` | Array of sequential CC buttons | | `CCButtonMatrix` | `` | Row/column scanned CC grid | | `CCPotentiometer` | | Analog input to CC 0-127 | | `PBPotentiometer` | | Analog input to 14-bit Pitch Bend | | `CCRotaryEncoder` | | Relative CC from encoder | | `BorrowedCCRotaryEncoder` | | Shared encoder reference for CC | | `CCAbsoluteEncoder` | | Absolute CC from encoder position | | `PBAbsoluteEncoder` | | 14-bit Pitch Bend from encoder | | `CCIncrementDecrementButtons` | | Two buttons for CC inc/dec + reset | | `PCButton` | | Program Change on press | | `ProgramChanger` | `` | Selectable program change list | ### MIDI Input Elements | Class | Template | Description | |-------|----------|-------------| | `NoteValue` | | Incoming Note value (8-bit) | | `CCValue` | | Incoming CC value (8-bit) | | `KPValue` | | Incoming Key Pressure value (8-bit) | | `PBValue` | | Incoming Pitch Bend value (14-bit) | | `NoteRange` | `` | Array of incoming Note values | | `CCRange` | `` | Array of incoming CC values | | `KPRange` | `` | Array of incoming Key Pressure values | | `NoteLED` | | LED driven by Note On/Off | | `CCLED` | | LED driven by CC value | | `KPLED` | | LED driven by Key Pressure | ### Bankable Input Elements | Class | Template | Description | |-------|----------|-------------| | `Bankable::NoteValue` | `` | Bank-switched Note value | | `Bankable::CCValue` | `` | Bank-switched CC value | | `Bankable::KPValue` | `` | Bank-switched Key Pressure value | | `Bankable::PBValue` | `` | Bank-switched Pitch Bend value | | `Bankable::NoteLED` | `` | Bank-switched Note LED | | `Bankable::CCLED` | `` | Bank-switched CC LED | | `Bankable::KPLED` | `` | Bank-switched Key Pressure LED | | `Bankable::NoteRange` | `` | Bank-switched Note range | | `Bankable::CCRange` | `` | Bank-switched CC range | | `Bankable::KPRange` | `` | Bank-switched Key Pressure range | ### Banks and Selectors | Class | Template | Description | |-------|----------|-------------| | `Bank` | `` | N-setting bank for bankable elements | | `Transposer` | `` | Note transposition bank | | `OutputBank` | | Bank for output elements | | `EncoderSelector` | `` | Bank selection via rotary encoder | | `IncrementSelector` | `` | Bank selection via single button | | `IncrementDecrementSelector` | `` | Bank selection via two buttons | | `ManyButtonsSelector` | `` | Bank selection via N buttons | | `SwitchSelector` | | Two-state selector from switch | | `ProgramChangeSelector` | `` | Bank selection via incoming MIDI PC | | `EncoderSelectorLEDs` | `` | EncoderSelector with LED indicators | | `IncrementSelectorLEDs` | `` | IncrementSelector with LED indicators | | `IncrementDecrementSelectorLEDs` | `` | IncrementDecrementSelector with LEDs | | `ManyButtonsSelectorLEDs` | `` | ManyButtonsSelector with LEDs | | `SwitchSelectorLED` | | SwitchSelector with LED | | `ProgramChangeSelectorLEDs` | `` | ProgramChangeSelector with LEDs | ### MIDI Interfaces | Class | Template | Description | |-------|----------|-------------| | `BluetoothMIDI_Interface` | | BLE MIDI via BTstack | | `USBMIDI_Interface` | | USB MIDI device via TinyUSB | | `HardwareSerialMIDI_Interface` | | 5-pin DIN MIDI over UART | | `AppleMIDI_Interface` | | RTP-MIDI over WiFi (AppleMIDI/Bonjour) | ### MIDI Routing | Class | Template | Description | |-------|----------|-------------| | `MIDI_Pipe` | | Connects a MIDI source to a sink | | `MIDI_PipeFactory` | `` | Creates N unidirectional pipes | | `BidirectionalMIDI_PipeFactory` | `` | Creates N bidirectional pipes | | `MIDI_Sink` | | Base class for MIDI receivers | | `MIDI_Source` | | Base class for MIDI senders | ### Hardware Utilities (`AH::` namespace) | Class | Template | Description | |-------|----------|-------------| | `Button` | | Debounced button with state machine | | `IncrementButton` | | Button with auto-repeat | | `IncrementDecrementButtons` | | Button pair with auto-repeat | | `ButtonMatrix` | `` | Row/column button scanner | | `GenericFilteredAnalog` | `<...>` | EMA-filtered analog input with hysteresis | | `FilteredAnalog` | | Concrete filtered analog (10-bit, no mapping) | | `AHEncoder` | | Interrupt-driven quadrature encoder | ### Infrastructure | Class | Description | |-------|-------------| | `Control_Surface_` | Singleton coordinating all elements (`Control_Surface.begin()` / `.loop()`) | | `MIDIAddress` | Note/CC address with channel and cable | | `MIDIChannelCable` | Channel + cable pair | | `RelativeMIDIAddress` | Relative address offset | | `Channel` | MIDI channel (1-16) | | `Cable` | MIDI cable number | | `DigitalCCSender` | Sends CC 0/127 | | `ContinuousCCSender` | Sends CC 0-127 | | `ContinuousCCSender14` | Sends 14-bit CC | | `DigitalNoteSender` | Sends Note On/Off | | `RelativeCCSender` | Sends relative CC (Mackie, etc.) | | `PitchBendSender` | Sends Pitch Bend | | `ProgramChangeSender` | Sends Program Change | --- ## Not Yet Ported These classes exist in the original Control Surface but are not yet available in cs-midi. ### Bankable Output Elements The entire bankable output layer (Phase 11) has not been extracted. This includes bank-switched versions of every output element. | Class | Original | Priority | |-------|----------|----------| | `Bankable::NoteButton` | Bankable note button | High | | `Bankable::CCButton` | Bankable CC button | High | | `Bankable::CCPotentiometer` | Bankable CC pot | High | | `Bankable::CCRotaryEncoder` | Bankable CC encoder | High | | `Bankable::CCAbsoluteEncoder` | Bankable absolute encoder | Medium | | `Bankable::PBAbsoluteEncoder` | Bankable PB encoder | Medium | | `Bankable::PBPotentiometer` | Bankable PB pot | Medium | | `Bankable::PCButton` | Bankable program change button | Medium | | `Bankable::NoteButtonLatched` | Bankable latched note | Low | | `Bankable::NoteButtonLatching` | Bankable latching note | Low | | `Bankable::CCButtonLatched` | Bankable latched CC | Low | | `Bankable::CCButtonLatching` | Bankable latching CC | Low | | `Bankable::NoteButtons` | Bankable note button array | Low | | `Bankable::CCButtons` | Bankable CC button array | Low | | `Bankable::NoteButtonMatrix` | Bankable note matrix | Low | | `Bankable::CCButtonMatrix` | Bankable CC matrix | Low | | `Bankable::NoteChordButton` | Bankable chord button | Low | | `Bankable::CCIncrementDecrementButtons` | Bankable inc/dec | Low | | `Bankable::CCSmartPotentiometer` | Smart pot (avoids bank-switch jumps) | Medium | | `Bankable::PBSmartPotentiometer` | Smart PB pot | Medium | ### Bankable ManyAddresses Output Elements Per-bank explicit address lists (alternative to offset-based banking). | Class | Original | |-------|----------| | `Bankable::ManyAddresses::NoteButton` | Per-bank note addresses | | `Bankable::ManyAddresses::CCButton` | Per-bank CC addresses | | `Bankable::ManyAddresses::CCPotentiometer` | Per-bank CC pot addresses | | `Bankable::ManyAddresses::CCRotaryEncoder` | Per-bank CC encoder addresses | | `Bankable::ManyAddresses::CCAbsoluteEncoder` | Per-bank absolute encoder addresses | | `Bankable::ManyAddresses::PBAbsoluteEncoder` | Per-bank PB encoder addresses | | `Bankable::ManyAddresses::PBPotentiometer` | Per-bank PB pot addresses | | `Bankable::ManyAddresses::PCButton` | Per-bank PC addresses | | `Bankable::ManyAddresses::NoteButtonMatrix` | Per-bank note matrix | | `Bankable::ManyAddresses::CCButtonMatrix` | Per-bank CC matrix | | `Bankable::ManyAddresses::CCIncrementDecrementButtons` | Per-bank inc/dec | ### MCU (Mackie Control Universal) Full Mackie Control protocol support — VU meters, V-Pots, LCD, time display, etc. | Class | Description | |-------|-------------| | `MCU::VU` | VU meter input element | | `MCU::VULEDs` | VU meter with LED output | | `MCU::VPotRing` | V-Pot ring value reader | | `MCU::VPotRingLEDs` | V-Pot ring with LED output | | `MCU::LCD` | 112-char LCD display reader | | `MCU::SevenSegmentDisplay` | 7-segment display driver | | `MCU::TimeDisplay` | Time code display | | `MCU::AssignmentDisplay` | Assignment display | | `MCU::Bankable::VU` | Bankable VU meter | | `MCU::Bankable::VULEDs` | Bankable VU with LEDs | | `MCU::Bankable::VPotRing` | Bankable V-Pot ring | | `MCU::Bankable::VPotRingLEDs` | Bankable V-Pot ring with LEDs | ### USB MIDI | Class | Description | |-------|-------------| | `USBHostMIDI_Interface` | USB Host MIDI interface | | `GenericUSBMIDI_Interface` | Configurable USB MIDI backend | | `USBDebugMIDI_Interface` | Serial monitor debug output | ### Serial MIDI | Class | Description | |-------|-------------| | `SoftwareSerialMIDI_Interface` | Software serial MIDI | | `HairlessMIDI_Interface` | Hairless MIDI serial bridge | ### LED Bars and PWM | Class | Description | |-------|-------------| | `NoteCCKPLEDBar` | LED bar graph driven by MIDI | | `NoteCCKPLEDPWM` | PWM LED brightness by velocity | | `Bankable::NoteCCKPLEDBar` | Bankable LED bar | | `Bankable::NoteCCKPLEDPWM` | Bankable PWM LED | ### FastLED (Addressable LEDs) | Class | Description | |-------|-------------| | `NoteCCKPRangeFastLED` | Addressable LED strip driven by MIDI | | `Bankable::NoteCCKPRangeFastLED` | Bankable variant | ### Extended I/O Hardware | Class | Description | |-------|-------------| | `AH::AnalogMultiplex` | CD74HC4067 / CD74HC4051 multiplexer | | `AH::ShiftRegisterOut` | 74HC595 shift register output | | `AH::SPIShiftRegisterOut` | SPI-based shift register | | `AH::ShiftRegisterOutRGB` | RGB LED shift register | | `AH::MAX7219` | MAX7219 LED driver | | `AH::MAX7219SevenSegmentDisplay` | MAX7219 7-segment display | | `AH::LEDs` | Array of simple LEDs | | `AH::DotBarDisplayLEDs` | Dot/bar mode LED array | | `AH::MultiPurposeButton` | Long press / double press detection | | `AH::RegisterEncoders` | Multiple encoders via registers | ### Display | Class | Description | |-------|-------------| | `DisplayElement` | Base for on-screen elements | | `DisplayInterface` | Abstract display driver | | `SSD1306_DisplayInterface` | SSD1306 OLED driver | | `BitmapDisplay` | Bitmap rendering on display | ### Audio | Class | Description | |-------|-------------| | `AudioVU` | Audio level analysis | | `AudioVULEDs` | Audio VU with LED output | | `VolumeControl` | Audio volume knob | ### Motor Fader | Class | Description | |-------|-------------| | `MotorFader` | Motorized fader with touch sense |