Quantcast
Channel: Debian User Forums
Viewing all articles
Browse latest Browse all 2849

Hardware • Re: Cherry keyboards and device descriptor read/64, error -71

$
0
0
Hello,

Take a look at this linux-usb-users mailing list discussion:
  • device descriptor read/64, error -71:
    On Mon, 27 Dec 2004, Christian Heimanns wrote:

    > Thanks for the tipp: I've compiled the USBcore as a module now. Before
    > it was compiled into the kernel. In the file /etc/modprobe.conf I've
    > added the line: > options usbcore old_scheme_first=y <.
    > It seems to work now :-) Can you please explain in a few sentences the
    > difference between the "new" and the "old" USB scheme?

    I'll try...

    The "old scheme" is the way Linux worked before 2.6.10. When a new device
    is plugged in, the system first assigns it an address, then reads the
    initial 8 bytes of the device descriptor, then reads the entire 18-byte
    device descriptor.

    The "new scheme" is basically the way Windows works. (Not surprisingly,
    some devices won't work any other way.) When a new device is plugged in,
    the system first issues a 64-byte read request for the device descriptor,
    then resets the device, then assigns it an address, and then reads the
    actual 18-byte device descriptor.

    The reason for these shenanigans is that with a full-speed device, the
    maximum packet size for endpoint 0 (ep0maxpacket) isn't known beforehand.
    It could be 8, 16, 32, or 64 bytes. (Low-speed devices must use 8, and
    high-speed devices must use 64.) The ep0maxpacket value is stored in the
    initial 8 bytes of the device descriptor, but to read the device
    descriptor you have to use endpoint 0!

    The two schemes above are the two common solutions to this chicken-and-egg
    problem. The old scheme is the one recommended by the USB Implementors
    Forum (which makes it the "Standard"); the new scheme is the one used by
    Microsoft (which makes it another kind of "Standard"!). A well-designed
    standards-compliant device will work okay with either scheme.
    Unfortunately it seems that no matter which scheme you pick, some
    badly-designed non-compliant devices won't work. There's an additional
    usbcore.ko module parameter people can use in especially bad cases:

    use_both_schemes=y

    This will cause the system to try one of the schemes, and if it fails then
    try the other scheme. (Maybe that should always be the default...)

    Alan Stern
Hope this helps.

Statistics: Posted by Aki — 2025-03-02 14:32



Viewing all articles
Browse latest Browse all 2849

Trending Articles