Does Serial + Midi ≠ Class Compliant?

Status
Not open for further replies.
I'm using Teensy 3.2 in a midi controller that also has an LCD screen for serial communication coming from Max for Live. When I program the board, I need to use "USB Type: Serial + Midi" (or one of the Serial + Midi options). I still see my midi controller in Ableton, etc, but it doesn't show up as a midi device when cooperating with iConnectivity PlayAudio12's unique input. The folks at iConnectivity say it's because it's not a class-compliant device but I'm not sure that's true.

For what it's worth, I can program the same device without Serial functionality and it's recognized by the PlayAudio12.

So, my question is, does programming with a Serial + Midi USB type affect class compliance? Is there an obvious explanation I'm missing? Thanks!
 
I'm using an iConnectivity MIO-10 and have run into the same issue with it's USB host not recognizing Teensy multi-cable USB Midi.

The MIO-10 ordinarily recognizes multi-cable class compliant USB-Midi devices eg. it sees both Midi ports of an Arturia Beatstep Pro.
The MIO-10 recognizes Teensy Midi but unfortunately not Teensy Midi x 4 or 16.

The same issue is referred to here:-

https://forum.pjrc.com/threads/5337...I-sendRealTime?p=184800&viewfull=1#post184800
 
I'm pretty sure Teensy's USB MIDI implementation is class compliant. I wrote the code using the USBIF's "USB Device Class Definition for MIDI Devices" document, version 1.0 from Nov 1, 1999, and also the Audio class spec, version 1.0. If you look at the descriptors in usb_desc.c, you'll see I put comments with the page numbers in that spec where each piece of the descriptor data is defined.

My guess is these products have limited (or "lame") USB host implementations which only recognize a subset of what the MIDI & audio class allow. Those documents do have a pretty huge number of features, specially the MIDI "jacks" in the descriptors.

If anyone has a multiple cable/port USB MIDI device which does work with those products, maybe we could capture its descriptors to see an example of what those hosts will recognize?
 
If anyone has a multiple cable/port USB MIDI device which does work with those products, maybe we could capture its descriptors to see an example of what those hosts will recognize?

Is there a way of doing that without a USB Protocol Analyser?
 
The most convincing way to decide would be if there was an industry-accepted "class compliance test suite" that could test a device or host for every officially defined feature, and say yes or no. I recall that existed for some kinds of standards, but not sure about USB MIDI.
 
Hi guys,
any news on this issue? I just got the new iConnectivity MIO-XL and it has the same issue: the teensy is not recognized in MIDIx4 mode, only in MIDI mode (single port).
My Yamaha ModX keyboard works fine (3 ports recognized). Is there any way I can help fix this? I know some C, but no USB protocol stuff, nor do I have an analyzer.
Best, Boris
 
Last edited:
First, Teensy's MIDIx4 definitely is class compliant. But 4 ports is pretty far from the most common case. Not all products that claim to support MIDI devices fully support the many ways things can be configured by the MIDI class spec. So it's a matter of guesswork what subset of the class spec your iConnectivity MIO-XL really supports (manufacturers almost never publish such tech details).

Is there any way I can help fix this?

Yes, or at least maybe.

The first step is to capture the USB descriptors for your Yamaha ModX keyboard and post that info here. How exactly you do that depends on your OS. On Linux, the command is "lsusb -v" (lists all devices... trim away all the hubs and other stuff). Mac has a program called "USB Prober", which I believe is included with one of Apple's dev tools downloads. It used to be in X-Code. I don't use Windows much, but if that's your only system, hopefully someone familiar with Windows can chime in with advice about how to do this.

Once we can see all of that keyboard's descriptor data, maybe something will be apparent about how it's different than the descriptors we currently use for Teensy's MIDIx4.
 
Hi Paul,
thanks for getting back so quickly. I think you're right, I believe that the company is referring to this on one of their support pages (https://iconnectivity.supportbee.io...e-with-the-iconnectivity-usb-midi-host-port):

Note that the iConnectivity USB-MIDI Host port is designed so that it can operate as a MIDI interface even without having a computer connected. However that means it can only pass MIDI information - you cannot use it as a normal USB port, or pass audio data via it. It is purely a MIDI connection only.

As a consequence of this some controller devices that have extra functionality which requires a direct connection to a computer may not work fully or work at all via our USB-MIDI Host Port. This particularly applies to "smart" hybrid controller+software devices such as those from Native Instruments.

Is there a way to turn the Teensy 3.6 into a USB-MIDI-Only device and disable the "extra functionality" without bricking it? I'll get back to you with the USB log.
 
Is there a way to turn the Teensy 3.6 into a USB-MIDI-Only device and disable the "extra functionality"

Didn't you just say using Tools > USB Type set to MIDI (single port, without other stuff) works fine?

But to answer your question, yes, there is a way. That way involves editing usb_desc.h. Read the comments in that file for some guidance. Generally it's easier to remove stuff, but there are many small details you have to get precisely correct, like if you delete an interface you must adjust the define for the number of interfaces.

Mistakes won't brick your Teensy, but almost all mistake will break the automatic reboot. Arduino can't ask your Teensy to go into programming mode if its USB communication isn't working (or is working in a substantially different config than the software knows). So be mentally prepared to have to press the pushbutton on your Teensy to get a new program to upload. We put that button on every Teensy for exactly this reason, so you have a way to recover after uploading a program which doesn't do USB communication properly.
 
Didn't you just say using Tools > USB Type set to MIDI (without other stuff) works fine?
It does, but I need the multiport (MIDIx4) functionality for my project.

Alright, I'll look into the file, thanks!
 
Alright, here's the lsusb -v from the Yamaha MODX. It's substantially longer than the one of the Teensy USB-MIDIx4, probably because it also has USB-Audio capabilities besides the 3 USB-Midi Ports. Which is interesting, since this is an example of a device that's not MIDI-only and still works like a charm on the MIO-XL:

Code:
Bus 001 Device 006: ID 0499:172a Yamaha Corp. 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          239 Miscellaneous Device
  bDeviceSubClass         2 ?
  bDeviceProtocol         1 Interface Association
  bMaxPacketSize0        64
  idVendor           0x0499 Yamaha Corp.
  idProduct          0x172a 
  bcdDevice            1.00
  iManufacturer           1 
  iProduct                2 
  iSerial                 0 
  bNumConfigurations      2
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength          349
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xc0
      Self Powered
    MaxPower                2mA
    Interface Association:
      bLength                 8
      bDescriptorType        11
      bFirstInterface         0
      bInterfaceCount         4
      bFunctionClass          1 Audio
      bFunctionSubClass       0 
      bFunctionProtocol      32 
      iFunction               0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      1 Control Device
      bInterfaceProtocol     32 
      iInterface              0 
      AudioControl Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      1 (HEADER)
        bcdADC               2.00
        bCategory               8
        wTotalLength           75
        bmControl            0x00
      AudioControl Interface Descriptor:
        bLength                 8
        bDescriptorType        36
        bDescriptorSubtype     10 (CLOCK_SOURCE)
        bClockID                1
        bmAttributes         0x03 Internal programmable Clock 
        bmControls           0x03
          Clock Frequency Control (read/write)
        bAssocTerminal          0
        iClockSource            0 
      AudioControl Interface Descriptor:
        bLength                17
        bDescriptorType        36
        bDescriptorSubtype      2 (INPUT_TERMINAL)
        bTerminalID             2
        wTerminalType      0x0101 USB Streaming
        bAssocTerminal          0
        bCSourceID              1
        bNrChannels             4
        bmChannelConfig   0x00000000
        bmControls    0x0000
        iChannelNames          16 
        iTerminal               0 
      AudioControl Interface Descriptor:
        bLength                12
        bDescriptorType        36
        bDescriptorSubtype      3 (OUTPUT_TERMINAL)
        bTerminalID             3
        wTerminalType      0x0603 Line Connector
        bAssocTerminal          0
        bSourceID               2
        bCSourceID              1
        bmControls         0x0000
        iTerminal               0 
      AudioControl Interface Descriptor:
        bLength                17
        bDescriptorType        36
        bDescriptorSubtype      2 (INPUT_TERMINAL)
        bTerminalID             4
        wTerminalType      0x0603 Line Connector
        bAssocTerminal          0
        bCSourceID              1
        bNrChannels            10
        bmChannelConfig   0x00000000
        bmControls    0x0000
        iChannelNames          48 
        iTerminal               0 
      AudioControl Interface Descriptor:
        bLength                12
        bDescriptorType        36
        bDescriptorSubtype      3 (OUTPUT_TERMINAL)
        bTerminalID             5
        wTerminalType      0x0101 USB Streaming
        bAssocTerminal          0
        bSourceID               4
        bCSourceID              1
        bmControls         0x0000
        iTerminal               0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol     32 
      iInterface              0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol     32 
      iInterface              0 
      AudioStreaming Interface Descriptor:
        bLength                16
        bDescriptorType        36
        bDescriptorSubtype      1 (AS_GENERAL)
        bTerminalLink           2
        bmControls           0x00
        bFormatType             1
        bmFormats         0x00000001
          PCM
        bNrChannels             4
        bmChannelConfig   0x00000000
        iChannelNames          16 
      AudioStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (FORMAT_TYPE)
        bFormatType             1 (FORMAT_TYPE_I)
        bSubslotSize            3
        bBitResolution         24
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x07  EP 7 OUT
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x004e  1x 78 bytes
        bInterval               1
        AudioControl Endpoint Descriptor:
          bLength                 8
          bDescriptorType        37
          bDescriptorSubtype      1 (EP_GENERAL)
          bmAttributes         0x00
          bmControls           0x00
          bLockDelayUnits         0 Undefined
          wLockDelay              0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol     32 
      iInterface              0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol     32 
      iInterface              0 
      AudioStreaming Interface Descriptor:
        bLength                16
        bDescriptorType        36
        bDescriptorSubtype      1 (AS_GENERAL)
        bTerminalLink           5
        bmControls           0x00
        bFormatType             1
        bmFormats         0x00000001
          PCM
        bNrChannels            10
        bmChannelConfig   0x00000000
        iChannelNames          48 
      AudioStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (FORMAT_TYPE)
        bFormatType             1 (FORMAT_TYPE_I)
        bSubslotSize            3
        bBitResolution         24
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x86  EP 6 IN
        bmAttributes           37
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Implicit feedback Data
        wMaxPacketSize     0x00c3  1x 195 bytes
        bInterval               1
        AudioControl Endpoint Descriptor:
          bLength                 8
          bDescriptorType        37
          bDescriptorSubtype      1 (EP_GENERAL)
          bmAttributes         0x00
          bmControls           0x00
          bLockDelayUnits         0 Undefined
          wLockDelay              0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         1 Audio
      bInterfaceSubClass      3 MIDI Streaming
      bInterfaceProtocol      0 
      iInterface              0 
      MIDIStreaming Interface Descriptor:
        bLength                 7
        bDescriptorType        36
        bDescriptorSubtype      1 (HEADER)
        bcdADC               1.00
        wTotalLength          129
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                 1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                 2
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                 3
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                33
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                34
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                35
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                65
        bNrInputPins            1
        baSourceID( 0)         33
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                66
        bNrInputPins            1
        baSourceID( 0)         34
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                67
        bNrInputPins            1
        baSourceID( 0)         35
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                97
        bNrInputPins            1
        baSourceID( 0)          1
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                98
        bNrInputPins            1
        baSourceID( 0)          2
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                99
        bNrInputPins            1
        baSourceID( 0)          3
        BaSourcePin( 0)         1
        iJack                   0 
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        bRefresh                0
        bSynchAddress           0
        MIDIStreaming Endpoint Descriptor:
          bLength                 7
          bDescriptorType        37
          bDescriptorSubtype      1 (GENERAL)
          bNumEmbMIDIJack         3
          baAssocJackID( 0)      33
          baAssocJackID( 1)      34
          baAssocJackID( 2)      35
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        bRefresh                0
        bSynchAddress           0
        MIDIStreaming Endpoint Descriptor:
          bLength                 7
          bDescriptorType        37
          bDescriptorSubtype      1 (GENERAL)
          bNumEmbMIDIJack         3
          baAssocJackID( 0)      97
          baAssocJackID( 1)      98
          baAssocJackID( 2)      99
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength          290
    bNumInterfaces          5
    bConfigurationValue     2
    iConfiguration          0 
    bmAttributes         0xc0
      Self Powered
    MaxPower                2mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      1 
      bInterfaceProtocol      0 
      iInterface              0 
      ** UNRECOGNIZED:  0a 24 01 00 01 34 00 02 01 02
      ** UNRECOGNIZED:  0c 24 02 01 01 01 00 02 03 00 00 00
      ** UNRECOGNIZED:  09 24 03 02 01 03 00 01 00
      ** UNRECOGNIZED:  0c 24 02 03 03 06 00 02 03 00 00 00
      ** UNRECOGNIZED:  09 24 03 04 01 01 00 03 00
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol      0 
      iInterface              0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol      0 
      iInterface              0 
      ** UNRECOGNIZED:  07 24 01 01 01 01 00
      ** UNRECOGNIZED:  0b 24 02 01 04 03 18 01 44 ac 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x07  EP 7 OUT
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x004e  1x 78 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol      0 
      iInterface              0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol      0 
      iInterface              0 
      ** UNRECOGNIZED:  07 24 01 04 01 01 00
      ** UNRECOGNIZED:  0b 24 02 01 0a 03 18 01 44 ac 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x86  EP 6 IN
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x00c3  1x 195 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      3 
      bInterfaceProtocol    255 
      iInterface              0 
      ** UNRECOGNIZED:  07 24 01 00 01 42 00
      ** UNRECOGNIZED:  06 24 02 02 01 00
      ** UNRECOGNIZED:  06 24 02 02 02 00
      ** UNRECOGNIZED:  06 24 02 02 03 00
      ** UNRECOGNIZED:  09 24 03 02 01 01 01 01 00
      ** UNRECOGNIZED:  09 24 03 02 02 01 01 01 00
      ** UNRECOGNIZED:  09 24 03 02 03 01 01 01 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        4
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol    255 Vendor Specific Protocol
      iInterface              0 
      ** UNRECOGNIZED:  07 24 01 00 01 24 00
      ** UNRECOGNIZED:  06 24 02 02 01 00
      ** UNRECOGNIZED:  09 24 03 02 01 01 01 01 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
 
Here are some new insights:

I have edited usb_desc.h and commented out the line 382, which adds the SEREMU_INTERFACE to the USB_MIDI4 definition:

Code:
#elif defined(USB_MIDI4)
...
    #define NUM_INTERFACE		1  // <-- also tried the previous value 2 here
    //#define SEREMU_INTERFACE      1   // <-- this here

For the code to compile, I also had to comment out line 41 in yield.cpp, maybe it needs an #ifdef?

Code:
void yield(void)
{
    static uint8_t running=0;

    if (running) return; // TODO: does this need to be atomic?
    running = 1;
    //if (Serial.available()) serialEvent();  // <-- this here
    if (Serial1.available()) serialEvent1();
    if (Serial2.available()) serialEvent2();
    if (Serial3.available()) serialEvent3();
...

I used `lsusb -v` to confirm that the related interface descriptor disappears. It does, and only the MIDI Streaming interface descriptor remains.
However, the iConnectivity MIO-XL MIDI interface still does not recognize the teensy in MIDIx4 mode (my Mac is still happy with it) :(

As a test, I also removed the SEREMU_INTERFACE from the single-port MIDI case just to make sure this doesn't break it. It doesn't, the MIO-XL still detects the "stripped" Teensy in single-port MIDI mode, but not in MIDIx4 mode.

So unless my changes made the descriptor somehow invalid, I would assume that the "hybrid deviceness" of the Teensy is not the problem here!

Do you have any alternative approaches I could take?
Best, Boris
 
One step forward:

While trying to bring the USB setup of the Teensy MIDIx4 closer to my Yamaha MODX, I switched MIDI_NUM_CABLES from 4 to 3 in line 390 of usb_desc.h. This helped, the MIO-XL detects the teensy and shows all three ports. Even with the other USB protocol used for programming the Teensy. In theory, the MIO-XL should be able to handle devices with 16 ports - at least the iConnectivity support send me a screenshot with one of their own devices plugged into the MIO-XL, and all 16 ports show up. I don't know why, but NUM_CABLES 4 or 16 doesn't work with the MIO-XL in MIDIx4 or MIDIx16 mode.

Unfortunately, while the Teensy receives notes sent by the MIO-XL, it doesn't work the other around, i.e., the MIO-XL doesn't receive any MIDI notes sent by the Teensy on any port in "MIDIx3". Do I need to adapt more settings?
 
Another small step forward: While reducing NUM_CABLES to 3 caused the MIO-XL to detect the Teensy and send MIDI data from MIO-XL to the Teensy (but not vice versa), reducing NUM_CABLES even to 2 gives me bi-directional traffic! Very nice. But how could I increase the NUM_CABLES without loosing the connection? Sorry, I'm stumbling around in the dark here...
 
I gave up stumbling around in the dark and sidestepped the Teensy Midi - MIO-10 issue for now with another rackmount Midi interface.

In relation to the iConnectivity MIO-10 Midi interface, I read somewhere that a user can plug other iConnectivity devices into it's Usb host port. Perhaps it would help Paul if he could see the Usb descriptor details for the MIO-XL.

I'm suggesting this based on a hunch that if iConnectivity devices work via a PC Usb host or a Usb host port of some other iConnectivity Usb-Midi device then the Usb descriptor details of the MIO-XL or a MIO-10 might be a good place to start.

If someone would kindly give a mere-mortal like me a heads up as how to sniff out Usb descriptor stuff using Win 7, I'd gladly post same wrt MIO-10, Arturia Beatstep Pro, Behringer BCR-2000 and DSI Mopho if at all helpful. I've got Wireshark up and running but have not got past UI headscratching yet.
 
There we go, this is "lsusb -v" for the MIO-XL:
Code:
Bus 001 Device 005: ID 2321:0026  
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x2321 
  idProduct          0x0026 
  bcdDevice            1.00
  iManufacturer           1 
  iProduct                2 
  iSerial                 3 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength          581
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xc0
      Self Powered
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      1 Control Device
      bInterfaceProtocol      0 
      iInterface              0 
      AudioControl Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      1 (HEADER)
        bcdADC               1.00
        wTotalLength            9
        bInCollection           1
        baInterfaceNr( 0)       1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         1 Audio
      bInterfaceSubClass      3 MIDI Streaming
      bInterfaceProtocol      0 
      iInterface              0 
      MIDIStreaming Interface Descriptor:
        bLength                 7
        bDescriptorType        36
        bDescriptorSubtype      1 (HEADER)
        bcdADC               1.00
        wTotalLength          545
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                16
        iJack                  16 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                17
        iJack                  17 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                18
        iJack                  18 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                19
        iJack                  19 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                20
        iJack                  20 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                21
        iJack                  21 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                22
        iJack                  22 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                23
        iJack                  23 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                24
        iJack                  24 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                25
        iJack                  25 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                26
        iJack                  26 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                27
        iJack                  27 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                28
        iJack                  28 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                29
        iJack                  29 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                30
        iJack                  30 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                31
        iJack                  31 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                32
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                33
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                34
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                35
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                36
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                37
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                38
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                39
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                40
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                41
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                42
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                43
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                44
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                45
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                46
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                47
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                64
        bNrInputPins            1
        baSourceID( 0)         32
        BaSourcePin( 0)         1
        iJack                  16 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                65
        bNrInputPins            1
        baSourceID( 0)         33
        BaSourcePin( 0)         1
        iJack                  17 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                66
        bNrInputPins            1
        baSourceID( 0)         34
        BaSourcePin( 0)         1
        iJack                  18 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                67
        bNrInputPins            1
        baSourceID( 0)         35
        BaSourcePin( 0)         1
        iJack                  19 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                68
        bNrInputPins            1
        baSourceID( 0)         36
        BaSourcePin( 0)         1
        iJack                  20 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                69
        bNrInputPins            1
        baSourceID( 0)         37
        BaSourcePin( 0)         1
        iJack                  21 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                70
        bNrInputPins            1
        baSourceID( 0)         38
        BaSourcePin( 0)         1
        iJack                  22 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                71
        bNrInputPins            1
        baSourceID( 0)         39
        BaSourcePin( 0)         1
        iJack                  23 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                72
        bNrInputPins            1
        baSourceID( 0)         40
        BaSourcePin( 0)         1
        iJack                  24 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                73
        bNrInputPins            1
        baSourceID( 0)         41
        BaSourcePin( 0)         1
        iJack                  25 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                74
        bNrInputPins            1
        baSourceID( 0)         42
        BaSourcePin( 0)         1
        iJack                  26 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                75
        bNrInputPins            1
        baSourceID( 0)         43
        BaSourcePin( 0)         1
        iJack                  27 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                76
        bNrInputPins            1
        baSourceID( 0)         44
        BaSourcePin( 0)         1
        iJack                  28 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                77
        bNrInputPins            1
        baSourceID( 0)         45
        BaSourcePin( 0)         1
        iJack                  29 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                78
        bNrInputPins            1
        baSourceID( 0)         46
        BaSourcePin( 0)         1
        iJack                  30 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                79
        bNrInputPins            1
        baSourceID( 0)         47
        BaSourcePin( 0)         1
        iJack                  31 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                48
        bNrInputPins            1
        baSourceID( 0)         16
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                49
        bNrInputPins            1
        baSourceID( 0)         17
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                50
        bNrInputPins            1
        baSourceID( 0)         18
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                51
        bNrInputPins            1
        baSourceID( 0)         19
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                52
        bNrInputPins            1
        baSourceID( 0)         20
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                53
        bNrInputPins            1
        baSourceID( 0)         21
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                54
        bNrInputPins            1
        baSourceID( 0)         22
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                55
        bNrInputPins            1
        baSourceID( 0)         23
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                56
        bNrInputPins            1
        baSourceID( 0)         24
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                57
        bNrInputPins            1
        baSourceID( 0)         25
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                58
        bNrInputPins            1
        baSourceID( 0)         26
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                59
        bNrInputPins            1
        baSourceID( 0)         27
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                60
        bNrInputPins            1
        baSourceID( 0)         28
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                61
        bNrInputPins            1
        baSourceID( 0)         29
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                62
        bNrInputPins            1
        baSourceID( 0)         30
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                63
        bNrInputPins            1
        baSourceID( 0)         31
        BaSourcePin( 0)         1
        iJack                   0 
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
        bRefresh                0
        bSynchAddress           0
        MIDIStreaming Endpoint Descriptor:
          bLength                20
          bDescriptorType        37
          bDescriptorSubtype      1 (GENERAL)
          bNumEmbMIDIJack        16
          baAssocJackID( 0)      64
          baAssocJackID( 1)      65
          baAssocJackID( 2)      66
          baAssocJackID( 3)      67
          baAssocJackID( 4)      68
          baAssocJackID( 5)      69
          baAssocJackID( 6)      70
          baAssocJackID( 7)      71
          baAssocJackID( 8)      72
          baAssocJackID( 9)      73
          baAssocJackID(10)      74
          baAssocJackID(11)      75
          baAssocJackID(12)      76
          baAssocJackID(13)      77
          baAssocJackID(14)      78
          baAssocJackID(15)      79
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
        bRefresh                0
        bSynchAddress           0
        MIDIStreaming Endpoint Descriptor:
          bLength                20
          bDescriptorType        37
          bDescriptorSubtype      1 (GENERAL)
          bNumEmbMIDIJack        16
          baAssocJackID( 0)      16
          baAssocJackID( 1)      17
          baAssocJackID( 2)      18
          baAssocJackID( 3)      19
          baAssocJackID( 4)      20
          baAssocJackID( 5)      21
          baAssocJackID( 6)      22
          baAssocJackID( 7)      23
          baAssocJackID( 8)      24
          baAssocJackID( 9)      25
          baAssocJackID(10)      26
          baAssocJackID(11)      27
          baAssocJackID(12)      28
          baAssocJackID(13)      29
          baAssocJackID(14)      30
          baAssocJackID(15)      31
 
MIO-10 Usb Device descriptor info

@Paul. Using Microsoft's UsbView, here's iConnectivity's MIO-10 Usb Descriptor details looking at it's Primary device port (Rear Panel):-

Code:
[Port2]  :  USB Composite Device


Device Power State:               PowerDeviceD0

       ---===>Device Information<===---
English product name: "mio10"

ConnectionStatus:                  
Current Config Value:              0x01  -> Device Bus Speed: Full
Device Address:                    0x01
Open Pipes:                           2

          ===>Device Descriptor<===
bLength:                           0x12
bDescriptorType:                   0x01
bcdUSB:                          0x0110
bDeviceClass:                      0x00  -> This is an Interface Class Defined Device
bDeviceSubClass:                   0x00
bDeviceProtocol:                   0x00
bMaxPacketSize0:                   0x40 = (64) Bytes
idVendor:                        0x2321 = iKingdom Corp. (d.b.a. iConnectivity)
idProduct:                       0x001C
bcdDevice:                       0x0100
iManufacturer:                     0x01
     English (United States)  "iConnectivity"
iProduct:                          0x02
     English (United States)  "mio10"
iSerialNumber:                     0x03
     English (United States)  "00000836"
bNumConfigurations:                0x01

          ---===>Open Pipes<===---

          ===>Endpoint Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x05
bEndpointAddress:                  0x81  -> Direction: IN - EndpointID: 1
bmAttributes:                      0x02  -> Bulk Transfer Type
wMaxPacketSize:                  0x0040 = 0x40 bytes
wInterval:                       0x0000
bSyncAddress:                      0x00

          ===>Endpoint Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x05
bEndpointAddress:                  0x01  -> Direction: OUT - EndpointID: 1
bmAttributes:                      0x02  -> Bulk Transfer Type
wMaxPacketSize:                  0x0040 = 0x40 bytes
wInterval:                       0x0000
bSyncAddress:                      0x00

       ---===>Full Configuration Descriptor<===---

          ===>Configuration Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x02
wTotalLength:                    0x0245  -> Validated
bNumInterfaces:                    0x02
bConfigurationValue:               0x01
iConfiguration:                    0x00
bmAttributes:                      0xC0  -> Self Powered
MaxPower:                          0x00 =   0 mA

          ===>Interface Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x04
bInterfaceNumber:                  0x00
bAlternateSetting:                 0x00
bNumEndpoints:                     0x00
bInterfaceClass:                   0x01  -> Audio Interface Class
bInterfaceSubClass:                0x01  -> Audio Control Interface SubClass
bInterfaceProtocol:                0x00
iInterface:                        0x00

          ===>Audio Control Interface Header Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x24 (CS_INTERFACE)
bDescriptorSubtype:                0x01 (HEADER)
bcdADC:                          0x0100
wTotalLength:                    0x0009
bInCollection:                     0x01
baInterfaceNr[1]:                  0x01

          ===>Interface Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x04
bInterfaceNumber:                  0x01
bAlternateSetting:                 0x00
bNumEndpoints:                     0x02
bInterfaceClass:                   0x01  -> Audio Interface Class
bInterfaceSubClass:                0x03  -> MIDI Streaming Interface SubClass
bInterfaceProtocol:                0x00
iInterface:                        0x00

          ===>Descriptor Hex Dump<===
bLength:                           0x07
bDescriptorType:                   0x24
07 24 01 00 01 21 02 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 10 10 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 11 11 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 12 12 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 13 13 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 14 14 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 15 15 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 16 16 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 17 17 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 18 18 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 19 19 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 1A 1A 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 1B 1B 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 1C 1C 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 1D 1D 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 1E 1E 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 1F 1F 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 20 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 21 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 22 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 23 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 24 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 25 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 26 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 27 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 28 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 29 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 2A 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 2B 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 2C 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 2D 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 2E 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 2F 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 40 01 20 01 10 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 41 01 21 01 11 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 42 01 22 01 12 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 43 01 23 01 13 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 44 01 24 01 14 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 45 01 25 01 15 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 46 01 26 01 16 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 47 01 27 01 17 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 48 01 28 01 18 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 49 01 29 01 19 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 4A 01 2A 01 1A 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 4B 01 2B 01 1B 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 4C 01 2C 01 1C 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 4D 01 2D 01 1D 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 4E 01 2E 01 1E 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 4F 01 2F 01 1F 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 30 01 10 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 31 01 11 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 32 01 12 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 33 01 13 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 34 01 14 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 35 01 15 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 36 01 16 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 37 01 17 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 38 01 18 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 39 01 19 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 3A 01 1A 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 3B 01 1B 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 3C 01 1C 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 3D 01 1D 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 3E 01 1E 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 3F 01 1F 01 00 

          ===>Endpoint Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x05
bEndpointAddress:                  0x81  -> Direction: IN - EndpointID: 1
bmAttributes:                      0x02  -> Bulk Transfer Type
wMaxPacketSize:                  0x0040 = 0x40 bytes
wInterval:                       0x0000
bSyncAddress:                      0x00

          ===>Descriptor Hex Dump<===
bLength:                           0x14
bDescriptorType:                   0x25
14 25 01 10 40 41 42 43 44 45 46 47 48 49 4A 4B 
4C 4D 4E 4F 

          ===>Endpoint Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x05
bEndpointAddress:                  0x01  -> Direction: OUT - EndpointID: 1
bmAttributes:                      0x02  -> Bulk Transfer Type
wMaxPacketSize:                  0x0040 = 0x40 bytes
wInterval:                       0x0000
bSyncAddress:                      0x00

          ===>Descriptor Hex Dump<===
bLength:                           0x14
bDescriptorType:                   0x25
14 25 01 10 10 11 12 13 14 15 16 17 18 19 1A 1B 
1C 1D 1E 1F

And again for the Secondary Usb device port (Front panel):


Code:
[Port1]  :  USB Composite Device


Device Power State:               PowerDeviceD0

       ---===>Device Information<===---
English product name: "mio10"

ConnectionStatus:                  
Current Config Value:              0x01  -> Device Bus Speed: Full
Device Address:                    0x01
Open Pipes:                           2

          ===>Device Descriptor<===
bLength:                           0x12
bDescriptorType:                   0x01
bcdUSB:                          0x0110
bDeviceClass:                      0x00  -> This is an Interface Class Defined Device
bDeviceSubClass:                   0x00
bDeviceProtocol:                   0x00
bMaxPacketSize0:                   0x40 = (64) Bytes
idVendor:                        0x2321 = iKingdom Corp. (d.b.a. iConnectivity)
idProduct:                       0x001B
bcdDevice:                       0x0100
iManufacturer:                     0x01
     English (United States)  "iConnectivity"
iProduct:                          0x02
     English (United States)  "mio10"
iSerialNumber:                     0x03
     English (United States)  "00000836"
bNumConfigurations:                0x01

          ---===>Open Pipes<===---

          ===>Endpoint Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x05
bEndpointAddress:                  0x81  -> Direction: IN - EndpointID: 1
bmAttributes:                      0x02  -> Bulk Transfer Type
wMaxPacketSize:                  0x0040 = 0x40 bytes
wInterval:                       0x0000
bSyncAddress:                      0x00

          ===>Endpoint Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x05
bEndpointAddress:                  0x01  -> Direction: OUT - EndpointID: 1
bmAttributes:                      0x02  -> Bulk Transfer Type
wMaxPacketSize:                  0x0020 = 0x20 bytes
wInterval:                       0x0000
bSyncAddress:                      0x00

       ---===>Full Configuration Descriptor<===---

          ===>Configuration Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x02
wTotalLength:                    0x0245  -> Validated
bNumInterfaces:                    0x02
bConfigurationValue:               0x01
iConfiguration:                    0x00
bmAttributes:                      0xC0  -> Self Powered
MaxPower:                          0x00 =   0 mA

          ===>Interface Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x04
bInterfaceNumber:                  0x00
bAlternateSetting:                 0x00
bNumEndpoints:                     0x00
bInterfaceClass:                   0x01  -> Audio Interface Class
bInterfaceSubClass:                0x01  -> Audio Control Interface SubClass
bInterfaceProtocol:                0x00
iInterface:                        0x00

          ===>Audio Control Interface Header Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x24 (CS_INTERFACE)
bDescriptorSubtype:                0x01 (HEADER)
bcdADC:                          0x0100
wTotalLength:                    0x0009
bInCollection:                     0x01
baInterfaceNr[1]:                  0x01

          ===>Interface Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x04
bInterfaceNumber:                  0x01
bAlternateSetting:                 0x00
bNumEndpoints:                     0x02
bInterfaceClass:                   0x01  -> Audio Interface Class
bInterfaceSubClass:                0x03  -> MIDI Streaming Interface SubClass
bInterfaceProtocol:                0x00
iInterface:                        0x00

          ===>Descriptor Hex Dump<===
bLength:                           0x07
bDescriptorType:                   0x24
07 24 01 00 01 21 02 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 10 10 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 11 11 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 12 12 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 13 13 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 14 14 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 15 15 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 16 16 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 17 17 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 18 18 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 19 19 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 1A 1A 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 1B 1B 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 1C 1C 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 1D 1D 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 1E 1E 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 01 1F 1F 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 20 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 21 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 22 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 23 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 24 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 25 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 26 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 27 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 28 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 29 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 2A 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 2B 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 2C 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 2D 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 2E 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x06
bDescriptorType:                   0x24
06 24 02 02 2F 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 40 01 20 01 10 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 41 01 21 01 11 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 42 01 22 01 12 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 43 01 23 01 13 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 44 01 24 01 14 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 45 01 25 01 15 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 46 01 26 01 16 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 47 01 27 01 17 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 48 01 28 01 18 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 49 01 29 01 19 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 4A 01 2A 01 1A 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 4B 01 2B 01 1B 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 4C 01 2C 01 1C 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 4D 01 2D 01 1D 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 4E 01 2E 01 1E 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 01 4F 01 2F 01 1F 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 30 01 10 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 31 01 11 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 32 01 12 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 33 01 13 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 34 01 14 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 35 01 15 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 36 01 16 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 37 01 17 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 38 01 18 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 39 01 19 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 3A 01 1A 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 3B 01 1B 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 3C 01 1C 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 3D 01 1D 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 3E 01 1E 01 00 

          ===>Descriptor Hex Dump<===
bLength:                           0x09
bDescriptorType:                   0x24
09 24 03 02 3F 01 1F 01 00 

          ===>Endpoint Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x05
bEndpointAddress:                  0x81  -> Direction: IN - EndpointID: 1
bmAttributes:                      0x02  -> Bulk Transfer Type
wMaxPacketSize:                  0x0040 = 0x40 bytes
wInterval:                       0x0000
bSyncAddress:                      0x00

          ===>Descriptor Hex Dump<===
bLength:                           0x14
bDescriptorType:                   0x25
14 25 01 10 40 41 42 43 44 45 46 47 48 49 4A 4B 
4C 4D 4E 4F 

          ===>Endpoint Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x05
bEndpointAddress:                  0x01  -> Direction: OUT - EndpointID: 1
bmAttributes:                      0x02  -> Bulk Transfer Type
wMaxPacketSize:                  0x0020 = 0x20 bytes
wInterval:                       0x0000
bSyncAddress:                      0x00

          ===>Descriptor Hex Dump<===
bLength:                           0x14
bDescriptorType:                   0x25
14 25 01 10 10 11 12 13 14 15 16 17 18 19 1A 1B 
1C 1D 1E 1F

I hope this is useful.
 
@bolau, did you figure this out? I posted a recent thread in a related vein.
I have found that neither my iConnectivity iConnectAudio4+ nor my Yamaha digital piano (DGX-660) recognize my Teensy 3.2 MIDI device if I have USB type of Serial+MIDI.
Only plain-old MIDI for the USB Type works.
I'd welcome a chat to get a MIDI USB Hub working.
 
I have found that neither my iConnectivity iConnectAudio4+ nor my Yamaha digital piano (DGX-660) recognize my Teensy 3.2 MIDI device if I have USB type of Serial+MIDI.
Only plain-old MIDI for the USB Type works. I'd welcome a chat to get a MIDI USB Hub working.

Hi, yes, that's consistent with my experience. After lots of experimenting, the best I could achieve for the Teensy as USB MIDI client was 2 virtual ports with the serial protocol deactivated. Loosing the serial is an annoyance, because the physical reset switch must be in reach, which sucks if you put the Teensy into a case. Having only 2 ports instead of more is also pretty sad.

To turn the teensy into a MIDI USB "hub", you obviously need more than one USB port, and need to run them in HOST mode. I haven't tried either of those. Maybe you can get away with using a regular USB hub in front of the Teensy, don't know. For me personally, the routing in such a hub should be configurable without dismantling anything, since I don't want to send all messages to all my 5-6 devices. And that's why I got the iConnectivity MIO-XL, which does an ok job except for the interfacing problem with the Teensy and it being too slow for fun multi-channel controllers like the Expressive E Touche.

If you want to get in touch, just PM me.

Best, Boris
 
Another (new) user running into this with MIO-XL. Here's lsusb -v from two other rather complicated MIDI devices, both with four USB MIDI virtual ports (cables) one physical connector, that the MIO *does* recognize and work faultlessly:

M-Audio Code keyboard controller:
Code:
Bus 001 Device 034: ID 0763:3106 M-Audio 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0763 M-Audio
  idProduct          0x3106 
  bcdDevice            1.00
  iManufacturer           1 M-Audio
  iProduct                2 Code 61
  iSerial                 3 Ver00.10
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x00f7
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      1 Control Device
      bInterfaceProtocol      0 
      iInterface              0 
      AudioControl Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      1 (HEADER)
        bcdADC               1.00
        wTotalLength       0x0009
        bInCollection           1
        baInterfaceNr(0)        1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         1 Audio
      bInterfaceSubClass      3 MIDI Streaming
      bInterfaceProtocol      0 
      iInterface              0 
      MIDIStreaming Interface Descriptor:
        bLength                 7
        bDescriptorType        36
        bDescriptorSubtype      1 (HEADER)
        bcdADC               1.00
        wTotalLength       0x00a1
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                 1
        iJack                   4 USB MIDI
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                 5
        iJack                   5 MIDI DIN
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                 9
        iJack                   6 Mackie/HUI
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                13
        iJack                   7 Editor
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                 2
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                 6
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                10
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                14
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                 3
        bNrInputPins            1
        baSourceID( 0)          2
        BaSourcePin( 0)         1
        iJack                   8 USB MIDI
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                 7
        bNrInputPins            1
        baSourceID( 0)          6
        BaSourcePin( 0)         1
        iJack                   9 MIDI DIN
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                11
        bNrInputPins            1
        baSourceID( 0)         10
        BaSourcePin( 0)         1
        iJack                  10 Mackie/HUI
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                15
        bNrInputPins            1
        baSourceID( 0)         14
        BaSourcePin( 0)         1
        iJack                  11 Editor
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                 4
        bNrInputPins            1
        baSourceID( 0)          1
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                 8
        bNrInputPins            1
        baSourceID( 0)          5
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                12
        bNrInputPins            1
        baSourceID( 0)          9
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                16
        bNrInputPins            1
        baSourceID( 0)         13
        BaSourcePin( 0)         1
        iJack                   0 
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
        bRefresh                0
        bSynchAddress           0
        MIDIStreaming Endpoint Descriptor:
          bLength                 8
          bDescriptorType        37
          bDescriptorSubtype      1 (GENERAL)
          bNumEmbMIDIJack         4
          baAssocJackID( 0)       1
          baAssocJackID( 1)       5
          baAssocJackID( 2)       9
          baAssocJackID( 3)      13
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
        bRefresh                0
        bSynchAddress           0
        MIDIStreaming Endpoint Descriptor:
          bLength                 8
          bDescriptorType        37
          bDescriptorSubtype      1 (GENERAL)
          bNumEmbMIDIJack         4
          baAssocJackID( 0)       3
          baAssocJackID( 1)       7
          baAssocJackID( 2)      11
          baAssocJackID( 3)      15
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      2 Mouse
      iInterface             12 Code Mouse
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.00
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      52
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0004  1x 4 bytes
        bInterval              32
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      1 Keyboard
      iInterface             13 Code Keyboard
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.00
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      65
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              32
Device Status:     0x0002
  (Bus Powered)
  Remote Wakeup Enabled

Blokas MidiHub:
Code:
Bus 001 Device 028: ID 16d0:0c9c MCS 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass          239 Miscellaneous Device
  bDeviceSubClass         2 
  bDeviceProtocol         1 Interface Association
  bMaxPacketSize0        64
  idVendor           0x16d0 MCS
  idProduct          0x0c9c 
  bcdDevice            1.01
  iManufacturer           1 Blokas
  iProduct                2 Midihub MH-0RECHM5
  iSerial                 3 MH-0RECHM5
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x010a
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Association:
      bLength                 8
      bDescriptorType        11
      bFirstInterface         0
      bInterfaceCount         2
      bFunctionClass          2 Communications
      bFunctionSubClass       2 Abstract (modem)
      bFunctionProtocol       0 
      iFunction               0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         2 Communications
      bInterfaceSubClass      2 Abstract (modem)
      bInterfaceProtocol      0 
      iInterface              0 
      CDC Header:
        bcdCDC               1.00
      CDC ACM:
        bmCapabilities       0x06
          sends break
          line coding and serial state
      CDC Union:
        bMasterInterface        0
        bSlaveInterface         1 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x85  EP 5 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval             255
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        10 CDC Data
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               5
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               5
    Interface Association:
      bLength                 8
      bDescriptorType        11
      bFirstInterface         2
      bInterfaceCount         2
      bFunctionClass          1 Audio
      bFunctionSubClass       1 Control Device
      bFunctionProtocol       0 
      iFunction               0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      1 Control Device
      bInterfaceProtocol      0 
      iInterface              0 
      AudioControl Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      1 (HEADER)
        bcdADC               1.00
        wTotalLength       0x0009
        bInCollection           1
        baInterfaceNr(0)        3
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         1 Audio
      bInterfaceSubClass      3 MIDI Streaming
      bInterfaceProtocol      0 
      iInterface              0 
      MIDIStreaming Interface Descriptor:
        bLength                 7
        bDescriptorType        36
        bDescriptorSubtype      1 (HEADER)
        bcdADC               1.00
        wTotalLength       0x00a1
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                 1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                 2
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                 3
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               1 Embedded
        bJackID                 4
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                 5
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                 6
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                 7
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (MIDI_IN_JACK)
        bJackType               2 External
        bJackID                 8
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                 9
        bNrInputPins            1
        baSourceID( 0)          5
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                10
        bNrInputPins            1
        baSourceID( 0)          6
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                11
        bNrInputPins            1
        baSourceID( 0)          7
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               1 Embedded
        bJackID                12
        bNrInputPins            1
        baSourceID( 0)          8
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                13
        bNrInputPins            1
        baSourceID( 0)          1
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                14
        bNrInputPins            1
        baSourceID( 0)          2
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                15
        bNrInputPins            1
        baSourceID( 0)          3
        BaSourcePin( 0)         1
        iJack                   0 
      MIDIStreaming Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (MIDI_OUT_JACK)
        bJackType               2 External
        bJackID                16
        bNrInputPins            1
        baSourceID( 0)          4
        BaSourcePin( 0)         1
        iJack                   0 
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               5
        bRefresh                0
        bSynchAddress           0
        MIDIStreaming Endpoint Descriptor:
          bLength                 8
          bDescriptorType        37
          bDescriptorSubtype      1 (GENERAL)
          bNumEmbMIDIJack         4
          baAssocJackID( 0)       1
          baAssocJackID( 1)       2
          baAssocJackID( 2)       3
          baAssocJackID( 3)       4
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               5
        bRefresh                0
        bSynchAddress           0
        MIDIStreaming Endpoint Descriptor:
          bLength                 8
          bDescriptorType        37
          bDescriptorSubtype      1 (GENERAL)
          bNumEmbMIDIJack         4
          baAssocJackID( 0)       9
          baAssocJackID( 1)      10
          baAssocJackID( 2)      11
          baAssocJackID( 3)      12
Device Status:     0x0000
  (Bus Powered)

So the MIO can work with combinations of USB MIDI ports == 4 and MIDI + HID and MIDI + serial, it's not an inherent limitation. Something else is fishy here.
 
My earlier tests were with Teensy LC, as I had other plans for my Teensy 4.1 but then thought to test with it just for giggles. Guess what - on Teensy 4.1 this issue is gone, MIO sees the board on both 4 and 16 cable configurations!

Here's a diff of the descriptor between LC and 4.1 on MIDIx4 configuration:
Code:
-Bus 002 Device 111: ID 16c0:0485 Van Ooijen Technische Informatica Teensyduino MIDI
+Bus 002 Device 114: ID 16c0:0485 Van Ooijen Technische Informatica Teensyduino MIDI
 Device Descriptor:
   bLength                18
   bDescriptorType         1
-  bcdUSB               1.10
+  bcdUSB               2.00
   bDeviceClass            0 
   bDeviceSubClass         0 
   bDeviceProtocol         0 
@@ -12,7 +12,7 @@
   bcdDevice            2.11
   iManufacturer           1 Teensyduino
   iProduct                2 Teensy MIDIx4
-  iSerial                 3 5364600
+  iSerial                 3 7652520
   bNumConfigurations      1
   Configuration Descriptor:
     bLength                 9
@@ -179,12 +179,12 @@
       Endpoint Descriptor:
         bLength                 9
         bDescriptorType         5
-        bEndpointAddress     0x04  EP 4 OUT
+        bEndpointAddress     0x03  EP 3 OUT
         bmAttributes            2
           Transfer Type            Bulk
           Synch Type               None
           Usage Type               Data
-        wMaxPacketSize     0x0040  1x 64 bytes
+        wMaxPacketSize     0x0200  1x 512 bytes
         bInterval               0
         bRefresh                0
         bSynchAddress           0
@@ -205,7 +205,7 @@
           Transfer Type            Bulk
           Synch Type               None
           Usage Type               Data
-        wMaxPacketSize     0x0040  1x 64 bytes
+        wMaxPacketSize     0x0200  1x 512 bytes
         bInterval               0
         bRefresh                0
         bSynchAddress           0
@@ -241,7 +241,7 @@
       Endpoint Descriptor:
         bLength                 7
         bDescriptorType         5
-        bEndpointAddress     0x81  EP 1 IN
+        bEndpointAddress     0x82  EP 2 IN
         bmAttributes            3
           Transfer Type            Interrupt
           Synch Type               None
@@ -258,5 +258,14 @@
           Usage Type               Data
         wMaxPacketSize     0x0020  1x 32 bytes
         bInterval               2
+Device Qualifier (for other device speed):
+  bLength                10
+  bDescriptorType         6
+  bcdUSB               2.00
+  bDeviceClass            0 
+  bDeviceSubClass         0 
+  bDeviceProtocol         0 
+  bMaxPacketSize0        64
+  bNumConfigurations      1
 Device Status:     0x0000
   (Bus Powered)

It's not USB version as MidiHub is 1.10 too, nor the wMaxPacketSize as MH is 1x64 bytes too, and it's not the DeviceQualifier as that's not present other devices that do work with the MIO. Which would seem to leave the two bEndpointAddress differences, for whatever that means - I'm just a clueless observer in this, just happy with having something that does work with the MIO in multicable config!

Edit: just to clarify: I've so far only tested that the MIO *sees* the Teensy 4.1 board in both MIDI x4 and x16 configurations, didn't test any actual functionality beyond that.
 
Last edited:
This was with Arduino 1.8.13, Teensyduino 1.53.

Oh and for full disclosure, mioXL firmware 1.2.0 although that obviously makes no difference for mio-10.
 
Status
Not open for further replies.
Back
Top