Hi Steve,

> I don't want to spam the list with this large sample file. It was captured
> at work with a Catalyst SBAE 3 analyzer. It contains the complete
> enumeration of my mouse (ie low speed) on my XP Home laptop. It has a lot
> of data and this text export file is hard to read, but it should give you
> everything you need. I won't have access to simpler, easier to read kitty
> analyzer until this weekend when I get home.
>
> If you want I can send you another capture this weekend.

Thanks a lot for the capture file. Windows XP seems to enumerate low speed 
devices by performing the following requests in sequence:

GET_DESCRIPTOR(DEVICE, 18 bytes)
SET_ADDRESS
GET_DESCRIPTOR(DEVICE, 18 bytes)
GET_DESCRIPTOR(CONFIGURATION, 9 bytes)
GET_DESCRIPTOR(CONFIGURATION, full)

while linux-2.6.7 does

SET_ADDRESS
GET_DESCRIPTOR(DEVICE, 8 bytes)
GET_DESCRIPTOR(DEVICE, 18 bytes)
GET_DESCRIPTOR(CONFIGURATION, 9 bytes)
GET_DESCRIPTOR(CONFIGURATION, full)

The following comment is present in hub.c:1175

/* cope with hardware quirkiness:
 *  - let SET_ADDRESS settle, some device hardware wants it
 *  - read ep0 maxpacket even for high and low speed,
 */

Could anyone tell me who added that comment ? Is anyone aware of any low-speed 
device that would fail with more than ep0 maxpacket ? My low-speed device 
fails for ep0 maxpacket :-)

If we want to mimic Windows XP behaviour, the request size should be raised to 
18 bytes (which is the size of a device descriptor), and SET_ADDRESS should 
be issued after reading the descriptor.

Laurent Pinchart

Attachment: pgp6rdfmdf5hF.pgp
Description: signature

Reply via email to