Chapter 4
102
idVendor is a Vendor ID assigned by the USB-IF to members of the USB-IF
and others who pay an administrative fee. The host may have an INF file that
contains this value, and if so, Windows may use the value to help select a driver
for the device. Except for devices used only in house where the user is responsi-
ble for preventing conflicts, every device descriptor must have a valid Vendor
ID in this field.
idProduct is a Product ID that identifies the vendor’s device. The owner of the
Vendor ID assigns the Product ID. Both the device descriptor and the device’s
INF file on the host may contain this value, and if so, Windows may use the
value to help select a driver for the device. Each Product ID is specific to a Ven-
dor ID, so multiple vendors can use the same Product ID without conflict.
bcdDevice is the device’s release number in BCD format. The vendor assigns
this value. The host may use this value to help select a driver for the device.
iManufacturer is an index that points to a string describing the manufacturer
or zero if there is no manufacturer descriptor.
iProduct is an index that points to a string describing the product or zero if
there is no string descriptor.
iSerialNumber is an index that points to a string containing the device’s serial
number or 00h if there is no serial number. Serial numbers are useful if users
may have more than one identical device on the bus and the host needs to
remember which device is which even after rebooting. A serial number also
enables a host to determine whether a device is the same one used previously or
a new installation of a device with the same Vendor ID and Product ID.
Devices with the same Vendor ID, Product ID, and device release number
should not share a serial number. Mass-storage devices that use the bulk-only
protocol must have serial numbers.
bNumConfigurations equals the number of configurations the device supports
at the current operating speed.
&GXKEGA3WCNKHKGT
Devices that support both full and high speeds must have a device_qualifier
descriptor (Table 4-4). When a device switches speeds, the values of some fields
in the device descriptor may change. The device_qualifier descriptor contains
the values for these fields at the speed not currently in use. In other words, the
contents of fields in the device and device_qualifier descriptors swap depending
on which speed is in use. A host retrieves a device_qualifier descriptor by send-