From 6928f17b640bc2060c7829ed67c797f37c3d92a0 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Tue, 28 Jul 2009 16:12:09 +0000
Subject: [PATCH] Extend the automatic serial number descriptor code to read
 out and send all 10 bytes (20 characters) of the internal serial number on
 supported AVRs, rather than just the first 6 bytes (12 characters).

---
 LUFA/Drivers/USB/LowLevel/DevChapter9.c | 6 +++---
 Projects/Magstripe/Descriptors.c        | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/LUFA/Drivers/USB/LowLevel/DevChapter9.c b/LUFA/Drivers/USB/LowLevel/DevChapter9.c
index 8de4bd6a8..793b55f9b 100644
--- a/LUFA/Drivers/USB/LowLevel/DevChapter9.c
+++ b/LUFA/Drivers/USB/LowLevel/DevChapter9.c
@@ -232,10 +232,10 @@ static void USB_Device_GetInternalSerialDescriptor(void)
 	struct
 	{
 		USB_Descriptor_Header_t Header;
-		int16_t                 UnicodeString[12];
+		int16_t                 UnicodeString[20];
 	} SignatureDescriptor;
 	
-	uint8_t SigReadAddress  = 0x0E;		
+	uint8_t SigReadAddress  = 0x0E;
 	bool    OddNibbleRead   = false;
 
 	#if defined(USE_NONSTANDARD_DESCRIPTOR_NAMES)
@@ -246,7 +246,7 @@ static void USB_Device_GetInternalSerialDescriptor(void)
 		SignatureDescriptor.Header.bDescriptorType = DTYPE_String;
 	#endif
 
-	for (uint8_t SerialCharNum = 0; SerialCharNum < 12; SerialCharNum++)
+	for (uint8_t SerialCharNum = 0; SerialCharNum < 20; SerialCharNum++)
 	{
 		uint8_t SerialByte = boot_signature_byte_get(SigReadAddress);
 		
diff --git a/Projects/Magstripe/Descriptors.c b/Projects/Magstripe/Descriptors.c
index 68c98ed34..7aa646613 100644
--- a/Projects/Magstripe/Descriptors.c
+++ b/Projects/Magstripe/Descriptors.c
@@ -93,7 +93,7 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 		
 	.ManufacturerStrIndex   = 0x01,
 	.ProductStrIndex        = 0x02,
-	.SerialNumStrIndex      = NO_DESCRIPTOR,
+	.SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 		
 	.NumberOfConfigurations = 1
 };
-- 
GitLab