How to improve stability of your USB HID devices on Win10
I’ve noticed when attaching a barcode scanner like the Honeywell 1300g to the USB port of a computer running Win10, the scanner works perfectly…. for as long as it is being used, or some additional hours, until power save mode or a Windows house keeping kicks in.
After then, the only way to get the scanner to work again, is to disconnect it physically and reconnect it.
First I suspected power save mode of the USB device. It is important to configure the USB devices that you want running 24×7, to not adhere to power save modes.
Turning off power saving for USB devices
This can be done a couple of places. I recommend updating settings for all the places:
- In the Windows power configuration control panel, which can be opened by running powercfg.cpl
Select Change plan settings for your selected power plan:
Select Change advanced power settings
Change USB selective suspend settings to DISABLED
2. On the specific USB driver in device management.
Some USB device drivers allows for defining their power save settings.
Open the device manager
In the device manager, locate the Universal Serial Bus controllers section. Each of the USB hub entries usually have power save options you can tune or turn off. Do that for at least the USB hub which you connected the device to, but I recommend to do it for all USB hub’s to avoid problems if you one day choose to plug in the USB device into another port on your computer, which may be driven by a different built in USB hub.
Right click the USB hub entries, one by one, and click Properties
Make sure to uncheck “Allow the computer to turn of this device to save power”.
If you do not see the Power Management tab, the device do not provide additional features for setting its power management, and you can ignore it.
But it did not solve the problem for real
After disabling power saving features for the USB (which is a requirement to do to get a stable, always running USB device), I however still experienced problems when the device were not used over night.
At first I suspected the kbmMW HID code to be the culprit, but it turned out it was not.
Instead it turns out that the default Microsoft driver for Barcode scanners configured in HID mode, simply dies after some hours of non use. The exact reason for it do die, is unknown to me, but I can guess it has to do with some Win10 scheduled operations, like updates, system clean up and even power save modes that may be triggered even though we have tried our best to disable those.
As you can see, there is a small yellow triangle on the POS HID Barcode scanner. It is an indicator of that the Windows HID driver has stopped communicating with the device. The device is actually very much alive, and I have verified that with USB debug/trace/scanner software, but the driver simply died, and will not “undie” until the device is reconnected.
Searching high and low for a solution to this problem found no real solution, using the driver default used by Windows 10.
However the salvation came, when I discovered that Win10 also comes with the older Win7 HID driver installed out of the box. And that driver do not die randomly.
So the solution is to right click the HID device, click on the Driver tab, and select Update driver. Then select “Browse my computer for driver software” (sorry the following screenshots are in Danish)
Then click on “Let me pick from a list of available drivers on my computer”
Then select the HID compliant device driver, rather than the POS-HID Barcode scanner or other HID drivers.
Let it install and voila, your HID driver is now stable and your device can run 24×7 on Win10.
I have chosen to do this change also for USB connected magnetic stripe readers, even though they seemingly do not use the unstable Win10 driver from outset, but making the change to the Win7 driver (which works for those magnetic stripe readers too), makes me more confident in those also running 24×7 and I have not had an issue with them with the older driver.