From 6c38ca28907034aa9a5f294dc26f98d90234dea8 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Fri, 20 Nov 2009 06:56:43 +0000 Subject: [PATCH] Fixed Endpoint_Write_Control_Stream_* functions not sending a terminating IN when the given data length is zero. --- Demos/Device/ClassDriver/AudioInput/AudioInput.c | 4 ++-- Demos/Device/ClassDriver/GenericHID/Descriptors.h | 2 +- Demos/Device/ClassDriver/GenericHID/GenericHID.c | 4 ++-- Demos/Device/LowLevel/AudioInput/AudioInput.c | 4 ++-- .../USB/LowLevel/Template/Template_Endpoint_Control_R.c | 3 +++ .../USB/LowLevel/Template/Template_Endpoint_Control_W.c | 4 +++- LUFA/ManPages/ChangeLog.txt | 1 + 7 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Demos/Device/ClassDriver/AudioInput/AudioInput.c b/Demos/Device/ClassDriver/AudioInput/AudioInput.c index cf9d3b47e5..9bd5fe4022 100644 --- a/Demos/Device/ClassDriver/AudioInput/AudioInput.c +++ b/Demos/Device/ClassDriver/AudioInput/AudioInput.c @@ -102,10 +102,10 @@ void ProcessNextSample(void) /* Audio sample is ADC value scaled to fit the entire range */ int16_t AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult()); -#if defined(MICROPHONE_BIASED_TO_HALF_RAIL) + #if defined(MICROPHONE_BIASED_TO_HALF_RAIL) /* Microphone is biased to half rail voltage, subtract the bias from the sample value */ AudioSample -= (SAMPLE_MAX_RANGE / 2)); -#endif + #endif Audio_Device_WriteSample16(&Microphone_Audio_Interface, AudioSample); } diff --git a/Demos/Device/ClassDriver/GenericHID/Descriptors.h b/Demos/Device/ClassDriver/GenericHID/Descriptors.h index 88f16e03e4..0c77922001 100644 --- a/Demos/Device/ClassDriver/GenericHID/Descriptors.h +++ b/Demos/Device/ClassDriver/GenericHID/Descriptors.h @@ -42,7 +42,7 @@ #include #include - /** Type Defines: */ + /* Type Defines: */ /** Type define for the device configuration descriptor structure. This must be defined in the * application code, as the configuration descriptor contains several sub-descriptors which * vary between devices, and which describe the device's usage to the host. diff --git a/Demos/Device/ClassDriver/GenericHID/GenericHID.c b/Demos/Device/ClassDriver/GenericHID/GenericHID.c index bd75e4ec1c..5e265805f6 100644 --- a/Demos/Device/ClassDriver/GenericHID/GenericHID.c +++ b/Demos/Device/ClassDriver/GenericHID/GenericHID.c @@ -42,9 +42,9 @@ uint8_t PrevHIDReportBuffer[GENERIC_REPORT_SIZE]; /** Structure to contain reports from the host, so that they can be echoed back upon request */ struct { - uint8_t ReportID; + uint8_t ReportID; uint16_t ReportSize; - uint8_t ReportData[GENERIC_REPORT_SIZE]; + uint8_t ReportData[GENERIC_REPORT_SIZE]; } HIDReportEcho; /** LUFA HID Class driver interface configuration and state information. This structure is diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.c b/Demos/Device/LowLevel/AudioInput/AudioInput.c index 572e307b02..a61ff593ce 100644 --- a/Demos/Device/LowLevel/AudioInput/AudioInput.c +++ b/Demos/Device/LowLevel/AudioInput/AudioInput.c @@ -169,10 +169,10 @@ void USB_Audio_Task(void) /* Audio sample is ADC value scaled to fit the entire range */ int16_t AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult()); -#if defined(MICROPHONE_BIASED_TO_HALF_RAIL) + #if defined(MICROPHONE_BIASED_TO_HALF_RAIL) /* Microphone is biased to half rail voltage, subtract the bias from the sample value */ AudioSample -= (SAMPLE_MAX_RANGE / 2)); -#endif + #endif /* Write the sample to the buffer */ Endpoint_Write_Word_LE(AudioSample); diff --git a/LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_Control_R.c b/LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_Control_R.c index e64f0ed4a5..6948296a55 100644 --- a/LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_Control_R.c +++ b/LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_Control_R.c @@ -2,6 +2,9 @@ uint8_t TEMPLATE_FUNC_NAME (void* Buffer, uint16_t Length) { uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); + if (!(Length)) + Endpoint_ClearOUT(); + while (Length) { if (Endpoint_IsSETUPReceived()) diff --git a/LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_Control_W.c b/LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_Control_W.c index a2a9b8c1a0..2de7a74f56 100644 --- a/LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_Control_W.c +++ b/LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_Control_W.c @@ -5,7 +5,9 @@ uint8_t TEMPLATE_FUNC_NAME (const void* Buffer, uint16_t Length) if (Length > USB_ControlRequest.wLength) Length = USB_ControlRequest.wLength; - + else if (!(Length)) + Endpoint_ClearIN(); + while (Length || LastPacketFull) { if (Endpoint_IsSETUPReceived()) diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt index 8390fde2ca..57a1a2b29f 100644 --- a/LUFA/ManPages/ChangeLog.txt +++ b/LUFA/ManPages/ChangeLog.txt @@ -51,6 +51,7 @@ * - Fixed HID host Class driver report send/receive report broken when issued through the control pipe * - Fixed HOST_STATE_AS_GPIOR compile time option being ignored when in host mode (thanks to David Lyons) * - Fixed LowLevel Keyboard demo not saving the issues report only after it has been sent to the host + * - Fixed Endpoint_Write_Control_Stream_* functions not sending a terminating IN when given data Length is zero * * \section Sec_ChangeLog090924 Version 090924 *