This class ensures initialization, updating, and interaction between all other classes, it's the glue that holds everything together. More...
#include <Control_Surface/Control_Surface_Class.hpp>
Public Member Functions | |
void | begin () |
Initialize the Control_Surface. More... | |
void | loop () |
Update all MIDI elements, send MIDI events and read MIDI input. More... | |
bool | connectDefaultMIDI_Interface () |
Connect Control Surface to the default MIDI interface. More... | |
void | disconnectMIDI_Interfaces () |
Disconnect Control Surface from the MIDI interfaces it's connected to. More... | |
MIDI_Sender< Control_Surface_ > & | MIDI () |
Get a reference to the MIDI sender. More... | |
void | updateMidiInput () |
Update all MIDI interfaces to receive new MIDI events. More... | |
void | updateInputs () |
Update all MIDIInputElements. More... | |
void | updateDisplays () |
Clear, draw and display all displays. More... | |
Protected Attributes | |
MIDI_Pipe * | sourcePipe = nullptr |
MIDI_Pipe * | sinkPipe = nullptr |
Private Member Functions | |
void | sendImpl (uint8_t header, uint8_t d1, uint8_t d2, uint8_t cn) |
Low-level function for sending a 3-byte MIDI message. More... | |
void | sendImpl (uint8_t header, uint8_t d1, uint8_t cn) |
Low-level function for sending a 2-byte MIDI message. More... | |
void | sendImpl (const uint8_t *data, size_t length, uint8_t cn) |
Low-level function for sending a system exclusive MIDI message. More... | |
void | sendImpl (uint8_t rt, uint8_t cn) |
Low-level function for sending a single-byte MIDI message. More... | |
void | sinkMIDIfromPipe (ChannelMessage msg) override |
Accept an incoming MIDI Channel message. More... | |
void | sinkMIDIfromPipe (SysExMessage msg) override |
Accept an incoming MIDI System Exclusive message. More... | |
void | sinkMIDIfromPipe (RealTimeMessage msg) override |
Accept an incoming MIDI Real-Time message. More... | |
virtual void | lockDownstream (cn_t cn, bool lock) |
Base case for recursive lock function. More... | |
virtual MIDI_Sink * | getFinalSink () |
Base case for recursive function. More... | |
void | disconnectSourcePipesShallow () |
Disconnect only the first pipe connected to this sink. More... | |
virtual MIDI_Source * | getInitialSource () |
Base case for recursive function. More... | |
void | disconnectSinkPipesShallow () |
Disconnect only the first pipe connected to this source. More... | |
Private Attributes | |
Timer< micros > | potentiometerTimer = {AH::FILTERED_INPUT_UPDATE_INTERVAL} |
A timer to know when to update the analog inputs. More... | |
Timer< micros > | displayTimer = {1000000UL / MAX_FPS} |
A timer to know when to refresh the displays. More... | |
ChannelMessageCallback | channelMessageCallback = nullptr |
SysExMessageCallback | sysExMessageCallback = nullptr |
RealTimeMessageCallback | realTimeMessageCallback = nullptr |
MIDI_Pipe | inpipe |
MIDI_Pipe | outpipe |
Singleton boilerplate | |
Control_Surface_ (Control_Surface_ const &)=delete | |
Copying is not allowed. More... | |
Control_Surface_ & | operator= (Control_Surface_ const &)=delete |
Copying is not allowed. More... | |
static Control_Surface_ & | getInstance () |
Return the static Control_Surface_ instance. More... | |
Control_Surface_ ()=default | |
Control_Surface_ is a singleton, so the constructor is private. More... | |
MIDI Input Callbacks | |
using | ChannelMessageCallback = bool(*)(ChannelMessage) |
Callback function type for channel messages. More... | |
using | SysExMessageCallback = bool(*)(SysExMessage) |
Callback function type for SysEx messages. More... | |
using | RealTimeMessageCallback = bool(*)(RealTimeMessage) |
Callback function type for Real-Time messages. More... | |
void | setMIDIInputCallbacks (ChannelMessageCallback channelMessageCallback, SysExMessageCallback sysExMessageCallback, RealTimeMessageCallback realTimeMessageCallback) |
Set the MIDI input callbacks. More... | |
Sending MIDI | |
void | send (MIDIMessageType m, Channel c, uint8_t d1, uint8_t d2, Cable cable=CABLE_1) |
Send a 3-byte MIDI packet. More... | |
void | send (MIDIMessageType m, Channel c, uint8_t d1, Cable cable=CABLE_1) |
Send a 2-byte MIDI packet. More... | |
void | send (ChannelMessage message) |
Send a MIDI Channel Message. More... | |
void | send (SysExMessage message) |
Send a MIDI System Exclusive message. More... | |
void | send (const uint8_t(&sysexdata)[N], Cable cable=CABLE_1) |
Send a MIDI System Exclusive message. More... | |
void | send (RealTimeMessage message) |
Send a MIDI Real-Time message. More... | |
void | send (MIDIMessageType rt, Cable cable=CABLE_1) |
Send a single-byte MIDI message. More... | |
void | sendOnCable (MIDIMessageType m, Channel c, uint8_t d1, uint8_t d2, Cable cable) |
Send a 3-byte MIDI packet with cable number. More... | |
void | sendOnCable (MIDIMessageType m, Channel c, uint8_t d1, Cable cable) |
Send a 2-byte MIDI packet with cable number. More... | |
void | sendOnCable (MIDIMessageType rt, Cable cable) |
Send a single-byte MIDI packet with cable number. More... | |
void | sendNoteOn (MIDIAddress address, uint8_t velocity) |
Send a MIDI Note On event. More... | |
void | sendNoteOff (MIDIAddress address, uint8_t velocity) |
Send a MIDI Note Off event. More... | |
void | sendKP (MIDIAddress address, uint8_t pressure) |
Send a MIDI Key Pressure event. More... | |
void | sendCC (MIDIAddress address, uint8_t value) |
Send a MIDI Control Change event. More... | |
void | sendPC (MIDIAddress address) |
Send a MIDI Program Change event. More... | |
void | sendPC (MIDIChannelCN address, uint8_t value) |
Send a MIDI Program Change event. More... | |
void | sendCP (MIDIChannelCN address, uint8_t pressure) |
Send a MIDI Channel Pressure event. More... | |
void | sendPB (MIDIChannelCN address, uint16_t value) |
Send a MIDI Pitch Bend event. More... | |
Connecting and disconnecting MIDI Pipes | |
void | connectSourcePipe (MIDI_Pipe *source) |
Fully connect a source pipe to this sink. More... | |
void | disconnectSourcePipes () |
Disconnect all source pipes that sink to this sink (recursively). More... | |
bool | disconnect (TrueMIDI_Source &source) |
Disconnect the given source from this sink. More... | |
bool | hasSourcePipe () const |
Check if this sink is connected to a source pipe. More... | |
Sending data over a MIDI Pipe | |
void | sourceMIDItoPipe (ChannelMessage) |
Send a MIDI Channel Message. More... | |
void | sourceMIDItoPipe (SysExMessage) |
Send a MIDI System Exclusive message. More... | |
void | sourceMIDItoPipe (RealTimeMessage) |
Send a MIDI Real-Time message. More... | |
void | exclusive (cn_t cn, bool exclusive=true) |
Enter or exit exclusive mode for the given cable number. More... | |
bool | canWrite (cn_t cn) const |
Check if this source can write to the sinks it connects to. More... | |
Connecting and disconnecting MIDI Pipes | |
bool | disconnect (TrueMIDI_Sink &sink) |
Disconnect the given sink from this source. More... | |
void | connectSinkPipe (MIDI_Pipe *sink) |
Fully connect a sink pipe to this source. More... | |
void | disconnectSinkPipes () |
Disconnect all sink pipes that this source sinks to (recursively). More... | |
bool | hasSinkPipe () const |
Check if this source is connected to a sink pipe. More... | |
This class ensures initialization, updating, and interaction between all other classes, it's the glue that holds everything together.
Definition at line 26 of file Control_Surface_Class.hpp.
using ChannelMessageCallback = bool (*)(ChannelMessage) |
Callback function type for channel messages.
Return true if handling is done in the user-provided callback, false if Control_Surface
should handle the message.
Definition at line 141 of file Control_Surface_Class.hpp.
using SysExMessageCallback = bool (*)(SysExMessage) |
Callback function type for SysEx messages.
Return true if handling is done in the user-provided callback, false if Control_Surface
should handle the message.
Definition at line 145 of file Control_Surface_Class.hpp.
using RealTimeMessageCallback = bool (*)(RealTimeMessage) |
Callback function type for Real-Time messages.
Return true if handling is done in the user-provided callback, false if Control_Surface
should handle the message.
Definition at line 149 of file Control_Surface_Class.hpp.
|
delete |
Copying is not allowed.
|
privatedefault |
Control_Surface_ is a singleton, so the constructor is private.
|
delete |
Copying is not allowed.
|
static |
Return the static Control_Surface_ instance.
(Control_Surface_ is a singleton.)
Definition at line 20 of file Control_Surface_Class.cpp.
void begin | ( | ) |
Initialize the Control_Surface.
Definition at line 25 of file Control_Surface_Class.cpp.
void loop | ( | ) |
Update all MIDI elements, send MIDI events and read MIDI input.
Definition at line 68 of file Control_Surface_Class.cpp.
bool connectDefaultMIDI_Interface | ( | ) |
Connect Control Surface to the default MIDI interface.
Definition at line 50 of file Control_Surface_Class.cpp.
void disconnectMIDI_Interfaces | ( | ) |
Disconnect Control Surface from the MIDI interfaces it's connected to.
Definition at line 63 of file Control_Surface_Class.cpp.
|
inline |
Get a reference to the MIDI sender.
Control_Surface.send(...)
directly instead of Control_Surface.MIDI().send(...)
. Definition at line 85 of file Control_Surface_Class.hpp.
void updateMidiInput | ( | ) |
Update all MIDI interfaces to receive new MIDI events.
Definition at line 80 of file Control_Surface_Class.cpp.
void updateInputs | ( | ) |
Update all MIDIInputElements.
Definition at line 177 of file Control_Surface_Class.cpp.
void updateDisplays | ( | ) |
Clear, draw and display all displays.
Definition at line 185 of file Control_Surface_Class.cpp.
|
private |
Low-level function for sending a 3-byte MIDI message.
Definition at line 84 of file Control_Surface_Class.cpp.
|
private |
Low-level function for sending a 2-byte MIDI message.
Definition at line 88 of file Control_Surface_Class.cpp.
|
private |
Low-level function for sending a system exclusive MIDI message.
Definition at line 91 of file Control_Surface_Class.cpp.
|
private |
Low-level function for sending a single-byte MIDI message.
Definition at line 95 of file Control_Surface_Class.cpp.
|
overrideprivatevirtual |
Accept an incoming MIDI Channel message.
Implements MIDI_Sink.
Definition at line 99 of file Control_Surface_Class.cpp.
|
overrideprivatevirtual |
Accept an incoming MIDI System Exclusive message.
Implements MIDI_Sink.
Definition at line 151 of file Control_Surface_Class.cpp.
|
overrideprivatevirtual |
Accept an incoming MIDI Real-Time message.
Implements MIDI_Sink.
Definition at line 169 of file Control_Surface_Class.cpp.
|
inline |
Set the MIDI input callbacks.
Definition at line 153 of file Control_Surface_Class.hpp.
|
inherited |
Send a 3-byte MIDI packet.
m | MIDI message type. [0x80, 0xE0] |
c | The MIDI channel. [1, 16] |
d1 | The first data byte. [0, 127] |
d2 | The second data byte. [0, 127] |
cable | The MIDI Cable Number. [1, 16] |
Definition at line 38 of file MIDI_Interface.ipp.
|
inherited |
Send a 2-byte MIDI packet.
m | MIDI message type. [0x80, 0xE0] |
c | The MIDI channel. [1, 16] |
d1 | The first data byte. [0, 127] |
cable | The MIDI Cable Number. [1, 16] |
Definition at line 53 of file MIDI_Interface.ipp.
|
inherited |
Send a MIDI Channel Message.
Definition at line 113 of file MIDI_Interface.ipp.
|
inherited |
Send a MIDI System Exclusive message.
Definition at line 115 of file MIDI_Interface.ipp.
Send a MIDI System Exclusive message.
Definition at line 118 of file MIDI_Interface.hpp.
|
inherited |
Send a MIDI Real-Time message.
Definition at line 122 of file MIDI_Interface.ipp.
|
inherited |
Send a single-byte MIDI message.
Definition at line 124 of file MIDI_Interface.ipp.
|
inherited |
Send a 3-byte MIDI packet with cable number.
m | MIDI message type. [0x80, 0xE0] |
c | The MIDI channel. [1, 16] |
d1 | The first data byte. [0, 127] |
d2 | The second data byte. [0, 127] |
cable | The MIDI Cable Number. [1, 16] |
Definition at line 69 of file MIDI_Interface.ipp.
|
inherited |
Send a 2-byte MIDI packet with cable number.
m | MIDI message type. [0x80, 0xE0] |
c | The MIDI channel. [1, 16] |
d1 | The first data byte. [0, 127] |
cable | The MIDI Cable Number. [1, 16] |
Definition at line 84 of file MIDI_Interface.ipp.
|
inherited |
Send a single-byte MIDI packet with cable number.
rt | The MIDI byte to send. |
cable | The MIDI Cable Number. [1, 16] |
Definition at line 94 of file MIDI_Interface.ipp.
|
inherited |
Send a MIDI Note On event.
Definition at line 97 of file MIDI_Interface.ipp.
|
inherited |
Send a MIDI Note Off event.
Definition at line 99 of file MIDI_Interface.ipp.
|
inherited |
Send a MIDI Key Pressure event.
Definition at line 101 of file MIDI_Interface.ipp.
|
inherited |
Send a MIDI Control Change event.
Definition at line 103 of file MIDI_Interface.ipp.
|
inherited |
Send a MIDI Program Change event.
Definition at line 105 of file MIDI_Interface.ipp.
|
inherited |
Send a MIDI Program Change event.
Definition at line 107 of file MIDI_Interface.ipp.
|
inherited |
Send a MIDI Channel Pressure event.
Definition at line 109 of file MIDI_Interface.ipp.
|
inherited |
Send a MIDI Pitch Bend event.
Definition at line 111 of file MIDI_Interface.ipp.
|
inherited |
Fully connect a source pipe to this sink.
Definition at line 15 of file MIDI_Pipes.cpp.
|
inherited |
Disconnect all source pipes that sink to this sink (recursively).
Definition at line 24 of file MIDI_Pipes.cpp.
|
inherited |
Disconnect the given source from this sink.
Leaves other sources connected. Returns true if the source was found and disconnected, false if the given source was not a direct or indirect source to this sink.
Definition at line 39 of file MIDI_Pipes.cpp.
|
inherited |
Disconnect the given sink from this source.
Leaves other sinks connected. Returns true if the sink was found and disconnected, false if the given sink was not a direct or indirect sink of this source.
Definition at line 94 of file MIDI_Pipes.cpp.
|
inlineinherited |
Check if this sink is connected to a source pipe.
Definition at line 94 of file MIDI_Pipes.hpp.
|
inlineprivatevirtualinherited |
Base case for recursive lock function.
Reimplemented in MIDI_Pipe.
Definition at line 105 of file MIDI_Pipes.hpp.
|
inlineprivatevirtualinherited |
Base case for recursive function.
Reimplemented in MIDI_Pipe.
Definition at line 108 of file MIDI_Pipes.hpp.
|
privateinherited |
Disconnect only the first pipe connected to this sink.
Leaves the other pipes connected to the original pipe, which doesn't have a sink anymore when this function finishes. Used to disconnect a MIDI_Pipe while preserving the connections of its "through" inputs.
Definition at line 32 of file MIDI_Pipes.cpp.
|
inherited |
Send a MIDI Channel Message.
Definition at line 132 of file MIDI_Pipes.cpp.
|
inherited |
Send a MIDI System Exclusive message.
Definition at line 137 of file MIDI_Pipes.cpp.
|
inherited |
Send a MIDI Real-Time message.
Definition at line 142 of file MIDI_Pipes.cpp.
|
inherited |
Enter or exit exclusive mode for the given cable number.
This means that this becomes the only source that can sink to the sinks connected to this source. Other sources have to wait until this source exits exclusive mode until they can send again.
cn | Cable number to set the exclusive mode for [0, 15]. |
exclusive | True to enable exclusive mode, false to disable. |
Definition at line 123 of file MIDI_Pipes.cpp.
|
inherited |
Check if this source can write to the sinks it connects to.
Returns false if any of the sinks have another source that is in exclusive mode.
cn | Cable number to check [0, 15]. |
Definition at line 128 of file MIDI_Pipes.cpp.
|
inherited |
Fully connect a sink pipe to this source.
Definition at line 70 of file MIDI_Pipes.cpp.
|
inherited |
Disconnect all sink pipes that this source sinks to (recursively).
Definition at line 79 of file MIDI_Pipes.cpp.
|
inlineinherited |
Check if this source is connected to a sink pipe.
Definition at line 189 of file MIDI_Pipes.hpp.
|
inlineprivatevirtualinherited |
Base case for recursive function.
Reimplemented in MIDI_Pipe.
Definition at line 200 of file MIDI_Pipes.hpp.
|
privateinherited |
Disconnect only the first pipe connected to this source.
Leaves the other pipes connected to the original pipe, which doesn't have a source anymore when this function finishes. Used to disconnect a MIDI_Pipe while preserving the connections of its "through" outputs.
Definition at line 87 of file MIDI_Pipes.cpp.
|
private |
A timer to know when to update the analog inputs.
Definition at line 130 of file Control_Surface_Class.hpp.
A timer to know when to refresh the displays.
Definition at line 132 of file Control_Surface_Class.hpp.
|
private |
Definition at line 164 of file Control_Surface_Class.hpp.
|
private |
Definition at line 165 of file Control_Surface_Class.hpp.
|
private |
Definition at line 166 of file Control_Surface_Class.hpp.
|
private |
Definition at line 167 of file Control_Surface_Class.hpp.
|
private |
Definition at line 167 of file Control_Surface_Class.hpp.
|
protectedinherited |
Definition at line 117 of file MIDI_Pipes.hpp.
|
protectedinherited |
Definition at line 209 of file MIDI_Pipes.hpp.