forked from PAWPAW-Mirror/lib_xua
Merge branch 'master' into DEV_IMP_FB
This commit is contained in:
56
module_usb_audio/endpoint0/chanstringgen.py
Normal file
56
module_usb_audio/endpoint0/chanstringgen.py
Normal file
@@ -0,0 +1,56 @@
|
||||
|
||||
|
||||
def genstrings(outputChanCount, chanString, portString, structureString, adc_dac):
|
||||
|
||||
for i in range(1,outputChanCount):
|
||||
|
||||
print "#if (NUM_USB_CHAN_{c} > {i}-1)\n\
|
||||
.{s}ChanStr_{i} = \"\"\n\
|
||||
#if ({i} < I2S_CHANS_{adcdac}+1)\n\
|
||||
\"Analogue {i}\"\n\
|
||||
#endif\n\
|
||||
#if (({i} < SPDIF_{p}_INDEX+2+1) && ({i} > SPDIF_{p}_INDEX)) && defined(SPDIF_{p})\n\
|
||||
#if ({i} < I2S_CHANS_{adcdac}+1)\n\
|
||||
\"/\"\n\
|
||||
#endif\n\
|
||||
#if({i} - SPDIF_{p}_INDEX == 1)\n\
|
||||
\"SPDIF 1\"\n\
|
||||
#elif({i} - SPDIF_{p}_INDEX == 2)\n\
|
||||
\"SPDIF 2\"\n\
|
||||
#endif\n\
|
||||
#endif\n\
|
||||
#if (({i} < ADAT_{p}_INDEX+8+1) && ({i} > ADAT_{p}_INDEX)) && defined(ADAT_{p})\n\
|
||||
#if (({i} < SPDIF_{p}_INDEX+2+1) && ({i} > SPDIF_{p}_INDEX)) && defined(SPDIF_{p}) || ({i} < I2S_CHANS_{adcdac}+1)\n\
|
||||
\"/\"\n\
|
||||
#endif\n\
|
||||
#if({i} - ADAT_TX_INDEX == 1)\n\
|
||||
\"ADAT 1\"\n\
|
||||
#elif({i} - ADAT_TX_INDEX == 2)\n\
|
||||
\"ADAT 2\"\n\
|
||||
#elif({i} - ADAT_TX_INDEX == 3)\n\
|
||||
\"ADAT 3\"\n\
|
||||
#elif({i} - ADAT_TX_INDEX == 4)\n\
|
||||
\"ADAT 4\"\n\
|
||||
#elif({i} - ADAT_TX_INDEX == 5)\n\
|
||||
\"ADAT 5\"\n\
|
||||
#elif({i} - ADAT_TX_INDEX == 6)\n\
|
||||
\"ADAT 6\"\n\
|
||||
#elif({i} - ADAT_TX_INDEX == 7)\n\
|
||||
\"ADAT 7\"\n\
|
||||
#elif({i} - ADAT_TX_INDEX == 8)\n\
|
||||
\"ADAT 8\"\n\
|
||||
#endif\n\
|
||||
#endif\n\
|
||||
,\n#endif\n".format(i=i, c=chanString, p=portString, s=structureString, adcdac=adc_dac);
|
||||
return;
|
||||
|
||||
print "/* AUTOGENERATED using chanstringgen.py */\n"
|
||||
print "/* Not very nice looking but the standard preprocessor is not very powerful\n and we save some memory over doing this all at runtime */"
|
||||
|
||||
print "/* Output Strings */\n\n"
|
||||
|
||||
genstrings(33, "OUT", "TX", "output", "DAC");
|
||||
|
||||
print "/* Input Strings */\n\n"
|
||||
|
||||
genstrings(33, "IN", "RX", "input", "ADC");
|
||||
2570
module_usb_audio/endpoint0/chanstrings.h
Normal file
2570
module_usb_audio/endpoint0/chanstrings.h
Normal file
File diff suppressed because it is too large
Load Diff
61
module_usb_audio/endpoint0/descriptor_defs.h
Normal file
61
module_usb_audio/endpoint0/descriptor_defs.h
Normal file
@@ -0,0 +1,61 @@
|
||||
|
||||
#ifndef __DESCRIPTOR_DEFS_H__
|
||||
#define __DESCRIPTOR_DEFS_H__
|
||||
|
||||
#if (NUM_USB_CHAN_IN > 0) && (NUM_USB_CHAN_OUT > 0)
|
||||
#define AUDIO_INTERFACE_COUNT 3
|
||||
#elif (NUM_USB_CHAN_IN > 0) || (NUM_USB_CHAN_OUT > 0)
|
||||
#define AUDIO_INTERFACE_COUNT 2
|
||||
#else
|
||||
#define AUDIO_INTERFACE_COUNT 1
|
||||
#endif
|
||||
|
||||
/* Endpoint address defines */
|
||||
#define ENDPOINT_ADDRESS_IN_CONTROL (ENDPOINT_NUMBER_IN_CONTROL | 0x80)
|
||||
#define ENDPOINT_ADDRESS_IN_FEEDBACK (ENDPOINT_NUMBER_IN_FEEDBACK | 0x80)
|
||||
#define ENDPOINT_ADDRESS_IN_AUDIO (ENDPOINT_NUMBER_IN_AUDIO | 0x80)
|
||||
#define ENDPOINT_ADDRESS_IN_INTERRUPT (ENDPOINT_NUMBER_IN_INTERRUPT | 0x80)
|
||||
#define ENDPOINT_ADDRESS_IN_MIDI (ENDPOINT_NUMBER_IN_MIDI | 0x80)
|
||||
#define ENDPOINT_ADDRESS_IN_HID (ENDPOINT_NUMBER_IN_HID | 0x80)
|
||||
#define ENDPOINT_ADDRESS_IN_IAP_INT (ENDPOINT_NUMBER_IN_IAP_INT | 0x80)
|
||||
#define ENDPOINT_ADDRESS_IN_IAP (ENDPOINT_NUMBER_IN_IAP | 0x80)
|
||||
#define ENDPOINT_ADDRESS_IN_IAP_EA_NATIVE_TRANS (ENDPOINT_NUMBER_IN_IAP_EA_NATIVE_TRANS | 0x80)
|
||||
|
||||
#define ENDPOINT_ADDRESS_OUT_CONTROL (ENDPOINT_NUMBER_OUT_CONTROL)
|
||||
#define ENDPOINT_ADDRESS_OUT_AUDIO (ENDPOINT_NUMBER_OUT_AUDIO)
|
||||
#define ENDPOINT_ADDRESS_OUT_MIDI (ENDPOINT_NUMBER_OUT_MIDI)
|
||||
#define ENDPOINT_ADDRESS_OUT_IAP (ENDPOINT_NUMBER_OUT_IAP)
|
||||
#define ENDPOINT_ADDRESS_OUT_IAP_EA_NATIVE_TRANS (ENDPOINT_NUMBER_OUT_IAP_EA_NATIVE_TRANS)
|
||||
|
||||
|
||||
|
||||
/* Interface numbers enum */
|
||||
enum USBInterfaceNumber
|
||||
{
|
||||
INTERFACE_NUMBER_AUDIO_CONTROL = 0,
|
||||
#if (NUM_USB_CHAN_OUT > 0)
|
||||
INTERFACE_NUMBER_AUDIO_OUTPUT,
|
||||
#endif
|
||||
#if (NUM_USB_CHAN_IN > 0)
|
||||
INTERFACE_NUMBER_AUDIO_INPUT,
|
||||
#endif
|
||||
#if defined(MIDI) && (MIDI != 0)
|
||||
INTERFACE_NUMBER_MIDI_CONTROL,
|
||||
INTERFACE_NUMBER_MIDI_STREAM,
|
||||
#endif
|
||||
#if defined(DFU) && (DFU != 0)
|
||||
INTERFACE_NUMBER_DFU,
|
||||
#endif
|
||||
#if defined(IAP) && (IAP != 0)
|
||||
INTERFACE_NUMBER_IAP,
|
||||
#if defined(IAP_EA_NATIVE_TRANS) && (IAP_EA_NATIVE_TRANS != 0)
|
||||
INTERFACE_NUMBER_IAP_EA_NATIVE_TRANS,
|
||||
#endif
|
||||
#endif
|
||||
#if defined(HID_CONTROLS) && (HID_CONTROLS != 0)
|
||||
INTERFACE_NUMBER_HID,
|
||||
#endif
|
||||
INTERFACE_COUNT /* End marker */
|
||||
};
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -49,19 +49,19 @@
|
||||
#warning MIDI is currently not supported and will not be enabled in AUDIO 1.0 mode
|
||||
#endif
|
||||
|
||||
/* If PID_DFU not defined, standard PID used.. this is probably what we want.. */
|
||||
#ifndef PID_DFU
|
||||
#warning PID_DFU not defined, Using PID_AUDIO_2. This is probably fine!
|
||||
/* If DFU_PID not defined, standard PID used.. this is probably what we want.. */
|
||||
#ifndef DFU_PID
|
||||
#warning DFU_PID not defined, Using PID_AUDIO_2. This is probably fine!
|
||||
#endif
|
||||
|
||||
#ifdef DFU
|
||||
#include "dfu.h"
|
||||
#define DFU_IF_NUM INPUT_INTERFACES + OUTPUT_INTERFACES + MIDI_INTERFACES + 1
|
||||
|
||||
unsigned int DFU_mode_active = 0; // 0 - App active, 1 - DFU active
|
||||
extern void device_reboot(chanend);
|
||||
#endif
|
||||
|
||||
unsigned int DFU_mode_active = 0; // 0 - App active, 1 - DFU active
|
||||
|
||||
/* Global volume and mute tables */
|
||||
int volsOut[NUM_USB_CHAN_OUT + 1];
|
||||
unsigned int mutesOut[NUM_USB_CHAN_OUT + 1];
|
||||
@@ -204,7 +204,7 @@ const unsigned g_chanCount_In_HS[INPUT_FORMAT_COUNT] = {HS_STREAM_FORMAT_I
|
||||
|
||||
/* Endpoint 0 function. Handles all requests to the device */
|
||||
void Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl,
|
||||
chanend c_mix_ctl, chanend c_clk_ctl, chanend c_EANativeTransport_ctrl)
|
||||
chanend c_mix_ctl, chanend c_clk_ctl, chanend c_EANativeTransport_ctrl, CLIENT_INTERFACE(i_dfu, dfuInterface))
|
||||
{
|
||||
USB_SetupPacket_t sp;
|
||||
XUD_ep ep0_out = XUD_InitEp(c_ep0_out);
|
||||
@@ -296,11 +296,7 @@ void Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl,
|
||||
while(1)
|
||||
{
|
||||
/* Returns XUD_RES_OKAY for success, XUD_RES_RST for bus reset */
|
||||
#if defined(__XC__)
|
||||
XUD_Result_t result = USB_GetSetupPacket(ep0_out, ep0_in, sp);
|
||||
#else
|
||||
XUD_Result_t result = USB_GetSetupPacket(ep0_out, ep0_in, &sp);
|
||||
#endif
|
||||
|
||||
if (result == XUD_RES_OKAY)
|
||||
{
|
||||
@@ -562,6 +558,8 @@ void Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl,
|
||||
|
||||
if (interfaceNum == DFU_IF)
|
||||
{
|
||||
int reset = 0;
|
||||
|
||||
/* If running in application mode stop audio */
|
||||
/* Don't interupt audio for save and restore cmds */
|
||||
if ((DFU_IF == INTERFACE_NUMBER_DFU) && (sp.bRequest != XMOS_DFU_SAVESTATE) &&
|
||||
@@ -573,27 +571,22 @@ void Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl,
|
||||
// Handshake
|
||||
chkct(c_audioControl, XS1_CT_END);
|
||||
}
|
||||
#ifdef __XC__
|
||||
|
||||
/* This will return 1 if reset requested */
|
||||
if (DFUDeviceRequests(ep0_out, ep0_in, sp, null, g_interfaceAlt[sp.wIndex], 1))
|
||||
#else
|
||||
/* This will return 1 if reset requested */
|
||||
if (DFUDeviceRequests(ep0_out, &ep0_in, &sp, null, g_interfaceAlt[sp.wIndex], 1))
|
||||
#endif
|
||||
result = DFUDeviceRequests(ep0_out, &ep0_in, &sp, null, g_interfaceAlt[sp.wIndex], dfuInterface, &reset);
|
||||
|
||||
if(reset)
|
||||
{
|
||||
DFUDelay(50000000);
|
||||
device_reboot(c_audioControl);
|
||||
}
|
||||
|
||||
/* TODO we should not make the assumption that all DFU requests are handled */
|
||||
result = 0;
|
||||
}
|
||||
#endif
|
||||
/* Check for: - Audio CONTROL interface request - always 0, note we check for DFU first
|
||||
* - Audio STREAMING interface request (In or Out)
|
||||
* - Audio endpoint request (Audio 1.0 Sampling freq requests are sent to the endpoint)
|
||||
*/
|
||||
if((interfaceNum == 0) || (interfaceNum == 1) || (interfaceNum == 2))
|
||||
if(((interfaceNum == 0) || (interfaceNum == 1) || (interfaceNum == 2)) && !DFU_mode_active)
|
||||
{
|
||||
#if (AUDIO_CLASS == 2) && defined(AUDIO_CLASS_FALLBACK)
|
||||
if(g_curUsbSpeed == XUD_SPEED_HS)
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
#ifndef _ENDPOINT0_H_
|
||||
#define _ENDPOINT0_H_
|
||||
|
||||
#include "dfu_interface.h"
|
||||
|
||||
/** Function implementing Endpoint 0 for enumeration, control and configuration
|
||||
* of USB audio devices. It uses the descriptors defined in ``descriptors_2.h``.
|
||||
*
|
||||
@@ -18,7 +20,7 @@
|
||||
* \param c_EANativeTransport_ctrl Optional chanend to be connected to EA Native
|
||||
* endpoint manager if present
|
||||
*/
|
||||
void Endpoint0( chanend c_ep0_out, chanend c_ep0_in, chanend c_audioCtrl,
|
||||
chanend ?c_mix_ctl,chanend ?c_clk_ctl, chanend ?c_EANativeTransport_ctrl);
|
||||
void Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioCtrl,
|
||||
chanend ?c_mix_ctl,chanend ?c_clk_ctl, chanend ?c_EANativeTransport_ctr, client interface i_dfu dfuInterface);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user