📄 descriptors.h
字号:
/*----------------------------------------------------------------------------------
*
* COPYRIGHT (c) 2001 by Singing Electrons, Inc. All rights reserved.
*
* This document contains confidential proprietary trade secrets of Singing Electrons, Inc.
* No distribution of the contents of this file is allowed except by written permission by an officer
* of Singing Electrons, Inc.
*
* Module Name : C:\se\adi\audioclass\vdsp\descriptors.h
*
* Description : Contains descriptors for use with the USB device.
*
*
* Revision History : At bottom of the file.
*
*---------------------------------------------------------------------------------*/
//
// String Descriptors
//
enum {
STRING_DEVICE = 1,
STRING_PRODUCT,
TOTAL_STRING_DESCRIPTORS
};
UCHAR gTheLangIDArray[] =
{
0x04,//bLength
USB_STRING_DESCRIPTOR, //bDescriptorType
0x09, 0x04 // 0x409 - English!
};
UCHAR *gTheStringDescriptors[] =
{
"Analog Devices",
"BlackFin Audio Class Reference Implementation",
};
#define OFFSET_VENDOR_ID 0x08
#define OFFSET_PRODUCT_ID 0x0A
#define OFFSET_RELEASE 0x0C
#define OFFSET_REPORT_DESCRIPTOR_LENGTH 25
//
// The Device Descriptor
//
UCHAR gTheDeviceDescriptor[] =
{
0x12, //Length
USB_DEVICE_DESCRIPTOR, //bDescriptorType
0x00, 0x01, //bcdUSB - USB Spec 1.0
0x00, //bDevice Class
0x00, //bDeviceSubClass
0x00, //bDeviceProtocol
CONTROL_PIPE_PACKET_SIZE, //bMaxPacketSize0
0x00, 0x00, //LOBYTE(VENDOR_ID), HIBYTE(VENDOR_ID),//idvendor
0x00, 0x00, //LOBYTE(PRODUCT_ID), HIBYTE(PRODUCT_ID),//idProduct
0x00, 0x00, //LOBYTE(DEVICE_RELEASE), HIBYTE(DEVICE_RELEASE),//bcdDevice
STRING_DEVICE,//iManufacturer
STRING_PRODUCT,//iProduct
0,//iSerialNumber
1//bNumConfigurations
};
#define CONFIG_DESCRIPTOR_LEN 0x09
#define INTERFACE_DESCRIPTOR_LEN 0x09
#define AUDIO_CONTROL_INTERFACE_DESCRIPTOR_LEN 0x09 //This could increase...
#define AUDIO_CONTROL_OUT_INPUT_TERMINAL_DESCRIPTOR_LEN 12
#define AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR_LEN 13
#define AUDIO_CONTROL_OUT_OUTPUT_TERMINAL_DESCRIPTOR_LEN 9
#define AUDIO_STREAMING_GENERAL_DESCRIPTOR_LEN 7
#define AUDIO_STREAMING_TYPE_I_FMT_DESCRIPTOR_LEN 11
#define AUDIO_STREAMING_ENDPOINT_DESCRIPTOR_LEN 9
#define AUDIO_STREAMING_ENDPOINT_GENERAL_DESCRIPTOR_LEN 7
#define TOTAL_AUDIO_CONTROL_DESCRIPTOR_LEN \
(AUDIO_CONTROL_INTERFACE_DESCRIPTOR_LEN + AUDIO_CONTROL_OUT_INPUT_TERMINAL_DESCRIPTOR_LEN +\
AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR_LEN + AUDIO_CONTROL_OUT_OUTPUT_TERMINAL_DESCRIPTOR_LEN)
#if PROVIDE_FEEDBACK
#define TOTAL_CONFIG_DESCRIPTOR_LEN \
(CONFIG_DESCRIPTOR_LEN + INTERFACE_DESCRIPTOR_LEN + TOTAL_AUDIO_CONTROL_DESCRIPTOR_LEN +\
INTERFACE_DESCRIPTOR_LEN + INTERFACE_DESCRIPTOR_LEN + AUDIO_STREAMING_GENERAL_DESCRIPTOR_LEN +\
AUDIO_STREAMING_TYPE_I_FMT_DESCRIPTOR_LEN + AUDIO_STREAMING_ENDPOINT_DESCRIPTOR_LEN +\
AUDIO_STREAMING_ENDPOINT_GENERAL_DESCRIPTOR_LEN + AUDIO_STREAMING_ENDPOINT_DESCRIPTOR_LEN)
#else
#define TOTAL_CONFIG_DESCRIPTOR_LEN \
(CONFIG_DESCRIPTOR_LEN + INTERFACE_DESCRIPTOR_LEN + TOTAL_AUDIO_CONTROL_DESCRIPTOR_LEN +\
INTERFACE_DESCRIPTOR_LEN + INTERFACE_DESCRIPTOR_LEN + AUDIO_STREAMING_GENERAL_DESCRIPTOR_LEN +\
AUDIO_STREAMING_TYPE_I_FMT_DESCRIPTOR_LEN + AUDIO_STREAMING_ENDPOINT_DESCRIPTOR_LEN +\
AUDIO_STREAMING_ENDPOINT_GENERAL_DESCRIPTOR_LEN)
#endif
//
// The Configuration Descriptor
//
UCHAR gTheConfigDescriptor[] =
{
CONFIG_DESCRIPTOR_LEN, // Configuration Descriptor Length
CONFIG_DESCR, // Descriptor Type
LOBYTE(TOTAL_CONFIG_DESCRIPTOR_LEN), // Everything!
HIBYTE(TOTAL_CONFIG_DESCRIPTOR_LEN), // Everything!
0x02, // # of interfaces
0x01, // configurationValue
0x00, // Configuration String
0x40, // Attributes: Self power and RWU
0x00, // max Power
// Interface descriptor - AudioControl
INTERFACE_DESCRIPTOR_LEN, // length
USB_INTERFACE_DESCRIPTOR, // descriptorType
INTERFACE_FOR_AUDIOCONTROL, // interfaceNumber
ALTSETTING_FOR_AUDIOCONTROL, // alternateSetting
0, // numEndpoints
USB_AUDIO_CLASS, // interfaceClass
USB_AUDIO_SUBCLASS_AUDIOCONTROL, // interfaceSubClass
USB_AUDIO_PROTOCOL_NONE, // interfaceProtocol
0, // interface string index
//Class specific AudioControl Interface Descriptor
//usbAudioControlHeader
AUDIO_CONTROL_INTERFACE_DESCRIPTOR_LEN, /* bLength, in bytes */
USB_AUDIO_DESCRIPTOR_INTERFACE, /* bDescriptorType */
USB_AUDIO_DESCRIPTOR_SUBTYPE_HEADER, /* bDescriptorSubtype */
0x00, /* bcdADC (lo) */
0x01, /* bcdADC (hi) = 1.0 */
LOBYTE(TOTAL_AUDIO_CONTROL_DESCRIPTOR_LEN),/* Total size */
HIBYTE(TOTAL_AUDIO_CONTROL_DESCRIPTOR_LEN),/* of AudioControl Desc.*/
0x01, /* bInCollection = 2 audio streaming interfaces */
0x01, /* baInterfaceNr(1) = 1 (Playback interface) */
/* USB OUT Input Terminal Descriptor */
AUDIO_CONTROL_OUT_INPUT_TERMINAL_DESCRIPTOR_LEN, /* bLength, in bytes */
USB_AUDIO_DESCRIPTOR_INTERFACE, /* bDescriptorType = CS_INTERFACE (from USBAD, Table A-4)*/
USB_AUDIO_DESCRIPTOR_SUBTYPE_INPUT_TERMINAL, /* bDescriptorSubtype = INPUT_TERMINAL */
TERMID_USBOUT, /* bTerminalID */
LOBYTE(USB_AUDIO_TERMINALTYPE_USBSTREAMING), /* wTerminalType (lo) */
HIBYTE(USB_AUDIO_TERMINALTYPE_USBSTREAMING), /* wTerminalType (hi) = USB Streaming */
0, /* bAssocTerminal = none */
NUM_CHANNELS, /* bNrChannels */
LOBYTE(CHANNELCONFIG), /* wChannelConfig Bitmap (lo) */
HIBYTE(CHANNELCONFIG), /* wChannelConfig (hi) */
0, /* iChannelNames = none */
0, /* iTerminal = none */
/* usbDacAttenuatorFUD DAC Attenuator Feature Unit Descriptor */
AUDIO_CONTROL_FEATURE_UNIT_DESCRIPTOR_LEN,/* bLength, in bytes*/
USB_AUDIO_DESCRIPTOR_INTERFACE, /* bDescriptorType = CS_INTERFACE (from USBAD, Table A-4)*/
USB_AUDIO_DESCRIPTOR_SUBTYPE_FEATURE_UNIT, /* bDescriptorSubtype = FEATURE_UNIT (from USBAD, Table A-5)*/
UNITID_OUTVOLUME, /* bUnitID */
TERMID_USBOUT, /* bSourceID */
0x02, /* bControlSize = 1 byte per control */
0x01, /* bmaControlMaster */
0x00, /* bmaControlMaster */
0x02, /* bmaControlLeft */
0x00, /* bmaControlLeft */
0x02, /* bmaControlRight */
0x00, /* bmaControlRight */
0x00, /* iFeature = none */
/* usbLineoutOutputTerminal Line-out Output Terminal Descriptor */
AUDIO_CONTROL_OUT_OUTPUT_TERMINAL_DESCRIPTOR_LEN, /* bLength, in bytes */
USB_AUDIO_DESCRIPTOR_INTERFACE, /* bDescriptorType = CS_INTERFACE (from USBAD, Table A-4)*/
USB_AUDIO_DESCRIPTOR_SUBTYPE_OUTPUT_TERMINAL, /* bDescriptorSubtype = OUTPUT_TERMINAL */
TERMID_LINEOUT, /* bTerminalID */
LOBYTE(USB_AUDIO_TERMINALTYPE_SPEAKER), /* wTerminalType (lo) */
HIBYTE(USB_AUDIO_TERMINALTYPE_SPEAKER), /* wTerminalType (hi) */
0, /* bAssocTerminal = none */
UNITID_OUTVOLUME, /* bSourceID of DAC Attenuator Feature Unit Descriptor.*/
0, /* iTerminal = none */
/* End of Class-Specific AudioControl Interface Descriptor section */
// Interface descriptor - AudioStreaming (OUT), Idle setting
INTERFACE_DESCRIPTOR_LEN, // length
USB_INTERFACE_DESCRIPTOR, // descriptorType
INTERFACE_FOR_AUDIOSTREAMING, // interfaceNumber
ALTSETTING_FOR_AUDIOSTREAMING_IDLE, // alternateSetting
0, // numEndpoints
USB_AUDIO_CLASS, // interfaceClass
USB_AUDIO_SUBCLASS_AUDIOSTREAMING, // interfaceSubClass
USB_AUDIO_PROTOCOL_NONE, // interfaceProtocol
0, // interface string index
// Interface descriptor - AudioStreaming (OUT), 48K Stereo
INTERFACE_DESCRIPTOR_LEN, // length
USB_INTERFACE_DESCRIPTOR, // descriptorType
INTERFACE_FOR_AUDIOSTREAMING, // interfaceNumber
ALTSETTING_FOR_AUDIOSTREAMING_48K, // alternateSetting
#if PROVIDE_FEEDBACK
2, // bNumEndpoints, OUT (data), IN (sync)
#else
1, // bNumEndpoints, Playback Endpoint,
#endif //PROVIDE_FEEDBACK
USB_AUDIO_CLASS, // interfaceClass
USB_AUDIO_SUBCLASS_AUDIOSTREAMING, // interfaceSubClass
USB_AUDIO_PROTOCOL_NONE, // interfaceProtocol
0, // interface string index
//Audio Class Specific - General Descriptor
AUDIO_STREAMING_GENERAL_DESCRIPTOR_LEN, /* bLength, in bytes */
USB_AUDIO_DESCRIPTOR_INTERFACE, /* bDescriptorType = CS_INTERFACE (from USBAD, Table A-4)*/
USB_AUDIO_DESCRIPTOR_SUBTYPE_GENERAL, /* bDescriptorSubtype = GENERAL */
TERMID_USBOUT, /* bTerminalLink, links USB OUT EP Streaming to Input Terminal */
PLAYBACK_DELAY, /* bDelay = 1 ms (need to measure) */
LOBYTE (USB_AUDIO_FORMAT_TAG_PCM), /* wFormatTag (lo) */
HIBYTE (USB_AUDIO_FORMAT_TAG_PCM), /* wFormatTag (hi) = PCM (from USBADF, Table A-1) */
//AudioStreaming Type I Format Interface Descriptor
AUDIO_STREAMING_TYPE_I_FMT_DESCRIPTOR_LEN, /* bLength, in bytes */
USB_AUDIO_DESCRIPTOR_INTERFACE, /* bDescriptorType = CS_INTERFACE */
USB_AUDIO_DESCRIPTOR_SUBTYPE_FORMAT, /* bDescriptorSubtype = FORMAT_TYPE (from USBAD, Table A-6) */
USB_AUDIO_FORMAT_TYPE_I, /* bFormatType = TYPE I (from USBADF, Table A-4) */
NUM_CHANNELS, /* bNrChannels */
CONTAINER_SIZE / 8, /* bSubframeSize in bytes */
BIT_DEPTH, /* bBitResolution */
USB_AUDIO_SAMPLING_FREQ_DISCREET, /* bSamFreqType*/
LOBYTE(LOWORD(SAMPLINGRATE)), /* tSamFreqLow[0] (lo) = 44100 Hz */
HIBYTE(LOWORD(SAMPLINGRATE)), /* tSamFreqMid[0] (mid) */
LOBYTE(HIWORD(SAMPLINGRATE)), /* tSamFreqHigh[0] (hi) */
// Standard AudioStreaming Audio Data Endpoint Descriptor
AUDIO_STREAMING_ENDPOINT_DESCRIPTOR_LEN, /* bLength, in bytes */
USB_ENDPOINT_DESCRIPTOR, /* bDescriptorType = ENDPOINT (from USBAD, Table 4-20) */
PLAYBACK_EP, /* bEndpointAddress OUT EP # */
#if PROVIDE_FEEDBACK
USB_AUDIO_EP_ATTRIB_ASYNC | USB_AUDIO_EP_ATTRIB_ISOCH, /* bmAttributes = Asynchronous Isochronous */
#else
USB_AUDIO_EP_ATTRIB_ADAPTIVE | USB_AUDIO_EP_ATTRIB_ISOCH, /* bmAttributes = No Synch (adaptive). Isochronous */
#endif //PROVIDE_FEEDBACK
LOBYTE(MAX_PACKET_SIZE), /* wMaxPacketSizeLo */
HIBYTE(MAX_PACKET_SIZE), /* wMaxPacketSizeHi */
1, /* bInterval is number of milliseconds between IN polling. */
#if PROVIDE_FEEDBACK
1, /* bRefresh - every 2 frames*/
PLAYBACK_FEEDBACK_EP, /* bSynchAddress */
#else
0, /* bRefresh */
0, /* bSynchAddress */
#endif //PROVIDE_FEEDBACK
//Class specific endpoint descriptor
AUDIO_STREAMING_ENDPOINT_GENERAL_DESCRIPTOR_LEN, /* bLength, in bytes */
USB_AUDIO_DESCRIPTOR_ENDPOINT, /* bDescriptorType = CS_ENPOINT */
USB_AUDIO_DESCRIPTOR_SUBTYPE_GENERAL, /* bDescriptorSubtype */
0x00, /* bmAttributes = no controls, full packet not necessary */
0x00, /* bLockDelayUnits, asynchronous audio function, must be 0.*/
0x00, /* wLockDelay (lo), must be 0. */
0x00, /* wLockDelay (hi) */
#if PROVIDE_FEEDBACK
//Feedback Endpoint - IN, Isoch.
AUDIO_STREAMING_ENDPOINT_DESCRIPTOR_LEN, /* bLength, in bytes */
USB_ENDPOINT_DESCRIPTOR, /* bDescriptorType = ENDPOINT (from USBAD, Table 4-20) */
PLAYBACK_FEEDBACK_EP, /* bEndpointAddress IN EP #3 */
USB_AUDIO_EP_ATTRIB_ISOCH, /* bmAttributes = No Sych. Isochronous */
LOBYTE(FEEDBACK_PACKET_SIZE), /* wMaxPacketSizeLo */
HIBYTE(FEEDBACK_PACKET_SIZE), /* wMaxPacketSizeHi */
1, /* bInterval is number of milliseconds between IN polling. */
1, /* bRefresh - same as the main ep*/
0, /* bSynchAddress */
#endif //PROVIDE_FEEDBACK
};
/*----------------------------------------------------------------------------------
* $Log: descriptors.h,v $
* Revision 1.3 2003/01/17 00:50:59 Devendra
* - Changed the refresh rate of feedback to 2 frames (milliseconds)
*
* Revision 1.2 2003/01/15 01:34:02 Devendra
* - Changed the feedback ep descriptor (wMaxPacketSize) to use a define instead of literals.
*
* Revision 1.1 2003/01/13 19:48:46 Devendra
* Separated Descriptors to a separate header.
*
*
*---------------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -