I know, crazy right? Well I've stumbled on a peculiar set of circumstances in which a device I've had in the field many years causes a new PC (Dell Optiplex 3020 Win7 Pro) to HANG on reboot. Confirmed in-house and in the field, maybe also on a Lenovo, and Tsuneo confirmed it on his ASUS PC as well. (I know, name dropper). If you have the following conditions you can get it to hang ... in my case it's the Intel eXtensible Host Controller.
- You have an HID device, and in my testing it can be LS or FS
- You have a bInterval on EP1 IN that is less than 4ms
- You've decided that all the data on EP1 IN is important, every transaction.
What I mean by that is, when the host sends the Set Idle (indefinite) you go "thanks for asking, but I'd like you to accept data from me for every IN transaction you issue". Then when the host reboots it gets stuck with a BLACK screen, prior to "Windows Starting", waiting for a quiet period (NAKing) of more than 1.5 seconds on EP1 IN before it allows the boot to proceed. The whole time the host is asking for and receiving reports on EP1 IN. But to the outside world, black screen of doom.
Try it... set up your HID device so that it never NAKs on EP1 IN (give it a meaningful packet of course), set bInterval to 2ms, plug into your xHCI USB 3.0 port and Start Menu->Restart.
My device is not a keyboard or mouse and I don't think I'm in violation of the spirit of the spec. The closest analogy I can think of is my device is something like RS232 serial cable replacement. And to throw salt in the wound, if I configure my device to actually be CDC with the control line status reported on EP1 IN at 2ms there is no problem. And that's because the CDC spec doesn't have Set Idle.
OK, go.