forked from PAWPAW-Mirror/lib_xua
Merge branch 'feature/configurable_usb_rate_res' of github.com:shuchitak/lib_xua into feature/configurable_usb_res_rate_shuchita
This commit is contained in:
@@ -21,7 +21,8 @@ lib_xua Change Log
|
|||||||
events, to report Key-phrase detection as AC Search, and to report end-call
|
events, to report Key-phrase detection as AC Search, and to report end-call
|
||||||
detection as AC Stop
|
detection as AC Stop
|
||||||
* ADDED: Ability to read or modify vendor and product IDs
|
* ADDED: Ability to read or modify vendor and product IDs
|
||||||
* ADDED: Support of variable USB sampling frequency
|
* ADDED: Override USB descriptor with sampling frequency and
|
||||||
|
bit-resolution set at boot time.
|
||||||
|
|
||||||
0.2.1
|
0.2.1
|
||||||
-----
|
-----
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright (c) 2011-2019, XMOS Ltd, All rights reserved
|
// Copyright (c) 2011-2020, XMOS Ltd, All rights reserved
|
||||||
#include "xua.h"
|
#include "xua.h"
|
||||||
|
|
||||||
#if XUA_USB_EN
|
#if XUA_USB_EN
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright (c) 2014-2018, XMOS Ltd, All rights reserved
|
// Copyright (c) 2014-2020, XMOS Ltd, All rights reserved
|
||||||
|
|
||||||
#ifndef _AUDIOREQUESTS_H_
|
#ifndef _AUDIOREQUESTS_H_
|
||||||
#define _AUDIOREQUESTS_H_
|
#define _AUDIOREQUESTS_H_
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright (c) 2011-2018, XMOS Ltd, All rights reserved
|
// Copyright (c) 2011-2020, XMOS Ltd, All rights reserved
|
||||||
/**
|
/**
|
||||||
* @brief Implements relevant requests from the USB Audio 2.0 Specification
|
* @brief Implements relevant requests from the USB Audio 2.0 Specification
|
||||||
* @author Ross Owen, XMOS Semiconductor
|
* @author Ross Owen, XMOS Semiconductor
|
||||||
@@ -17,13 +17,6 @@
|
|||||||
#ifdef MIXER
|
#ifdef MIXER
|
||||||
#include "mixer.h"
|
#include "mixer.h"
|
||||||
#endif
|
#endif
|
||||||
#include "xua_conf_default.h"
|
|
||||||
#include "descriptor_defs.h"
|
|
||||||
|
|
||||||
|
|
||||||
#define DEBUG_UNIT XUA_EP0_UACREQS
|
|
||||||
#define DEBUG_PRINT_ENABLE_XUA_EP0_UACREQS 0
|
|
||||||
#include "debug_print.h"
|
|
||||||
|
|
||||||
#define CS_XU_MIXSEL (0x06)
|
#define CS_XU_MIXSEL (0x06)
|
||||||
|
|
||||||
@@ -52,23 +45,8 @@ extern unsigned char channelMapUsb[NUM_USB_CHAN_IN];
|
|||||||
extern unsigned char mixSel[MAX_MIX_COUNT][MIX_INPUTS];
|
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 */
|
||||||
#if(defined USB_DESCRIPTOR_OVERRIDE_RATE_RES)
|
unsigned int g_curSamFreq = DEFAULT_FREQ;
|
||||||
extern uint32_t get_usb_to_device_rate();
|
|
||||||
extern uint32_t get_device_to_usb_rate();
|
|
||||||
extern uint32_t get_usb_to_device_bit_res();
|
|
||||||
extern uint32_t get_device_to_usb_bit_res();
|
|
||||||
#define g_curUSBin_SamFreq get_device_to_usb_rate()
|
|
||||||
#define g_curUSBout_SamFreq get_usb_to_device_rate()
|
|
||||||
|
|
||||||
unsigned int g_curSamFreq = DEFAULT_FREQ; // should no longer be used
|
|
||||||
#else
|
|
||||||
unsigned int g_curUSBin_SamFreq = DEFAULT_FREQ;
|
|
||||||
unsigned int g_curUSBout_SamFreq = DEFAULT_FREQ;
|
|
||||||
unsigned int g_curSamFreq = DEFAULT_FREQ; // should no longer be used
|
|
||||||
#endif
|
|
||||||
#if 0
|
#if 0
|
||||||
unsigned int g_curSamFreq48000Family = DEFAULT_FREQ % 48000 == 0;
|
unsigned int g_curSamFreq48000Family = DEFAULT_FREQ % 48000 == 0;
|
||||||
|
|
||||||
@@ -1099,7 +1077,6 @@ int AudioEndpointRequests_1(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp
|
|||||||
* bmRequestType.Recipient = Endpoint
|
* bmRequestType.Recipient = Endpoint
|
||||||
* bmRequestType.Type = Class
|
* bmRequestType.Type = Class
|
||||||
* endpoint (wIndex & 0xff) is 0x01 or 0x82
|
* endpoint (wIndex & 0xff) is 0x01 or 0x82
|
||||||
* wIndex is endpoint address for distinguishing input and output
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
XUD_Result_t result;
|
XUD_Result_t result;
|
||||||
@@ -1130,8 +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(((sp.wIndex == ENDPOINT_ADDRESS_IN_AUDIO) && (newSampleRate != g_curUSBin_SamFreq)) || \
|
if(newSampleRate != g_curSamFreq)
|
||||||
((sp.wIndex == ENDPOINT_ADDRESS_OUT_AUDIO) && (newSampleRate != g_curUSBout_SamFreq)))
|
|
||||||
{
|
{
|
||||||
int curSamFreq44100Family;
|
int curSamFreq44100Family;
|
||||||
int curSamFreq48000Family;
|
int curSamFreq48000Family;
|
||||||
@@ -1143,18 +1119,11 @@ int AudioEndpointRequests_1(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp
|
|||||||
|
|
||||||
if(curSamFreq48000Family || curSamFreq44100Family)
|
if(curSamFreq48000Family || curSamFreq44100Family)
|
||||||
{
|
{
|
||||||
if(sp.wIndex == ENDPOINT_ADDRESS_IN_AUDIO){
|
g_curSamFreq = newSampleRate;
|
||||||
g_curUSBin_SamFreq = 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_curUSBin_SamFreq);
|
outuint(c_audioControl, g_curSamFreq);
|
||||||
}
|
|
||||||
else{ //if sp.wIndex == ENDPOINT_ADDRESS_OUT_AUDIO
|
|
||||||
g_curUSBout_SamFreq = newSampleRate;
|
|
||||||
/* Instruct audio thread to change sample freq */
|
|
||||||
outuint(c_audioControl, SET_SAMPLE_FREQ);
|
|
||||||
outuint(c_audioControl, g_curUSBout_SamFreq);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 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);
|
||||||
|
|||||||
Reference in New Issue
Block a user