From e95c96ea20117dbf43bd37e4abb5bad974f30816 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Sun, 30 May 2010 07:29:18 +0000
Subject: [PATCH] Fixed internal device serial not being accessible on the
 ATMEGAXXU2 AVRs (thanks to Axel Rohde).

---
 LUFA/Drivers/USB/HighLevel/StdDescriptors.h | 5 ++++-
 LUFA/Drivers/USB/LowLevel/DevChapter9.c     | 4 ++--
 LUFA/Drivers/USB/LowLevel/DevChapter9.h     | 2 +-
 LUFA/ManPages/ChangeLog.txt                 | 1 +
 4 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/LUFA/Drivers/USB/HighLevel/StdDescriptors.h b/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
index 9764b45ad..db40bc574 100644
--- a/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
+++ b/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
@@ -80,7 +80,10 @@
 			 */
 			#define NO_DESCRIPTOR                     0
 
-			#if (!defined(NO_INTERNAL_SERIAL) && (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))) || defined(__DOXYGEN__)
+			#if (!defined(NO_INTERNAL_SERIAL) && \
+			     (defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__) || \
+			      defined(__AVR_ATmega32U6__) || defined(__AVR_AT90USB646__)  || defined(__AVR_AT90USB1286__) ||  \
+			      defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U2__)  || defined(__AVR_ATmega8U2__)))
 				/** String descriptor index for the device's unique serial number string descriptor within the device.
 				 *  This unique serial number is used by the host to associate resources to the device (such as drivers or COM port
 				 *  number allocations) to a device regardless of the port it is plugged in to on the host. Some USB AVRs contain
diff --git a/LUFA/Drivers/USB/LowLevel/DevChapter9.c b/LUFA/Drivers/USB/LowLevel/DevChapter9.c
index 1529b6f13..544531b8d 100644
--- a/LUFA/Drivers/USB/LowLevel/DevChapter9.c
+++ b/LUFA/Drivers/USB/LowLevel/DevChapter9.c
@@ -208,7 +208,7 @@ void USB_Device_GetConfiguration(void)
 	Endpoint_ClearStatusStage();
 }
 
-#if !defined(NO_INTERNAL_SERIAL) && (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
+#if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR)
 static char USB_Device_NibbleToASCII(uint8_t Nibble)
 {
 	Nibble = ((Nibble & 0x0F) + '0');
@@ -261,7 +261,7 @@ static void USB_Device_GetDescriptor(void)
 	uint8_t  DescriptorAddressSpace;
 	#endif
 	
-	#if !defined(NO_INTERNAL_SERIAL) && (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
+	#if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR)
 	if (USB_ControlRequest.wValue == ((DTYPE_String << 8) | USE_INTERNAL_SERIAL))
 	{
 		USB_Device_GetInternalSerialDescriptor();
diff --git a/LUFA/Drivers/USB/LowLevel/DevChapter9.h b/LUFA/Drivers/USB/LowLevel/DevChapter9.h
index 7bafcbfb3..41246ec38 100644
--- a/LUFA/Drivers/USB/LowLevel/DevChapter9.h
+++ b/LUFA/Drivers/USB/LowLevel/DevChapter9.h
@@ -149,7 +149,7 @@
 				static void USB_Device_GetStatus(void);
 				static void USB_Device_ClearSetFeature(void);
 				
-				#if !defined(NO_INTERNAL_SERIAL) && (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
+				#if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR)
 					static char USB_Device_NibbleToASCII(uint8_t Nibble) ATTR_ALWAYS_INLINE;
 					static void USB_Device_GetInternalSerialDescriptor(void);
 				#endif				
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index 97a49c26e..c123116c7 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -30,6 +30,7 @@
   *    an overflow in the checksum calculation loop (thanks to Kevin Malec)
   *  - Fixed XPLAINBridge project not correctly reading the XMEGA's supply voltage when reporting back to the host
   *  - Fixed incorrect signature for the ATMEGA32U2 in the DFU bootloader (thanks to Axel Rohde)
+  *  - Fixed internal device serial not being accessible on the ATMEGAXXU2 AVRs (thanks to Axel Rohde)
   *
   *  \section Sec_ChangeLog100513 Version 100513
   *  <b>New:</b>
-- 
GitLab