395 lines
11 KiB
C
395 lines
11 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1997-2008 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
USBDESC.H
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This is a header file for USB descriptors which are not yet in
|
||
|
a standard system header file.
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
user mode
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
03-06-1998 : created
|
||
|
03-28-2003 : minor changes to support UVC and USB200
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#pragma pack(push, 1)
|
||
|
|
||
|
/*****************************************************************************
|
||
|
D E F I N E S
|
||
|
*****************************************************************************/
|
||
|
|
||
|
//
|
||
|
//Device Descriptor bDeviceClass values
|
||
|
//
|
||
|
#define USB_INTERFACE_CLASS_DEVICE 0x00
|
||
|
#define USB_COMMUNICATION_DEVICE 0x02
|
||
|
#define USB_HUB_DEVICE 0x09
|
||
|
#define USB_DEVICE_CLASS_BILLBOARD 0x11
|
||
|
#define USB_DIAGNOSTIC_DEVICE 0xDC
|
||
|
#define USB_WIRELESS_CONTROLLER_DEVICE 0xE0
|
||
|
#define USB_MISCELLANEOUS_DEVICE 0xEF
|
||
|
#define USB_VENDOR_SPECIFIC_DEVICE 0xFF
|
||
|
|
||
|
//
|
||
|
//Device Descriptor bDeviceSubClass values
|
||
|
//
|
||
|
#define USB_COMMON_SUB_CLASS 0x02
|
||
|
|
||
|
//
|
||
|
//Interface Descriptor bInterfaceClass values:
|
||
|
//
|
||
|
//#define USB_AUDIO_INTERFACE 0x01
|
||
|
//#define USB_CDC_CONTROL_INTERFACE 0x02
|
||
|
//#define USB_HID_INTERFACE 0x03
|
||
|
//#define USB_PHYSICAL_INTERFACE 0x05
|
||
|
//#define USB_IMAGE_INTERFACE 0x06
|
||
|
//#define USB_PRINTER_INTERFACE 0x07
|
||
|
//#define USB_MASS_STORAGE_INTERFACE 0x08
|
||
|
//#define USB_HUB_INTERFACE 0x09
|
||
|
#define USB_CDC_DATA_INTERFACE 0x0A
|
||
|
#define USB_CHIP_SMART_CARD_INTERFACE 0x0B
|
||
|
#define USB_CONTENT_SECURITY_INTERFACE 0x0D
|
||
|
#define USB_DIAGNOSTIC_DEVICE_INTERFACE 0xDC
|
||
|
#define USB_WIRELESS_CONTROLLER_INTERFACE 0xE0
|
||
|
#define USB_APPLICATION_SPECIFIC_INTERFACE 0xFE
|
||
|
//#define USB_VENDOR_SPECIFIC_INTERFACE 0xFF
|
||
|
#define USB_HID_DESCRIPTOR_TYPE 0x21
|
||
|
|
||
|
//
|
||
|
//IAD protocol values
|
||
|
//
|
||
|
#define USB_IAD_PROTOCOL 0x01
|
||
|
|
||
|
//
|
||
|
//Device class specific values
|
||
|
//
|
||
|
#define BILLBOARD_MAX_NUM_ALT_MODE 0x34
|
||
|
|
||
|
//
|
||
|
//USB 2.0 Specification Changes - New Descriptors
|
||
|
//
|
||
|
#define USB_OTHER_SPEED_CONFIGURATION_DESCRIPTOR_TYPE 0x07
|
||
|
#define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 0x08
|
||
|
#define USB_OTG_DESCRIPTOR_TYPE 0x09
|
||
|
#define USB_DEBUG_DESCRIPTOR_TYPE 0x0A
|
||
|
#define USB_IAD_DESCRIPTOR_TYPE 0x0B
|
||
|
|
||
|
//
|
||
|
// USB Device Class Definition for Audio Devices
|
||
|
// Appendix A. Audio Device Class Codes
|
||
|
//
|
||
|
|
||
|
// A.2 Audio Interface Subclass Codes
|
||
|
//
|
||
|
#define USB_AUDIO_SUBCLASS_UNDEFINED 0x00
|
||
|
#define USB_AUDIO_SUBCLASS_AUDIOCONTROL 0x01
|
||
|
#define USB_AUDIO_SUBCLASS_AUDIOSTREAMING 0x02
|
||
|
#define USB_AUDIO_SUBCLASS_MIDISTREAMING 0x03
|
||
|
|
||
|
// A.4 Audio Class-Specific Descriptor Types
|
||
|
//
|
||
|
#define USB_AUDIO_CS_UNDEFINED 0x20
|
||
|
#define USB_AUDIO_CS_DEVICE 0x21
|
||
|
#define USB_AUDIO_CS_CONFIGURATION 0x22
|
||
|
#define USB_AUDIO_CS_STRING 0x23
|
||
|
#define USB_AUDIO_CS_INTERFACE 0x24
|
||
|
#define USB_AUDIO_CS_ENDPOINT 0x25
|
||
|
|
||
|
// A.5 Audio Class-Specific AC (Audio Control) Interface Descriptor Subtypes
|
||
|
//
|
||
|
#define USB_AUDIO_AC_UNDEFINED 0x00
|
||
|
#define USB_AUDIO_AC_HEADER 0x01
|
||
|
#define USB_AUDIO_AC_INPUT_TERMINAL 0x02
|
||
|
#define USB_AUDIO_AC_OUTPUT_TERMINAL 0x03
|
||
|
#define USB_AUDIO_AC_MIXER_UNIT 0x04
|
||
|
#define USB_AUDIO_AC_SELECTOR_UNIT 0x05
|
||
|
#define USB_AUDIO_AC_FEATURE_UNIT 0x06
|
||
|
#define USB_AUDIO_AC_PROCESSING_UNIT 0x07
|
||
|
#define USB_AUDIO_AC_EXTENSION_UNIT 0x08
|
||
|
|
||
|
// A.6 Audio Class-Specific AS (Audio Streaming) Interface Descriptor Subtypes
|
||
|
//
|
||
|
#define USB_AUDIO_AS_UNDEFINED 0x00
|
||
|
#define USB_AUDIO_AS_GENERAL 0x01
|
||
|
#define USB_AUDIO_AS_FORMAT_TYPE 0x02
|
||
|
#define USB_AUDIO_AS_FORMAT_SPECIFIC 0x03
|
||
|
|
||
|
// A.7 Processing Unit Process Types
|
||
|
//
|
||
|
#define USB_AUDIO_PROCESS_UNDEFINED 0x00
|
||
|
#define USB_AUDIO_PROCESS_UPDOWNMIX 0x01
|
||
|
#define USB_AUDIO_PROCESS_DOLBYPROLOGIC 0x02
|
||
|
#define USB_AUDIO_PROCESS_3DSTEREOEXTENDER 0x03
|
||
|
#define USB_AUDIO_PROCESS_REVERBERATION 0x04
|
||
|
#define USB_AUDIO_PROCESS_CHORUS 0x05
|
||
|
#define USB_AUDIO_PROCESS_DYNRANGECOMP 0x06
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
T Y P E D E F S
|
||
|
*****************************************************************************/
|
||
|
|
||
|
// HID Class HID Descriptor
|
||
|
//
|
||
|
typedef struct _USB_HID_DESCRIPTOR
|
||
|
{
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
USHORT bcdHID;
|
||
|
UCHAR bCountryCode;
|
||
|
UCHAR bNumDescriptors;
|
||
|
struct
|
||
|
{
|
||
|
UCHAR bDescriptorType;
|
||
|
USHORT wDescriptorLength;
|
||
|
} OptionalDescriptors[1];
|
||
|
} USB_HID_DESCRIPTOR, *PUSB_HID_DESCRIPTOR;
|
||
|
|
||
|
|
||
|
// OTG Descriptor
|
||
|
//
|
||
|
typedef struct _USB_OTG_DESCRIPTOR
|
||
|
{
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
UCHAR bmAttributes;
|
||
|
} USB_OTG_DESCRIPTOR, *PUSB_OTG_DESCRIPTOR;
|
||
|
|
||
|
// IAD Descriptor
|
||
|
//
|
||
|
typedef struct _USB_IAD_DESCRIPTOR
|
||
|
{
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
UCHAR bFirstInterface;
|
||
|
UCHAR bInterfaceCount;
|
||
|
UCHAR bFunctionClass;
|
||
|
UCHAR bFunctionSubClass;
|
||
|
UCHAR bFunctionProtocol;
|
||
|
UCHAR iFunction;
|
||
|
} USB_IAD_DESCRIPTOR, *PUSB_IAD_DESCRIPTOR;
|
||
|
|
||
|
|
||
|
// Common Class Endpoint Descriptor
|
||
|
//
|
||
|
typedef struct _USB_ENDPOINT_DESCRIPTOR2 {
|
||
|
UCHAR bLength; // offset 0, size 1
|
||
|
UCHAR bDescriptorType; // offset 1, size 1
|
||
|
UCHAR bEndpointAddress; // offset 2, size 1
|
||
|
UCHAR bmAttributes; // offset 3, size 1
|
||
|
USHORT wMaxPacketSize; // offset 4, size 2
|
||
|
USHORT wInterval; // offset 6, size 2
|
||
|
UCHAR bSyncAddress; // offset 8, size 1
|
||
|
} USB_ENDPOINT_DESCRIPTOR2, *PUSB_ENDPOINT_DESCRIPTOR2;
|
||
|
|
||
|
// Common Class Interface Descriptor
|
||
|
//
|
||
|
typedef struct _USB_INTERFACE_DESCRIPTOR2 {
|
||
|
UCHAR bLength; // offset 0, size 1
|
||
|
UCHAR bDescriptorType; // offset 1, size 1
|
||
|
UCHAR bInterfaceNumber; // offset 2, size 1
|
||
|
UCHAR bAlternateSetting; // offset 3, size 1
|
||
|
UCHAR bNumEndpoints; // offset 4, size 1
|
||
|
UCHAR bInterfaceClass; // offset 5, size 1
|
||
|
UCHAR bInterfaceSubClass; // offset 6, size 1
|
||
|
UCHAR bInterfaceProtocol; // offset 7, size 1
|
||
|
UCHAR iInterface; // offset 8, size 1
|
||
|
USHORT wNumClasses; // offset 9, size 2
|
||
|
} USB_INTERFACE_DESCRIPTOR2, *PUSB_INTERFACE_DESCRIPTOR2;
|
||
|
|
||
|
|
||
|
//
|
||
|
// USB Device Class Definition for Audio Devices
|
||
|
//
|
||
|
|
||
|
typedef struct _USB_AUDIO_COMMON_DESCRIPTOR {
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
UCHAR bDescriptorSubtype;
|
||
|
} USB_AUDIO_COMMON_DESCRIPTOR,
|
||
|
*PUSB_AUDIO_COMMON_DESCRIPTOR;
|
||
|
|
||
|
// 4.3.2 Class-Specific AC (Audio Control) Interface Descriptor
|
||
|
//
|
||
|
typedef struct _USB_AUDIO_AC_INTERFACE_HEADER_DESCRIPTOR {
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
UCHAR bDescriptorSubtype;
|
||
|
USHORT bcdADC;
|
||
|
USHORT wTotalLength;
|
||
|
UCHAR bInCollection;
|
||
|
UCHAR baInterfaceNr[1];
|
||
|
} USB_AUDIO_AC_INTERFACE_HEADER_DESCRIPTOR,
|
||
|
*PUSB_AUDIO_AC_INTERFACE_HEADER_DESCRIPTOR;
|
||
|
|
||
|
// 4.3.2.1 Input Terminal Descriptor
|
||
|
//
|
||
|
typedef struct _USB_AUDIO_INPUT_TERMINAL_DESCRIPTOR {
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
UCHAR bDescriptorSubtype;
|
||
|
UCHAR bTerminalID;
|
||
|
USHORT wTerminalType;
|
||
|
UCHAR bAssocTerminal;
|
||
|
UCHAR bNrChannels;
|
||
|
USHORT wChannelConfig;
|
||
|
UCHAR iChannelNames;
|
||
|
UCHAR iTerminal;
|
||
|
} USB_AUDIO_INPUT_TERMINAL_DESCRIPTOR,
|
||
|
*PUSB_AUDIO_INPUT_TERMINAL_DESCRIPTOR;
|
||
|
|
||
|
// 4.3.2.2 Output Terminal Descriptor
|
||
|
//
|
||
|
typedef struct _USB_AUDIO_OUTPUT_TERMINAL_DESCRIPTOR {
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
UCHAR bDescriptorSubtype;
|
||
|
UCHAR bTerminalID;
|
||
|
USHORT wTerminalType;
|
||
|
UCHAR bAssocTerminal;
|
||
|
UCHAR bSourceID;
|
||
|
UCHAR iTerminal;
|
||
|
} USB_AUDIO_OUTPUT_TERMINAL_DESCRIPTOR,
|
||
|
*PUSB_AUDIO_OUTPUT_TERMINAL_DESCRIPTOR;
|
||
|
|
||
|
// 4.3.2.3 Mixer Unit Descriptor
|
||
|
//
|
||
|
typedef struct _USB_AUDIO_MIXER_UNIT_DESCRIPTOR {
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
UCHAR bDescriptorSubtype;
|
||
|
UCHAR bUnitID;
|
||
|
UCHAR bNrInPins;
|
||
|
UCHAR baSourceID[1];
|
||
|
} USB_AUDIO_MIXER_UNIT_DESCRIPTOR,
|
||
|
*PUSB_AUDIO_MIXER_UNIT_DESCRIPTOR;
|
||
|
|
||
|
// 4.3.2.4 Selector Unit Descriptor
|
||
|
//
|
||
|
typedef struct _USB_AUDIO_SELECTOR_UNIT_DESCRIPTOR {
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
UCHAR bDescriptorSubtype;
|
||
|
UCHAR bUnitID;
|
||
|
UCHAR bNrInPins;
|
||
|
UCHAR baSourceID[1];
|
||
|
} USB_AUDIO_SELECTOR_UNIT_DESCRIPTOR,
|
||
|
*PUSB_AUDIO_SELECTOR_UNIT_DESCRIPTOR;
|
||
|
|
||
|
// 4.3.2.5 Feature Unit Descriptor
|
||
|
//
|
||
|
typedef struct _USB_AUDIO_FEATURE_UNIT_DESCRIPTOR {
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
UCHAR bDescriptorSubtype;
|
||
|
UCHAR bUnitID;
|
||
|
UCHAR bSourceID;
|
||
|
UCHAR bControlSize;
|
||
|
UCHAR bmaControls[1];
|
||
|
} USB_AUDIO_FEATURE_UNIT_DESCRIPTOR,
|
||
|
*PUSB_AUDIO_FEATURE_UNIT_DESCRIPTOR;
|
||
|
|
||
|
// 4.3.2.6 Processing Unit Descriptor
|
||
|
//
|
||
|
typedef struct _USB_AUDIO_PROCESSING_UNIT_DESCRIPTOR {
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
UCHAR bDescriptorSubtype;
|
||
|
UCHAR bUnitID;
|
||
|
USHORT wProcessType;
|
||
|
UCHAR bNrInPins;
|
||
|
UCHAR baSourceID[1];
|
||
|
} USB_AUDIO_PROCESSING_UNIT_DESCRIPTOR,
|
||
|
*PUSB_AUDIO_PROCESSING_UNIT_DESCRIPTOR;
|
||
|
|
||
|
// 4.3.2.7 Extension Unit Descriptor
|
||
|
//
|
||
|
typedef struct _USB_AUDIO_EXTENSION_UNIT_DESCRIPTOR {
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
UCHAR bDescriptorSubtype;
|
||
|
UCHAR bUnitID;
|
||
|
USHORT wExtensionCode;
|
||
|
UCHAR bNrInPins;
|
||
|
UCHAR baSourceID[1];
|
||
|
} USB_AUDIO_EXTENSION_UNIT_DESCRIPTOR,
|
||
|
*PUSB_AUDIO_EXTENSION_UNIT_DESCRIPTOR;
|
||
|
|
||
|
// 4.5.2 Class-Specific AS Interface Descriptor
|
||
|
//
|
||
|
typedef struct _USB_AUDIO_GENERAL_DESCRIPTOR {
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
UCHAR bDescriptorSubtype;
|
||
|
UCHAR bTerminalLink;
|
||
|
UCHAR bDelay;
|
||
|
USHORT wFormatTag;
|
||
|
} USB_AUDIO_GENERAL_DESCRIPTOR,
|
||
|
*PUSB_AUDIO_GENERAL_DESCRIPTOR;
|
||
|
|
||
|
// 4.6.1.2 Class-Specific AS Endpoint Descriptor
|
||
|
//
|
||
|
typedef struct _USB_AUDIO_ENDPOINT_DESCRIPTOR {
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
UCHAR bDescriptorSubtype;
|
||
|
UCHAR bmAttributes;
|
||
|
UCHAR bLockDelayUnits;
|
||
|
USHORT wLockDelay;
|
||
|
} USB_AUDIO_ENDPOINT_DESCRIPTOR,
|
||
|
*PUSB_AUDIO_ENDPOINT_DESCRIPTOR;
|
||
|
|
||
|
//
|
||
|
// USB Device Class Definition for Audio Data Formats
|
||
|
//
|
||
|
|
||
|
typedef struct _USB_AUDIO_COMMON_FORMAT_DESCRIPTOR {
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
UCHAR bDescriptorSubtype;
|
||
|
UCHAR bFormatType;
|
||
|
} USB_AUDIO_COMMON_FORMAT_DESCRIPTOR,
|
||
|
*PUSB_AUDIO_COMMON_FORMAT_DESCRIPTOR;
|
||
|
|
||
|
|
||
|
// 2.1.5 Type I Format Type Descriptor
|
||
|
// 2.3.1 Type III Format Type Descriptor
|
||
|
//
|
||
|
typedef struct _USB_AUDIO_TYPE_I_OR_III_FORMAT_DESCRIPTOR {
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
UCHAR bDescriptorSubtype;
|
||
|
UCHAR bFormatType;
|
||
|
UCHAR bNrChannels;
|
||
|
UCHAR bSubframeSize;
|
||
|
UCHAR bBitResolution;
|
||
|
UCHAR bSamFreqType;
|
||
|
} USB_AUDIO_TYPE_I_OR_III_FORMAT_DESCRIPTOR,
|
||
|
*PUSB_AUDIO_TYPE_I_OR_III_FORMAT_DESCRIPTOR;
|
||
|
|
||
|
|
||
|
// 2.2.6 Type II Format Type Descriptor
|
||
|
//
|
||
|
typedef struct _USB_AUDIO_TYPE_II_FORMAT_DESCRIPTOR {
|
||
|
UCHAR bLength;
|
||
|
UCHAR bDescriptorType;
|
||
|
UCHAR bDescriptorSubtype;
|
||
|
UCHAR bFormatType;
|
||
|
USHORT wMaxBitRate;
|
||
|
USHORT wSamplesPerFrame;
|
||
|
UCHAR bSamFreqType;
|
||
|
} USB_AUDIO_TYPE_II_FORMAT_DESCRIPTOR,
|
||
|
*PUSB_AUDIO_TYPE_II_FORMAT_DESCRIPTOR;
|
||
|
|
||
|
#pragma pack(pop)
|