Line data Source code
1 : #include <Def/TypeTraits.hpp>
2 : #include <MIDI_Parsers/LambdaPuller.hpp>
3 :
4 : BEGIN_CS_NAMESPACE
5 :
6 : // Reading MIDI
7 : // -----------------------------------------------------------------------------
8 :
9 : template <class Backend>
10 18 : MIDIReadEvent GenericUSBMIDI_Interface<Backend>::read() {
11 18 : auto pullpacket = [this](typename Backend::MIDIUSBPacket_t &packet) {
12 26 : packet = backend.read();
13 26 : return packet[0] != 0x00;
14 : };
15 36 : return parser.pull(LambdaPuller(std::move(pullpacket)));
16 : }
17 :
18 : template <class Backend>
19 0 : void GenericUSBMIDI_Interface<Backend>::begin() {
20 : #ifndef __SAM3X8E__ // Due compiler too old, doesn't support begin_if_possible()
21 0 : begin_if_possible(backend);
22 : #endif
23 0 : }
24 :
25 : template <class Backend>
26 6 : void GenericUSBMIDI_Interface<Backend>::update() {
27 6 : MIDI_Interface::updateIncoming(this);
28 6 : }
29 :
30 : // Retrieving the received messages
31 : // -----------------------------------------------------------------------------
32 :
33 : template <class Backend>
34 3 : ChannelMessage GenericUSBMIDI_Interface<Backend>::getChannelMessage() const {
35 3 : return parser.getChannelMessage();
36 : }
37 :
38 : template <class Backend>
39 : SysCommonMessage
40 3 : GenericUSBMIDI_Interface<Backend>::getSysCommonMessage() const {
41 3 : return parser.getSysCommonMessage();
42 : }
43 :
44 : template <class Backend>
45 2 : RealTimeMessage GenericUSBMIDI_Interface<Backend>::getRealTimeMessage() const {
46 2 : return parser.getRealTimeMessage();
47 : }
48 :
49 : template <class Backend>
50 7 : SysExMessage GenericUSBMIDI_Interface<Backend>::getSysExMessage() const {
51 7 : return parser.getSysExMessage();
52 : }
53 :
54 : // Sending MIDI
55 : // -----------------------------------------------------------------------------
56 :
57 : template <class Backend>
58 3 : void GenericUSBMIDI_Interface<Backend>::sendChannelMessageImpl(
59 : ChannelMessage msg) {
60 3 : sender.sendChannelMessage(msg, Sender {this});
61 3 : if (alwaysSendImmediately_)
62 0 : backend.sendNow();
63 3 : }
64 :
65 : template <class Backend>
66 0 : void GenericUSBMIDI_Interface<Backend>::sendSysCommonImpl(
67 : SysCommonMessage msg) {
68 0 : sender.sendSysCommonMessage(msg, Sender {this});
69 0 : if (alwaysSendImmediately_)
70 0 : backend.sendNow();
71 0 : }
72 :
73 : template <class Backend>
74 19 : void GenericUSBMIDI_Interface<Backend>::sendSysExImpl(const SysExMessage msg) {
75 19 : sender.sendSysEx(msg, Sender {this});
76 19 : if (alwaysSendImmediately_)
77 0 : backend.sendNow();
78 19 : }
79 :
80 : template <class Backend>
81 1 : void GenericUSBMIDI_Interface<Backend>::sendRealTimeImpl(RealTimeMessage msg) {
82 1 : sender.sendRealTimeMessage(msg, Sender {this});
83 1 : if (alwaysSendImmediately_)
84 0 : backend.sendNow();
85 1 : }
86 :
87 : END_CS_NAMESPACE
|