forked from PAWPAW-Mirror/lib_xua
revert xua_ep0_uacreqs.xc so that frequency global variable is not affected by USB command. Now frequency can be varied by changing the default value.
This commit is contained in:
@@ -231,6 +231,13 @@
|
|||||||
*/
|
*/
|
||||||
#ifndef DEFAULT_AUDOUT_FREQ
|
#ifndef DEFAULT_AUDOUT_FREQ
|
||||||
#define DEFAULT_AUDOUT_FREQ (48000)
|
#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
|
#endif
|
||||||
|
|
||||||
/* Audio Class Defines */
|
/* Audio Class Defines */
|
||||||
|
|||||||
@@ -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));
|
void VendorAudioRequestsInit(chanend c_audioControl, NULLABLE_RESOURCE(chanend, c_mix_ctl), NULLABLE_RESOURCE(chanend, c_clk_ctl));
|
||||||
|
|
||||||
extern unsigned int g_curAudOut_SamFreq;
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
#ifdef MIXER
|
#ifdef MIXER
|
||||||
#include "mixer.h"
|
#include "mixer.h"
|
||||||
#endif
|
#endif
|
||||||
#include "xua_conf.h"
|
|
||||||
|
|
||||||
#define CS_XU_MIXSEL (0x06)
|
#define CS_XU_MIXSEL (0x06)
|
||||||
|
|
||||||
@@ -47,7 +46,7 @@ extern unsigned char mixSel[MAX_MIX_COUNT][MIX_INPUTS];
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Global var for current frequency, set to default freq */
|
/* 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
|
#if 0
|
||||||
unsigned int g_curSamFreq48000Family = DEFAULT_FREQ % 48000 == 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];
|
int newSampleRate = buffer[0];
|
||||||
|
|
||||||
/* Instruct audio thread to change sample freq (if change required) */
|
/* Instruct audio thread to change sample freq (if change required) */
|
||||||
if(newSampleRate != g_curAudOut_SamFreq)
|
if(newSampleRate != g_curSamFreq)
|
||||||
{
|
{
|
||||||
int newMasterClock;
|
int newMasterClock;
|
||||||
|
|
||||||
g_curAudOut_SamFreq = newSampleRate;
|
g_curSamFreq = newSampleRate;
|
||||||
#if 0
|
#if 0
|
||||||
/* Original feedback implementation */
|
/* Original feedback implementation */
|
||||||
g_curSamFreq48000Family = ((MCLK_48 % g_curAudOut_SamFreq) == 0);
|
g_curSamFreq48000Family = ((MCLK_48 % g_curSamFreq) == 0);
|
||||||
|
|
||||||
if(g_curSamFreq48000Family)
|
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;
|
newMasterClock = MCLK_441;
|
||||||
}
|
}
|
||||||
|
|
||||||
setG_curSamFreqMultiplier(g_curAudOut_SamFreq/(newMasterClock/512));
|
setG_curSamFreqMultiplier(g_curSamFreq/(newMasterClock/512));
|
||||||
#endif
|
#endif
|
||||||
#if ADAT_RX
|
#if ADAT_RX
|
||||||
/* Configure ADAT SMUX based on sample rate */
|
/* Configure ADAT SMUX based on sample rate */
|
||||||
outuint(c_clk_ctl, SET_SMUX);
|
outuint(c_clk_ctl, SET_SMUX);
|
||||||
if(g_curAudOut_SamFreq < 88200)
|
if(g_curSamFreq < 88200)
|
||||||
{
|
{
|
||||||
/* No SMUX */
|
/* No SMUX */
|
||||||
outuint(c_clk_ctl, 0);
|
outuint(c_clk_ctl, 0);
|
||||||
}
|
}
|
||||||
else if(g_curAudOut_SamFreq < 176400)
|
else if(g_curSamFreq < 176400)
|
||||||
{
|
{
|
||||||
/* SMUX */
|
/* SMUX */
|
||||||
outuint(c_clk_ctl, 1);
|
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);
|
outct(c_clk_ctl, XS1_CT_END);
|
||||||
#endif
|
#endif
|
||||||
outuint(c_audioControl, SET_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 */
|
/* Wait for handshake back - i.e. PLL locked and clocks okay */
|
||||||
chkct(c_audioControl, XS1_CT_END);
|
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
|
else
|
||||||
{
|
{
|
||||||
buffer[0] = g_curAudOut_SamFreq;
|
buffer[0] = g_curSamFreq;
|
||||||
return XUD_DoGetRequest(ep0_out, ep0_in, (buffer, unsigned char[]), 4, sp.wLength );
|
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
|
#endif
|
||||||
case ID_CLKSRC_INT:
|
case ID_CLKSRC_INT:
|
||||||
/* Always report our current operating frequency */
|
/* 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 );
|
return XUD_DoGetRequest(ep0_out, ep0_in, (buffer, unsigned char[]), 4, sp.wLength );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1108,7 +1107,7 @@ int AudioEndpointRequests_1(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp
|
|||||||
/* Recontruct sample-freq */
|
/* Recontruct sample-freq */
|
||||||
int newSampleRate = (buffer, unsigned char[])[0] | ((buffer, unsigned char[])[1] << 8) | ((buffer, unsigned char[])[2] << 16);
|
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 curSamFreq44100Family;
|
||||||
int curSamFreq48000Family;
|
int curSamFreq48000Family;
|
||||||
@@ -1120,11 +1119,11 @@ int AudioEndpointRequests_1(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp
|
|||||||
|
|
||||||
if(curSamFreq48000Family || curSamFreq44100Family)
|
if(curSamFreq48000Family || curSamFreq44100Family)
|
||||||
{
|
{
|
||||||
g_curAudOut_SamFreq = newSampleRate;
|
g_curSamFreq = newSampleRate;
|
||||||
|
|
||||||
/* Instruct audio thread to change sample freq */
|
/* Instruct audio thread to change sample freq */
|
||||||
outuint(c_audioControl, SET_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 */
|
/* Wait for handshake back - i.e. pll locked and clocks okay */
|
||||||
chkct(c_audioControl, XS1_CT_END);
|
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)
|
switch(sp.bRequest)
|
||||||
{
|
{
|
||||||
case UAC_B_REQ_GET_CUR:
|
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);
|
return XUD_DoGetRequest(ep0_out, ep0_in, (buffer, unsigned char[]), 3, sp.wLength);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user