|
|
|
@ -31,7 +31,7 @@
|
|
|
|
|
#define _TUSB_USBD_H_
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C" {
|
|
|
|
|
extern "C" {
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#include "common/tusb_common.h"
|
|
|
|
@ -319,41 +319,154 @@ TU_ATTR_WEAK bool tud_vendor_control_complete_cb(uint8_t rhport, tusb_control_re
|
|
|
|
|
|
|
|
|
|
//------------- AUDIO -------------//
|
|
|
|
|
|
|
|
|
|
// Length of template descriptor (132 bytes)
|
|
|
|
|
#define TUD_AUDIO_MIC_DESC_LEN (8 + 9 + 9 + 8 + 17 + 12 + 14 + 9 + 9 + 16 + 6 + 7 + 8)
|
|
|
|
|
#define TUD_AUDIO_MIC_DESC_N_AS_INT 1
|
|
|
|
|
/* Standard Interface Association Descriptor (IAD) */
|
|
|
|
|
#define TUD_AUDIO_DESC_IAD_LEN 8
|
|
|
|
|
#define TUD_AUDIO_DESC_IAD(_firstitfs, _nitfs, _stridx) \
|
|
|
|
|
TUD_AUDIO_DESC_IAD_LEN, TUSB_DESC_INTERFACE_ASSOCIATION, _firstitfs, _nitfs, TUSB_CLASS_AUDIO, AUDIO_FUNCTION_SUBCLASS_UNDEFINED, AUDIO_PROTOCOL_V2, _stridx
|
|
|
|
|
|
|
|
|
|
/* Standard AC Interface Descriptor(4.7.1) */
|
|
|
|
|
#define TUD_AUDIO_DESC_STD_AC_LEN 9
|
|
|
|
|
#define TUD_AUDIO_DESC_STD_AC(_itfnum, _nEPs, _stridx) /* _nEPs is 0 or 1 */\
|
|
|
|
|
TUD_AUDIO_DESC_STD_AC_LEN, TUSB_DESC_INTERFACE, _itfnum, /* fixed to zero */ 0x00, _nEPs, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_CONTROL, AUDIO_PROTOCOL_V2, _stridx
|
|
|
|
|
|
|
|
|
|
/* Class-Specific AC Interface Header Descriptor(4.7.2) */
|
|
|
|
|
#define TUD_AUDIO_DESC_CS_AC_LEN 9
|
|
|
|
|
#define TUD_AUDIO_DESC_CS_AC(_bcdADC, _category, _totallen, _ctrl) /* _bcdADC : Audio Device Class Specification Release Number in Binary-Coded Decimal, _category : see audio_function_t, _totallen : Total number of bytes returned for the class-specific AudioControl interface i.e. Clock Source, Unit and Terminal descriptors - Do not include TUD_AUDIO_DESC_CS_AC_LEN, we already do this here*/ \
|
|
|
|
|
TUD_AUDIO_DESC_CS_AC_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_HEADER, U16_TO_U8S_LE(_bcdADC), _category, U16_TO_U8S_LE(_totallen + TUD_AUDIO_DESC_CS_AC_LEN), _ctrl
|
|
|
|
|
|
|
|
|
|
/* Clock Source Descriptor(4.7.2.1) */
|
|
|
|
|
#define TUD_AUDIO_DESC_CLK_SRC_LEN 8
|
|
|
|
|
#define TUD_AUDIO_DESC_CLK_SRC(_clkid, _attr, _ctrl, _assocTerm, _stridx) \
|
|
|
|
|
TUD_AUDIO_DESC_CLK_SRC_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_CLOCK_SOURCE, _clkid, _attr, _ctrl, _assocTerm, _stridx
|
|
|
|
|
|
|
|
|
|
/* Input Terminal Descriptor(4.7.2.4) */
|
|
|
|
|
#define TUD_AUDIO_DESC_INPUT_TERM_LEN 17
|
|
|
|
|
#define TUD_AUDIO_DESC_INPUT_TERM(_termid, _termtype, _assocTerm, _clkid, _nchannelslogical, _channelcfg, _idxchannelnames, _ctrl, _stridx) \
|
|
|
|
|
TUD_AUDIO_DESC_INPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_INPUT_TERMINAL, _termid, U16_TO_U8S_LE(_termtype), _assocTerm, _clkid, _nchannelslogical, U32_TO_U8S_LE(_channelcfg), _idxchannelnames, U16_TO_U8S_LE(_ctrl), _stridx
|
|
|
|
|
|
|
|
|
|
/* Output Terminal Descriptor(4.7.2.5) */
|
|
|
|
|
#define TUD_AUDIO_DESC_OUTPUT_TERM_LEN 12
|
|
|
|
|
#define TUD_AUDIO_DESC_OUTPUT_TERM(_termid, _termtype, _assocTerm, _srcid, _clkid, _ctrl, _stridx) \
|
|
|
|
|
TUD_AUDIO_DESC_OUTPUT_TERM_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL, _termid, U16_TO_U8S_LE(_termtype), _assocTerm, _srcid, _clkid, U16_TO_U8S_LE(_ctrl), _stridx
|
|
|
|
|
|
|
|
|
|
/* Feature Unit Descriptor(4.7.2.8) */
|
|
|
|
|
// 1 - Channel
|
|
|
|
|
#define TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN 6+(1+1)*4
|
|
|
|
|
#define TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL(_unitid, _srcid, _ctrlch0master, _ctrlch1, _stridx) \
|
|
|
|
|
TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, _unitid, _srcid, U32_TO_U8S_LE(_ctrlch0master), U32_TO_U8S_LE(_ctrlch1), _stridx
|
|
|
|
|
|
|
|
|
|
// For more channels, add definitions here
|
|
|
|
|
|
|
|
|
|
/* Standard AS Interface Descriptor(4.9.1) */
|
|
|
|
|
#define TUD_AUDIO_DESC_STD_AS_INT_LEN 9
|
|
|
|
|
#define TUD_AUDIO_DESC_STD_AS_INT(_itfnum, _altset, _nEPs, _stridx) \
|
|
|
|
|
TUD_AUDIO_DESC_STD_AS_INT_LEN, TUSB_DESC_INTERFACE, _itfnum, _altset, _nEPs, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_STREAMING, AUDIO_PROTOCOL_V2, _stridx
|
|
|
|
|
|
|
|
|
|
/* Class-Specific AS Interface Descriptor(4.9.2) */
|
|
|
|
|
#define TUD_AUDIO_DESC_CS_AS_INT_LEN 16
|
|
|
|
|
#define TUD_AUDIO_DESC_CS_AS_INT(_termid, _ctrl, _formattype, _formats, _nchannelsphysical, _channelcfg, _stridx) \
|
|
|
|
|
TUD_AUDIO_DESC_CS_AS_INT_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AS_INTERFACE_AS_GENERAL, _termid, _ctrl, _formattype, U32_TO_U8S_LE(_formats), _nchannelsphysical, U32_TO_U8S_LE(_channelcfg), _stridx
|
|
|
|
|
|
|
|
|
|
/* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */
|
|
|
|
|
#define TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN 6
|
|
|
|
|
#define TUD_AUDIO_DESC_TYPE_I_FORMAT(_subslotsize, _bitresolution) /* _subslotsize is number of bytes per sample (i.e. subslot) and can be 1,2,3, or 4 */\
|
|
|
|
|
TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AS_INTERFACE_FORMAT_TYPE, AUDIO_FORMAT_TYPE_I, _subslotsize, _bitresolution
|
|
|
|
|
|
|
|
|
|
/* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */
|
|
|
|
|
#define TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN 7
|
|
|
|
|
#define TUD_AUDIO_DESC_STD_AS_ISO_EP(_ep, _attr, _maxEPsize, _interval) \
|
|
|
|
|
TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN, TUSB_DESC_ENDPOINT, _ep, _attr, U16_TO_U8S_LE(_maxEPsize), _interval
|
|
|
|
|
|
|
|
|
|
/* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */
|
|
|
|
|
#define TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN 8
|
|
|
|
|
#define TUD_AUDIO_DESC_CS_AS_ISO_EP(_attr, _ctrl, _lockdelayunit, _lockdelay) \
|
|
|
|
|
TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN, TUSB_DESC_CS_ENDPOINT, AUDIO_CS_EP_SUBTYPE_GENERAL, _attr, _ctrl, _lockdelayunit, U16_TO_U8S_LE(_lockdelay)
|
|
|
|
|
|
|
|
|
|
// AUDIO simple descriptor (UAC2) for 1 microphone input
|
|
|
|
|
// - 1 Input Terminal, 1 Feature Unit (Mute and Volume Control), 1 Output Terminal, 1 Clock Source
|
|
|
|
|
|
|
|
|
|
#define TUD_AUDIO_MIC_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\
|
|
|
|
|
+ TUD_AUDIO_DESC_STD_AC_LEN\
|
|
|
|
|
+ TUD_AUDIO_DESC_CS_AC_LEN\
|
|
|
|
|
+ TUD_AUDIO_DESC_CLK_SRC_LEN\
|
|
|
|
|
+ TUD_AUDIO_DESC_INPUT_TERM_LEN\
|
|
|
|
|
+ TUD_AUDIO_DESC_OUTPUT_TERM_LEN\
|
|
|
|
|
+ TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN\
|
|
|
|
|
+ TUD_AUDIO_DESC_STD_AS_INT_LEN\
|
|
|
|
|
+ TUD_AUDIO_DESC_STD_AS_INT_LEN\
|
|
|
|
|
+ TUD_AUDIO_DESC_CS_AS_INT_LEN\
|
|
|
|
|
+ TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\
|
|
|
|
|
+ TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\
|
|
|
|
|
+ TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN)
|
|
|
|
|
|
|
|
|
|
#define TUD_AUDIO_MIC_DESC_N_AS_INT 1 // Number of AS interfaces
|
|
|
|
|
|
|
|
|
|
#define TUD_AUDIO_MIC_DESCRIPTOR(_itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, _epin, _epsize) \
|
|
|
|
|
/* Standard Interface Association Descriptor (IAD) */\
|
|
|
|
|
8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 0x02, TUSB_CLASS_AUDIO, 0x00, AUDIO_PROTOCOL_V2, 0x00,\
|
|
|
|
|
TUD_AUDIO_DESC_IAD(/*_firstitfs*/ _itfnum, /*_nitfs*/ 0x02, /*_stridx*/ 0x00),\
|
|
|
|
|
/* Standard AC Interface Descriptor(4.7.1) */\
|
|
|
|
|
9, TUSB_DESC_INTERFACE, _itfnum, 0x00, 0x00, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_CONTROL, AUDIO_PROTOCOL_V2, _stridx,\
|
|
|
|
|
TUD_AUDIO_DESC_STD_AC(/*_itfnum*/ _itfnum, /*_nEPs*/ 0x00, /*_stridx*/ _stridx),\
|
|
|
|
|
/* Class-Specific AC Interface Header Descriptor(4.7.2) */\
|
|
|
|
|
9, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_HEADER, U16_TO_U8S_LE(0x0200), AUDIO_FUNC_MICROPHONE, U16_TO_U8S_LE(9+8+17+12+6+(1+1)*4), AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS,\
|
|
|
|
|
TUD_AUDIO_DESC_CS_AC(/*_bcdADC*/ 0x0200, /*_category*/ AUDIO_FUNC_MICROPHONE, /*_totallen*/ TUD_AUDIO_DESC_CLK_SRC_LEN+TUD_AUDIO_DESC_INPUT_TERM_LEN+TUD_AUDIO_DESC_OUTPUT_TERM_LEN+TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL_LEN, /*_ctrl*/ AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS),\
|
|
|
|
|
/* Clock Source Descriptor(4.7.2.1) */\
|
|
|
|
|
8, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_CLOCK_SOURCE, 0x04, AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), 0x00, \
|
|
|
|
|
TUD_AUDIO_DESC_CLK_SRC(/*_clkid*/ 0x04, /*_attr*/ AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, /*_ctrl*/ (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), /*_assocTerm*/ 0x01, /*_stridx*/ 0x00),\
|
|
|
|
|
/* Input Terminal Descriptor(4.7.2.4) */\
|
|
|
|
|
17, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_INPUT_TERMINAL, 0x01, U16_TO_U8S_LE(AUDIO_TERM_TYPE_IN_GENERIC_MIC), 0x00, 0x04, 0x01, U32_TO_U8S_LE(AUDIO_CHANNEL_CONFIG_NON_PREDEFINED), 0x00, U16_TO_U8S_LE(AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), 0x00, \
|
|
|
|
|
TUD_AUDIO_DESC_INPUT_TERM(/*_termid*/ 0x01, /*_termtype*/ AUDIO_TERM_TYPE_IN_GENERIC_MIC, /*_assocTerm*/ 0x03, /*_clkid*/ 0x04, /*_nchannelslogical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_idxchannelnames*/ 0x00, /*_ctrl*/ AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS, /*_stridx*/ 0x00),\
|
|
|
|
|
/* Output Terminal Descriptor(4.7.2.5) */\
|
|
|
|
|
12, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL, 0x03, U16_TO_U8S_LE(AUDIO_TERM_TYPE_USB_STREAMING), 0x00, 0x02, 0x04, U16_TO_U8S_LE(0x0000), 0x00, \
|
|
|
|
|
TUD_AUDIO_DESC_OUTPUT_TERM(/*_termid*/ 0x03, /*_termtype*/ AUDIO_TERM_TYPE_USB_STREAMING, /*_assocTerm*/ 0x01, /*_srcid*/ 0x02, /*_clkid*/ 0x04, /*_ctrl*/ 0x0000, /*_stridx*/ 0x00),\
|
|
|
|
|
/* Feature Unit Descriptor(4.7.2.8) */\
|
|
|
|
|
6+(1+1)*4, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, 0x02, 0x01, U32_TO_U8S_LE(AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), U32_TO_U8S_LE(AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), 0x00, \
|
|
|
|
|
TUD_AUDIO_DESC_FEATURE_UNIT_ONE_CHANNEL(/*_unitid*/ 0x02, /*_srcid*/ 0x01, /*_ctrlch0master*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_ctrlch1*/ AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS, /*_stridx*/ 0x00),\
|
|
|
|
|
/* Standard AS Interface Descriptor(4.9.1) */\
|
|
|
|
|
/* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\
|
|
|
|
|
9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), /* alternate setting */ 0x00, /* number of EPs */ 0x00, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_STREAMING, AUDIO_PROTOCOL_V2, 0x00,\
|
|
|
|
|
TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x00, /*_nEPs*/ 0x00, /*_stridx*/ 0x00),\
|
|
|
|
|
/* Standard AS Interface Descriptor(4.9.1) */\
|
|
|
|
|
/* Interface 1, Alternate 1 - alternate interface for data streaming */\
|
|
|
|
|
9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), /* alternate setting */ 0x01, /* number of EPs */ 0x01, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_STREAMING, AUDIO_PROTOCOL_V2, 0x00,\
|
|
|
|
|
TUD_AUDIO_DESC_STD_AS_INT(/*_itfnum*/ (uint8_t)((_itfnum)+1), /*_altset*/ 0x01, /*_nEPs*/ 0x01, /*_stridx*/ 0x00),\
|
|
|
|
|
/* Class-Specific AS Interface Descriptor(4.9.2) */\
|
|
|
|
|
16, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AS_INTERFACE_AS_GENERAL, 0x03, AUDIO_CTRL_NONE, AUDIO_FORMAT_TYPE_I, U32_TO_U8S_LE(AUDIO_DATA_FORMAT_TYPE_I_PCM), 0x01, U32_TO_U8S_LE(AUDIO_CHANNEL_CONFIG_NON_PREDEFINED), 0x00, \
|
|
|
|
|
TUD_AUDIO_DESC_CS_AS_INT(/*_termid*/ 0x03, /*_ctrl*/ AUDIO_CTRL_NONE, /*_formattype*/ AUDIO_FORMAT_TYPE_I, /*_formats*/ AUDIO_DATA_FORMAT_TYPE_I_PCM, /*_nchannelsphysical*/ 0x01, /*_channelcfg*/ AUDIO_CHANNEL_CONFIG_NON_PREDEFINED, /*_stridx*/ 0x00),\
|
|
|
|
|
/* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\
|
|
|
|
|
6, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AS_INTERFACE_FORMAT_TYPE, AUDIO_FORMAT_TYPE_I, _nBytesPerSample, _nBitsUsedPerSample,\
|
|
|
|
|
TUD_AUDIO_DESC_TYPE_I_FORMAT(_nBytesPerSample, _nBitsUsedPerSample),\
|
|
|
|
|
/* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\
|
|
|
|
|
7, TUSB_DESC_ENDPOINT, _epin, (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), U16_TO_U8S_LE(_epsize), (CFG_TUSB_RHPORT0_MODE & OPT_MODE_HIGH_SPEED) ? 0x04 : 0x01,\
|
|
|
|
|
TUD_AUDIO_DESC_STD_AS_ISO_EP(/*_ep*/ _epin, /*_attr*/ (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), /*_maxEPsize*/ _epsize, /*_interval*/ (CFG_TUSB_RHPORT0_MODE & OPT_MODE_HIGH_SPEED) ? 0x04 : 0x01),\
|
|
|
|
|
/* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\
|
|
|
|
|
8, TUSB_DESC_CS_ENDPOINT, AUDIO_CS_EP_SUBTYPE_GENERAL, AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, AUDIO_CTRL_NONE, AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, U16_TO_U8S_LE(0x0000)\
|
|
|
|
|
TUD_AUDIO_DESC_CS_AS_ISO_EP(/*_attr*/ AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, /*_ctrl*/ AUDIO_CTRL_NONE, /*_lockdelayunit*/ AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, /*_lockdelay*/ 0x0000)
|
|
|
|
|
|
|
|
|
|
// Length of template descriptor (132 bytes)
|
|
|
|
|
//#define TUD_AUDIO_MIC_DESC_LEN (8 + 9 + 9 + 8 + 17 + 12 + 14 + 9 + 9 + 16 + 6 + 7 + 8)
|
|
|
|
|
//#define TUD_AUDIO_MIC_DESC_N_AS_INT 1
|
|
|
|
|
//
|
|
|
|
|
// // AUDIO simple descriptor (UAC2) for 1 microphone input
|
|
|
|
|
// // - 1 Input Terminal, 1 Feature Unit (Mute and Volume Control), 1 Output Terminal, 1 Clock Source
|
|
|
|
|
// #define TUD_AUDIO_MIC_DESCRIPTOR(_itfnum, _stridx, _nBytesPerSample, _nBitsUsedPerSample, _epin, _epsize) \
|
|
|
|
|
// /* Standard Interface Association Descriptor (IAD) */\
|
|
|
|
|
// 8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 0x02, TUSB_CLASS_AUDIO, 0x00, AUDIO_PROTOCOL_V2, 0x00,\
|
|
|
|
|
// /* Standard AC Interface Descriptor(4.7.1) */\
|
|
|
|
|
// 9, TUSB_DESC_INTERFACE, _itfnum, 0x00, 0x00, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_CONTROL, AUDIO_PROTOCOL_V2, _stridx,\
|
|
|
|
|
// /* Class-Specific AC Interface Header Descriptor(4.7.2) */\
|
|
|
|
|
// 9, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_HEADER, U16_TO_U8S_LE(0x0200), AUDIO_FUNC_MICROPHONE, U16_TO_U8S_LE(9+8+17+12+6+(1+1)*4), AUDIO_CS_AS_INTERFACE_CTRL_LATENCY_POS,\
|
|
|
|
|
// /* Clock Source Descriptor(4.7.2.1) */\
|
|
|
|
|
// 8, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_CLOCK_SOURCE, 0x04, AUDIO_CLOCK_SOURCE_ATT_INT_FIX_CLK, (AUDIO_CTRL_R << AUDIO_CLOCK_SOURCE_CTRL_CLK_FRQ_POS), 0x00, \
|
|
|
|
|
// /* Input Terminal Descriptor(4.7.2.4) */\
|
|
|
|
|
// 17, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_INPUT_TERMINAL, 0x01, U16_TO_U8S_LE(AUDIO_TERM_TYPE_IN_GENERIC_MIC), 0x00, 0x04, 0x01, U32_TO_U8S_LE(AUDIO_CHANNEL_CONFIG_NON_PREDEFINED), 0x00, U16_TO_U8S_LE(AUDIO_CTRL_R << AUDIO_IN_TERM_CTRL_CONNECTOR_POS), 0x00, \
|
|
|
|
|
// /* Output Terminal Descriptor(4.7.2.5) */\
|
|
|
|
|
// 12, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL, 0x03, U16_TO_U8S_LE(AUDIO_TERM_TYPE_USB_STREAMING), 0x00, 0x02, 0x04, U16_TO_U8S_LE(0x0000), 0x00, \
|
|
|
|
|
// /* Feature Unit Descriptor(4.7.2.8) */\
|
|
|
|
|
// 6+(1+1)*4, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AC_INTERFACE_FEATURE_UNIT, 0x02, 0x01, U32_TO_U8S_LE(AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), U32_TO_U8S_LE(AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_MUTE_POS | AUDIO_CTRL_RW << AUDIO_FEATURE_UNIT_CTRL_VOLUME_POS), 0x00, \
|
|
|
|
|
// /* Standard AS Interface Descriptor(4.9.1) */\
|
|
|
|
|
// /* Interface 1, Alternate 0 - default alternate setting with 0 bandwidth */\
|
|
|
|
|
// 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), /* alternate setting */ 0x00, /* number of EPs */ 0x00, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_STREAMING, AUDIO_PROTOCOL_V2, 0x00,\
|
|
|
|
|
// /* Standard AS Interface Descriptor(4.9.1) */\
|
|
|
|
|
// /* Interface 1, Alternate 1 - alternate interface for data streaming */\
|
|
|
|
|
// 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), /* alternate setting */ 0x01, /* number of EPs */ 0x01, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_STREAMING, AUDIO_PROTOCOL_V2, 0x00,\
|
|
|
|
|
// /* Class-Specific AS Interface Descriptor(4.9.2) */\
|
|
|
|
|
// 16, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AS_INTERFACE_AS_GENERAL, 0x03, AUDIO_CTRL_NONE, AUDIO_FORMAT_TYPE_I, U32_TO_U8S_LE(AUDIO_DATA_FORMAT_TYPE_I_PCM), 0x01, U32_TO_U8S_LE(AUDIO_CHANNEL_CONFIG_NON_PREDEFINED), 0x00,\
|
|
|
|
|
// /* Type I Format Type Descriptor(2.3.1.6 - Audio Formats) */\
|
|
|
|
|
// 6, TUSB_DESC_CS_INTERFACE, AUDIO_CS_AS_INTERFACE_FORMAT_TYPE, AUDIO_FORMAT_TYPE_I, _nBytesPerSample, _nBitsUsedPerSample,\
|
|
|
|
|
// /* Standard AS Isochronous Audio Data Endpoint Descriptor(4.10.1.1) */\
|
|
|
|
|
// 7, TUSB_DESC_ENDPOINT, _epin, (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_ASYNCHRONOUS | TUSB_ISO_EP_ATT_DATA), U16_TO_U8S_LE(_epsize), (CFG_TUSB_RHPORT0_MODE & OPT_MODE_HIGH_SPEED) ? 0x04 : 0x01,\
|
|
|
|
|
// /* Class-Specific AS Isochronous Audio Data Endpoint Descriptor(4.10.1.2) */\
|
|
|
|
|
// 8, TUSB_DESC_CS_ENDPOINT, AUDIO_CS_EP_SUBTYPE_GENERAL, AUDIO_CS_AS_ISO_DATA_EP_ATT_NON_MAX_PACKETS_OK, AUDIO_CTRL_NONE, AUDIO_CS_AS_ISO_DATA_EP_LOCK_DELAY_UNIT_UNDEFINED, U16_TO_U8S_LE(0x0000)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//------------- TUD_USBTMC/USB488 -------------//
|
|
|
|
|
#define TUD_USBTMC_APP_CLASS (TUSB_CLASS_APPLICATION_SPECIFIC)
|
|
|
|
@ -447,15 +560,15 @@ TU_ATTR_WEAK bool tud_vendor_control_complete_cb(uint8_t rhport, tusb_control_re
|
|
|
|
|
//------------- RNDIS -------------//
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
/* Windows XP */
|
|
|
|
|
#define TUD_RNDIS_ITF_CLASS TUSB_CLASS_CDC
|
|
|
|
|
#define TUD_RNDIS_ITF_SUBCLASS CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL
|
|
|
|
|
#define TUD_RNDIS_ITF_PROTOCOL 0xFF /* CDC_COMM_PROTOCOL_MICROSOFT_RNDIS */
|
|
|
|
|
/* Windows XP */
|
|
|
|
|
#define TUD_RNDIS_ITF_CLASS TUSB_CLASS_CDC
|
|
|
|
|
#define TUD_RNDIS_ITF_SUBCLASS CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL
|
|
|
|
|
#define TUD_RNDIS_ITF_PROTOCOL 0xFF /* CDC_COMM_PROTOCOL_MICROSOFT_RNDIS */
|
|
|
|
|
#else
|
|
|
|
|
/* Windows 7+ */
|
|
|
|
|
#define TUD_RNDIS_ITF_CLASS TUSB_CLASS_WIRELESS_CONTROLLER
|
|
|
|
|
#define TUD_RNDIS_ITF_SUBCLASS 0x01
|
|
|
|
|
#define TUD_RNDIS_ITF_PROTOCOL 0x03
|
|
|
|
|
/* Windows 7+ */
|
|
|
|
|
#define TUD_RNDIS_ITF_CLASS TUSB_CLASS_WIRELESS_CONTROLLER
|
|
|
|
|
#define TUD_RNDIS_ITF_SUBCLASS 0x01
|
|
|
|
|
#define TUD_RNDIS_ITF_PROTOCOL 0x03
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
// Length of template descriptor: 66 bytes
|
|
|
|
@ -541,7 +654,7 @@ TU_ATTR_WEAK bool tud_vendor_control_complete_cb(uint8_t rhport, tusb_control_re
|
|
|
|
|
TUD_BTH_ISO_ITFS(_itfnum + 1, _ep_in + 1, _ep_out + 1, __VA_ARGS__)
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif /* _TUSB_USBD_H_ */
|
|
|
|
|