PaulStoffregen / USBHost_t36

USB Host Library for Teensy 3.6 and 4.0
167 stars 86 forks source link

Elektron Rytm and Analog Four not detected as MIDIDevice #20

Closed flocked closed 6 years ago

flocked commented 6 years ago

These two machines are not detected as MIDIDevice, even though they are class compliant midi devices. Both of them also have an USB audio interface integrated,

Teensy crashes/freezes while enumeration:

sizeof Device = 36 sizeof Pipe = 96 sizeof Transfer = 64 power up USBHS PHY port change: 10001803 connect begin reset port change: 10001005 port enabled end recovery new_Device: 12 Mbit/sec new_Pipe enumeration: enumeration: enumeration: enumeration: enumeration: enumeration: enumeration: enumeration: Config data length = 342 //Crash / Freeze

Checking enumeration.cpp, it seems that the config data is too big.

    case 12: // read 9 bytes, request all of config desc
        enumlen = enumbuf[2] | (enumbuf[3] << 8);
        println("Config data length = ", enumlen);
        if (enumlen > sizeof(enumbuf)) {
            // TODO: how to handle device with too much config data
            // THIS IS TRUE FOR BOTH MACHINES
        }
        mk_setup(enumsetup, 0x80, 6, 0x0200, 0, enumlen); // 6=GET_DESCRIPTOR
        queue_Control_Transfer(dev, &enumsetup, enumbuf, NULL);
        dev->enum_state = 13;
        return;

I updated enumbuf[256] to enumbuf[512]. This stops Teensy from freezing, but the Elektron devices are still not detected as MidiDevice. This is the new output. Noteworthy: Interface class is 255 and Subclass 0!

new_Device: 12 Mbit/sec new_Pipe enumeration: enumeration: enumeration: enumeration: enumeration: enumeration: enumeration: enumeration: Config data length = 342 enumeration: bNumInterfaces = 5 bConfigurationValue = 1 enumeration: USBHub memory usage = 960 USBHub claim_device this=1FFF2020 USBHub memory usage = 960 USBHub claim_device this=1FFF23E0 Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 333 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 324 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 5 = ENDPOINT Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 306 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 5 = ENDPOINT Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 288 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 5 = ENDPOINT Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 270 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 5 = ENDPOINT Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 252 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 5 = ENDPOINT Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 234 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 5 = ENDPOINT Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 216 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 5 = ENDPOINT Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 198 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 189 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 5 = ENDPOINT Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 171 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 5 = ENDPOINT Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 153 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 5 = ENDPOINT Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 135 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 5 = ENDPOINT Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 117 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 5 = ENDPOINT Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 99 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 5 = ENDPOINT Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 81 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 5 = ENDPOINT Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 63 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 54 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 5 = ENDPOINT Descriptor 5 = ENDPOINT Descriptor 4 = INTERFACE MIDIDevice claim this=1FFF27A0 len = 27 bInterfaceClass=255 bInterfaceSubClass=0 Descriptor 5 = ENDPOINT Descriptor 5 = ENDPOINT

insolace commented 4 years ago

Was this ever resolved? I have other class compliant MIDI devices that are not detected.