Control Surface pin-t-adl
MIDI Control Surface library for Arduino
USBMIDI_Interface.ipp
Go to the documentation of this file.
1#include <Def/TypeTraits.hpp>
3
5
6// Reading MIDI
7// -----------------------------------------------------------------------------
8
9template <class Backend>
11 auto pullpacket = [this](typename Backend::MIDIUSBPacket_t &packet) {
12 packet = backend.read();
13 return packet[0] != 0x00;
14 };
15 return parser.pull(LambdaPuller(std::move(pullpacket)));
16}
17
18template <class Backend>
20#ifndef __SAM3X8E__ // Due compiler too old, doesn't support begin_if_possible()
21 begin_if_possible(backend);
22#endif
23}
24
25template <class Backend>
28}
29
30template <class Backend>
35// Retrieving the received messages
36// -----------------------------------------------------------------------------
37
38template <class Backend>
40 return parser.getChannelMessage();
43template <class Backend>
46 return parser.getSysCommonMessage();
47}
48
49template <class Backend>
51 return parser.getRealTimeMessage();
52}
53
54template <class Backend>
56 return parser.getSysExMessage();
57}
59// Sending MIDI
60// -----------------------------------------------------------------------------
61
62template <class Backend>
64 ChannelMessage msg) {
65 sender.sendChannelMessage(msg, Sender {this});
66 if (alwaysSendImmediately_)
67 backend.sendNow();
68}
69
70template <class Backend>
72 SysCommonMessage msg) {
73 sender.sendSysCommonMessage(msg, Sender {this});
74 if (alwaysSendImmediately_)
75 backend.sendNow();
76}
77
78template <class Backend>
80 sender.sendSysEx(msg, Sender {this});
81 if (alwaysSendImmediately_)
82 backend.sendNow();
83}
84
85template <class Backend>
87 sender.sendRealTimeMessage(msg, Sender {this});
88 if (alwaysSendImmediately_)
89 backend.sendNow();
90}
91
LambdaPuller_< Lambda > LambdaPuller(Lambda &&lambda)
MIDIReadEvent
Values returned by the MIDI reading functions.
#define END_CS_NAMESPACE
#define BEGIN_CS_NAMESPACE
std::enable_if< has_method_begin< T >::value >::type begin_if_possible(T &t)
Calls the begin() method of t if that method exists.
Definition: TypeTraits.hpp:23
ChannelMessage getChannelMessage() const
Return the received channel voice message.
RealTimeMessage getRealTimeMessage() const
Return the received real-time message.
void sendChannelMessageImpl(ChannelMessage) override
Low-level function for sending a MIDI channel voice message.
void handleStall() override
Call back that should finish any MIDI messages that are in progress, and un-stall the pipe or MIDI so...
void update() override
Read the MIDI interface and call the callback if a message was received.
SysCommonMessage getSysCommonMessage() const
Return the received system common message.
void sendRealTimeImpl(RealTimeMessage) override
Low-level function for sending a MIDI real-time message.
void begin() override
Initialize the MIDI Interface.
void sendSysExImpl(SysExMessage) override
Low-level function for sending a system exclusive MIDI message.
void sendSysCommonImpl(SysCommonMessage) override
Low-level function for sending a MIDI system common message.
MIDIReadEvent read()
Try reading and parsing a single incoming MIDI message.
SysExMessage getSysExMessage() const
Return the received system exclusive message.
static void updateIncoming(MIDIInterface_t *iface)
Read, parse and dispatch incoming MIDI messages on the given interface.
Functor to send USB MIDI packets.
virtual void handleStall()=0
Call back that should finish any MIDI messages that are in progress, and un-stall the pipe or MIDI so...