diff --git a/lib_xua/api/xua_conf_default.h b/lib_xua/api/xua_conf_default.h index 82be6dab..69690a43 100644 --- a/lib_xua/api/xua_conf_default.h +++ b/lib_xua/api/xua_conf_default.h @@ -428,6 +428,18 @@ #define ADAT_TX_INDEX (0) #endif +#if XUA_ADAT_TX_EN + #if (MIN_FREQ < 88200) + #define ADAT_TX_MAX_CHANS (8) + #elif (MIN_FREQ < 176400) + #define ADAT_TX_MAX_CHANS (4) + #else + #define ADAT_TX_MAX_CHANS (2) + #endif +#else +#define ADAT_TX_MAX_CHANS (0) +#endif + /** * @brief Enables SPDIF Rx. Default: 0 (Disabled) */ @@ -484,37 +496,70 @@ #endif #endif -#if (XUA_ADAT_RX_EN) /* Setup input stream formats for ADAT */ -#if (MAX_FREQ > 96000) - #if (MIN_FREQ > 96000) +#if (XUA_ADAT_RX_EN) + #if (MAX_FREQ > 96000) + #if (MIN_FREQ > 96000) + #define INPUT_FORMAT_COUNT 1 + #define HS_STREAM_FORMAT_INPUT_1_CHAN_COUNT NUM_USB_CHAN_IN + #elif (MIN_FREQ > 48000) + #define INPUT_FORMAT_COUNT 2 + #define HS_STREAM_FORMAT_INPUT_1_CHAN_COUNT NUM_USB_CHAN_IN + #define HS_STREAM_FORMAT_INPUT_2_CHAN_COUNT (NUM_USB_CHAN_IN - 2) + #else + #define INPUT_FORMAT_COUNT 3 + #define HS_STREAM_FORMAT_INPUT_1_CHAN_COUNT NUM_USB_CHAN_IN + #define HS_STREAM_FORMAT_INPUT_2_CHAN_COUNT (NUM_USB_CHAN_IN - 4) + #define HS_STREAM_FORMAT_INPUT_3_CHAN_COUNT (NUM_USB_CHAN_IN - 6) + #endif + #elif (MAX_FREQ > 48000) + #if (MIN_FREQ > 48000) + #define INPUT_FORMAT_COUNT 1 + #define HS_STREAM_FORMAT_INPUT_1_CHAN_COUNT NUM_USB_CHAN_IN + #else + #define INPUT_FORMAT_COUNT 2 + #define HS_STREAM_FORMAT_INPUT_1_CHAN_COUNT NUM_USB_CHAN_IN + #define HS_STREAM_FORMAT_INPUT_2_CHAN_COUNT (NUM_USB_CHAN_IN - 4) + #endif + #else #define INPUT_FORMAT_COUNT 1 #define HS_STREAM_FORMAT_INPUT_1_CHAN_COUNT NUM_USB_CHAN_IN - #elif (MIN_FREQ > 48000) - #define INPUT_FORMAT_COUNT 2 - #define HS_STREAM_FORMAT_INPUT_1_CHAN_COUNT NUM_USB_CHAN_IN - #define HS_STREAM_FORMAT_INPUT_2_CHAN_COUNT (NUM_USB_CHAN_IN - 2) - #else - #define INPUT_FORMAT_COUNT 3 - #define HS_STREAM_FORMAT_INPUT_1_CHAN_COUNT NUM_USB_CHAN_IN - #define HS_STREAM_FORMAT_INPUT_2_CHAN_COUNT (NUM_USB_CHAN_IN - 4) - #define HS_STREAM_FORMAT_INPUT_3_CHAN_COUNT (NUM_USB_CHAN_IN - 6) #endif -#elif (MAX_FREQ > 48000) - #if (MIN_FREQ > 48000) - #define INPUT_FORMAT_COUNT 1 - #define HS_STREAM_FORMAT_INPUT_1_CHAN_COUNT NUM_USB_CHAN_IN - #else - #define INPUT_FORMAT_COUNT 2 - #define HS_STREAM_FORMAT_INPUT_1_CHAN_COUNT NUM_USB_CHAN_IN - #define HS_STREAM_FORMAT_INPUT_2_CHAN_COUNT (NUM_USB_CHAN_IN - 4) - #endif -#else - #define INPUT_FORMAT_COUNT 1 - #define HS_STREAM_FORMAT_INPUT_1_CHAN_COUNT NUM_USB_CHAN_IN #endif +/* Setup output stream formats for ADAT */ +#if (XUA_ADAT_TX_EN) + #if (MAX_FREQ > 96000) + #if (MIN_FREQ > 96000) + #define OUTPUT_FORMAT_COUNT 1 + #define HS_STREAM_FORMAT_OUTPUT_1_CHAN_COUNT NUM_USB_CHAN_OUT + #elif (MIN_FREQ > 48000) + #define OUTPUT_FORMAT_COUNT 2 + #define HS_STREAM_FORMAT_OUTPUT_1_CHAN_COUNT NUM_USB_CHAN_OUT + #define HS_STREAM_FORMAT_OUTPUT_2_CHAN_COUNT (NUM_USB_CHAN_OUT - 2) + #else + #define OUTPUT_FORMAT_COUNT 3 + #define HS_STREAM_FORMAT_OUTPUT_1_CHAN_COUNT NUM_USB_CHAN_OUT + #define HS_STREAM_FORMAT_OUTPUT_2_CHAN_COUNT (NUM_USB_CHAN_OUT - 4) + #define HS_STREAM_FORMAT_OUTPUT_3_CHAN_COUNT (NUM_USB_CHAN_OUT - 6) + #endif + #elif (MAX_FREQ > 48000) + #if (MIN_FREQ > 48000) + #define OUTPUT_FORMAT_COUNT 1 + #define HS_STREAM_FORMAT_OUTPUT_1_CHAN_COUNT NUM_USB_CHAN_OUT + #else + #define OUTPUT_FORMAT_COUNT 2 + #define HS_STREAM_FORMAT_OUTPUT_1_CHAN_COUNT NUM_USB_CHAN_OUT + #define HS_STREAM_FORMAT_OUTPUT_2_CHAN_COUNT (NUM_USB_CHAN_OUT - 4) + #endif + #else + #define OUTPUT_FORMAT_COUNT 1 + #define HS_STREAM_FORMAT_OUTPUT_1_CHAN_COUNT NUM_USB_CHAN_OUT + #endif + #define STREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS 24 + #define STREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS 24 + #define STREAM_FORMAT_OUTPUT_3_RESOLUTION_BITS 24 #endif /** diff --git a/lib_xua/src/core/endpoint0/xua_endpoint0.c b/lib_xua/src/core/endpoint0/xua_endpoint0.c index 6a656f95..1f23a457 100755 --- a/lib_xua/src/core/endpoint0/xua_endpoint0.c +++ b/lib_xua/src/core/endpoint0/xua_endpoint0.c @@ -968,20 +968,20 @@ void XUA_Endpoint0_loop(XUD_Result_t result, USB_SetupPacket_t sp, chanend c_ep0 cfgDesc_Audio2.Audio_Out_Format.bSubslotSize = HS_STREAM_FORMAT_OUTPUT_1_SUBSLOT_BYTES; cfgDesc_Audio2.Audio_Out_Format.bBitResolution = HS_STREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS; cfgDesc_Audio2.Audio_Out_Endpoint.wMaxPacketSize = HS_STREAM_FORMAT_OUTPUT_1_MAXPACKETSIZE; - cfgDesc_Audio2.Audio_Out_ClassStreamInterface.bNrChannels = NUM_USB_CHAN_OUT; + cfgDesc_Audio2.Audio_Out_ClassStreamInterface.bNrChannels = HS_STREAM_FORMAT_OUTPUT_1_CHAN_COUNT; #endif #if (OUTPUT_FORMAT_COUNT > 1) cfgDesc_Audio2.Audio_Out_Format_2.bSubslotSize = HS_STREAM_FORMAT_OUTPUT_2_SUBSLOT_BYTES; cfgDesc_Audio2.Audio_Out_Format_2.bBitResolution = HS_STREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS; cfgDesc_Audio2.Audio_Out_Endpoint_2.wMaxPacketSize = HS_STREAM_FORMAT_OUTPUT_2_MAXPACKETSIZE; - cfgDesc_Audio2.Audio_Out_ClassStreamInterface_2.bNrChannels = NUM_USB_CHAN_OUT; + cfgDesc_Audio2.Audio_Out_ClassStreamInterface_2.bNrChannels = HS_STREAM_FORMAT_OUTPUT_2_CHAN_COUNT; #endif #if (OUTPUT_FORMAT_COUNT > 2) cfgDesc_Audio2.Audio_Out_Format_3.bSubslotSize = HS_STREAM_FORMAT_OUTPUT_3_SUBSLOT_BYTES; cfgDesc_Audio2.Audio_Out_Format_3.bBitResolution = HS_STREAM_FORMAT_OUTPUT_3_RESOLUTION_BITS; cfgDesc_Audio2.Audio_Out_Endpoint_3.wMaxPacketSize = HS_STREAM_FORMAT_OUTPUT_3_MAXPACKETSIZE; - cfgDesc_Audio2.Audio_Out_ClassStreamInterface_3.bNrChannels = NUM_USB_CHAN_OUT; + cfgDesc_Audio2.Audio_Out_ClassStreamInterface_3.bNrChannels = HS_STREAM_FORMAT_OUTPUT_3_CHAN_COUNT; #endif #endif #if (NUM_USB_CHAN_IN > 0) diff --git a/lib_xua/src/core/endpoint0/xua_ep0_descriptors.h b/lib_xua/src/core/endpoint0/xua_ep0_descriptors.h index 8035de14..e151a836 100644 --- a/lib_xua/src/core/endpoint0/xua_ep0_descriptors.h +++ b/lib_xua/src/core/endpoint0/xua_ep0_descriptors.h @@ -1454,15 +1454,15 @@ USB_Config_Descriptor_Audio2_t cfgDesc_Audio2= /* Class Specific AS Interface Descriptor */ .Audio_Out_ClassStreamInterface = { - 0x10, /* 0 bLength: 16 */ - UAC_CS_DESCTYPE_INTERFACE, /* 1 bDescriptorType: 0x24 */ + 0x10, /* 0 bLength: 16 */ + UAC_CS_DESCTYPE_INTERFACE, /* 1 bDescriptorType: 0x24 */ UAC_CS_AS_INTERFACE_SUBTYPE_AS_GENERAL, /* 2 bDescriptorSubType */ - ID_IT_USB, /* 3 bTerminalLink (Linked to USB input terminal) */ - 0x00, /* 4 bmControls */ - UAC_FORMAT_TYPE_I, /* 5 bFormatType */ - STREAM_FORMAT_OUTPUT_1_DATAFORMAT,/* 6:10 bmFormats (note this is a bitmap) */ - NUM_USB_CHAN_OUT, /* 11 bNrChannels */ - 0x00000000, /* 12:14: bmChannelConfig */ + ID_IT_USB, /* 3 bTerminalLink (Linked to USB input terminal) */ + 0x00, /* 4 bmControls */ + UAC_FORMAT_TYPE_I, /* 5 bFormatType */ + STREAM_FORMAT_OUTPUT_1_DATAFORMAT, /* 6:10 bmFormats (note this is a bitmap) */ + HS_STREAM_FORMAT_OUTPUT_1_CHAN_COUNT, /* 11 bNrChannels */ + 0x00000000, /* 12:14: bmChannelConfig */ .iChannelNames = offsetof(StringDescTable_t, outputChanStr_1)/sizeof(char *), }, @@ -1545,15 +1545,15 @@ USB_Config_Descriptor_Audio2_t cfgDesc_Audio2= /* Class Specific AS Interface Descriptor */ .Audio_Out_ClassStreamInterface_2 = { - 0x10, /* 0 bLength: 16 */ - UAC_CS_DESCTYPE_INTERFACE, /* 1 bDescriptorType: 0x24 */ + 0x10, /* 0 bLength: 16 */ + UAC_CS_DESCTYPE_INTERFACE, /* 1 bDescriptorType: 0x24 */ UAC_CS_AS_INTERFACE_SUBTYPE_AS_GENERAL, /* 2 bDescriptorSubType */ - ID_IT_USB, /* 3 bTerminalLink (Linked to USB input terminal) */ - 0x00, /* 4 bmControls */ - UAC_FORMAT_TYPE_I, /* 5 bFormatType */ - STREAM_FORMAT_OUTPUT_2_DATAFORMAT,/* 6:10 bmFormats (note this is a bitmap) */ - NUM_USB_CHAN_OUT, /* 11 bNrChannels */ - 0x00000000, /* 12:14: bmChannelConfig */ + ID_IT_USB, /* 3 bTerminalLink (Linked to USB input terminal) */ + 0x00, /* 4 bmControls */ + UAC_FORMAT_TYPE_I, /* 5 bFormatType */ + STREAM_FORMAT_OUTPUT_2_DATAFORMAT, /* 6:10 bmFormats (note this is a bitmap) */ + HS_STREAM_FORMAT_OUTPUT_2_CHAN_COUNT, /* 11 bNrChannels */ + 0x00000000, /* 12:14: bmChannelConfig */ .iChannelNames = (offsetof(StringDescTable_t, outputChanStr_1)/sizeof(char *)), }, @@ -1636,15 +1636,15 @@ USB_Config_Descriptor_Audio2_t cfgDesc_Audio2= /* Class Specific AS Interface Descriptor */ .Audio_Out_ClassStreamInterface_3 = { - 0x10, /* 0 bLength: 16 */ - UAC_CS_DESCTYPE_INTERFACE, /* 1 bDescriptorType: 0x24 */ + 0x10, /* 0 bLength: 16 */ + UAC_CS_DESCTYPE_INTERFACE, /* 1 bDescriptorType: 0x24 */ UAC_CS_AS_INTERFACE_SUBTYPE_AS_GENERAL, /* 2 bDescriptorSubType */ - ID_IT_USB, /* 3 bTerminalLink (Linked to USB input terminal) */ - 0x00, /* 4 bmControls */ - UAC_FORMAT_TYPE_I, /* 5 bFormatType */ - STREAM_FORMAT_OUTPUT_3_DATAFORMAT,/* 6:10 bmFormats (note this is a bitmap) */ - NUM_USB_CHAN_OUT, /* 11 bNrChannels */ - 0x00000000, /* 12:14: bmChannelConfig */ + ID_IT_USB, /* 3 bTerminalLink (Linked to USB input terminal) */ + 0x00, /* 4 bmControls */ + UAC_FORMAT_TYPE_I, /* 5 bFormatType */ + STREAM_FORMAT_OUTPUT_3_DATAFORMAT, /* 6:10 bmFormats (note this is a bitmap) */ + HS_STREAM_FORMAT_OUTPUT_3_CHAN_COUNT, /* 11 bNrChannels */ + 0x00000000, /* 12:14: bmChannelConfig */ .iChannelNames = offsetof(StringDescTable_t, outputChanStr_1)/sizeof(char *), },