USB Host Software
USB classes, host drivers (class, generic, and vendor-specific), Windows tips, Linux, Mac, and other host OSes.
Sometimes you don't have to write a driver because Windows or another source provides a class driver.
Device Firmware Upgrade. STMicroelectronics has a Device Firmware Upgrade (DFU) implementation for ST7 USB applications.
Video example: capture video from a USB camera in Java. From David Fischer.
WinUSB is a generic USB driver supported by Windows Vista. The driver enables applications to access devices that don't fit into a defined class.
USB 1.x/2.0 Generic Device Driver from Andrew Pargeter & Associates.
Cypress EZ-USB chips can use the new cyusb driver included in the CY4604 USB Developer's uStudio.
RapidDriver generic driver for parallel-port, USB, and other devices. From EnTech Taiwan.
JCommUSB API is a Java USB API for Windows. From icaste LLC.
The Java USB API will allow Java applications to communicate with and manipulate USB devices. The specification is in progress. From the Java Community Process.
MCCI has a generic driver.
Tetradyne's DriverX USB enables accessing devices using all transfer types. No DDK required. Includes support for C/C++, Delphi, and Visual Basic.
Thesycon's USBIO allows access to all USB devices from user mode. Free demo.
Using USB devices with Labview and LabWindows/CVI.
Microsoft's WDK (Windows Driver Kit) has information on writing drivers, and example drivers. The kit is a free download. Formerly called the Device Driver Kit (DDK).
Jungo.com's WinDriver USB is an enhanced version of Jungo's Driverwizard, which enables developing driver code in user mode and later moving it to kernel mode. Jungo's USB-Software Index has some write-ups and links.
If you need to support Windows NT, see Jungo's WinDriver USB for Windows NT and Digi's EdgeUSB. These products enable using the same code to compile a driver for NT4 as well as Win98. Woodhead also has an NT driver available for download.
If you get a broken link: Microsoft frequently changes the URLs of its content but at least has improved its "page not found" page to show some possibilities for the missing content. If all else fails, search microsoft.com for the name of the page (such as "USB Architecture").
Microsoft's USB Technologies page for developers has links to various Windows-related documentation, including a couple of FAQs.
USB Support on Windows 98 explains the differences between the USB support in Windows 95 and 98.
Setup Classes Versus Interface Classes. All about GUIDS.
Windows Logo Program for Hardware. This is different from the Implementers Forum's Certified USB Logo.
Suplog.exe is a utility that simplifies capturing and displaying of SetupAPI logs. During device installation or removal, Windows' Device Manager calls SetupXxx and SetupDiXxx functions. With appropriate options set in the registry, the functions generate a log, which can provide information about the execution of INF file directives and the execution of co-installers. Freeware from SourceQuest.
How to turn off selective Suspend. Can fix a problem where a USB port stops responding after quickly and repeatedly inserting and removing a USB device. MS Article ID 817900.
Microsoft OS Descriptor
A request for a string descriptor with index EEh is requesting the Microsoft OS descriptor. Microsoft has some information in the Intermediate USB FAQ. Also see Microsoft OS Descriptors from SourceQuest.
Every USB device on a Windows system must have an INF file that tells the Device Manager what driver to assign to the device.
The WDK documentation has more about INF files. See "Creating an INF File" and "Supplying an INF File."
How Windows Determines the Most Suitable Device Driver to Install During Setup (Knowledge Base article 279112). Explains how Windows searches INF files for vendor and product IDs and uses its findings to decide which drivers to load.
INF Files for Bears of Little Brain. From Brian Catlin.
The libusb project aims to create a library to enable applications to access USB devices regardless of OS. Includes Linux, FreeBSD, NetBSD, OpenBSD, Darwin, MacOS X.
Also see Embedded hosts and OTG.
USB on the Macintosh.
The Linux USB Project.
How to get USB devices working under Linux. From Brad Hards.
Linux Remote NDIS USB device function driver. From Belcarra Technologies.
USB MIDI driver for Linux. From Studio Breeze.
Jungo's WinDriver USB includes support for Linux.
DosUSB allows DOS applications and drivers to communicate with USB devices. From Georg Potthast.