From e4bf986bb351121a39076a7c85c09cd40b43f123 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Tue, 24 Nov 2009 01:56:59 +0000
Subject: [PATCH] Fixed broken USB_GetNextDescriptor() function causing the
 descriptor to jump ahead double the expected amount.

Fixed Pipe_IsEndpointBound() not masking the given Endpoint Address against PIPE_EPNUM_MASK.
---
 LUFA/Drivers/Board/Temperature.h              | 4 ++--
 LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h | 6 +++---
 LUFA/Drivers/USB/LowLevel/Pipe.c              | 2 +-
 LUFA/ManPages/ChangeLog.txt                   | 2 ++
 4 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/LUFA/Drivers/Board/Temperature.h b/LUFA/Drivers/Board/Temperature.h
index 1a94d1416..ace3112c8 100644
--- a/LUFA/Drivers/Board/Temperature.h
+++ b/LUFA/Drivers/Board/Temperature.h
@@ -90,8 +90,8 @@
 				/** Initializes the temperature sensor driver, including setting up the appropriate ADC channel.
 				 *  This must be called before any other temperature sensor routines.
 				 *
-				 *  The ADC itself (not the ADC channel) must be configured separately before calling the temperature
-				 *  sensor functions.
+				 *  \note The ADC itself (not the ADC channel) must be configured separately before calling the
+				 *        temperature sensor functions.
 				 */
 				static inline void Temperature_Init(void);
 			#else
diff --git a/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h b/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h
index 3c51393f1..84a6f0cf0 100644
--- a/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h
+++ b/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h
@@ -109,7 +109,7 @@
 			 *
 			 *  \see \ref USB_GetNextDescriptorComp function for more details
 			 */
-			typedef uint8_t (* const ConfigComparatorPtr_t)(void* const);
+			typedef uint8_t (* const ConfigComparatorPtr_t)(void*);
 
 		/* Function Prototypes: */
 			/** Searches for the next descriptor in the given configuration descriptor using a premade comparator
@@ -263,8 +263,8 @@
 			{
 				uint16_t CurrDescriptorSize = DESCRIPTOR_CAST(*CurrConfigLoc, USB_Descriptor_Header_t).Size;
 
-				*((uint8_t**)CurrConfigLoc) += CurrDescriptorSize;
-				*BytesRem                   -= CurrDescriptorSize;
+				*CurrConfigLoc += CurrDescriptorSize;
+				*BytesRem      -= CurrDescriptorSize;
 			}
 			
 	/* Disable C linkage for C++ Compilers: */
diff --git a/LUFA/Drivers/USB/LowLevel/Pipe.c b/LUFA/Drivers/USB/LowLevel/Pipe.c
index 3f5272a36..ccab07413 100644
--- a/LUFA/Drivers/USB/LowLevel/Pipe.c
+++ b/LUFA/Drivers/USB/LowLevel/Pipe.c
@@ -78,7 +78,7 @@ bool Pipe_IsEndpointBound(const uint8_t EndpointAddress)
 	{
 		Pipe_SelectPipe(PNum);
 		
-		if (Pipe_IsConfigured() && (Pipe_BoundEndpointNumber() == EndpointAddress))
+		if (Pipe_IsConfigured() && (Pipe_BoundEndpointNumber() == (EndpointAddress & PIPE_EPNUM_MASK)))
 		  return true;
 	}
 	
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index 6a9155ba2..5cb786296 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -25,6 +25,8 @@
   *  - Added missing CDC_Host_CreateBlockingStream() function code to the CDC Host Class driver
   *  - Fixed incorrect values for REPORT_ITEM_TYPE_* enum values causing corrupt data in the HID Host Parser
   *  - Fixed misnamed SI_Host_USBTask() and SI_Host_ConfigurePipes() functions
+  *  - Fixed broken USB_GetNextDescriptor() function causing the descriptor to jump ahead double the expected amount
+  *  - Fixed Pipe_IsEndpointBound() not masking the given Endpoint Address against PIPE_EPNUM_MASK
   *
   *  \section Sec_ChangeLog091122 Version 091122
   *
-- 
GitLab