-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathvesselusbmidi.h
68 lines (63 loc) · 4.44 KB
/
vesselusbmidi.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <USB-MIDI.h>
midiEventPacket_t mPacket;
#define GETCIN(packet) (packet.header & 0x0f);
#define PUSHBACK1(x) \
{ x(mPacket.byte1); }
#define PUSHBACK2(x) \
{ \
x(mPacket.byte1); \
x(mPacket.byte2); \
}
#define PUSHBACK3(x) \
{ \
x(mPacket.byte1); \
x(mPacket.byte2); \
x(mPacket.byte3); \
}
#define USBMIDIRX(x, x1, x2, x3) \
inline bool x() { \
bool packets = false; \
for (;;) { \
mPacket = MidiUSB.read(); \
if (mPacket.header == 0) { \
break; \
} \
packets = true; \
byte cin = GETCIN(mPacket); \
byte len = usbMidi::cin2Len[cin][1]; \
switch (len) { \
case 0: \
switch (cin) { \
case 0x4: \
case 0x7: \
x3; \
break; \
case 0x5: \
x1; \
break; \
case 0x6: \
x2; \
break; \
default: \
break; \
} \
break; \
case 1: \
x1; \
break; \
case 2: \
x2; \
break; \
case 3: \
x3; \
break; \
default: \
break; \
} \
} \
return packets; \
}
USBMIDIRX(transparentUsbMidiRx, PUSHBACK1(fs.write), PUSHBACK2(fs.write),
PUSHBACK3(fs.write));
USBMIDIRX(UsbMidiRx, PUSHBACK1(fs.qread), PUSHBACK2(fs.qread),
PUSHBACK3(fs.qread));