PORTS Forum

Ports and Interfaces => USB => Topic started by: swt2c on January 19, 2014, 05:09:07 pm

Title: HID - Losing Interrupt Input Reports on Windows XP
Post by: swt2c on January 19, 2014, 05:09:07 pm
Hi,

I have an HID device from which I'm reading data (256KB) via Interrupt reports.  My receiving application is using Signal11's HIDAPI on Windows XP.  Sometimes (but not all of the time) the receiving application does not receive all of the packets - there is a sequence number in the packets, so I can tell that there is a missing packet.  I have put a USB analyzer inline and it sees the missing packets - and there does not appear to be anything wrong with them.  I don't think this is a case of the HID driver's report buffer being overrun - I used HidD_SetNumInputBuffers to set the buffer size to 512, and I still see the problem with about the same frequency.

Are there any other possibilities for why I am losing packets?  I do not see any problems with lost packets when running the same application under Linux.

Thanks,
Scott
Title: Re: HID - Losing Interrupt Input Reports on Windows XP
Post by: Jan Axelson on January 19, 2014, 07:37:19 pm
Retrieve multiple reports at once.

See

How can I keep my application from losing reports?

here

http://www.lvr.com/hidfaq.htm
Title: Re: HID - Losing Interrupt Input Reports on Windows XP
Post by: swt2c on January 19, 2014, 08:03:06 pm
Thanks - but the need to retrieve multiple packets at once would still suggest that I'm overrunning the HID driver report buffer, which I don't *think* that I am.

My device is sending 1 64-byte report every 1 ms.  So, with the number of buffers set to 512, that would mean I'm behind by over half a second.  That doesn't seem likely to me.

Thanks,
Scott
Title: Re: HID - Losing Interrupt Input Reports on Windows XP
Post by: Jan Axelson on January 19, 2014, 08:28:24 pm
Every call to ReadFile has overhead.

If you're making 4000 calls to retrieve 256k (256,000/64), there is plenty of opportunity for a 512-report HID buffer to fill.

Try a larger ReadFile buffer and see what happens.

Increasing the report size will also help.
Title: Re: HID - Losing Interrupt Input Reports on Windows XP
Post by: swt2c on January 20, 2014, 09:47:19 am
I suppose it is possible.

I can't change the report size - the device I'm using is a commercial device for which I cannot change the firmware.

Increasing the ReadFile buffer will be challenging, but I'll see if I can try that.  Thanks.
Title: Re: HID - Losing Interrupt Input Reports on Windows XP
Post by: Jan Axelson on January 20, 2014, 10:50:37 am
Make lpBuffer large enough to hold multiple reports.
Title: Re: HID - Losing Interrupt Input Reports on Windows XP
Post by: swt2c on January 26, 2014, 09:35:36 pm
The other thing that I forgot to mention is that my device will only send 50 reports before waiting for an "ACK" response back from the host.  On a Windows 7 box, I was losing reports too, but once I set the HID driver buffer to > 50 (and thus it can hold a complete 50 packets from the device), the loss went away.

On my one problematic Windows XP box, I am still seeing occasional report loss even with the HID driver buffer > 50.  The best I can come up with here is some sort of driver bug.  When I use a software USB packet capture tool on the XP box, it sees the missing packet but it is malformed.  The hardware USB capture tool sees the packet fine.  So that's why I'm leaning toward driver bug, or maybe bad hardware.  (However, the same hardware works fine when booted with Linux).
Title: Re: HID - Losing Interrupt Input Reports on Windows XP
Post by: Jan Axelson on January 27, 2014, 09:50:45 am
Malformed in what way?
Title: Re: HID - Losing Interrupt Input Reports on Windows XP
Post by: swt2c on January 27, 2014, 09:56:31 am
It was missing the data portion of the report.  As in, the normal reports I'm getting have 64 bytes of data.  This one had zero bytes.
Title: Re: HID - Losing Interrupt Input Reports on Windows XP
Post by: Jan Axelson on January 27, 2014, 06:28:10 pm
You still could try retrieving multiple reports at once with ReadFile. A call to ReadFile every millisecond may be more than the PC can manage. If you use a larger buffer and find you're getting multiple reports, that's a sign that the PC application wasn't keeping up when doing one report at a time.
Title: Re: HID - Losing Interrupt Input Reports on Windows XP
Post by: swt2c on January 27, 2014, 06:40:56 pm
Yes, but unfortunately, that's easier said than done.  :-)  HIDAPI, as well as my application, are completely focused on handling one report at a time.  Making changes to retrieve multiple is not a trivial task.