diff --git a/module_usb_audio/devicedefines.h b/module_usb_audio/devicedefines.h index 58934e02..d1420956 100644 --- a/module_usb_audio/devicedefines.h +++ b/module_usb_audio/devicedefines.h @@ -66,22 +66,22 @@ #define MAX_FREQ_A1 MAX_FREQ #endif -/* For Audio Class 1.0 we always have at most 2 channels */ +/* For Audio Class 1.0 and Full-speed Audio 2.0 we always have at most 2 channels */ #if (NUM_USB_CHAN_OUT > 2) -#define NUM_USB_CHAN_OUT_A1 (2) +#define NUM_USB_CHAN_OUT_FS (2) #else -#define NUM_USB_CHAN_OUT_A1 (NUM_USB_CHAN_OUT) +#define NUM_USB_CHAN_OUT_FS (NUM_USB_CHAN_OUT) #endif #if (NUM_USB_CHAN_IN > 2) -#define NUM_USB_CHAN_IN_A1 (2) +#define NUM_USB_CHAN_IN_FS (2) #else -#define NUM_USB_CHAN_IN_A1 (NUM_USB_CHAN_IN) +#define NUM_USB_CHAN_IN_FS (NUM_USB_CHAN_IN) #endif -/* Channel count defines for FS mode */ -#define NUM_USB_CHAN_OUT_FS (NUM_USB_CHAN_OUT_A1) -#define NUM_USB_CHAN_IN_FS (NUM_USB_CHAN_IN_A1) +/* Channel count defines for Audio 1.0 mode */ +//#define NUM_USB_CHAN_OUT_A1 (NUM_USB_CHAN_OUT_FS) +//#define NUM_USB_CHAN_IN_A1 (NUM_USB_CHAN_IN_FS) #if defined(IO_EXPANSION) && (IO_EXPANSION == 0) diff --git a/module_usb_audio/endpoint0/endpoint0.xc b/module_usb_audio/endpoint0/endpoint0.xc index 195467ef..57de6391 100755 --- a/module_usb_audio/endpoint0/endpoint0.xc +++ b/module_usb_audio/endpoint0/endpoint0.xc @@ -278,7 +278,7 @@ void Endpoint0( chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl, else { outuint(c_audioControl, SET_CHAN_COUNT_OUT); - outuint(c_audioControl, NUM_USB_CHAN_OUT_A1); + outuint(c_audioControl, NUM_USB_CHAN_OUT_FS); } #ifdef NATIVE_DSD if(g_dsdMode) @@ -324,7 +324,7 @@ void Endpoint0( chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl, else { outuint(c_audioControl, SET_CHAN_COUNT_IN); - outuint(c_audioControl, NUM_USB_CHAN_IN_A1); + outuint(c_audioControl, NUM_USB_CHAN_IN_FS); } #ifdef ADAT_RX outuint(c_clk_ctl, SET_SMUX); diff --git a/module_usb_audio/usb_buffer/decouple.xc b/module_usb_audio/usb_buffer/decouple.xc index aa7ad17f..82e4da54 100644 --- a/module_usb_audio/usb_buffer/decouple.xc +++ b/module_usb_audio/usb_buffer/decouple.xc @@ -10,16 +10,17 @@ #endif #define MAX(x,y) ((x)>(y) ? (x) : (y)) -#define CLASS_TWO_PACKET_SIZE ((((MAX_FREQ+7999)/8000))+3) // Samples per channel -#define CLASS_ONE_PACKET_SIZE ((((MAX_FREQ_A1+999)/1000))+3) // Samples per channel +#define CLASS_TWO_PACKET_SIZE ((((MAX_FREQ+7999)/8000))+3) // Samples per channel +#define CLASS_ONE_PACKET_SIZE ((((MAX_FREQ_A1+999)/1000))+3) // Samples per channel +/* TODO user SLOTSIZE to potentially save memory */ +#define BUFF_SIZE_OUT MAX(4 * CLASS_TWO_PACKET_SIZE * NUM_USB_CHAN_OUT, 4 * CLASS_ONE_PACKET_SIZE * NUM_USB_CHAN_OUT_FS) +#define BUFF_SIZE_IN MAX(4 * CLASS_TWO_PACKET_SIZE * NUM_USB_CHAN_IN, 4 * CLASS_ONE_PACKET_SIZE * NUM_USB_CHAN_IN_FS) -#define BUFF_SIZE_OUT MAX(4 * CLASS_TWO_PACKET_SIZE * NUM_USB_CHAN_OUT, 4 * CLASS_ONE_PACKET_SIZE * NUM_USB_CHAN_OUT_A1) -#define BUFF_SIZE_IN MAX(4 * CLASS_TWO_PACKET_SIZE * NUM_USB_CHAN_IN, 4 * CLASS_ONE_PACKET_SIZE * NUM_USB_CHAN_IN_A1) - +/* Maximum USB buffer size (1024 bytes + 1 word to store length) */ #define MAX_USB_AUD_PACKET_SIZE 1028 -#define OUT_BUFFER_PREFILL (MAX(NUM_USB_CHAN_OUT_A1*CLASS_ONE_PACKET_SIZE*3+4,NUM_USB_CHAN_OUT*CLASS_TWO_PACKET_SIZE*4+4)*1) +#define OUT_BUFFER_PREFILL (MAX(NUM_USB_CHAN_OUT_FS*CLASS_ONE_PACKET_SIZE*3+4,NUM_USB_CHAN_OUT*CLASS_TWO_PACKET_SIZE*4+4)*1) #define IN_BUFFER_PREFILL (MAX(CLASS_ONE_PACKET_SIZE*3+4,CLASS_TWO_PACKET_SIZE*4+4)*2) /* Volume and mute tables */ @@ -37,7 +38,7 @@ unsigned g_numUsbChanOut = NUM_USB_CHAN_OUT; unsigned g_numUsbChanIn = NUM_USB_CHAN_IN; #define MAX_DEVICE_AUD_PACKET_SIZE_CLASS_TWO ((MAX_FREQ/8000+1)*NUM_USB_CHAN_IN*4) -#define MAX_DEVICE_AUD_PACKET_SIZE_CLASS_ONE (((MAX_FREQ_A1/1000+1)*NUM_USB_CHAN_IN_A1*3)+4) +#define MAX_DEVICE_AUD_PACKET_SIZE_CLASS_ONE (((MAX_FREQ_A1/1000+1)*NUM_USB_CHAN_IN_FS*3)+4) #define MAX_DEVICE_AUD_PACKET_SIZE (MAX(MAX_DEVICE_AUD_PACKET_SIZE_CLASS_ONE, MAX_DEVICE_AUD_PACKET_SIZE_CLASS_TWO)) @@ -745,8 +746,8 @@ void decouple(chanend c_mix_out, if(usb_speed == XUD_SPEED_FS) { - g_numUsbChanOut = NUM_USB_CHAN_OUT_A1; - g_numUsbChanIn = NUM_USB_CHAN_IN_A1; + g_numUsbChanOut = NUM_USB_CHAN_OUT_FS; + g_numUsbChanIn = NUM_USB_CHAN_IN_FS; } } @@ -804,7 +805,7 @@ void decouple(chanend c_mix_out, if (usb_speed == XUD_SPEED_HS) mid*=NUM_USB_CHAN_IN*SAMPLE_SUBSLOT_SIZE_HS; else - mid*=NUM_USB_CHAN_IN_A1*SAMPLE_SUBSLOT_SIZE_FS; + mid*=NUM_USB_CHAN_IN_FS*SAMPLE_SUBSLOT_SIZE_FS; asm("stw %0, %1[0]"::"r"(mid),"r"(g_aud_to_host_zeros)); }