diff --git a/lib_xua/api/xua_conf_default.h b/lib_xua/api/xua_conf_default.h index b22046f0..828e9682 100644 --- a/lib_xua/api/xua_conf_default.h +++ b/lib_xua/api/xua_conf_default.h @@ -231,6 +231,13 @@ */ #ifndef DEFAULT_AUDOUT_FREQ #define DEFAULT_AUDOUT_FREQ (48000) + +#define USB_IN_DESCRIPTOR_FREQ_OVERRIDE //used if USB in frequency is not conifigurable by USB endpoint command +#ifdef USB_IN_DESCRIPTOR_FREQ_OVERRIDE + #define USB_IN_FREQ_DESCIPTOR_OFFSET 161 //161- (3 * 3) are the position of descriptor that needed to be modified for USB in frequency + #define CHARIFY_SR(x) (x & 0xff),((x & 0xff00)>> 8),((x & 0xff0000)>> 16) +#endif + #endif /* Audio Class Defines */ diff --git a/lib_xua/src/core/endpoint0/xua_ep0_uacreqs.h b/lib_xua/src/core/endpoint0/xua_ep0_uacreqs.h index dae6863a..ab4c613d 100644 --- a/lib_xua/src/core/endpoint0/xua_ep0_uacreqs.h +++ b/lib_xua/src/core/endpoint0/xua_ep0_uacreqs.h @@ -17,7 +17,4 @@ int AudioEndpointRequests_1(XUD_ep ep0_out, XUD_ep ep0_in, REFERENCE_PARAM(USB_S void VendorAudioRequestsInit(chanend c_audioControl, NULLABLE_RESOURCE(chanend, c_mix_ctl), NULLABLE_RESOURCE(chanend, c_clk_ctl)); -extern unsigned int g_curAudOut_SamFreq; - - #endif diff --git a/lib_xua/src/core/endpoint0/xua_ep0_uacreqs.xc b/lib_xua/src/core/endpoint0/xua_ep0_uacreqs.xc index 7ae5040b..2fdd434c 100644 --- a/lib_xua/src/core/endpoint0/xua_ep0_uacreqs.xc +++ b/lib_xua/src/core/endpoint0/xua_ep0_uacreqs.xc @@ -17,7 +17,6 @@ #ifdef MIXER #include "mixer.h" #endif -#include "xua_conf.h" #define CS_XU_MIXSEL (0x06) @@ -47,7 +46,7 @@ extern unsigned char mixSel[MAX_MIX_COUNT][MIX_INPUTS]; #endif /* Global var for current frequency, set to default freq */ -unsigned int g_curAudOut_SamFreq = DEFAULT_AUDOUT_FREQ; +unsigned int g_curSamFreq = DEFAULT_FREQ; #if 0 unsigned int g_curSamFreq48000Family = DEFAULT_FREQ % 48000 == 0; @@ -321,14 +320,14 @@ int AudioClassRequests_2(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp, c int newSampleRate = buffer[0]; /* Instruct audio thread to change sample freq (if change required) */ - if(newSampleRate != g_curAudOut_SamFreq) + if(newSampleRate != g_curSamFreq) { int newMasterClock; - g_curAudOut_SamFreq = newSampleRate; + g_curSamFreq = newSampleRate; #if 0 /* Original feedback implementation */ - g_curSamFreq48000Family = ((MCLK_48 % g_curAudOut_SamFreq) == 0); + g_curSamFreq48000Family = ((MCLK_48 % g_curSamFreq) == 0); if(g_curSamFreq48000Family) { @@ -339,17 +338,17 @@ int AudioClassRequests_2(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp, c newMasterClock = MCLK_441; } - setG_curSamFreqMultiplier(g_curAudOut_SamFreq/(newMasterClock/512)); + setG_curSamFreqMultiplier(g_curSamFreq/(newMasterClock/512)); #endif #if ADAT_RX /* Configure ADAT SMUX based on sample rate */ outuint(c_clk_ctl, SET_SMUX); - if(g_curAudOut_SamFreq < 88200) + if(g_curSamFreq < 88200) { /* No SMUX */ outuint(c_clk_ctl, 0); } - else if(g_curAudOut_SamFreq < 176400) + else if(g_curSamFreq < 176400) { /* SMUX */ outuint(c_clk_ctl, 1); @@ -362,7 +361,7 @@ int AudioClassRequests_2(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp, c outct(c_clk_ctl, XS1_CT_END); #endif outuint(c_audioControl, SET_SAMPLE_FREQ); - outuint(c_audioControl, g_curAudOut_SamFreq); + outuint(c_audioControl, g_curSamFreq); /* Wait for handshake back - i.e. PLL locked and clocks okay */ chkct(c_audioControl, XS1_CT_END); @@ -396,7 +395,7 @@ int AudioClassRequests_2(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp, c } else { - buffer[0] = g_curAudOut_SamFreq; + buffer[0] = g_curSamFreq; return XUD_DoGetRequest(ep0_out, ep0_in, (buffer, unsigned char[]), 4, sp.wLength ); } @@ -404,7 +403,7 @@ int AudioClassRequests_2(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp, c #endif case ID_CLKSRC_INT: /* Always report our current operating frequency */ - buffer[0] = g_curAudOut_SamFreq; + buffer[0] = g_curSamFreq; return XUD_DoGetRequest(ep0_out, ep0_in, (buffer, unsigned char[]), 4, sp.wLength ); break; @@ -1108,7 +1107,7 @@ int AudioEndpointRequests_1(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp /* Recontruct sample-freq */ int newSampleRate = (buffer, unsigned char[])[0] | ((buffer, unsigned char[])[1] << 8) | ((buffer, unsigned char[])[2] << 16); - if(newSampleRate != g_curAudOut_SamFreq) + if(newSampleRate != g_curSamFreq) { int curSamFreq44100Family; int curSamFreq48000Family; @@ -1120,11 +1119,11 @@ int AudioEndpointRequests_1(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp if(curSamFreq48000Family || curSamFreq44100Family) { - g_curAudOut_SamFreq = newSampleRate; + g_curSamFreq = newSampleRate; /* Instruct audio thread to change sample freq */ outuint(c_audioControl, SET_SAMPLE_FREQ); - outuint(c_audioControl, g_curAudOut_SamFreq); + outuint(c_audioControl, g_curSamFreq); /* Wait for handshake back - i.e. pll locked and clocks okay */ chkct(c_audioControl, XS1_CT_END); @@ -1148,7 +1147,7 @@ int AudioEndpointRequests_1(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp switch(sp.bRequest) { case UAC_B_REQ_GET_CUR: - buffer[0] = g_curAudOut_SamFreq; + buffer[0] = g_curSamFreq; return XUD_DoGetRequest(ep0_out, ep0_in, (buffer, unsigned char[]), 3, sp.wLength); break; }