forked from PAWPAW-Mirror/lib_xua
added USB IN alternate setting descriptor
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user