added USB IN alternate setting descriptor

This commit is contained in:
Keith Au
2020-01-09 16:50:17 +08:00
parent eae62a9e3c
commit f6d0ede133
2 changed files with 131 additions and 2 deletions

View File

@@ -2360,7 +2360,11 @@ const unsigned num_freqs_a1 = MAX(3, (0
#if (NUM_USB_CHAN_IN == 0) || defined(UAC_FORCE_FEEDBACK_EP)
#define CFG_TOTAL_LENGTH_A1 (18 + AC_TOTAL_LENGTH + (INPUT_INTERFACES_A1 * (49 + num_freqs_a1 * 3)) + (OUTPUT_INTERFACES_A1 * (58 + num_freqs_a1 * 3)) + CONTROL_INTERFACE_BYTES + DFU_INTERFACE_BYTES + HID_INTERFACE_BYTES)
#else
#ifdef USB_CMD_CFG_SAMP_FREQ
#define CFG_TOTAL_LENGTH_A1 (18 + AC_TOTAL_LENGTH + (INPUT_INTERFACES_A1 * (49 + num_freqs_a1 * 3) + (40 + num_freqs_a1 * 3)) + (OUTPUT_INTERFACES_A1 * (49 + num_freqs_a1 * 3)) + CONTROL_INTERFACE_BYTES + DFU_INTERFACE_BYTES + HID_INTERFACE_BYTES)
#else
#define CFG_TOTAL_LENGTH_A1 (18 + AC_TOTAL_LENGTH + (INPUT_INTERFACES_A1 * (49 + num_freqs_a1 * 3)) + (OUTPUT_INTERFACES_A1 * (49 + num_freqs_a1 * 3)) + CONTROL_INTERFACE_BYTES + DFU_INTERFACE_BYTES + HID_INTERFACE_BYTES)
#endif //USB_CMD_CFG_SAMP_FREQ
#endif
#define CHARIFY_SR(x) (x & 0xff),((x & 0xff00)>> 8),((x & 0xff0000)>> 16)
@@ -2832,6 +2836,130 @@ unsigned char cfgDesc_Audio1[] =
0x00, /* Undefined */
0x00, 0x00, /* Not used */
#endif // XUA_ADAPTIVE
#ifdef USB_CMD_CFG_SAMP_FREQ
/* Standard Interface Descriptor - Audio streaming IN */
0x09,
0x04, /* INTERFACE */
(OUTPUT_INTERFACES_A1 + 1), /* bInterfaceNumber */
0x02, /* AlternateSetting */
0x01, /* bNumEndpoints */
0x01, /* Interface class - AUDIO */
0x02, /* Subclass - AUDIO_STREAMING */
0x00, /* Unused */
offsetof(StringDescTable_t, inputInterfaceStr_Audio1)/sizeof(char *),
/* CS_Interface AC interface header descriptor */
0x07,
UAC_CS_DESCTYPE_INTERFACE,
0x01, /* subtype - GENERAL */
0x07, /* TerminalLink - linked to Streaming OUT terminal */
0x01, /* Interface delay */
0x01,0x00, /* Format - PCM */
/* CS_Interface Terminal Descriptor */
(8 + (num_freqs_a1 * 3)),
UAC_CS_DESCTYPE_INTERFACE,
0x02, /* Subtype - FORMAT_TYPE */
0x01, /* Format type - FORMAT_TYPE_1 */
NUM_USB_CHAN_IN_FS, /* bNrChannels - Typically 2 */
FS_STREAM_FORMAT_INPUT_1_SUBSLOT_BYTES, /* subFrameSize - Typically 4 bytes per slot */
FS_STREAM_FORMAT_INPUT_1_RESOLUTION_BITS, /* bitResolution - Typically 24bit */
#ifdef USB_CMD_CFG_SAMP_FREQ
USB_IN_SAMP_FREQ_NUM,
CHARIFY_SR(USB_IN_SAMP_FREQ_0),
CHARIFY_SR(USB_IN_SAMP_FREQ_1),
CHARIFY_SR(USB_IN_SAMP_FREQ_2),
#else
num_freqs_a1, /* SamFreqType - sample freq count */
/* Windows enum issue with <= two sample rates work around */
#if ((MIN_FREQ == 8000) && (MAX_FREQ_FS == 11025)) \
|| (MIN_FREQ == 11025) && (MAX_FREQ_FS == 12000) \
|| (MIN_FREQ == 12000) && (MAX_FREQ_FS == 16000) \
|| (MIN_FREQ == 16000) && (MAX_FREQ_FS == 32000) \
|| (MIN_FREQ == 44100) && (MAX_FREQ_FS == 48000) \
|| (MIN_FREQ == 48000) && (MAX_FREQ_FS == 88200) \
|| (MIN_FREQ == 88200) && (MAX_FREQ_FS == 96000)
CHARIFY_SR(MAX_FREQ_FS),
#endif
#if (MIN_FREQ == MAX_FREQ_FS)
CHARIFY_SR(MAX_FREQ_FS),
CHARIFY_SR(MAX_FREQ_FS),
#endif
#if(MIN_FREQ <= 8000) && (MAX_FREQ_FS >= 8000)
0x40, 0x1F, 0x00, /* sampleFreq - 8000KHz */
#endif
#if(MIN_FREQ <= 11025) && (MAX_FREQ_FS >= 11025)
0x11, 0x2B, 0x00, /* sampleFreq - 11025KHz */
#endif
#if(MIN_FREQ <= 12000) && (MAX_FREQ_FS >= 12000)
0xE0, 0x2E, 0x00, /* sampleFreq - 12000KHz */
#endif
#if(MIN_FREQ <= 16000) && (MAX_FREQ_FS >= 16000)
CHARIFY_SR(16000), /* sampleFreq - 32KHz */
#endif
#if(MIN_FREQ <= 32000) && (MAX_FREQ_FS >= 32000)
CHARIFY_SR(32000), /* sampleFreq - 32KHz */
#endif
#if (MIN_FREQ <= 44100) && (MAX_FREQ_FS >= 44100)
0x44, 0xAC, 0x00, /* sampleFreq - 44.1Khz */
#endif
#if (MIN_FREQ <= 48000) && (MAX_FREQ_FS >= 48000)
0x80, 0xBB, 0x00, /* sampleFreq - 48KHz */
#endif
#if (MIN_FREQ <= 88200) && (MAX_FREQ_FS >= 88200)
0x88, 0x58, 0x01, /* sampleFreq - 88.2KHz */
#endif
#if (MIN_FREQ <= 96000) && (MAX_FREQ_FS >= 96000)
0x00, 0x77, 0x01, /* sampleFreq - 96KHz */
#endif
#endif //USB_CMD_CFG_SAMP_FREQ
/* Standard Endpoint Descriptor */
0x09,
0x05, /* ENDPOINT */
ENDPOINT_ADDRESS_IN_AUDIO, /* EndpointAddress */
#ifdef XUA_ADAPTIVE
ISO_EP_ATTRIBUTES_ADAPTIVE,
#else
#if (NUM_USB_CHAN_IN == 0) || defined(UAC_FORCE_FEEDBACK_EP)
ISO_EP_ATTRIBUTES_ASYNCH, /* Iso, async, data endpoint */
#else
ISO_EP_IMPL_ATTRIBUTES_ASYNCH, /* Feedback data endpoint */
#endif
#endif
FS_STREAM_FORMAT_INPUT_1_MAXPACKETSIZE&0xff, /* 4 wMaxPacketSize (Typically 294 bytes)*/
(FS_STREAM_FORMAT_INPUT_1_MAXPACKETSIZE&0xff00)>>8, /* 5 wMaxPacketSize */
0x01, /* bInterval */
0x00, /* bRefresh */
0x00, /* bSynchAddress */
/* CS_Endpoint Descriptor */
0x07,
0x25, /* CS_ENDPOINT */
0x01, /* Subtype - GENERAL */
0x01, /* Attributes. D[0]: sample freq ctrl. */
#ifdef XUA_ADAPTIVE
0x02, /* Lock Delay units PCM samples*/
0x08, 0x00, /* No lock delay */
#else
0x00, /* Undefined */
0x00, 0x00, /* Not used */
#endif // XUA_ADAPTIVE
#endif//USB_CMD_CFG_SAMP_FREQ
#endif
#if (XUA_DFU_EN == 1) && (FORCE_UAC1_DFU == 1)

View File

@@ -57,8 +57,9 @@ extern unsigned int g_curAudOut_SamFreq;
#endif
/* Global var for current frequency, set to default freq */
#ifdef DEFAULT_AUDOUT_FREQ
unsigned int g_curSamFreq = DEFAULT_AUDOUT_FREQ;
#ifdef USB_CMD_CFG_SAMP_FREQ
#define g_curSamFreq g_curAudOut_SamFreq
//unsigned int g_curSamFreq = DEFAULT_AUDOUT_FREQ;
#else
unsigned int g_curSamFreq = DEFAULT_FREQ;
#endif