Our USB hid minidriver sometimes fails on some hardware, usually laptops.
I have an URB reading an INT pipe on a blocking read. When the system fails, this urb fails to receive any data altogether, even though I can see the data coming in on a USB bus analyzer.
If I pull the device out, the URB fails with STATUS_UNSUCCESSFUL and the urb status is
USBD_STATUS_DEV_NOT_RESPONDING, which is the normal behaviour. It is as if something below me in the stack is no longer passing data. The bus analyzer also shows me I have a lot of crc errors caused by a dodgy cable, even though they don’t show up in my URB (I never get the USBD_ERROR_CRC) . At first I thought that could be the issue, but some customer feedback puzlled me :
what puzzles me is that customers are reporting that the previous version of our driver does not do this. The only big difference is I upgraded the DDK to 6000. Any other difference is minor and has to do with new byte packets sent by the firmware. The core of the driver (the reading / dispatching logic) is the same, it’s just a case of a few switch statements in the data processing.
Does anybody know (Doron !) if anything has changed between the two ddks that would cause that ?
One of our customers also says that turning off the “Allow the computer to turn this device off” sems to fix it, but we cannot confirm this information is correct. I do not support selective suspend in the driver, and our device can not wake up the hub.
Regards,
Pierre
ps: I am getting a faulty system next week for a day, so I can experiment, but any information before that would greatly help.