From 8ce31a4e3540b11cd7c795568616590cc9a477a9 Mon Sep 17 00:00:00 2001 From: Ross Owen Date: Wed, 18 Sep 2013 14:51:24 +0100 Subject: [PATCH] Deliver handles underflow --- module_usb_audio/audio.xc | 49 ++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/module_usb_audio/audio.xc b/module_usb_audio/audio.xc index e7151dc4..6298aff9 100755 --- a/module_usb_audio/audio.xc +++ b/module_usb_audio/audio.xc @@ -85,6 +85,7 @@ extern void device_reboot(void); {unsigned, unsigned} deliver(chanend c_out, chanend ?c_spd_out, unsigned divide, chanend ?c_dig_rx, chanend ?c_adc) { unsigned sample; + unsigned underflow = 0; #if NUM_USB_CHAN_OUT > 0 unsigned samplesOut[NUM_USB_CHAN_OUT]; #endif @@ -109,6 +110,7 @@ extern void device_reboot(void); unsigned dsdSample_r = 0x96960000; #endif int counter = 0; + unsigned underflowWord = 0; #if NUM_USB_CHAN_IN > 0 for (int i=0;i 0 #pragma loop unroll @@ -141,10 +152,21 @@ extern void device_reboot(void); #endif #if NUM_USB_CHAN_OUT > 0 -#pragma loop unroll - for(int i = 0; i < NUM_USB_CHAN_OUT; i++) + if(underflow) { - samplesOut[i] = inuint(c_out); +#pragma loop unroll + for(int i = 0; i < NUM_USB_CHAN_OUT; i++) + { + samplesOut[i] = underflowWord; + } + } + else + { +#pragma loop unroll + for(int i = 0; i < NUM_USB_CHAN_OUT; i++) + { + samplesOut[i] = inuint(c_out); + } } #endif #else @@ -315,7 +337,7 @@ extern void device_reboot(void); else { #ifndef MIXER // Interfaces straight to decouple() - (void) inuint(c_out); + underflow = inuint(c_out); counter++; #if NUM_USB_CHAN_IN > 0 #pragma loop unroll @@ -326,10 +348,21 @@ extern void device_reboot(void); #endif #if NUM_USB_CHAN_OUT > 0 -#pragma loop unroll - for(int i = 0; i < NUM_USB_CHAN_OUT; i++) + if(underflow) { - samplesOut[i] = inuint(c_out); +#pragma loop unroll + for(int i = 0; i < NUM_USB_CHAN_OUT; i++) + { + samplesOut[i] = underflowWord; + } + } + else + { +#pragma loop unroll + for(int i = 0; i < NUM_USB_CHAN_OUT; i++) + { + samplesOut[i] = inuint(c_out); + } } #endif #else