Control Surface master
MIDI Control Surface library for Arduino
MIDI-Input-Callback.ino

MIDI-Input-Callback

This is an example on how to attach your own callbacks for receiving MIDI input data.

Boards:
AVR, AVR USB, Nano Every, Due, Nano 33 IoT, Nano 33 BLE, Teensy 3.x, ESP32

Connections

None.

Behavior

Mapping

None.

Written by PieterP, 2019-08-07
https://github.com/tttapa/Control-Surface

#include <Control_Surface.h> // Include the Control Surface library
bool channelMessageCallback(ChannelMessage cm) {
Serial << F("Channel message: ") << hex //
<< cm.header << ' ' << cm.data1 << ' ' << cm.data2 //
<< dec << F(" on cable ") << cm.cable.getOneBased() << endl;
return true; // Return true to indicate that handling is done,
// and Control_Surface shouldn't handle it anymore.
// If you want Control_Surface to handle it as well,
// return false.
}
bool sysExMessageCallback(SysExMessage se) {
Serial << F("System Exclusive message: [") << se.length << "] " //
<< AH::HexDump(se.data, se.length) //
<< F(" on cable ") << se.cable.getOneBased() << endl;
return true; // Return true to indicate that handling is done,
// and Control_Surface shouldn't handle it anymore.
// If you want Control_Surface to handle it as well,
// return false.
}
bool sysCommonMessageCallback(SysCommonMessage sc) {
Serial << F("System Common message: ") << hex //
<< sc.header << ' ' << sc.data1 << ' ' << sc.data2 //
<< dec << F(" on cable ") << sc.cable.getOneBased() << endl;
return true; // Return true to indicate that handling is done,
// and Control_Surface shouldn't handle it anymore.
// If you want Control_Surface to handle it as well,
// return false.
}
bool realTimeMessageCallback(RealTimeMessage rt) {
Serial << F("Real-time message: ") //
<< hex << rt.message << dec //
<< F(" on cable ") << rt.cable.getOneBased() << endl;
return true; // Return true to indicate that handling is done,
// and Control_Surface shouldn't handle it anymore.
// If you want Control_Surface to handle it as well,
// return false.
}
void setup() {
Serial.begin(115200);
Control_Surface.setMIDIInputCallbacks(channelMessageCallback, //
sysExMessageCallback, //
sysCommonMessageCallback, //
realTimeMessageCallback); //
// If you don't need all four callbacks, you can pass `nullptr` instead of a
// function pointer
}
void loop() {
}
The main header file that includes all Control-Surface header files.
Control_Surface_ & Control_Surface
A predefined instance of the Control Surface to use in the Arduino sketches.
constexpr uint8_t getOneBased() const
Get the cable as an integer.
Definition: Cable.hpp:36
void setMIDIInputCallbacks(ChannelMessageCallback channelMessageCallback, SysExMessageCallback sysExMessageCallback, SysCommonMessageCallback sysCommonMessageCallback, RealTimeMessageCallback realTimeMessageCallback)
Set the MIDI input callbacks.
void begin()
Initialize the Control_Surface.
void loop()
Update all MIDI elements, send MIDI events and read MIDI input.
A class for MIDI interfaces sending MIDI messages over a USB MIDI connection.
Print & hex(Print &printer)
Definition: PrintStream.cpp:62
Print & endl(Print &printer)
Definition: PrintStream.cpp:27
Print & dec(Print &printer)
Definition: PrintStream.cpp:77
uint8_t data2
First MIDI data byte.
uint8_t header
MIDI status byte (message type and channel).
uint8_t data1
First MIDI data byte.
Cable cable
USB MIDI cable number;.
const uint8_t * data