From 49cd36dd67dae5594072e29feb88108d19c7acbb Mon Sep 17 00:00:00 2001 From: Ross Owen Date: Tue, 6 Oct 2015 16:48:30 +0100 Subject: [PATCH 1/7] Exception when SPDIF_TX and ADAT_TX both enabled due to clock-block being configured after already started. Caused by SPDIF_TX define check typo --- CHANGELOG.rst | 5 +++-- module_usb_audio/audio.xc | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 028c42b5..f342d462 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,13 +1,14 @@ sc_usb_audio Change Log ======================= -6.12.7 +6.13.0 ------ - ADDED: Device now uses implicit feedback when input stream is available (previously explicit feedback pipe always used). This saves chanend/EP resources and means less processing burden for the host. Previous behaviour available by enabling UAC_FORCE_FEEDBACK_EP + - RESOLVED: Exception when SPDIF_TX and ADAT_TX both enabled due to clock-block being configured + after already started. Caused by SPDIF_TX define check typo - CHANGE: Mixer and non-mixer channel comms scheme (decouple <-> audio path) now the identical - 6.12.6 ------ diff --git a/module_usb_audio/audio.xc b/module_usb_audio/audio.xc index 30e705ee..1b1839ea 100755 --- a/module_usb_audio/audio.xc +++ b/module_usb_audio/audio.xc @@ -994,7 +994,7 @@ chanend ?c_config, chanend ?c configure_clock_src(clk_mst_spd, p_mclk_in); configure_out_port_no_ready(p_adat_tx, clk_mst_spd, 0); set_clock_fall_delay(clk_mst_spd, 7); -#ifndef SPDIF +#ifndef SPDIF_TX start_clock(clk_mst_spd); #endif #endif From e7af4b1f554730c1b1fce3895d3d7f9bb1c3e34f Mon Sep 17 00:00:00 2001 From: Ross Owen Date: Mon, 12 Oct 2015 14:17:38 +0100 Subject: [PATCH 2/7] Changeling updates for 6.13 --- CHANGELOG.rst | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f342d462..477bcef0 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,7 +8,15 @@ sc_usb_audio Change Log burden for the host. Previous behaviour available by enabling UAC_FORCE_FEEDBACK_EP - RESOLVED: Exception when SPDIF_TX and ADAT_TX both enabled due to clock-block being configured after already started. Caused by SPDIF_TX define check typo - - CHANGE: Mixer and non-mixer channel comms scheme (decouple <-> audio path) now the identical + - RESOLVED: DFU flag address changed to properly conform to memory address range allocated to + apps by tools + - RESOLVED: Build failure when DFU disabled + - RESOLVED: Build issue when I2S_CHANS_ADC/DAC set to 0 and CODEC_MASTER enabled + - RESOLVED: Typo in MCLK_441 checking for MIN_FREQ define + - CHANGE: Mixer and non-mixer channel comms scheme (decouple <-> audio path) now identical + - CHANGE: Input stream buffering modified such that during overflow older samples are removed + rather than ignoring most recent samples. Removes any chance of stale input packets + being sent to host. 6.12.6 ------ From fb6a801b23f2ae47c0dbeba406d9f65aa3bfb12e Mon Sep 17 00:00:00 2001 From: Ross Owen Date: Mon, 12 Oct 2015 14:19:50 +0100 Subject: [PATCH 3/7] xpd: Patched version number --- module_usb_audio/.cproject | 3 +++ module_usb_audio/devicedefines.h | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/module_usb_audio/.cproject b/module_usb_audio/.cproject index 5b0ab598..cc782131 100644 --- a/module_usb_audio/.cproject +++ b/module_usb_audio/.cproject @@ -162,6 +162,7 @@ + @@ -285,6 +286,7 @@ + @@ -414,6 +416,7 @@ + diff --git a/module_usb_audio/devicedefines.h b/module_usb_audio/devicedefines.h index cdfaa48d..1eb70cdd 100644 --- a/module_usb_audio/devicedefines.h +++ b/module_usb_audio/devicedefines.h @@ -451,14 +451,14 @@ * @brief Device firmware version number in Binary Coded Decimal format: 0xJJMN where JJ: major, M: minor, N: sub-minor version number. */ #ifndef BCD_DEVICE_M -#define BCD_DEVICE_M 12 +#define BCD_DEVICE_M 13 #endif /** * @brief Device firmware version number in Binary Coded Decimal format: 0xJJMN where JJ: major, M: minor, N: sub-minor version number. */ #ifndef BCD_DEVICE_N -#define BCD_DEVICE_N 5 +#define BCD_DEVICE_N 0 #endif /** From 9344178fcc4dc9da49e08ae049dd3a933b8202a8 Mon Sep 17 00:00:00 2001 From: Ross Owen Date: Mon, 12 Oct 2015 14:19:50 +0100 Subject: [PATCH 4/7] xpd: Cleaned up whitespace --- module_usb_audio/audio.xc | 2 +- module_usb_audio/endpoint0/descriptors.h | 20 +++++------ module_usb_audio/endpoint0/endpoint0.c | 2 +- module_usb_audio/mixer/mixer.xc | 4 +-- module_usb_audio/usb_buffer/decouple.xc | 42 +++++++++++------------ module_usb_audio/usb_buffer/usb_buffer.xc | 4 +-- 6 files changed, 37 insertions(+), 37 deletions(-) diff --git a/module_usb_audio/audio.xc b/module_usb_audio/audio.xc index 1b1839ea..edadc756 100755 --- a/module_usb_audio/audio.xc +++ b/module_usb_audio/audio.xc @@ -704,7 +704,7 @@ unsigned static deliver(chanend c_out, chanend ?c_spd_out, /* Manual IN instruction since compiler generates an extra setc per IN (bug #15256) */ unsigned sample; asm volatile("in %0, res[%1]" : "=r"(sample) : "r"(p_i2s_adc[index++])); - + if(buffIndex) samplesIn_1[((frameCount-1)&(I2S_CHANS_PER_FRAME-1))+i] = bitrev(sample); // channels 1, 3, 5.. on each line. else diff --git a/module_usb_audio/endpoint0/descriptors.h b/module_usb_audio/endpoint0/descriptors.h index 339c8c92..c537f4a1 100644 --- a/module_usb_audio/endpoint0/descriptors.h +++ b/module_usb_audio/endpoint0/descriptors.h @@ -1417,10 +1417,10 @@ USB_Config_Descriptor_Audio2_t cfgDesc_Audio2= /* Type 1 Format Type Descriptor */ .Audio_Out_Format = { - .bLength = 0x06, - .bDescriptorType = UAC_CS_DESCTYPE_INTERFACE, - .bDescriptorSubtype = UAC_CS_AS_INTERFACE_SUBTYPE_FORMAT_TYPE, - .bFormatType = UAC_FORMAT_TYPE_I, + .bLength = 0x06, + .bDescriptorType = UAC_CS_DESCTYPE_INTERFACE, + .bDescriptorSubtype = UAC_CS_AS_INTERFACE_SUBTYPE_FORMAT_TYPE, + .bFormatType = UAC_FORMAT_TYPE_I, .bSubslotSize = HS_STREAM_FORMAT_OUTPUT_1_SUBSLOT_BYTES, .bBitResolution = HS_STREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS, }, @@ -1430,7 +1430,7 @@ USB_Config_Descriptor_Audio2_t cfgDesc_Audio2= { .bLength = sizeof(USB_Descriptor_Endpoint_t), .bDescriptorType = USB_DESCTYPE_ENDPOINT, - .bEndpointAddress = ENDPOINT_ADDRESS_OUT_AUDIO, + .bEndpointAddress = ENDPOINT_ADDRESS_OUT_AUDIO, .bmAttributes = 0x05, /* (bitmap) */ .wMaxPacketSize = HS_STREAM_FORMAT_OUTPUT_1_MAXPACKETSIZE, .bInterval = 1, @@ -1451,11 +1451,11 @@ USB_Config_Descriptor_Audio2_t cfgDesc_Audio2= #if (NUM_USB_CHAN_IN == 0) || defined(UAC_FORCE_FEEDBACK_EP) .Audio_Out_Fb_Endpoint = { - .bLength = 0x07, - .bDescriptorType = USB_DESCTYPE_ENDPOINT, - .bEndpointAddress = ENDPOINT_ADDRESS_IN_FEEDBACK, + .bLength = 0x07, + .bDescriptorType = USB_DESCTYPE_ENDPOINT, + .bEndpointAddress = ENDPOINT_ADDRESS_IN_FEEDBACK, .bmAttributes = 17, /* (bitmap) */ - .wMaxPacketSize = 0x0004, + .wMaxPacketSize = 0x0004, .bInterval = 4, /* Only values <= 1 frame (4) supported by MS */ }, #endif @@ -1616,7 +1616,7 @@ USB_Config_Descriptor_Audio2_t cfgDesc_Audio2= .wMaxPacketSize = 0x0004, .bInterval = 4, /* Only values <= 1 frame (4) supported by MS */ }, -#endif +#endif #endif /* OUTPUT_FORMAT_COUNT > 2 */ #endif /* OUTPUT */ #if (NUM_USB_CHAN_IN > 0) diff --git a/module_usb_audio/endpoint0/endpoint0.c b/module_usb_audio/endpoint0/endpoint0.c index 7961c9fe..f3d4f51b 100755 --- a/module_usb_audio/endpoint0/endpoint0.c +++ b/module_usb_audio/endpoint0/endpoint0.c @@ -586,7 +586,7 @@ void Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl, * - 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)) #ifdef DFU && !DFU_mode_active #endif diff --git a/module_usb_audio/mixer/mixer.xc b/module_usb_audio/mixer/mixer.xc index e882f71c..e251e401 100644 --- a/module_usb_audio/mixer/mixer.xc +++ b/module_usb_audio/mixer/mixer.xc @@ -362,10 +362,10 @@ static void mixer1(chanend c_host, chanend c_mix_ctl, chanend c_mixer2) /* Request from audio()/mixer2() */ request = inuint(c_mixer2); - + /* Forward on Request for data to decouple thread */ outuint(c_host, request); - + /* Between request to decouple and respose ~ 400nS latency for interrupt to fire */ select { diff --git a/module_usb_audio/usb_buffer/decouple.xc b/module_usb_audio/usb_buffer/decouple.xc index 86fa931f..ee279499 100644 --- a/module_usb_audio/usb_buffer/decouple.xc +++ b/module_usb_audio/usb_buffer/decouple.xc @@ -92,7 +92,7 @@ xc_ptr g_aud_to_host_dptr; xc_ptr g_aud_to_host_rdptr; xc_ptr g_aud_to_host_zeros; int sampsToWrite = DEFAULT_FREQ/8000; /* HS assumed here. Expect to be junked during a overflow before stream start */ -int totalSampsToWrite = DEFAULT_FREQ/8000; +int totalSampsToWrite = DEFAULT_FREQ/8000; int aud_data_remaining_to_device = 0; /* Audio over/under flow flags */ @@ -436,7 +436,7 @@ __builtin_unreachable(); /* Round up to nearest word - note, not needed for slotsize == 4! */ datasize = (datasize+3) & (~0x3); - + /* Move wr ptr on by old packet length */ g_aud_to_host_wrptr += 4+datasize; @@ -447,10 +447,10 @@ __builtin_unreachable(); } g_aud_to_host_dptr = g_aud_to_host_wrptr + 4; - - /* Now calculate new packet length... + + /* Now calculate new packet length... * First get feedback val (ideally this would be syncronised) - * Note, if customer hasn't applied a valid MCLK this could go to 0 + * Note, if customer hasn't applied a valid MCLK this could go to 0 * we need to handle this gracefully */ asm volatile("ldw %0, dp[g_speed]" : "=r" (speed) :); @@ -475,36 +475,36 @@ __builtin_unreachable(); space_left = aud_to_host_fifo_end - g_aud_to_host_wrptr; } - //if((space_left > 0) && (space_left < (totalSampsToWrite * g_numUsbChan_In * g_curSubSlot_In + 4))) - if((space_left < (totalSampsToWrite * g_numUsbChan_In * g_curSubSlot_In + 4))) + //if((space_left > 0) && (space_left < (totalSampsToWrite * g_numUsbChan_In * g_curSubSlot_In + 4))) + if((space_left < (totalSampsToWrite * g_numUsbChan_In * g_curSubSlot_In + 4))) { - /* In pipe has filled its buffer - we need to overflow + /* In pipe has filled its buffer - we need to overflow * Accept the packet, and throw away the oldest in the buffer */ - + /* Keep throwing away packets until buffer is at a nice level.. */ do - { + { unsigned rdPtr; - + /* Read length of packet in buffer at read pointer */ unsigned datalength; - + GET_SHARED_GLOBAL(rdPtr, g_aud_to_host_rdptr); asm volatile("ldw %0, %1[0]":"=r"(datalength):"r"(rdPtr)); - + /* Round up datalength */ - datalength = ((datalength+3) & ~0x3) + 4; - - /* Move read pointer on by length */ + datalength = ((datalength+3) & ~0x3) + 4; + + /* Move read pointer on by length */ rdPtr += datalength; if (rdPtr >= aud_to_host_fifo_end) { rdPtr = aud_to_host_fifo_start; - } - + } + space_left += datalength; SET_SHARED_GLOBAL(g_aud_to_host_rdptr, rdPtr); - + } while(space_left < (BUFF_SIZE_IN*4/2)); } @@ -556,7 +556,7 @@ static inline void SetupZerosSendBuffer(XUD_ep aud_to_host_usb_ep, unsigned samp /* Set IN stream packet size to something sensible. We expect the buffer to * over flow and this to be reset */ SET_SHARED_GLOBAL(sampsToWrite, 0); - SET_SHARED_GLOBAL(totalSampsToWrite, 0); + SET_SHARED_GLOBAL(totalSampsToWrite, 0); mid *= g_numUsbChan_In * slotSize; @@ -564,7 +564,7 @@ static inline void SetupZerosSendBuffer(XUD_ep aud_to_host_usb_ep, unsigned samp /* Mark EP ready with the zero buffer. Note this will simply update the packet size * if it is already ready */ - + /* g_aud_to_host_buffer is already set to g_aud_to_host_zeros */ GET_SHARED_GLOBAL(p, g_aud_to_host_buffer); diff --git a/module_usb_audio/usb_buffer/usb_buffer.xc b/module_usb_audio/usb_buffer/usb_buffer.xc index 2e6fdeb3..14289ac9 100644 --- a/module_usb_audio/usb_buffer/usb_buffer.xc +++ b/module_usb_audio/usb_buffer/usb_buffer.xc @@ -94,7 +94,7 @@ unsigned char fb_clocks[16]; * @param c_aud_fb chanend for feeback to xud * @return void */ -void buffer(register chanend c_aud_out, register chanend c_aud_in, +void buffer(register chanend c_aud_out, register chanend c_aud_in, #if (NUM_USB_CHAN_IN == 0) || defined (UAC_FORCE_FEEDBACK_EP) chanend c_aud_fb, #endif @@ -322,7 +322,7 @@ void buffer(register chanend c_aud_out, register chanend c_aud_in, int min, mid, max; GetADCCounts(sampleFreq, min, mid, max); g_speed = mid<<16; - + } /* Ideally we want to wait for handshake (and pass back up) here. But we cannot keep this From c53447546e337a40da0bc64238d80666b35b7336 Mon Sep 17 00:00:00 2001 From: Ross Owen Date: Mon, 12 Oct 2015 14:20:26 +0100 Subject: [PATCH 5/7] 'Release: 6.13.0beta0' --- README.rst | 2 +- xpd.xml | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/README.rst b/README.rst index 4580f0c3..4338dd55 100644 --- a/README.rst +++ b/README.rst @@ -1,7 +1,7 @@ USB Audio Shared ................ -:Latest release: 6.12.5rc0 +:Latest release: 6.13.0beta0 :Maintainer: xross :Description: USB Audio Shared Components. For use in the XMOS USB Audio Refererence Designs. diff --git a/xpd.xml b/xpd.xml index 4ed613a0..7d9535b8 100644 --- a/xpd.xml +++ b/xpd.xml @@ -17,15 +17,15 @@ module_xassert - module_queue + module_queue MIDI master - 7840b23c0f18f7701a13a6e030aefc0cdd62ade3 + 490b9efd7f38f02bb5314c95fdfd727f08504c45 git://github.com/xcore/sc_util - 1.0.5rc0 + 1.0.5alpha0 USB Audio Shared Components. For use in the XMOS USB Audio Refererence Designs. module_dfu/doc @@ -98,7 +98,8 @@ - + + XM-004720-SM XMOS From 2ae88301eb9f57f0556fad66e5350ef6b5c9a18d Mon Sep 17 00:00:00 2001 From: Ross Owen Date: Mon, 12 Oct 2015 15:15:26 +0100 Subject: [PATCH 6/7] 'Release: 6.13.0beta1' --- README.rst | 2 +- module_dfu/.xproject | 2 +- module_queue/.xproject | 2 +- module_usb_audio/.xproject | 2 +- module_usb_midi/.xproject | 2 +- xpd.xml | 9 +++++---- 6 files changed, 10 insertions(+), 9 deletions(-) diff --git a/README.rst b/README.rst index 4338dd55..84737e8f 100644 --- a/README.rst +++ b/README.rst @@ -1,7 +1,7 @@ USB Audio Shared ................ -:Latest release: 6.13.0beta0 +:Latest release: 6.13.0beta1 :Maintainer: xross :Description: USB Audio Shared Components. For use in the XMOS USB Audio Refererence Designs. diff --git a/module_dfu/.xproject b/module_dfu/.xproject index d80aba33..de455f2e 100644 --- a/module_dfu/.xproject +++ b/module_dfu/.xproject @@ -1 +1 @@ -sc_usb_audioXM-004720-SM \ No newline at end of file +sc_usb_audioXM-004720-SM6.13.0beta0 \ No newline at end of file diff --git a/module_queue/.xproject b/module_queue/.xproject index d80aba33..de455f2e 100644 --- a/module_queue/.xproject +++ b/module_queue/.xproject @@ -1 +1 @@ -sc_usb_audioXM-004720-SM \ No newline at end of file +sc_usb_audioXM-004720-SM6.13.0beta0 \ No newline at end of file diff --git a/module_usb_audio/.xproject b/module_usb_audio/.xproject index d80aba33..de455f2e 100644 --- a/module_usb_audio/.xproject +++ b/module_usb_audio/.xproject @@ -1 +1 @@ -sc_usb_audioXM-004720-SM \ No newline at end of file +sc_usb_audioXM-004720-SM6.13.0beta0 \ No newline at end of file diff --git a/module_usb_midi/.xproject b/module_usb_midi/.xproject index d80aba33..de455f2e 100644 --- a/module_usb_midi/.xproject +++ b/module_usb_midi/.xproject @@ -1 +1 @@ -sc_usb_audioXM-004720-SM \ No newline at end of file +sc_usb_audioXM-004720-SM6.13.0beta0 \ No newline at end of file diff --git a/xpd.xml b/xpd.xml index 7d9535b8..8f35985f 100644 --- a/xpd.xml +++ b/xpd.xml @@ -17,15 +17,15 @@ module_xassert - module_queue + module_queue MIDI master - 490b9efd7f38f02bb5314c95fdfd727f08504c45 + 7840b23c0f18f7701a13a6e030aefc0cdd62ade3 git://github.com/xcore/sc_util - 1.0.5alpha0 + 1.0.5rc0 USB Audio Shared Components. For use in the XMOS USB Audio Refererence Designs. module_dfu/doc @@ -99,7 +99,8 @@ - + + XM-004720-SM XMOS From 0e217bb639bf723e66fc96a5c34713dd0699f4f6 Mon Sep 17 00:00:00 2001 From: Ross Owen Date: Tue, 13 Oct 2015 17:32:48 +0100 Subject: [PATCH 7/7] module_queue now uses lib_xassert (rather than module_xassert) --- module_queue/module_build_info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module_queue/module_build_info b/module_queue/module_build_info index 84cb704f..5082786c 100644 --- a/module_queue/module_build_info +++ b/module_queue/module_build_info @@ -11,4 +11,4 @@ MODULE_XCC_XC_FLAGS = $(XCC_XC_FLAGS) -DEPENDENT_MODULES = module_xassert +DEPENDENT_MODULES = lib_xassert