Conductive Labs Support Forum
NDLR USB not recognized by iConnectivity MIDI4+ host - Printable Version

+- Conductive Labs Support Forum (https://conductivelabs.com/forum)
+-- Forum: The NDLR (https://conductivelabs.com/forum/forumdisplay.php?fid=1)
+--- Forum: MIDI Connectivity (https://conductivelabs.com/forum/forumdisplay.php?fid=5)
+--- Thread: NDLR USB not recognized by iConnectivity MIDI4+ host (/showthread.php?tid=1227)

Pages: 1 2 3 4 5


NDLR USB not recognized by iConnectivity MIDI4+ host - 0xF0 - 11-18-2020

Hello there, just got my brand new NDLR and was very excited to connect it to my iConnectivity MIDI 4+ so I can integrate it into the studio. Sadly, it's not recognized. This is an issue for me as I am entirely out of DIN ports to run it through. 

I saw the thread on the MioXL not working either but I figured I'd start a new one since I didn't want this additional incompatibility to get lost in the shuffle.


RE: NDLR USB not recognized by iConnectivity MIDI4+ host - Darryl - 11-20-2020

We were just contacted by iConnectivity to see if there's anything we can do about working in their host ports. Its been this way for a couple of years, so I wouldn't expect a fix to happen over night. Hopefully we can come up with something.


RE: NDLR USB not recognized by iConnectivity MIDI4+ host - 0xF0 - 11-20-2020

Yep, I contacted them directly. They mentioned the chap previously handling this had left the firm but didn't transition the issue to anybody else. Hopefully they'll keep moving on it!


RE: NDLR USB not recognized by iConnectivity MIDI4+ host - 0xF0 - 12-03-2020

Hey @Darryl, wondering if you all have seen any progress on this so far? Have you been able to send them a unit to debug with or anything?


RE: NDLR USB not recognized by iConnectivity MIDI4+ host - Jesse Johannesen - 12-04-2020

(12-03-2020, 11:24 AM)0xF0 Wrote: Hey @Darryl, wondering if you all have seen any progress on this so far? Have you been able to send them a unit to debug with or anything?
This is still a work in progress. We sent them detailed info and easy to follow instructions to configure a teensy microprocessor to show up identically via usb midi for their testing. I'll talk with Darryl later today and see if there's been any further word.
Jesse


RE: NDLR USB not recognized by iConnectivity MIDI4+ host - microbug - 12-06-2020

I ran into the same problem today. This is not an iconnectivity issue, since it does not work on the USB host ports of my Roland Fantom also. I am not that deep into USB programming, but there seems to be a difference in USB ID or type if either a computer or a embedded device with USB is connected. The NDLR works on all kinds of computers, even my old Powerbook G4 and my iPad without extra supply, but not on any standalone hardware with USB host port.

There must be something in the Teensy USB library that is not configured for use with devices that only accept certain USB classes. I will check that with a friend of mine, who works on the Arduino MIDI library.


RE: NDLR USB not recognized by iConnectivity MIDI4+ host - microbug - 12-07-2020

(12-04-2020, 09:08 AM)This is still a work in progress. We sent them detailed info and easy to follow instructions to configure a teensy microprocessor to show up identically via usb midi for their testing. I'll talk with Darryl later today and see if there's been any further word. Wrote: Jesse

I investigated this a bit further and ran tdd, an USB descriptor tool. This shows that the NDLRs Teensy is not configured as it should be (wrong USB interface type/class).

Here is the dump from the NDLR (i have marked missing and different information in red):

Information for device NDLR (VID=0x16C0 PID=0x0489):

Connection Information:
------------------------------
Device current bus speed: FullSpeed
Device address: 0x0001
Current configuration value: 0x01
Number of open pipes: 5

Device Descriptor:
------------------------------
0x12 bLength
0x01 bDescriptorType
0x0110 bcdUSB
0x00 bDeviceClass     
0x00 bDeviceSubClass 
0x00 bDeviceProtocol 
0x40 bMaxPacketSize0  (64 bytes)
0x16C0 idVendor
0x0489 idProduct
0x0211 bcdDevice
0x01 iManufacturer  missing
0x02 iProduct          missing
0x03 iSerialNumber  
0x01 bNumConfigurations

Configuration Descriptor:
------------------------------
0x09 bLength
0x02 bDescriptorType
0x00F5 wTotalLength  (245 bytes)
0x03 bNumInterfaces
0x01 bConfigurationValue
0x00 iConfiguration
0xC0 bmAttributes  (Self-powered Device) should be "Bus powered device" like on PCR300
0x32 bMaxPower      (100 mA)

Interface Association Descriptor:
------------------------------
0x08 bLength
0x0B bDescriptorType
0x00 bFirstInterface
0x02 bInterfaceCount
0x02 bFunctionClass      (Communication Device Class) should be 0x01 "Audio Device Class"
0x02 bFunctionSubClass  (Abstract Control Model - ACM) should be 0x01 "Audio Control Interface"
0x01 bFunctionProtocol  (ITU-T V.250) should be 0x00 "Audio Protocol undefined"
0x04 iFunction

Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x00 bInterfaceNumber
0x00 bAlternateSetting
0x01 bNumEndPoints
0x02 bInterfaceClass      (Communication Device Class) should be 0x01 "Audio Device Class"
0x02 bInterfaceSubClass  (Abstract Control Model - ACM) should be 0x03 "MIDI Streaming Interface"
0x01 bInterfaceProtocol  (ITU-T V.250) should be 0x00 "Audio Protocol undefined"
0x00 iInterface

CDC Header Functional Descriptor:
------------------------------
0x05 bFunctionalLength
0x24 bDescriptorType
0x00 bDescriptorSubtype
0x0110 bcdCDC

CDC Call Management Functional Descriptor:
------------------------------
0x05 bFunctionalLength
0x24 bDescriptorType
0x01 bDescriptorSubtype
0x01 bmCapabilities
0x01 bDataInterface

CDC Abstract Control Management Functional Descriptor:
------------------------------
0x04 bFunctionalLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x06 bmCapabilities

CDC Union Functional Descriptor:
------------------------------
0x05 bFunctionalLength
0x24 bDescriptorType
0x06 bDescriptorSubtype
0x00 bControlInterface
0x01 bSubordinateInterface(0)

Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x81 bEndpointAddress  (IN endpoint 1)
0x03 bmAttributes      (Transfer: Interrupt / Synch: None / Usage: Data)
0x0010 wMaxPacketSize    (1 x 16 bytes)
0x40 bInterval        (64 frames)

Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x01 bInterfaceNumber
0x00 bAlternateSetting
0x02 bNumEndPoints
0x0A bInterfaceClass      (CDC Data)
0x00 bInterfaceSubClass 
0x00 bInterfaceProtocol 
0x00 iInterface

Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x02 bEndpointAddress  (OUT endpoint 2)
0x02 bmAttributes      (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize    (64 bytes)
0x00 bInterval       

Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x83 bEndpointAddress  (IN endpoint 3)
0x02 bmAttributes      (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize    (64 bytes)
0x00 bInterval       

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

MS Interface Header Descriptor:
------------------------------
0x07 bLength
0x24 bDescriptorType
0x01 bDescriptorSubtype
0x0100 bcdMSC
0x007F wTotalLength  (127 bytes)

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

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

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

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

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x01 bJackType
0x05 bJackID
0x00 iJack

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

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

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

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x01 bJackType
0x09 bJackID
0x00 iJack

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x02 bJackType
0x0A bJackID
0x00 iJack

MS MIDI OUT Jack Descriptor:
------------------------------
0x09 bLength
0x24 bDescriptorType
0x03 bDescriptorSubtype
0x01 bJackType
0x0B bJackID
0x01 bNrInputPins
0x0A baSourceID(1)
0x01 baSourcePin(1)
0x00 iJack

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

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x01 bJackType
0x0D bJackID
0x00 iJack

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x02 bJackType
0x0E bJackID
0x00 iJack

MS MIDI OUT Jack Descriptor:
------------------------------
0x09 bLength
0x24 bDescriptorType
0x03 bDescriptorSubtype
0x01 bJackType
0x0F bJackID
0x01 bNrInputPins
0x0E baSourceID(1)
0x01 baSourcePin(1)
0x00 iJack

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

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09 bLength
0x05 bDescriptorType
0x05 bEndpointAddress  (OUT endpoint 5)
0x02 bmAttributes      (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize    (64 bytes)
0x00 bInterval       
0x00 bRefresh
0x00 bSynchAddress

MS Bulk Data Endpoint Descriptor:
------------------------------
0x08 bLength
0x25 bDescriptorType
0x01 bDescriptorSubtype
0x04 bNumEmbMIDIJack
0x01 baAssocJackID(1)
0x05 baAssocJackID(2)
0x09 baAssocJackID(3)
0x0D baAssocJackID(4)

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09 bLength
0x05 bDescriptorType
0x84 bEndpointAddress  (IN endpoint 4)
0x02 bmAttributes      (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize    (64 bytes)
0x00 bInterval       
0x00 bRefresh
0x00 bSynchAddress

MS Bulk Data Endpoint Descriptor:
------------------------------
0x08 bLength
0x25 bDescriptorType
0x01 bDescriptorSubtype
0x04 bNumEmbMIDIJack
0x03 baAssocJackID(1)
0x07 baAssocJackID(2)
0x0B baAssocJackID(3)
0x0F baAssocJackID(4)

Microsoft OS Descriptor is not available. Error code: 0x0000001F

String Descriptor Table
--------------------------------
Index  LANGID  String
0x00  0x0000 
0x01  0x0000  "Teensyduino"
0x02  0x0000  "NDLR"
0x03  0x0000  "4294967295"
0x04  0x0000  Request failed with 0x0000001F  something is wrong here

------------------------------

Here is the dump of the Novation Circuit:

Information for device Circuit (VID=0x1235 PID=0x0079):

Connection Information:
------------------------------
Device current bus speed: FullSpeed
Device address: 0x0001
Current configuration value: 0x00
Number of open pipes: 0

Device Descriptor:
------------------------------
0x12 bLength
0x01 bDescriptorType
0x0200 bcdUSB
0x00 bDeviceClass     
0x00 bDeviceSubClass 
0x00 bDeviceProtocol 
0x40 bMaxPacketSize0  (64 bytes)
0x1235 idVendor
0x0079 idProduct
0x0200 bcdDevice
0x01 iManufacturer  "Focusrite A.E"
0x02 iProduct        "Circuit"
0x03 iSerialNumber  "V1.00"
0x01 bNumConfigurations

Configuration Descriptor:
------------------------------
0x09 bLength
0x02 bDescriptorType
0x0074 wTotalLength  (116 bytes)
0x02 bNumInterfaces
0x01 bConfigurationValue
0x00 iConfiguration
0xC0 bmAttributes  (Self-powered Device)
0x32 bMaxPower      (100 mA)

Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x00 bInterfaceNumber
0x00 bAlternateSetting
0x00 bNumEndPoints
0x01 bInterfaceClass      (Audio Device Class)
0x01 bInterfaceSubClass  (Audio Control Interface)
0x00 bInterfaceProtocol  (Audio Protocol undefined)
0x02 iInterface  "Circuit"

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

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

MS Interface Header Descriptor:
------------------------------
0x07 bLength
0x24 bDescriptorType
0x01 bDescriptorSubtype
0x0100 bcdMSC
0x0034 wTotalLength  (52 bytes)

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

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x02 bJackType
0x03 bJackID
0x00 iJack

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

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

MS Element Descriptor:
------------------------------
0x0F bLength
0x24 bDescriptorType
0x04 bDescriptorSubtype
0x01 bElementID
0x02 bNrInputPins
0x02 baSourceID(1)
0x01 baSourcePin(1)
0x03 baSourceID(2)
0x01 baSourcePin(2)
0x02 bNrOutputPins
0x00 bInTerminalLink
0x00 bOutTerminalLink
0x01 bElCapsSize
bmElementCaps:
0x03
0x02 iElement  "Circuit"

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09 bLength
0x05 bDescriptorType
0x01 bEndpointAddress  (OUT endpoint 1)
0x02 bmAttributes      (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize    (64 bytes)
0x00 bInterval       
0x00 bRefresh
0x00 bSynchAddress

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

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09 bLength
0x05 bDescriptorType
0x81 bEndpointAddress  (IN endpoint 1)
0x02 bmAttributes      (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize    (64 bytes)
0x00 bInterval       
0x00 bRefresh
0x00 bSynchAddress

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

Microsoft OS Descriptor:
------------------------------
0x0C bLength
0x03 bDescriptorType
Hex dump:
0x0C 0x03 0x9C 0x00 0x7E 0x00 0x01 0x00 0x20 0x00
0x04 0x00

String Descriptor Table
--------------------------------
Index  LANGID  String
0x00  0x0000  0x0409
0x01  0x0409  "Focusrite A.E"
0x02  0x0409  "Circuit"
0x03  0x0409  "V1.00"

------------------------------

And here the one from an Edirol PCR-300 MIDI Keyboard in Generic (Classcompliant) Mode:

Information for device PCR (VID=0x0582 PID=0x00CE):

Connection Information:
------------------------------
Device current bus speed: FullSpeed
Device address: 0x0001
Current configuration value: 0x01
Number of open pipes: 2

Device Descriptor:
------------------------------
0x12 bLength
0x01 bDescriptorType
0x0110 bcdUSB
0x00 bDeviceClass     
0x00 bDeviceSubClass 
0x00 bDeviceProtocol 
0x40 bMaxPacketSize0  (64 bytes)
0x0582 idVendor
0x00CE idProduct
0x0100 bcdDevice
0x01 iManufacturer  "EDIROL"
0x02 iProduct        "PCR"
0x00 iSerialNumber
0x01 bNumConfigurations

Configuration Descriptor:
------------------------------
0x09 bLength
0x02 bDescriptorType
0x0095 wTotalLength  (149 bytes)
0x02 bNumInterfaces
0x01 bConfigurationValue
0x00 iConfiguration
0x80 bmAttributes  (Bus-powered Device)
0x96 bMaxPower      (300 mA)

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

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

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

MS Interface Header Descriptor:
------------------------------
0x07 bLength
0x24 bDescriptorType
0x01 bDescriptorSubtype
0x0100 bcdMSC
0x0071 wTotalLength  (113 bytes)

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x01 bJackType
0x10 bJackID
0x00 iJack

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x01 bJackType
0x11 bJackID
0x00 iJack

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x02 bJackType
0x20 bJackID
0x00 iJack

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x02 bJackType
0x21 bJackID
0x00 iJack

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x02 bJackType
0x22 bJackID
0x00 iJack

MS MIDI OUT Jack Descriptor:
------------------------------
0x09 bLength
0x24 bDescriptorType
0x03 bDescriptorSubtype
0x01 bJackType
0x30 bJackID
0x01 bNrInputPins
0x20 baSourceID(1)
0x01 baSourcePin(1)
0x00 iJack

MS MIDI OUT Jack Descriptor:
------------------------------
0x09 bLength
0x24 bDescriptorType
0x03 bDescriptorSubtype
0x01 bJackType
0x31 bJackID
0x01 bNrInputPins
0x21 baSourceID(1)
0x01 baSourcePin(1)
0x00 iJack

MS MIDI OUT Jack Descriptor:
------------------------------
0x09 bLength
0x24 bDescriptorType
0x03 bDescriptorSubtype
0x01 bJackType
0x32 bJackID
0x01 bNrInputPins
0x22 baSourceID(1)
0x01 baSourcePin(1)
0x00 iJack

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

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

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09 bLength
0x05 bDescriptorType
0x01 bEndpointAddress  (OUT endpoint 1)
0x02 bmAttributes      (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize    (64 bytes)
0x00 bInterval       
0x00 bRefresh
0x00 bSynchAddress

MS Bulk Data Endpoint Descriptor:
------------------------------
0x06 bLength
0x25 bDescriptorType
0x01 bDescriptorSubtype
0x02 bNumEmbMIDIJack
0x10 baAssocJackID(1)
0x11 baAssocJackID(2)

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09 bLength
0x05 bDescriptorType
0x82 bEndpointAddress  (IN endpoint 2)
0x02 bmAttributes      (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize    (64 bytes)
0x00 bInterval       
0x00 bRefresh
0x00 bSynchAddress

MS Bulk Data Endpoint Descriptor:
------------------------------
0x07 bLength
0x25 bDescriptorType
0x01 bDescriptorSubtype
0x03 bNumEmbMIDIJack
0x30 baAssocJackID(1)
0x31 baAssocJackID(2)
0x32 baAssocJackID(3)

Microsoft OS Descriptor:
------------------------------
0x00 bLength
0x00 bDescriptorType
Hex dump:

String Descriptor Table
--------------------------------
Index  LANGID  String
0x00  0x0000  0x0409
0x01  0x0409  "EDIROL"
0x02  0x0409  "PCR"

------------------------------

Sorry for the long posting. Hope this is of any help. Please note that a bootloader has its own descriptor data set, so it can be declared as mass storage or other class for uploading firmware etc. This is how several companies handle that. I can provoide bootloader USB readouts from my iConnectivity interfaces if these are of any interest.


RE: NDLR USB not recognized by iConnectivity MIDI4+ host - Jesse Johannesen - 12-07-2020

(12-07-2020, 12:33 PM)microbug Wrote:
(12-04-2020, 09:08 AM)This is still a work in progress. We sent them detailed info and easy to follow instructions to configure a teensy microprocessor to show up identically via usb midi for their testing. I'll talk with Darryl later today and see if there's been any further word. Wrote: Jesse

I investigated this a bit further and ran tdd, an USB descriptor tool. This shows that the NDLRs Teensy is not configured as it should be (wrong USB interface type/class).

Here is the dump from the NDLR (i have marked missing and different information in red):

Information for device NDLR (VID=0x16C0 PID=0x0489):

Connection Information:
------------------------------
Device current bus speed: FullSpeed
Device address: 0x0001
Current configuration value: 0x01
Number of open pipes: 5

Device Descriptor:
------------------------------
0x12 bLength
0x01 bDescriptorType
0x0110 bcdUSB
0x00 bDeviceClass     
0x00 bDeviceSubClass 
0x00 bDeviceProtocol 
0x40 bMaxPacketSize0  (64 bytes)
0x16C0 idVendor
0x0489 idProduct
0x0211 bcdDevice
0x01 iManufacturer  missing
0x02 iProduct          missing
0x03 iSerialNumber  
0x01 bNumConfigurations

Configuration Descriptor:
------------------------------
0x09 bLength
0x02 bDescriptorType
0x00F5 wTotalLength  (245 bytes)
0x03 bNumInterfaces
0x01 bConfigurationValue
0x00 iConfiguration
0xC0 bmAttributes  (Self-powered Device) should be "Bus powered device" like on PCR300
0x32 bMaxPower      (100 mA)

Interface Association Descriptor:
------------------------------
0x08 bLength
0x0B bDescriptorType
0x00 bFirstInterface
0x02 bInterfaceCount
0x02 bFunctionClass      (Communication Device Class) should be 0x01 "Audio Device Class"
0x02 bFunctionSubClass  (Abstract Control Model - ACM) should be 0x01 "Audio Control Interface"
0x01 bFunctionProtocol  (ITU-T V.250) should be 0x00 "Audio Protocol undefined"
0x04 iFunction

Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x00 bInterfaceNumber
0x00 bAlternateSetting
0x01 bNumEndPoints
0x02 bInterfaceClass      (Communication Device Class) should be 0x01 "Audio Device Class"
0x02 bInterfaceSubClass  (Abstract Control Model - ACM) should be 0x03 "MIDI Streaming Interface"
0x01 bInterfaceProtocol  (ITU-T V.250) should be 0x00 "Audio Protocol undefined"
0x00 iInterface

CDC Header Functional Descriptor:
------------------------------
0x05 bFunctionalLength
0x24 bDescriptorType
0x00 bDescriptorSubtype
0x0110 bcdCDC

CDC Call Management Functional Descriptor:
------------------------------
0x05 bFunctionalLength
0x24 bDescriptorType
0x01 bDescriptorSubtype
0x01 bmCapabilities
0x01 bDataInterface

CDC Abstract Control Management Functional Descriptor:
------------------------------
0x04 bFunctionalLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x06 bmCapabilities

CDC Union Functional Descriptor:
------------------------------
0x05 bFunctionalLength
0x24 bDescriptorType
0x06 bDescriptorSubtype
0x00 bControlInterface
0x01 bSubordinateInterface(0)

Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x81 bEndpointAddress  (IN endpoint 1)
0x03 bmAttributes      (Transfer: Interrupt / Synch: None / Usage: Data)
0x0010 wMaxPacketSize    (1 x 16 bytes)
0x40 bInterval        (64 frames)

Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x01 bInterfaceNumber
0x00 bAlternateSetting
0x02 bNumEndPoints
0x0A bInterfaceClass      (CDC Data)
0x00 bInterfaceSubClass 
0x00 bInterfaceProtocol 
0x00 iInterface

Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x02 bEndpointAddress  (OUT endpoint 2)
0x02 bmAttributes      (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize    (64 bytes)
0x00 bInterval       

Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x83 bEndpointAddress  (IN endpoint 3)
0x02 bmAttributes      (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize    (64 bytes)
0x00 bInterval       

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

MS Interface Header Descriptor:
------------------------------
0x07 bLength
0x24 bDescriptorType
0x01 bDescriptorSubtype
0x0100 bcdMSC
0x007F wTotalLength  (127 bytes)

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

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

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

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

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x01 bJackType
0x05 bJackID
0x00 iJack

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

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

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

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x01 bJackType
0x09 bJackID
0x00 iJack

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x02 bJackType
0x0A bJackID
0x00 iJack

MS MIDI OUT Jack Descriptor:
------------------------------
0x09 bLength
0x24 bDescriptorType
0x03 bDescriptorSubtype
0x01 bJackType
0x0B bJackID
0x01 bNrInputPins
0x0A baSourceID(1)
0x01 baSourcePin(1)
0x00 iJack

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

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x01 bJackType
0x0D bJackID
0x00 iJack

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x02 bJackType
0x0E bJackID
0x00 iJack

MS MIDI OUT Jack Descriptor:
------------------------------
0x09 bLength
0x24 bDescriptorType
0x03 bDescriptorSubtype
0x01 bJackType
0x0F bJackID
0x01 bNrInputPins
0x0E baSourceID(1)
0x01 baSourcePin(1)
0x00 iJack

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

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09 bLength
0x05 bDescriptorType
0x05 bEndpointAddress  (OUT endpoint 5)
0x02 bmAttributes      (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize    (64 bytes)
0x00 bInterval       
0x00 bRefresh
0x00 bSynchAddress

MS Bulk Data Endpoint Descriptor:
------------------------------
0x08 bLength
0x25 bDescriptorType
0x01 bDescriptorSubtype
0x04 bNumEmbMIDIJack
0x01 baAssocJackID(1)
0x05 baAssocJackID(2)
0x09 baAssocJackID(3)
0x0D baAssocJackID(4)

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09 bLength
0x05 bDescriptorType
0x84 bEndpointAddress  (IN endpoint 4)
0x02 bmAttributes      (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize    (64 bytes)
0x00 bInterval       
0x00 bRefresh
0x00 bSynchAddress

MS Bulk Data Endpoint Descriptor:
------------------------------
0x08 bLength
0x25 bDescriptorType
0x01 bDescriptorSubtype
0x04 bNumEmbMIDIJack
0x03 baAssocJackID(1)
0x07 baAssocJackID(2)
0x0B baAssocJackID(3)
0x0F baAssocJackID(4)

Microsoft OS Descriptor is not available. Error code: 0x0000001F

String Descriptor Table
--------------------------------
Index  LANGID  String
0x00  0x0000 
0x01  0x0000  "Teensyduino"
0x02  0x0000  "NDLR"
0x03  0x0000  "4294967295"
0x04  0x0000  Request failed with 0x0000001F  something is wrong here

------------------------------

Here is the dump of the Novation Circuit:

Information for device Circuit (VID=0x1235 PID=0x0079):

Connection Information:
------------------------------
Device current bus speed: FullSpeed
Device address: 0x0001
Current configuration value: 0x00
Number of open pipes: 0

Device Descriptor:
------------------------------
0x12 bLength
0x01 bDescriptorType
0x0200 bcdUSB
0x00 bDeviceClass     
0x00 bDeviceSubClass 
0x00 bDeviceProtocol 
0x40 bMaxPacketSize0  (64 bytes)
0x1235 idVendor
0x0079 idProduct
0x0200 bcdDevice
0x01 iManufacturer  "Focusrite A.E"
0x02 iProduct        "Circuit"
0x03 iSerialNumber  "V1.00"
0x01 bNumConfigurations

Configuration Descriptor:
------------------------------
0x09 bLength
0x02 bDescriptorType
0x0074 wTotalLength  (116 bytes)
0x02 bNumInterfaces
0x01 bConfigurationValue
0x00 iConfiguration
0xC0 bmAttributes  (Self-powered Device)
0x32 bMaxPower      (100 mA)

Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x00 bInterfaceNumber
0x00 bAlternateSetting
0x00 bNumEndPoints
0x01 bInterfaceClass      (Audio Device Class)
0x01 bInterfaceSubClass  (Audio Control Interface)
0x00 bInterfaceProtocol  (Audio Protocol undefined)
0x02 iInterface  "Circuit"

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

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

MS Interface Header Descriptor:
------------------------------
0x07 bLength
0x24 bDescriptorType
0x01 bDescriptorSubtype
0x0100 bcdMSC
0x0034 wTotalLength  (52 bytes)

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

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x02 bJackType
0x03 bJackID
0x00 iJack

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

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

MS Element Descriptor:
------------------------------
0x0F bLength
0x24 bDescriptorType
0x04 bDescriptorSubtype
0x01 bElementID
0x02 bNrInputPins
0x02 baSourceID(1)
0x01 baSourcePin(1)
0x03 baSourceID(2)
0x01 baSourcePin(2)
0x02 bNrOutputPins
0x00 bInTerminalLink
0x00 bOutTerminalLink
0x01 bElCapsSize
bmElementCaps:
0x03
0x02 iElement  "Circuit"

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09 bLength
0x05 bDescriptorType
0x01 bEndpointAddress  (OUT endpoint 1)
0x02 bmAttributes      (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize    (64 bytes)
0x00 bInterval       
0x00 bRefresh
0x00 bSynchAddress

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

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09 bLength
0x05 bDescriptorType
0x81 bEndpointAddress  (IN endpoint 1)
0x02 bmAttributes      (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize    (64 bytes)
0x00 bInterval       
0x00 bRefresh
0x00 bSynchAddress

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

Microsoft OS Descriptor:
------------------------------
0x0C bLength
0x03 bDescriptorType
Hex dump:
0x0C 0x03 0x9C 0x00 0x7E 0x00 0x01 0x00 0x20 0x00
0x04 0x00

String Descriptor Table
--------------------------------
Index  LANGID  String
0x00  0x0000  0x0409
0x01  0x0409  "Focusrite A.E"
0x02  0x0409  "Circuit"
0x03  0x0409  "V1.00"

------------------------------

And here the one from an Edirol PCR-300 MIDI Keyboard in Generic (Classcompliant) Mode:

Information for device PCR (VID=0x0582 PID=0x00CE):

Connection Information:
------------------------------
Device current bus speed: FullSpeed
Device address: 0x0001
Current configuration value: 0x01
Number of open pipes: 2

Device Descriptor:
------------------------------
0x12 bLength
0x01 bDescriptorType
0x0110 bcdUSB
0x00 bDeviceClass     
0x00 bDeviceSubClass 
0x00 bDeviceProtocol 
0x40 bMaxPacketSize0  (64 bytes)
0x0582 idVendor
0x00CE idProduct
0x0100 bcdDevice
0x01 iManufacturer  "EDIROL"
0x02 iProduct        "PCR"
0x00 iSerialNumber
0x01 bNumConfigurations

Configuration Descriptor:
------------------------------
0x09 bLength
0x02 bDescriptorType
0x0095 wTotalLength  (149 bytes)
0x02 bNumInterfaces
0x01 bConfigurationValue
0x00 iConfiguration
0x80 bmAttributes  (Bus-powered Device)
0x96 bMaxPower      (300 mA)

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

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

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

MS Interface Header Descriptor:
------------------------------
0x07 bLength
0x24 bDescriptorType
0x01 bDescriptorSubtype
0x0100 bcdMSC
0x0071 wTotalLength  (113 bytes)

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x01 bJackType
0x10 bJackID
0x00 iJack

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x01 bJackType
0x11 bJackID
0x00 iJack

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x02 bJackType
0x20 bJackID
0x00 iJack

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x02 bJackType
0x21 bJackID
0x00 iJack

MS MIDI IN Jack Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x02 bJackType
0x22 bJackID
0x00 iJack

MS MIDI OUT Jack Descriptor:
------------------------------
0x09 bLength
0x24 bDescriptorType
0x03 bDescriptorSubtype
0x01 bJackType
0x30 bJackID
0x01 bNrInputPins
0x20 baSourceID(1)
0x01 baSourcePin(1)
0x00 iJack

MS MIDI OUT Jack Descriptor:
------------------------------
0x09 bLength
0x24 bDescriptorType
0x03 bDescriptorSubtype
0x01 bJackType
0x31 bJackID
0x01 bNrInputPins
0x21 baSourceID(1)
0x01 baSourcePin(1)
0x00 iJack

MS MIDI OUT Jack Descriptor:
------------------------------
0x09 bLength
0x24 bDescriptorType
0x03 bDescriptorSubtype
0x01 bJackType
0x32 bJackID
0x01 bNrInputPins
0x22 baSourceID(1)
0x01 baSourcePin(1)
0x00 iJack

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

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

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09 bLength
0x05 bDescriptorType
0x01 bEndpointAddress  (OUT endpoint 1)
0x02 bmAttributes      (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize    (64 bytes)
0x00 bInterval       
0x00 bRefresh
0x00 bSynchAddress

MS Bulk Data Endpoint Descriptor:
------------------------------
0x06 bLength
0x25 bDescriptorType
0x01 bDescriptorSubtype
0x02 bNumEmbMIDIJack
0x10 baAssocJackID(1)
0x11 baAssocJackID(2)

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09 bLength
0x05 bDescriptorType
0x82 bEndpointAddress  (IN endpoint 2)
0x02 bmAttributes      (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize    (64 bytes)
0x00 bInterval       
0x00 bRefresh
0x00 bSynchAddress

MS Bulk Data Endpoint Descriptor:
------------------------------
0x07 bLength
0x25 bDescriptorType
0x01 bDescriptorSubtype
0x03 bNumEmbMIDIJack
0x30 baAssocJackID(1)
0x31 baAssocJackID(2)
0x32 baAssocJackID(3)

Microsoft OS Descriptor:
------------------------------
0x00 bLength
0x00 bDescriptorType
Hex dump:

String Descriptor Table
--------------------------------
Index  LANGID  String
0x00  0x0000  0x0409
0x01  0x0409  "EDIROL"
0x02  0x0409  "PCR"

------------------------------

Sorry for the long posting. Hope this is of any help. Please note that a bootloader has its own descriptor data set, so it can be declared as mass storage or other class for uploading firmware etc. This is how several companies handle that. I can provoide bootloader USB readouts from my iConnectivity interfaces if these are of any interest.

Hey, this is really interesting, I will pass this data on to Steve and perhaps he will know what is going on here better than me. Hopefully this will be helpful.
Thank you microbug!
Jesse


RE: NDLR USB not recognized by iConnectivity MIDI4+ host - 0xF0 - 12-08-2020

Actually, looking at that dump, my guess is that the use of the Interface Association Descriptor is what might be tripping up these embedded hosts. Per the spec (https://www.usb.org/sites/default/files/iadclasscode_r10.pdf) :

Quote:There exists a legacy issue for new devices that use the IAD (implying interface level binding to device drivers as opposed to device-level binding) when connected to systems where USB system software does not understand the IAD. Although the IAD will be ignored, the device may not work as expected because the USB system software will not properly bind the interfaces with drivers. (emphasis mine)

I believe the reliance of the serial interface on this IAD is possibly the problem. The other interface coding actually looks correct (the device describes three interfaces, two of which are linked by the IAD and form the serial port, and the other interface is correctly describing a MIDI device. 

So, things the NDLR is probably doing wrong or problematically for embedded hosts:
1. Not specifying itself as powered (unlikely to be a major problem, but it is a bug). 
2. The use of the IAD descriptor in the serial port implementation (CDC version 1.2, rather than 1.1.0 as the BCD USB encodes) is likely to trip up a LOT of older (Full-speed only) embedded libraries which use version 1.0 of the class compliance protocols. IMO this should be removed and replaced with a single-interface CDC 1.0-compliant serial port implementation.

At worst, perhaps the IAD and CDC interfaces could be moved to the last two interfaces on the unit rather than the first two. This might give the MIDI interface parsers a chance to lock on correctly even if they abort parsing the rest of the descriptors. Worth a shot at least.

Edit: I think that iConnectivity should absolutely be ignoring descriptors they don't handle, and continue parsing interfaces until they see a MIDI one, though. This doesn't excuse their part of this, but it does indicate why it's not all their fault - NDLR should easily be hostable by any embedded USB host out there that follows the 1.0 specs or later, and the fact that it isn't is, fundamentally a bug on the NDLR, not anything else. Fortunately it looks easily fixable, although the team might have to give up or re-implement their precious serial port (but you know my thoughts on that, too: use JTAG/SWD for developer debugging and forget serial ports for that purpose, and use Sysex for the API, poof problem solved and you'll probably save some flash too).

Edit 2: Jesse, can you share with us the Teensy instructions you sent iConnectivity for building an identical-looking USB target device? I don't teensy but it might help some of those of us who do to do some parallel investigation. This is clearly an issue for a lot of your users here.


RE: NDLR USB not recognized by iConnectivity MIDI4+ host - Jesse Johannesen - 12-10-2020

(12-08-2020, 10:10 PM)0xF0 Wrote: Actually, looking at that dump, my guess is that the use of the Interface Association Descriptor is what might be tripping up these embedded hosts. Per the spec (https://www.usb.org/sites/default/files/iadclasscode_r10.pdf) :

Quote:There exists a legacy issue for new devices that use the IAD (implying interface level binding to device drivers as opposed to device-level binding) when connected to systems where USB system software does not understand the IAD. Although the IAD will be ignored, the device may not work as expected because the USB system software will not properly bind the interfaces with drivers. (emphasis mine)

I believe the reliance of the serial interface on this IAD is possibly the problem. The other interface coding actually looks correct (the device describes three interfaces, two of which are linked by the IAD and form the serial port, and the other interface is correctly describing a MIDI device. 

So, things the NDLR is probably doing wrong or problematically for embedded hosts:
1. Not specifying itself as powered (unlikely to be a major problem, but it is a bug). 
2. The use of the IAD descriptor in the serial port implementation (CDC version 1.2, rather than 1.1.0 as the BCD USB encodes) is likely to trip up a LOT of older (Full-speed only) embedded libraries which use version 1.0 of the class compliance protocols. IMO this should be removed and replaced with a single-interface CDC 1.0-compliant serial port implementation.

At worst, perhaps the IAD and CDC interfaces could be moved to the last two interfaces on the unit rather than the first two. This might give the MIDI interface parsers a chance to lock on correctly even if they abort parsing the rest of the descriptors. Worth a shot at least.

Edit: I think that iConnectivity should absolutely be ignoring descriptors they don't handle, and continue parsing interfaces until they see a MIDI one, though. This doesn't excuse their part of this, but it does indicate why it's not all their fault - NDLR should easily be hostable by any embedded USB host out there that follows the 1.0 specs or later, and the fact that it isn't is, fundamentally a bug on the NDLR, not anything else. Fortunately it looks easily fixable, although the team might have to give up or re-implement their precious serial port (but you know my thoughts on that, too: use JTAG/SWD for developer debugging and forget serial ports for that purpose, and use Sysex for the API, poof problem solved and you'll probably save some flash too).

Edit 2: Jesse, can you share with us the Teensy instructions you sent iConnectivity for building an identical-looking USB target device? I don't teensy but it might help some of those of us who do to do some parallel investigation. This is clearly an issue for a lot of your users here.

Thank you for this detailed analysis, there is so much helpful data here, I don't even know where to begin. I will pass this along to Steve.
I will also post the instructions we sent along to iConnectivity as soon as I dig them up.
Jesse