From cb7884da506096352ad82a1317b998813b74f4f8 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Tue, 7 Apr 2009 04:19:57 +0000
Subject: [PATCH] Added preprocessor checks and documentation to the
 bootloaders giving information about missing SIGNATURE_x defines due to
 outdated avr-libc versions.

---
 Bootloaders/CDC/BootloaderCDC.h            |  5 +++++
 Bootloaders/CDC/BootloaderCDC.txt          | 13 ++++++++++---
 Bootloaders/DFU/BootloaderDFU.h            |  7 ++++++-
 Bootloaders/DFU/BootloaderDFU.txt          |  7 +++++++
 Demos/Device/MassStorage/MassStorage.c     |  2 +-
 Demos/Device/RNDISEthernet/RNDIS.h         |  4 ++--
 Demos/Device/RNDISEthernet/RNDISEthernet.c |  4 ++--
 LUFA/ChangeLog.txt                         |  4 +++-
 8 files changed, 36 insertions(+), 10 deletions(-)

diff --git a/Bootloaders/CDC/BootloaderCDC.h b/Bootloaders/CDC/BootloaderCDC.h
index dce84a5f8..7669b836c 100644
--- a/Bootloaders/CDC/BootloaderCDC.h
+++ b/Bootloaders/CDC/BootloaderCDC.h
@@ -48,6 +48,11 @@
 
 		#include <LUFA/Drivers/USB/USB.h>                // USB Functionality
 
+	/* Preprocessor Checks: */
+		#if !defined(SIGNATURE_0) || !defined(SIGNATURE_1) || !defined(SIGNATURE_2)
+			#error Device signature byte constants are not defined due to outdated avr-libc version. See demo documentation.
+		#endif
+
 	/* Macros: */
 		/** CDC Class Specific request to get the line encoding on a CDC-ACM virtual serial port, including the
 		 *  baud rate, parity, stop bits and data bits.
diff --git a/Bootloaders/CDC/BootloaderCDC.txt b/Bootloaders/CDC/BootloaderCDC.txt
index 1f8970d57..1122e73ae 100644
--- a/Bootloaders/CDC/BootloaderCDC.txt
+++ b/Bootloaders/CDC/BootloaderCDC.txt
@@ -50,9 +50,16 @@
  *
  *  <table>
  *   <tr>
- *    <td>
- *     None
- *    </td>
+ *    <td><b>Define Name:</b></td>
+ *    <td><b>Location:</b></td>
+ *    <td><b>Description:</b></td>
+ *   </tr>
+ *   <tr>
+ *    <td>SIGNATURE_0, SIGNATURE_1, SIGNATURE_2</td>
+ *    <td>Makefile CDEFS</td>
+ *    <td>AVR part signature bytes. These are normally defined as part of the AVR device header files in recent avr-libc
+ *        distributions. If your avr-libc library is out of date and does not define these values, you can define them
+ *        manually in the makefile CDEFS.</td>
  *   </tr>
  *  </table>
  */
\ No newline at end of file
diff --git a/Bootloaders/DFU/BootloaderDFU.h b/Bootloaders/DFU/BootloaderDFU.h
index d0a825443..e996f2b79 100644
--- a/Bootloaders/DFU/BootloaderDFU.h
+++ b/Bootloaders/DFU/BootloaderDFU.h
@@ -48,7 +48,12 @@
 		#include "Descriptors.h"
 		
 		#include <LUFA/Drivers/USB/USB.h>                // USB Functionality
-		
+	
+	/* Preprocessor Checks: */
+		#if !defined(SIGNATURE_0) || !defined(SIGNATURE_1) || !defined(SIGNATURE_2)
+			#error Device signature byte constants are not defined due to outdated avr-libc version. See demo documentation.
+		#endif
+	
 	/* Macros: */
 		/** Configuration define. Define this token to true to case the bootloader to reject all memory commands
 		 *  until a memory erase has been performed. When used in conjunction with the lockbits of the AVR, this
diff --git a/Bootloaders/DFU/BootloaderDFU.txt b/Bootloaders/DFU/BootloaderDFU.txt
index 7107cc123..44158ed07 100644
--- a/Bootloaders/DFU/BootloaderDFU.txt
+++ b/Bootloaders/DFU/BootloaderDFU.txt
@@ -73,5 +73,12 @@
  *        erase has been perfomed. This can be used in conjunction with the AVR's lockbits to prevent the AVRs firmware from
  *        being dumped by unauthorized persons.</td>
  *   </tr>
+ *   <tr>
+ *    <td>SIGNATURE_0, SIGNATURE_1, SIGNATURE_2</td>
+ *    <td>Makefile CDEFS</td>
+ *    <td>AVR part signature bytes. These are normally defined as part of the AVR device header files in recent avr-libc
+ *        distributions. If your avr-libc library is out of date and does not define these values, you can define them
+ *        manually in the makefile CDEFS.</td>
+ *   </tr>
  *  </table>
  */
\ No newline at end of file
diff --git a/Demos/Device/MassStorage/MassStorage.c b/Demos/Device/MassStorage/MassStorage.c
index 403264835..56bc19a94 100644
--- a/Demos/Device/MassStorage/MassStorage.c
+++ b/Demos/Device/MassStorage/MassStorage.c
@@ -386,7 +386,7 @@ STREAM_CALLBACK(AbortOnMassStoreReset)
 /** ISR for the general Pipe/Endpoint interrupt vector. This ISR fires when a control request has been issued to the control endpoint,
  *  so that the request can be processed. As several elements of the Mass Storage implementation require asynchronous control requests
  *  (such as endpoint stall clearing and Mass Storage Reset requests during data transfers) this is done via interrupts rather than
- *  polling.
+ *  polling so that they can be processed regardless of the rest of the application's state.
  */
 ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)
 {
diff --git a/Demos/Device/RNDISEthernet/RNDIS.h b/Demos/Device/RNDISEthernet/RNDIS.h
index 0d240ac4e..88c9a9eb9 100644
--- a/Demos/Device/RNDISEthernet/RNDIS.h
+++ b/Demos/Device/RNDISEthernet/RNDIS.h
@@ -55,10 +55,10 @@
 		#define REMOTE_NDIS_VERSION_MINOR             0x00
 	
 		/** RNDIS request to issue a host-to-device NDIS command */
-		#define SEND_ENCAPSULATED_COMMAND             0x00
+		#define REQ_SendEncapsulatedCommand           0x00
 
 		/** RNDIS request to issue a device-to-host NDIS response */
-		#define GET_ENCAPSULATED_RESPONSE             0x01
+		#define REQ_GetEncapsulatedResponse           0x01
 		
 	/* Enums: */
 		/** Enum for the possible NDIS adapter states. */
diff --git a/Demos/Device/RNDISEthernet/RNDISEthernet.c b/Demos/Device/RNDISEthernet/RNDISEthernet.c
index 98863a113..78c77c8eb 100644
--- a/Demos/Device/RNDISEthernet/RNDISEthernet.c
+++ b/Demos/Device/RNDISEthernet/RNDISEthernet.c
@@ -158,7 +158,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket)
 	/* Process RNDIS class commands */
 	switch (bRequest)
 	{
-		case SEND_ENCAPSULATED_COMMAND:
+		case REQ_SendEncapsulatedCommand:
 			if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
 			{
 				/* Clear the SETUP packet, ready for data transfer */
@@ -175,7 +175,7 @@ EVENT_HANDLER(USB_UnhandledControlPacket)
 			}
 			
 			break;
-		case GET_ENCAPSULATED_RESPONSE:
+		case REQ_GetEncapsulatedResponse:
 			if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
 			{
 				/* Check if a response to the last message is ready */
diff --git a/LUFA/ChangeLog.txt b/LUFA/ChangeLog.txt
index b4ecc8951..0b15df0b2 100644
--- a/LUFA/ChangeLog.txt
+++ b/LUFA/ChangeLog.txt
@@ -17,11 +17,13 @@
   *  - Added new PIMA_DATA_SIZE() define to the Still Image Host demo
   *  - Add call to MassStore_WaitForDataReceived() in MassStore_GetReturnedStatus() to ensure that the CSW has been received in the
   *    extended MSC timeout period before continuing, to prevent long processing delays from causing the MassStore_GetReturnedStatus()
-  *    to early-abort
+  *    to early-abort (thanks to Dmitry Maksimov)
   *  - Move StdRequestType.h, StreamCallbacks.h, USBMode.h from the LowLevel USB driver directory to the HighLevel USB driver directory,
   *    where they are more suited
   *  - Removed all binary constants and replaced with decimal or hexadecimal constants so that unpatched GCC compilers can still build the
   *    code without having to be itself patched and recompiled first
+  *  - Added preprocessor checks and documentation to the bootloaders giving information about missing SIGNATURE_x defines due to
+  *    outdated avr-libc versions.
   *
   *  \section Sec_ChangeLog090401 Version 090401
   *
-- 
GitLab