Specifications

Remote Control and Receiver-Transceiver Specifications and Requirements
for Windows Media Center in Windows Operating Systems
80
Descriptors are defined using a pseudo-C syntax. Any specific values defined in this section are
required by this specification. You may choose values that are not defined in the specification.
The type word is two bytes long and is little-endian, according to USB rules.
The host requests these descriptors through the EP0 OUT (control OUT) endpoint. The device
returns these descriptors to the host over the EP0 IN (control IN) endpoint.
Device Descriptor
The device must have a device descriptor and must have at least one configuration. For more
information, see section 9.6.1 in the USB 2.0 specification.
The following code shows a device descriptor structure:
typedef struct deviceDescriptor {
byte bLength = sizeof(struct deviceDescriptor);
byte bDescriptorType = TYPE_DEVICE_DESCRIPTOR;
word bcdUSB = 0x0200; // USB 2.0 is required for Microsoft Compatible
// Device Descriptors to function properly.
byte bDeviceClass = 0; // Not used.
byte bDeviceSubclass = 0; // Not used.
byte bDeviceProtocol = 0; // Not used.
byte bMaxPacketSize; // This is hardware dependent. Choose a value
// that is appropriate for your USB chip.
word idVendor; // Vendor ID - assigned by USBIF.
word idProduct; // Product ID - assigned by your company.
word bcdDevice; // Device release number.
byte iManufacturer; // String index for manufacturer.
byte iProduct; // String index for product name.
byte iSerialNumber; // String index for serial number.
byte bNumConfigurations; // Count of configurations.
// Must be at least 1.
}
Note bcdUSB must be set to 0x0200, even if the device is a full-speed USB 1.1 device. For
more information, see the topic "USB 1.1 Devices" earlier in this document.
Configuration Descriptor
The device must have at least one configuration that has at least one interface. For more
information, see section 9.6.3 of the USB 2.0 specification.
The following code shows a configuration structure:
typedef struct configurationDescriptor {
byte bLength = sizeof(struct configurationDescriptor);
byte bDescriptorType = TYPE_CONFIGURATION_DESCRIPTOR;
word wTotalLength; // Total size of configuration data.
// See section 9.6.3 in USB 2.0 spec.
byte bNumInterfaces; // Must be at least 1.
byte bConfigurationValue;
byte iConfiguration; // String index for configuration name.
byte bmAttributes = 0xA0; // Remote wakeup required. May also be 0xE0.
byte bMaxPower;
}
The device can support additional interfaces as necessary. These extra interfaces could be used,
for example, to support a proprietary firmware download mechanism.