Using Generic USB Controllers
Under Windows XP SP2, composite devices that use the usbser.sys driver can
use an IAD only if the host has a hotfix from Microsoft (http://sup-
port.microsoft.com/kb/918365). The hotfix replaces the usbser.sys driver with an
updated version.
Earlier Windows editions don’t support the IAD and don’t have a mechanism
for loading the drivers correctly for a composite device that uses usbser.sys and
contains a CDC virtual COM port with multiple interfaces. Alternatives are to
use a vendor-specific driver or create a compound device with an embedded
hub that connects to multiple devices.
A third option for earlier Windows editions is to use the communication class
interface for data. According to the CDC specification, the communication
class interface doesn’t handle COM-port data. However, a host driver is free to
be more tolerant and allow devices that use one interface for both notifications
and data.
The Windows XP driver allows composite devices that include a CDC virtual
COM-port function with a single interface plus a second, independent inter-
face. In the device descriptor, bDeviceClass = 00h. The CDC interface has an
interrupt IN endpoint for notifications plus two bulk endpoints for data. The
device has no CDC data class interface descriptor, no CDC union functional
descriptor, and no interface association descriptor.
On seeing bDeviceClass = 00h, Windows looks for class codes in the interface
descriptors and loads drivers for the CDC function and the independent func-
tion. Devices of this type don’t fully comply with the CDC specification so
compatibility with other operating systems or other Windows editions isn’t
guaranteed.
"%. .
.
When a composite device includes a CDC communication interface for a vir-
tual COM port, the interface must have an INF file that is similar to Listing
16-1’s INF file except that the file specifies an interface in a device rather than
Table 16-8: These values in the device descriptor inform the host that the device
contains an IAD.
1
bDeviceClass EFh Miscellaneous device class
bDeviceSubClass 02h Common class
bDeviceProtocol 01h Interface Association Descriptor