From 41b54a2acd2d5515cc7f3f1ed1c3d3b17d1988a1 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Thu, 30 Jul 2009 11:03:58 +0000
Subject: [PATCH] Set all CDC and MassStorage device mode demos (LowLevel and
 ClassDriver) to use the USE_INTERNAL_SERIAL feature, add compile time
 warnings for devices which do not have an internal serial.

---
 Demos/Device/ClassDriver/CDC/Descriptors.h    |  4 ++++
 .../Device/ClassDriver/DualCDC/Descriptors.h  |  4 ++++
 .../ClassDriver/MassStorage/Descriptors.h     |  7 ++++++-
 .../ClassDriver/USBtoSerial/Descriptors.h     |  4 ++++
 Demos/Device/LowLevel/CDC/Descriptors.c       |  2 +-
 Demos/Device/LowLevel/CDC/Descriptors.h       |  4 ++++
 Demos/Device/LowLevel/DualCDC/Descriptors.c   |  2 +-
 Demos/Device/LowLevel/DualCDC/Descriptors.h   |  4 ++++
 .../Device/LowLevel/MassStorage/Descriptors.c | 20 +------------------
 .../Device/LowLevel/MassStorage/Descriptors.h |  4 ++++
 .../Device/LowLevel/USBtoSerial/Descriptors.c |  2 +-
 .../Device/LowLevel/USBtoSerial/Descriptors.h |  4 ++++
 12 files changed, 38 insertions(+), 23 deletions(-)

diff --git a/Demos/Device/ClassDriver/CDC/Descriptors.h b/Demos/Device/ClassDriver/CDC/Descriptors.h
index 33ceab9c5..a764b2b32 100644
--- a/Demos/Device/ClassDriver/CDC/Descriptors.h
+++ b/Demos/Device/ClassDriver/CDC/Descriptors.h
@@ -41,6 +41,10 @@
 
 		#include <LUFA/Drivers/USB/USB.h>
 		#include <LUFA/Drivers/USB/Class/CDC.h>
+		
+		#if (USE_INTERNAL_SERIAL == NO_DESCRIPTOR)
+			#warning USE_INTERNAL_SERIAL is not available on this AVR - please manually construct a device serial descriptor.
+		#endif
 
 	/* Macros: */
 		/** Endpoint number of the CDC device-to-host notification IN endpoint. */
diff --git a/Demos/Device/ClassDriver/DualCDC/Descriptors.h b/Demos/Device/ClassDriver/DualCDC/Descriptors.h
index 49befad38..739303edd 100644
--- a/Demos/Device/ClassDriver/DualCDC/Descriptors.h
+++ b/Demos/Device/ClassDriver/DualCDC/Descriptors.h
@@ -42,6 +42,10 @@
 		#include <LUFA/Drivers/USB/USB.h>
 		#include <LUFA/Drivers/USB/Class/CDC.h>
 
+		#if (USE_INTERNAL_SERIAL == NO_DESCRIPTOR)
+			#warning USE_INTERNAL_SERIAL is not available on this AVR - please manually construct a device serial descriptor.
+		#endif
+
 	/* Macros: */
 		/** Endpoint number of the first CDC interface's device-to-host notification IN endpoint. */
 		#define CDC1_NOTIFICATION_EPNUM        3
diff --git a/Demos/Device/ClassDriver/MassStorage/Descriptors.h b/Demos/Device/ClassDriver/MassStorage/Descriptors.h
index 0fa147b75..5cf653a56 100644
--- a/Demos/Device/ClassDriver/MassStorage/Descriptors.h
+++ b/Demos/Device/ClassDriver/MassStorage/Descriptors.h
@@ -37,9 +37,14 @@
 #define _DESCRIPTORS_H_
 
 	/* Includes: */
+		#include <avr/pgmspace.h>
+
 		#include <LUFA/Drivers/USB/USB.h>
+		#include <LUFA/Drivers/USB/Class/MassStorage.h>
 
-		#include <avr/pgmspace.h>
+		#if (USE_INTERNAL_SERIAL == NO_DESCRIPTOR)
+			#warning USE_INTERNAL_SERIAL is not available on this AVR - please manually construct a device serial descriptor.
+		#endif
 
 	/* Macros: */
 		/** Endpoint number of the Mass Storage device-to-host data IN endpoint. */
diff --git a/Demos/Device/ClassDriver/USBtoSerial/Descriptors.h b/Demos/Device/ClassDriver/USBtoSerial/Descriptors.h
index 730acc601..f78f395a3 100644
--- a/Demos/Device/ClassDriver/USBtoSerial/Descriptors.h
+++ b/Demos/Device/ClassDriver/USBtoSerial/Descriptors.h
@@ -42,6 +42,10 @@
 		#include <LUFA/Drivers/USB/USB.h>
 		#include <LUFA/Drivers/USB/Class/CDC.h>
 
+		#if (USE_INTERNAL_SERIAL == NO_DESCRIPTOR)
+			#warning USE_INTERNAL_SERIAL is not available on this AVR - please manually construct a device serial descriptor.
+		#endif
+
 	/* Macros: */
 		/** Endpoint number of the CDC device-to-host notification IN endpoint. */
 		#define CDC_NOTIFICATION_EPNUM         2
diff --git a/Demos/Device/LowLevel/CDC/Descriptors.c b/Demos/Device/LowLevel/CDC/Descriptors.c
index 03e688277..581c1c407 100644
--- a/Demos/Device/LowLevel/CDC/Descriptors.c
+++ b/Demos/Device/LowLevel/CDC/Descriptors.c
@@ -59,7 +59,7 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 		
 	.ManufacturerStrIndex   = 0x01,
 	.ProductStrIndex        = 0x02,
-	.SerialNumStrIndex      = NO_DESCRIPTOR,
+	.SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 		
 	.NumberOfConfigurations = 1
 };
diff --git a/Demos/Device/LowLevel/CDC/Descriptors.h b/Demos/Device/LowLevel/CDC/Descriptors.h
index bf9e7df1d..a3d101e8b 100644
--- a/Demos/Device/LowLevel/CDC/Descriptors.h
+++ b/Demos/Device/LowLevel/CDC/Descriptors.h
@@ -41,6 +41,10 @@
 
 		#include <avr/pgmspace.h>
 
+		#if (USE_INTERNAL_SERIAL == NO_DESCRIPTOR)
+			#warning USE_INTERNAL_SERIAL is not available on this AVR - please manually construct a device serial descriptor.
+		#endif
+		
 	/* Macros: */
 		/** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a
 		 *  uniform structure but variable sized data payloads, thus cannot be represented accurately by
diff --git a/Demos/Device/LowLevel/DualCDC/Descriptors.c b/Demos/Device/LowLevel/DualCDC/Descriptors.c
index 64aed7d5f..d3710c1b4 100644
--- a/Demos/Device/LowLevel/DualCDC/Descriptors.c
+++ b/Demos/Device/LowLevel/DualCDC/Descriptors.c
@@ -59,7 +59,7 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 		
 	.ManufacturerStrIndex   = 0x01,
 	.ProductStrIndex        = 0x02,
-	.SerialNumStrIndex      = NO_DESCRIPTOR,
+	.SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 		
 	.NumberOfConfigurations = 1
 };
diff --git a/Demos/Device/LowLevel/DualCDC/Descriptors.h b/Demos/Device/LowLevel/DualCDC/Descriptors.h
index aa95b8a4c..781ba5c31 100644
--- a/Demos/Device/LowLevel/DualCDC/Descriptors.h
+++ b/Demos/Device/LowLevel/DualCDC/Descriptors.h
@@ -41,6 +41,10 @@
 
 		#include <avr/pgmspace.h>
 
+		#if (USE_INTERNAL_SERIAL == NO_DESCRIPTOR)
+			#warning USE_INTERNAL_SERIAL is not available on this AVR - please manually construct a device serial descriptor.
+		#endif
+		
 	/* Macros: */
 		/** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a
 		 *  uniform structure but variable sized data payloads, thus cannot be represented accurately by
diff --git a/Demos/Device/LowLevel/MassStorage/Descriptors.c b/Demos/Device/LowLevel/MassStorage/Descriptors.c
index 6c02a6c55..13d18a69d 100644
--- a/Demos/Device/LowLevel/MassStorage/Descriptors.c
+++ b/Demos/Device/LowLevel/MassStorage/Descriptors.c
@@ -59,7 +59,7 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 		
 	.ManufacturerStrIndex   = 0x01,
 	.ProductStrIndex        = 0x02,
-	.SerialNumStrIndex      = 0x03,
+	.SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 		
 	.NumberOfConfigurations = 1
 };
@@ -156,20 +156,6 @@ USB_Descriptor_String_t PROGMEM ProductString =
 	.UnicodeString          = L"LUFA Mass Storage Demo"
 };
 
-/** Serial number descriptor string. This is a Unicode string containing a string of HEX characters at least 12
- *  digits in length to uniquely identify a device when concatenated with the device's Vendor and Product IDs. By
- *  using the unique serial number string to identify a device, the device drivers do not need to be reinstalled
- *  each time the device is inserted into a different USB port on the same system. <b>This should be unique between
- *  devices, or conflicts will occur if two devices sharing the same serial number are inserted into the same system
- *  at the same time.</b>
- */
-USB_Descriptor_String_t PROGMEM SerialNumberString =
-{
-	.Header                 = {.Size = USB_STRING_LEN(12), .Type = DTYPE_String},
-		
-	.UnicodeString          = L"000000000000"
-};
-
 /** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
  *  documentation) by the application code so that the address and size of a requested descriptor can be given
  *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
@@ -209,10 +195,6 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex,
 					Address = (void*)&ProductString;
 					Size    = pgm_read_byte(&ProductString.Header.Size);
 					break;
-				case 0x03: 
-					Address = (void*)&SerialNumberString;
-					Size    = pgm_read_byte(&SerialNumberString.Header.Size);
-					break;
 			}
 			
 			break;
diff --git a/Demos/Device/LowLevel/MassStorage/Descriptors.h b/Demos/Device/LowLevel/MassStorage/Descriptors.h
index 0fa147b75..9b9dd7d31 100644
--- a/Demos/Device/LowLevel/MassStorage/Descriptors.h
+++ b/Demos/Device/LowLevel/MassStorage/Descriptors.h
@@ -41,6 +41,10 @@
 
 		#include <avr/pgmspace.h>
 
+		#if (USE_INTERNAL_SERIAL == NO_DESCRIPTOR)
+			#warning USE_INTERNAL_SERIAL is not available on this AVR - please manually construct a device serial descriptor.
+		#endif
+
 	/* Macros: */
 		/** Endpoint number of the Mass Storage device-to-host data IN endpoint. */
 		#define MASS_STORAGE_IN_EPNUM          3	
diff --git a/Demos/Device/LowLevel/USBtoSerial/Descriptors.c b/Demos/Device/LowLevel/USBtoSerial/Descriptors.c
index 088ab5940..c586d68cc 100644
--- a/Demos/Device/LowLevel/USBtoSerial/Descriptors.c
+++ b/Demos/Device/LowLevel/USBtoSerial/Descriptors.c
@@ -59,7 +59,7 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
 		
 	.ManufacturerStrIndex   = 0x01,
 	.ProductStrIndex        = 0x02,
-	.SerialNumStrIndex      = NO_DESCRIPTOR,
+	.SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 		
 	.NumberOfConfigurations = 1
 };
diff --git a/Demos/Device/LowLevel/USBtoSerial/Descriptors.h b/Demos/Device/LowLevel/USBtoSerial/Descriptors.h
index bf9e7df1d..a3d101e8b 100644
--- a/Demos/Device/LowLevel/USBtoSerial/Descriptors.h
+++ b/Demos/Device/LowLevel/USBtoSerial/Descriptors.h
@@ -41,6 +41,10 @@
 
 		#include <avr/pgmspace.h>
 
+		#if (USE_INTERNAL_SERIAL == NO_DESCRIPTOR)
+			#warning USE_INTERNAL_SERIAL is not available on this AVR - please manually construct a device serial descriptor.
+		#endif
+		
 	/* Macros: */
 		/** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a
 		 *  uniform structure but variable sized data payloads, thus cannot be represented accurately by
-- 
GitLab