Hi Brian,

Thank you for your reply.  I will post the MIDI section of our descriptors 
below.  
Thanks for any help and/or insights.

Philip Lukidis

MIDI subset of our descriptors (dumped from Windows):

Interface Association Descriptor:
------------------------------
0x08    bLength
0x0B    bDescriptorType
0x03    bFirstInterface
0x02    bInterfaceCount
0x01    bFunctionClass   (Audio Device Class)
0x00    bFunctionSubClass   
0x00    bFunctionProtocol   
0x02    iFunction   "FunctionName"

Interface Descriptor:
------------------------------
0x09    bLength
0x04    bDescriptorType
0x03    bInterfaceNumber
0x00    bAlternateSetting
0x00    bNumEndPoints
0x01    bInterfaceClass   (Audio Device Class)
0x01    bInterfaceSubClass   (Audio Control Interface)
0x00    bInterfaceProtocol   
0x30    iInterface   "MIDI Control"

AC Interface Header Descriptor:
------------------------------
0x09    bLength
0x24    bDescriptorType
0x01    bDescriptorSubtype
0x0100  bcdADC
0x0009  wTotalLength
0x01    bInCollection
0x04    baInterfaceNr(1)

Interface Descriptor:
------------------------------
0x09    bLength
0x04    bDescriptorType
0x04    bInterfaceNumber
0x00    bAlternateSetting
0x04    bNumEndPoints
0x01    bInterfaceClass   (Audio Device Class)
0x03    bInterfaceSubClass   (MIDI Streaming Interface)
0x00    bInterfaceProtocol   
0x31    iInterface   "MIDI Streaming"

MS Interface Header Descriptor:
------------------------------
0x07    bLength
0x24    bDescriptorType
0x01    bDescriptorSubtype
0x0100  bcdMSC
0x007B  wTotalLength

MS MIDI IN Jack Descriptor:
------------------------------
0x06    bLength
0x24    bDescriptorType
0x02    bDescriptorSubtype
0x01    bJackType
0x01    bJackID
0x02    iJack   "Port 1"

MS MIDI IN Jack Descriptor:
------------------------------
0x06    bLength
0x24    bDescriptorType
0x02    bDescriptorSubtype
0x02    bJackType
0x02    bJackID
0x02    iJack   "Port 1"

MS MIDI IN Jack Descriptor:
------------------------------
0x06    bLength
0x24    bDescriptorType
0x02    bDescriptorSubtype
0x01    bJackType
0x03    bJackID
0x34    iJack   "Port 2"

MS MIDI IN Jack Descriptor:
------------------------------
0x06    bLength
0x24    bDescriptorType
0x02    bDescriptorSubtype
0x02    bJackType
0x04    bJackID
0x34    iJack   "Port 2"

MS MIDI OUT Jack Descriptor:
------------------------------
0x09    bLength
0x24    bDescriptorType
0x03    bDescriptorSubtype
0x01    bJackType
0x05    bJackID
0x01    bNrInputPins
0x02    baSourceID(1)
0x01    baSourcePin(1)
0x02    iJack   "Port 1"

MS MIDI OUT Jack Descriptor:
------------------------------
0x09    bLength
0x24    bDescriptorType
0x03    bDescriptorSubtype
0x02    bJackType
0x06    bJackID
0x01    bNrInputPins
0x01    baSourceID(1)
0x01    baSourcePin(1)
0x02    iJack   "Port 1"

MS MIDI OUT Jack Descriptor:
------------------------------
0x09    bLength
0x24    bDescriptorType
0x03    bDescriptorSubtype
0x01    bJackType
0x07    bJackID
0x01    bNrInputPins
0x04    baSourceID(1)
0x01    baSourcePin(1)
0x34    iJack   "Port 2"

MS MIDI OUT Jack Descriptor:
------------------------------
0x09    bLength
0x24    bDescriptorType
0x03    bDescriptorSubtype
0x02    bJackType
0x08    bJackID
0x01    bNrInputPins
0x03    baSourceID(1)
0x01    baSourcePin(1)
0x34    iJack   "Port 2"

Endpoint Descriptor (Audio/MIDI):
------------------------------
0x09    bLength
0x05    bDescriptorType
0x02    bEndpointAddress   (OUT Endpoint)
0x02    bmAttributes    (Transfer: Bulk / Synch: None / Usage: Data)
0x0200  wMaxPacketSize   (512 Bytes)
0x00    bInterval
0x00    bRefresh
0x00    bSynchAddress

MS Bulk Data Endpoint Descriptor:
------------------------------
0x05    bLength
0x25    bDescriptorType
0x01    bDescriptorSubtype
0x01    bNumEmbMIDIJack
0x01    baAssocJackID(1)

Endpoint Descriptor (Audio/MIDI):
------------------------------
0x09    bLength
0x05    bDescriptorType
0x83    bEndpointAddress   (IN Endpoint)
0x02    bmAttributes    (Transfer: Bulk / Synch: None / Usage: Data)
0x0200  wMaxPacketSize   (512 Bytes)
0x00    bInterval
0x00    bRefresh
0x00    bSynchAddress

MS Bulk Data Endpoint Descriptor:
------------------------------
0x05    bLength
0x25    bDescriptorType
0x01    bDescriptorSubtype
0x01    bNumEmbMIDIJack
0x05    baAssocJackID(1)

Endpoint Descriptor (Audio/MIDI):
------------------------------
0x09    bLength
0x05    bDescriptorType
0x03    bEndpointAddress   (OUT Endpoint)
0x02    bmAttributes    (Transfer: Bulk / Synch: None / Usage: Data)
0x0200  wMaxPacketSize   (512 Bytes)
0x00    bInterval
0x00    bRefresh
0x00    bSynchAddress

MS Bulk Data Endpoint Descriptor:
------------------------------
0x05    bLength
0x25    bDescriptorType
0x01    bDescriptorSubtype
0x01    bNumEmbMIDIJack
0x03    baAssocJackID(1)

Endpoint Descriptor (Audio/MIDI):
------------------------------
0x09    bLength
0x05    bDescriptorType
0x84    bEndpointAddress   (IN Endpoint)
0x02    bmAttributes    (Transfer: Bulk / Synch: None / Usage: Data)
0x0200  wMaxPacketSize   (512 Bytes)
0x00    bInterval
0x00    bRefresh
0x00    bSynchAddress

MS Bulk Data Endpoint Descriptor:
------------------------------
0x05    bLength
0x25    bDescriptorType
0x01    bDescriptorSubtype
0x01    bNumEmbMIDIJack
0x07    baAssocJackID(1)

-----Original Message-----
From: Brian Willoughby [mailto:[email protected]] 
Sent: June-06-17 8:24 PM
To: Philip Lukidis
Cc: [email protected]
Subject: Re: Question for USB MIDI Support on OSX

Hi Philip,

It's possible that your USB-MIDI Descriptors are inconsistent. If you'd like to 
send them to me via private email, I'd be willing to review them to see if I 
can find any errors. The output format from USB Prober would be most 
convenient, but just about any format that includes the Device & Configuration 
Descriptor bytes in hex would work, since USB Prober does not decode the 
USB-MIDI Class Descriptors anyway.

I've developed a number of USB-MIDI Devices, and have experimented with 
official spec features that are not supported anywhere else but macOS. In 
particular, Windows does not support a lot of the more interesting features in 
the USB-MIDI Spec. I've found the built-in OS support from Apple to be very 
complete, so it's basically a question of whether you have made some error or 
if Apple really does not support what you're trying to do. My suggestion above 
to review the Descriptors is the first step, and you could use an Apple 
Developer Support incident if things still aren't working once you're sure that 
all your data is correct and consistent.

It's also possible that you might get a different set of eyes on your problem 
if you post to Apple's USB mailing list, but sometimes they refer audio/MIDI 
issues here anyway. It all depends.

Brian Willoughby
Sound Consulting


On Jun 6, 2017, at 3:35 PM, Philip Lukidis <[email protected]> wrote:
> We were wondering if OSX supports, in the domain of USB MIDI, more than one 
> pair of bulk in/out endpoints for a given USB MIDI interface, with each 
> endpoint having its own external jack.  We have seen that only the last 
> endpoint in/out pair is polled over the USB, not the first one, despite the 
> fact that both MIDI in ports and both MIDI out ports appear at the 
> application level. 
> Yes, we could more than one cable number over the same endpoint, but our 
> question remains: is more than one endpoint pair on the same USB MIDI 
> interface supported by OSX, with each single endpoint having its own external 
> jack?
> Any help and/or information would be much appreciated.
> 
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/coreaudio-api/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to