@@ -437,8 +437,27 @@ sendProgramChange KEYWORD2 | |||
sendAfterTouch KEYWORD2 | |||
sendPitchBend KEYWORD2 | |||
sendSysEx KEYWORD2 | |||
sendRealTime KEYWORD2 | |||
sendTimeCodeQuarterFrame KEYWORD2 | |||
sendSongPosition KEYWORD2 | |||
sendSongSelect KEYWORD2 | |||
sendTuneRequest KEYWORD2 | |||
beginRpn KEYWORD2 | |||
sendRpnValue KEYWORD2 | |||
sendRpnValue KEYWORD2 | |||
sendRpnIncrement KEYWORD2 | |||
sendRpnDecrement KEYWORD2 | |||
endRpn KEYWORD2 | |||
beginNrpn KEYWORD2 | |||
sendNrpnValue KEYWORD2 | |||
sendNrpnValue KEYWORD2 | |||
sendNrpnIncrement KEYWORD2 | |||
sendNrpnDecrement KEYWORD2 | |||
endNrpn KEYWORD2 | |||
send KEYWORD2 | |||
analog2velocity KEYWORD2 | |||
getType KEYWORD2 | |||
getCable KEYWORD2 | |||
getChannel KEYWORD2 | |||
getData1 KEYWORD2 | |||
getData2 KEYWORD2 | |||
@@ -450,15 +469,14 @@ setHandleControlChange KEYWORD2 | |||
setHandleProgramChange KEYWORD2 | |||
setHandleAfterTouch KEYWORD2 | |||
setHandlePitchChange KEYWORD2 | |||
setHandlePitchChange KEYWORD2 | |||
NoteOff LITERAL1 | |||
NoteOn LITERAL1 | |||
AfterTouchPoly LITERAL1 | |||
ControlChange LITERAL1 | |||
ProgramChange LITERAL1 | |||
AfterTouchChannel LITERAL1 | |||
PitchBend LITERAL1 | |||
SystemExclusive LITERAL1 | |||
#NoteOff LITERAL1 | |||
#NoteOn LITERAL1 | |||
#AfterTouchPoly LITERAL1 | |||
#ControlChange LITERAL1 | |||
#ProgramChange LITERAL1 | |||
#AfterTouchChannel LITERAL1 | |||
#PitchBend LITERAL1 | |||
#SystemExclusive LITERAL1 | |||
midiEventPacket_t LITERAL1 | |||
MidiUSB KEYWORD1 | |||
sendMIDI KEYWORD2 |
@@ -87,7 +87,11 @@ static uint8_t device_descriptor[] = { | |||
EP0_SIZE, // bMaxPacketSize0 | |||
LSB(VENDOR_ID), MSB(VENDOR_ID), // idVendor | |||
LSB(PRODUCT_ID), MSB(PRODUCT_ID), // idProduct | |||
0x00, 0x02, // bcdDevice | |||
#ifdef BCD_DEVICE | |||
LSB(BCD_DEVICE), MSB(BCD_DEVICE), // bcdDevice | |||
#else | |||
0x00, 0x02, | |||
#endif | |||
1, // iManufacturer | |||
2, // iProduct | |||
3, // iSerialNumber | |||
@@ -472,7 +476,10 @@ static uint8_t flightsim_report_desc[] = { | |||
#define MIDI_INTERFACE_DESC_POS CDC_DATA_INTERFACE_DESC_POS+CDC_DATA_INTERFACE_DESC_SIZE | |||
#ifdef MIDI_INTERFACE | |||
#define MIDI_INTERFACE_DESC_SIZE 9+7+6+6+9+9+9+5+9+5 | |||
#if !defined(MIDI_NUM_CABLES) || MIDI_NUM_CABLES < 1 || MIDI_NUM_CABLES > 16 | |||
#error "MIDI_NUM_CABLES must be defined between 1 to 16" | |||
#endif | |||
#define MIDI_INTERFACE_DESC_SIZE 9+7+((6+6+9+9)*MIDI_NUM_CABLES)+(9+4+MIDI_NUM_CABLES)*2 | |||
#else | |||
#define MIDI_INTERFACE_DESC_SIZE 0 | |||
#endif | |||
@@ -671,7 +678,8 @@ static uint8_t config_descriptor[CONFIG_DESC_SIZE] = { | |||
0x24, // bDescriptorType = CS_INTERFACE | |||
0x01, // bDescriptorSubtype = MS_HEADER | |||
0x00, 0x01, // bcdMSC = revision 01.00 | |||
0x41, 0x00, // wTotalLength | |||
LSB(7+(6+6+9+9)*MIDI_NUM_CABLES), // wTotalLength | |||
LSB(7+(6+6+9+9)*MIDI_NUM_CABLES), | |||
// MIDI IN Jack Descriptor, B.4.3, Table B-7 (embedded), page 40 | |||
6, // bLength | |||
0x24, // bDescriptorType = CS_INTERFACE | |||
@@ -706,6 +714,56 @@ static uint8_t config_descriptor[CONFIG_DESC_SIZE] = { | |||
1, // BaSourceID(1) = 1 | |||
1, // BaSourcePin(1) = first pin | |||
0, // iJack | |||
#if MIDI_NUM_CABLES >= 2 | |||
#define MIDI_INTERFACE_JACK_PAIR(a, b, c, d) \ | |||
6, 0x24, 0x02, 0x01, (a), 0, \ | |||
6, 0x24, 0x02, 0x02, (b), 0, \ | |||
9, 0x24, 0x03, 0x01, (c), 1, (b), 1, 0, \ | |||
9, 0x24, 0x03, 0x02, (d), 1, (a), 1, 0, | |||
MIDI_INTERFACE_JACK_PAIR(5, 6, 7, 8) | |||
#endif | |||
#if MIDI_NUM_CABLES >= 3 | |||
MIDI_INTERFACE_JACK_PAIR(9, 10, 11, 12) | |||
#endif | |||
#if MIDI_NUM_CABLES >= 4 | |||
MIDI_INTERFACE_JACK_PAIR(13, 14, 15, 16) | |||
#endif | |||
#if MIDI_NUM_CABLES >= 5 | |||
MIDI_INTERFACE_JACK_PAIR(17, 18, 19, 20) | |||
#endif | |||
#if MIDI_NUM_CABLES >= 6 | |||
MIDI_INTERFACE_JACK_PAIR(21, 22, 23, 24) | |||
#endif | |||
#if MIDI_NUM_CABLES >= 7 | |||
MIDI_INTERFACE_JACK_PAIR(25, 26, 27, 28) | |||
#endif | |||
#if MIDI_NUM_CABLES >= 8 | |||
MIDI_INTERFACE_JACK_PAIR(29, 30, 31, 32) | |||
#endif | |||
#if MIDI_NUM_CABLES >= 9 | |||
MIDI_INTERFACE_JACK_PAIR(33, 34, 35, 36) | |||
#endif | |||
#if MIDI_NUM_CABLES >= 10 | |||
MIDI_INTERFACE_JACK_PAIR(37, 38, 39, 40) | |||
#endif | |||
#if MIDI_NUM_CABLES >= 11 | |||
MIDI_INTERFACE_JACK_PAIR(41, 42, 43, 44) | |||
#endif | |||
#if MIDI_NUM_CABLES >= 12 | |||
MIDI_INTERFACE_JACK_PAIR(45, 46, 47, 48) | |||
#endif | |||
#if MIDI_NUM_CABLES >= 13 | |||
MIDI_INTERFACE_JACK_PAIR(49, 50, 51, 52) | |||
#endif | |||
#if MIDI_NUM_CABLES >= 14 | |||
MIDI_INTERFACE_JACK_PAIR(53, 54, 55, 56) | |||
#endif | |||
#if MIDI_NUM_CABLES >= 15 | |||
MIDI_INTERFACE_JACK_PAIR(57, 58, 59, 60) | |||
#endif | |||
#if MIDI_NUM_CABLES >= 16 | |||
MIDI_INTERFACE_JACK_PAIR(61, 62, 63, 64) | |||
#endif | |||
// Standard Bulk OUT Endpoint Descriptor, B.5.1, Table B-11, pae 42 | |||
9, // bLength | |||
5, // bDescriptorType = ENDPOINT | |||
@@ -716,11 +774,56 @@ static uint8_t config_descriptor[CONFIG_DESC_SIZE] = { | |||
0, // bRefresh | |||
0, // bSynchAddress | |||
// Class-specific MS Bulk OUT Endpoint Descriptor, B.5.2, Table B-12, page 42 | |||
5, // bLength | |||
4+MIDI_NUM_CABLES, // bLength | |||
0x25, // bDescriptorSubtype = CS_ENDPOINT | |||
0x01, // bJackType = MS_GENERAL | |||
1, // bNumEmbMIDIJack = 1 jack | |||
MIDI_NUM_CABLES, // bNumEmbMIDIJack = number of jacks | |||
1, // BaAssocJackID(1) = jack ID #1 | |||
#if MIDI_NUM_CABLES >= 2 | |||
5, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 3 | |||
9, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 4 | |||
13, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 5 | |||
17, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 6 | |||
21, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 7 | |||
25, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 8 | |||
29, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 9 | |||
33, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 10 | |||
37, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 11 | |||
41, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 12 | |||
45, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 13 | |||
49, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 14 | |||
53, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 15 | |||
57, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 16 | |||
61, | |||
#endif | |||
// Standard Bulk IN Endpoint Descriptor, B.5.1, Table B-11, pae 42 | |||
9, // bLength | |||
5, // bDescriptorType = ENDPOINT | |||
@@ -731,11 +834,56 @@ static uint8_t config_descriptor[CONFIG_DESC_SIZE] = { | |||
0, // bRefresh | |||
0, // bSynchAddress | |||
// Class-specific MS Bulk IN Endpoint Descriptor, B.5.2, Table B-12, page 42 | |||
5, // bLength | |||
4+MIDI_NUM_CABLES, // bLength | |||
0x25, // bDescriptorSubtype = CS_ENDPOINT | |||
0x01, // bJackType = MS_GENERAL | |||
1, // bNumEmbMIDIJack = 1 jack | |||
MIDI_NUM_CABLES, // bNumEmbMIDIJack = number of jacks | |||
3, // BaAssocJackID(1) = jack ID #3 | |||
#if MIDI_NUM_CABLES >= 2 | |||
7, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 3 | |||
11, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 4 | |||
15, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 5 | |||
19, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 6 | |||
23, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 7 | |||
27, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 8 | |||
31, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 9 | |||
35, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 10 | |||
39, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 11 | |||
43, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 12 | |||
47, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 13 | |||
51, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 14 | |||
55, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 15 | |||
59, | |||
#endif | |||
#if MIDI_NUM_CABLES >= 16 | |||
63, | |||
#endif | |||
#endif // MIDI_INTERFACE | |||
#ifdef KEYBOARD_INTERFACE |
@@ -355,6 +355,37 @@ let me know? http://forum.pjrc.com/forums/4-Suggestions-amp-Bug-Reports | |||
#define SEREMU_RX_SIZE 32 | |||
#define SEREMU_RX_INTERVAL 2 | |||
#define MIDI_INTERFACE 0 // MIDI | |||
#define MIDI_NUM_CABLES 1 | |||
#define MIDI_TX_ENDPOINT 3 | |||
#define MIDI_TX_SIZE 64 | |||
#define MIDI_RX_ENDPOINT 4 | |||
#define MIDI_RX_SIZE 64 | |||
#define ENDPOINT1_CONFIG ENDPOINT_TRANSIMIT_ONLY | |||
#define ENDPOINT2_CONFIG ENDPOINT_RECEIVE_ONLY | |||
#define ENDPOINT3_CONFIG ENDPOINT_TRANSIMIT_ONLY | |||
#define ENDPOINT4_CONFIG ENDPOINT_RECEIVE_ONLY | |||
#elif defined(USB_MIDI_X8) | |||
#define VENDOR_ID 0x16C0 | |||
#define PRODUCT_ID 0x0485 | |||
#define BCD_DEVICE 0x0300 | |||
#define MANUFACTURER_NAME {'T','e','e','n','s','y','d','u','i','n','o'} | |||
#define MANUFACTURER_NAME_LEN 11 | |||
#define PRODUCT_NAME {'T','e','e','n','s','y',' ','M','I','D','I','x','8'} | |||
#define PRODUCT_NAME_LEN 13 | |||
#define EP0_SIZE 64 | |||
#define NUM_ENDPOINTS 4 | |||
#define NUM_USB_BUFFERS 16 | |||
#define NUM_INTERFACE 2 | |||
#define SEREMU_INTERFACE 1 // Serial emulation | |||
#define SEREMU_TX_ENDPOINT 1 | |||
#define SEREMU_TX_SIZE 64 | |||
#define SEREMU_TX_INTERVAL 1 | |||
#define SEREMU_RX_ENDPOINT 2 | |||
#define SEREMU_RX_SIZE 32 | |||
#define SEREMU_RX_INTERVAL 2 | |||
#define MIDI_INTERFACE 0 // MIDI | |||
#define MIDI_NUM_CABLES 8 | |||
#define MIDI_TX_ENDPOINT 3 | |||
#define MIDI_TX_SIZE 64 | |||
#define MIDI_RX_ENDPOINT 4 | |||
@@ -385,6 +416,40 @@ let me know? http://forum.pjrc.com/forums/4-Suggestions-amp-Bug-Reports | |||
#define CDC_RX_SIZE 64 | |||
#define CDC_TX_SIZE 64 | |||
#define MIDI_INTERFACE 2 // MIDI | |||
#define MIDI_NUM_CABLES 1 | |||
#define MIDI_TX_ENDPOINT 4 | |||
#define MIDI_TX_SIZE 64 | |||
#define MIDI_RX_ENDPOINT 5 | |||
#define MIDI_RX_SIZE 64 | |||
#define ENDPOINT1_CONFIG ENDPOINT_TRANSIMIT_ONLY | |||
#define ENDPOINT2_CONFIG ENDPOINT_RECEIVE_ONLY | |||
#define ENDPOINT3_CONFIG ENDPOINT_TRANSIMIT_ONLY | |||
#define ENDPOINT4_CONFIG ENDPOINT_TRANSIMIT_ONLY | |||
#define ENDPOINT5_CONFIG ENDPOINT_RECEIVE_ONLY | |||
#elif defined(USB_MIDI_X8_SERIAL) | |||
#define VENDOR_ID 0x16C0 | |||
#define PRODUCT_ID 0x0489 | |||
#define BCD_DEVICE 0x0300 | |||
#define MANUFACTURER_NAME {'T','e','e','n','s','y','d','u','i','n','o'} | |||
#define MANUFACTURER_NAME_LEN 11 | |||
#define PRODUCT_NAME {'T','e','e','n','s','y',' ','M','I','D','I','x','8'} | |||
#define PRODUCT_NAME_LEN 13 | |||
#define EP0_SIZE 64 | |||
#define NUM_ENDPOINTS 5 | |||
#define NUM_USB_BUFFERS 30 | |||
#define NUM_INTERFACE 3 | |||
#define CDC_IAD_DESCRIPTOR 1 | |||
#define CDC_STATUS_INTERFACE 0 | |||
#define CDC_DATA_INTERFACE 1 // Serial | |||
#define CDC_ACM_ENDPOINT 1 | |||
#define CDC_RX_ENDPOINT 2 | |||
#define CDC_TX_ENDPOINT 3 | |||
#define CDC_ACM_SIZE 16 | |||
#define CDC_RX_SIZE 64 | |||
#define CDC_TX_SIZE 64 | |||
#define MIDI_INTERFACE 2 // MIDI | |||
#define MIDI_NUM_CABLES 8 | |||
#define MIDI_TX_ENDPOINT 4 | |||
#define MIDI_TX_SIZE 64 | |||
#define MIDI_RX_ENDPOINT 5 | |||
@@ -575,6 +640,49 @@ let me know? http://forum.pjrc.com/forums/4-Suggestions-amp-Bug-Reports | |||
#define CDC_RX_SIZE 64 | |||
#define CDC_TX_SIZE 64 | |||
#define MIDI_INTERFACE 2 // MIDI | |||
#define MIDI_NUM_CABLES 1 | |||
#define MIDI_TX_ENDPOINT 4 | |||
#define MIDI_TX_SIZE 64 | |||
#define MIDI_RX_ENDPOINT 5 | |||
#define MIDI_RX_SIZE 64 | |||
#define AUDIO_INTERFACE 3 // Audio (uses 3 consecutive interfaces) | |||
#define AUDIO_TX_ENDPOINT 6 | |||
#define AUDIO_TX_SIZE 180 | |||
#define AUDIO_RX_ENDPOINT 7 | |||
#define AUDIO_RX_SIZE 180 | |||
#define AUDIO_SYNC_ENDPOINT 8 | |||
#define ENDPOINT1_CONFIG ENDPOINT_TRANSIMIT_ONLY | |||
#define ENDPOINT2_CONFIG ENDPOINT_RECEIVE_ONLY | |||
#define ENDPOINT3_CONFIG ENDPOINT_TRANSIMIT_ONLY | |||
#define ENDPOINT4_CONFIG ENDPOINT_TRANSIMIT_ONLY | |||
#define ENDPOINT5_CONFIG ENDPOINT_RECEIVE_ONLY | |||
#define ENDPOINT6_CONFIG ENDPOINT_TRANSMIT_ISOCHRONOUS | |||
#define ENDPOINT7_CONFIG ENDPOINT_RECEIVE_ISOCHRONOUS | |||
#define ENDPOINT8_CONFIG ENDPOINT_TRANSMIT_ISOCHRONOUS | |||
#elif defined(USB_MIDI_X8_AUDIO_SERIAL) | |||
#define VENDOR_ID 0x16C0 | |||
#define PRODUCT_ID 0x048A | |||
#define BCD_DEVICE 0x0300 | |||
#define MANUFACTURER_NAME {'T','e','e','n','s','y','d','u','i','n','o'} | |||
#define MANUFACTURER_NAME_LEN 11 | |||
#define PRODUCT_NAME {'T','e','e','n','s','y',' ','M','I','D','I','x','8','/','A','u','d','i','o'} | |||
#define PRODUCT_NAME_LEN 17 | |||
#define EP0_SIZE 64 | |||
#define NUM_ENDPOINTS 8 | |||
#define NUM_USB_BUFFERS 30 | |||
#define NUM_INTERFACE 6 | |||
#define CDC_IAD_DESCRIPTOR 1 | |||
#define CDC_STATUS_INTERFACE 0 | |||
#define CDC_DATA_INTERFACE 1 // Serial | |||
#define CDC_ACM_ENDPOINT 1 | |||
#define CDC_RX_ENDPOINT 2 | |||
#define CDC_TX_ENDPOINT 3 | |||
#define CDC_ACM_SIZE 16 | |||
#define CDC_RX_SIZE 64 | |||
#define CDC_TX_SIZE 64 | |||
#define MIDI_INTERFACE 2 // MIDI | |||
#define MIDI_NUM_CABLES 8 | |||
#define MIDI_TX_ENDPOINT 4 | |||
#define MIDI_TX_SIZE 64 | |||
#define MIDI_RX_ENDPOINT 5 | |||
@@ -620,6 +728,7 @@ let me know? http://forum.pjrc.com/forums/4-Suggestions-amp-Bug-Reports | |||
#define CDC_RX_SIZE 64 | |||
#define CDC_TX_SIZE 64 | |||
#define MIDI_INTERFACE 2 // MIDI | |||
#define MIDI_NUM_CABLES 1 | |||
#define MIDI_TX_ENDPOINT 3 | |||
#define MIDI_TX_SIZE 64 | |||
#define MIDI_RX_ENDPOINT 3 |
@@ -36,10 +36,12 @@ | |||
#ifdef MIDI_INTERFACE // defined by usb_dev.h -> usb_desc.h | |||
#if F_CPU >= 20000000 | |||
uint8_t usb_midi_msg_cable; | |||
uint8_t usb_midi_msg_channel; | |||
uint8_t usb_midi_msg_type; | |||
uint8_t usb_midi_msg_data1; | |||
uint8_t usb_midi_msg_data2; | |||
// TODO: separate sysex buffers for each cable... | |||
uint8_t usb_midi_msg_sysex[USB_MIDI_SYSEX_MAX]; | |||
uint16_t usb_midi_msg_sysex_len; | |||
void (*usb_midi_handleNoteOff)(uint8_t ch, uint8_t note, uint8_t vel) = NULL; | |||
@@ -241,6 +243,7 @@ int usb_midi_read(uint32_t channel) | |||
type1 = n & 15; | |||
type2 = (n >> 12) & 15; | |||
ch = ((n >> 8) & 15) + 1; | |||
usb_midi_msg_cable = (n >> 4) & 15; | |||
if (type1 >= 0x08 && type1 <= 0x0E) { | |||
if (channel && channel != ch) { | |||
// ignore other channels when user wants single channel read |
@@ -73,6 +73,7 @@ void usb_midi_flush_output(void); | |||
int usb_midi_read(uint32_t channel); | |||
uint32_t usb_midi_available(void); | |||
uint32_t usb_midi_read_message(void); | |||
extern uint8_t usb_midi_msg_cable; | |||
extern uint8_t usb_midi_msg_channel; | |||
extern uint8_t usb_midi_msg_type; | |||
extern uint8_t usb_midi_msg_data1; | |||
@@ -148,6 +149,7 @@ class usb_midi_class | |||
send(0xE0, value, value >> 7, channel, cable); | |||
}; | |||
void sendSysEx(uint32_t length, const uint8_t *data, bool hasTerm=false, uint8_t cable=0) __attribute__((always_inline)) { | |||
if (cable >= MIDI_NUM_CABLES) return; | |||
if (hasTerm) { | |||
if (length > 2) { | |||
usb_midi_send_sysex(data + 1, length - 2, cable); | |||
@@ -231,6 +233,7 @@ class usb_midi_class | |||
sendControlChange(98, 0x7F, channel, cable); | |||
} | |||
void send(uint8_t type, uint8_t data1, uint8_t data2, uint8_t channel, uint8_t cable) __attribute__((always_inline)) { | |||
if (cable >= MIDI_NUM_CABLES) return; | |||
if (type < 0xF0) { | |||
if (type < 0x80) return; | |||
type &= 0xF0; | |||
@@ -252,6 +255,9 @@ class usb_midi_class | |||
inline uint8_t getType(void) __attribute__((always_inline)) { | |||
return usb_midi_msg_type; | |||
}; | |||
inline uint8_t getCable(void) __attribute__((always_inline)) { | |||
return usb_midi_msg_cable; | |||
}; | |||
inline uint8_t getChannel(void) __attribute__((always_inline)) { | |||
return usb_midi_msg_channel; | |||
}; |
@@ -56,6 +56,9 @@ | |||
#ifdef PRODUCT_ID | |||
#undef PRODUCT_ID | |||
#endif | |||
#ifdef BCD_DEVICE | |||
#undef BCD_DEVICE | |||
#endif | |||
#ifdef DEVICE_CLASS | |||
#undef DEVICE_CLASS | |||
#endif | |||
@@ -168,6 +171,15 @@ | |||
#undef CDC_IAD_DESCRIPTOR | |||
#endif | |||
#ifdef MIDI_INTERFACE | |||
#undef MIDI_INTERFACE | |||
#endif | |||
#ifdef MIDI_NUM_CABLES | |||
#undef MIDI_NUM_CABLES | |||
#endif | |||
#ifdef MIDI_INTERFACE_JACK_PAIR | |||
#undef MIDI_INTERFACE_JACK_PAIR | |||
#endif | |||
#ifdef MIDI_TX_ENDPOINT | |||
#undef MIDI_TX_ENDPOINT | |||
#endif | |||
#ifdef MIDI_TX_SIZE |