From 852b5e612d549d1f086ceca4df0b589ac24cb37f Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Sun, 10 Apr 2011 06:43:02 +0000
Subject: [PATCH] Remove redundant type information for bitfield elements,
 other than the signed/unsignedness of the element.

Change type of USB_SelectedPipe and USB_SelectedEndpoint for the AVR32 UC3 architecture to uint32_t to reduce the compiled code size.
---
 .../Device/ClassDriver/RNDISEthernet/Lib/IP.h | 24 ++---
 .../ClassDriver/RNDISEthernet/Lib/TCP.h       |  4 +-
 .../Incomplete/Sideshow/Lib/SideshowCommon.h  | 20 ++--
 .../TestAndMeasurement/TestAndMeasurement.h   | 20 ++--
 Demos/Device/LowLevel/MassStorage/Lib/SCSI.h  | 92 +++++++++----------
 Demos/Device/LowLevel/RNDISEthernet/Lib/IP.h  | 24 ++---
 Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h |  4 +-
 .../BluetoothHost/Lib/RFCOMMControl.h         | 28 +++---
 LUFA/Common/Common.h                          | 46 ++++++----
 LUFA/Drivers/USB/Class/Common/MIDI.h          | 10 +-
 LUFA/Drivers/USB/Class/Common/MassStorage.h   | 92 +++++++++----------
 LUFA/Drivers/USB/Class/Device/MIDI.h          |  1 +
 LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c      |  2 +-
 LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.h      |  2 +-
 LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c          |  2 +-
 LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h          |  2 +-
 LUFA/ManPages/LUFAPoweredProjects.txt         |  1 +
 Projects/TempDataLogger/Lib/DS1307.h          | 40 ++++----
 18 files changed, 213 insertions(+), 201 deletions(-)

diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.h b/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.h
index c613c082f..1891ef47b 100644
--- a/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.h
+++ b/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.h
@@ -72,21 +72,21 @@
 		/** Type define of an IP packet header. */
 		typedef struct
 		{
-			unsigned char  HeaderLength   : 4; /**< Total length of the packet header, in 4-byte blocks */
-			unsigned char  Version        : 4; /**< IP protocol version */
-			uint8_t        TypeOfService; /**< Special service type identifier, indicating delay/throughput/reliability levels */
-			uint16_t       TotalLength; /**< Total length of the IP packet, in bytes */
+			unsigned     HeaderLength   : 4; /**< Total length of the packet header, in 4-byte blocks */
+			unsigned     Version        : 4; /**< IP protocol version */
+			uint8_t      TypeOfService; /**< Special service type identifier, indicating delay/throughput/reliability levels */
+			uint16_t     TotalLength; /**< Total length of the IP packet, in bytes */
 
-			uint16_t       Identification; /**< Identification value for identifying fragmented packets */
-			unsigned int   FragmentOffset : 13; /**< Offset of this IP fragment */
-			unsigned int   Flags          : 3; /**< Fragment flags, to indicate if a packet is fragmented */
+			uint16_t     Identification; /**< Identification value for identifying fragmented packets */
+			unsigned     FragmentOffset : 13; /**< Offset of this IP fragment */
+			unsigned     Flags          : 3; /**< Fragment flags, to indicate if a packet is fragmented */
 
-			uint8_t        TTL; /**< Maximum allowable number of hops to reach the packet destination */
-			uint8_t        Protocol; /**< Encapsulated protocol type */
-			uint16_t       HeaderChecksum; /**< Ethernet checksum of the IP header */
+			uint8_t      TTL; /**< Maximum allowable number of hops to reach the packet destination */
+			uint8_t      Protocol; /**< Encapsulated protocol type */
+			uint16_t     HeaderChecksum; /**< Ethernet checksum of the IP header */
 
-			IP_Address_t  SourceAddress; /**< Source protocol IP address of the packet */
-			IP_Address_t  DestinationAddress; /**< Destination protocol IP address of the packet */
+			IP_Address_t SourceAddress; /**< Source protocol IP address of the packet */
+			IP_Address_t DestinationAddress; /**< Destination protocol IP address of the packet */
 		} IP_Header_t;
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.h b/Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.h
index f14b70e86..cbb3c6eec 100644
--- a/Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.h
+++ b/Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.h
@@ -218,8 +218,8 @@
 			uint32_t               SequenceNumber; /**< Data sequence number of the packet */
 			uint32_t               AcknowledgmentNumber; /**< Data acknowledgment number of the packet */
 
-			unsigned char          Reserved : 4; /**< Reserved, must be all 0 */
-			unsigned char          DataOffset : 4; /**< Offset of the data from the start of the header, in 4 byte chunks */
+			unsigned               Reserved : 4; /**< Reserved, must be all 0 */
+			unsigned               DataOffset : 4; /**< Offset of the data from the start of the header, in 4 byte chunks */
 			uint8_t                Flags; /**< TCP packet flags */
 			uint16_t               WindowSize; /**< Current data window size (bytes remaining in reception buffer) */
 
diff --git a/Demos/Device/Incomplete/Sideshow/Lib/SideshowCommon.h b/Demos/Device/Incomplete/Sideshow/Lib/SideshowCommon.h
index 6d1110c7c..794b91e9e 100644
--- a/Demos/Device/Incomplete/Sideshow/Lib/SideshowCommon.h
+++ b/Demos/Device/Incomplete/Sideshow/Lib/SideshowCommon.h
@@ -65,13 +65,13 @@
 	/* Type Defines: */
 		typedef struct
 		{
-			uint32_t         Chunks[4];
+			uint32_t Chunks[4];
 		} GUID_t;
 
 		typedef struct
 		{
-			uint16_t         LengthInBytes;
-			int              UnicodeString[];
+			uint16_t LengthInBytes;
+			int      UnicodeString[];
 		} Unicode_String_t;
 
 		typedef union
@@ -80,19 +80,19 @@
 
 			struct
 			{
-				uint8_t TypeBytes[3];
+				uint8_t  TypeBytes[3];
 
-				int ErrorCode     : 6;
-				int NAK           : 1;
-				int Response      : 1;
+				unsigned ErrorCode     : 6;
+				unsigned NAK           : 1;
+				unsigned Response      : 1;
 			} TypeFields;
 		} SideShowPacketType_t;
 
 		typedef struct
 		{
-			uint32_t               Length;
-			SideShowPacketType_t   Type;
-			uint16_t               Number;
+			uint32_t             Length;
+			SideShowPacketType_t Type;
+			uint16_t             Number;
 		} SideShow_PacketHeader_t;
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h
index 42e659882..53f32a2ae 100644
--- a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h
+++ b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h
@@ -90,16 +90,16 @@
 			
 			struct
 			{
-				unsigned char ListenOnly             : 1;
-				unsigned char TalkOnly               : 1;
-				unsigned char PulseIndicateSupported : 1;
-				unsigned char Reserved               : 5;
+				unsigned ListenOnly             : 1;
+				unsigned TalkOnly               : 1;
+				unsigned PulseIndicateSupported : 1;
+				unsigned Reserved               : 5;
 			} Interface;
 			
 			struct
 			{
-				unsigned char SupportsAbortINOnMatch : 1;
-				unsigned char Reserved               : 7;
+				unsigned SupportsAbortINOnMatch : 1;
+				unsigned Reserved               : 7;
 			} Device;
 			
 			uint8_t Reserved2[6];
@@ -108,16 +108,16 @@
 		
 		typedef struct
 		{
-			unsigned char LastMessageTransaction : 1;
-			unsigned char Reserved               : 7;
+			unsigned LastMessageTransaction     : 1;
+			unsigned Reserved                   : 7;
 
 			uint8_t Reserved2[3];
 		} TMC_DevOUTMessageHeader_t;
 
 		typedef struct
 		{
-			unsigned char TermCharEnabled        : 1;
-			unsigned char Reserved               : 7;
+			unsigned TermCharEnabled            : 1;
+			unsigned Reserved                   : 7;
 
 			uint8_t TermChar;
 			uint8_t Reserved2[2];
diff --git a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h
index 76efd1727..a9d96f43b 100644
--- a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h
+++ b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h
@@ -79,35 +79,35 @@
 		 */
 		typedef struct
 		{
-			unsigned char DeviceType          : 5;
-			unsigned char PeripheralQualifier : 3;
-
-			unsigned char Reserved            : 7;
-			unsigned char Removable           : 1;
-
-			uint8_t       Version;
-
-			unsigned char ResponseDataFormat  : 4;
-			unsigned char Reserved2           : 1;
-			unsigned char NormACA             : 1;
-			unsigned char TrmTsk              : 1;
-			unsigned char AERC                : 1;
-
-			uint8_t       AdditionalLength;
-			uint8_t       Reserved3[2];
-
-			unsigned char SoftReset           : 1;
-			unsigned char CmdQue              : 1;
-			unsigned char Reserved4           : 1;
-			unsigned char Linked              : 1;
-			unsigned char Sync                : 1;
-			unsigned char WideBus16Bit        : 1;
-			unsigned char WideBus32Bit        : 1;
-			unsigned char RelAddr             : 1;
-
-			uint8_t       VendorID[8];
-			uint8_t       ProductID[16];
-			uint8_t       RevisionID[4];
+			unsigned DeviceType          : 5;
+			unsigned PeripheralQualifier : 3;
+
+			unsigned Reserved            : 7;
+			unsigned Removable           : 1;
+
+			uint8_t  Version;
+
+			unsigned ResponseDataFormat  : 4;
+			unsigned Reserved2           : 1;
+			unsigned NormACA             : 1;
+			unsigned TrmTsk              : 1;
+			unsigned AERC                : 1;
+
+			uint8_t  AdditionalLength;
+			uint8_t  Reserved3[2];
+
+			unsigned SoftReset           : 1;
+			unsigned CmdQue              : 1;
+			unsigned Reserved4           : 1;
+			unsigned Linked              : 1;
+			unsigned Sync                : 1;
+			unsigned WideBus16Bit        : 1;
+			unsigned WideBus32Bit        : 1;
+			unsigned RelAddr             : 1;
+
+			uint8_t  VendorID[8];
+			uint8_t  ProductID[16];
+			uint8_t  RevisionID[4];
 		} MS_SCSI_Inquiry_Response_t;
 
 		/** Type define for a SCSI sense structure to a SCSI REQUEST SENSE command. For details of the
@@ -115,23 +115,23 @@
 		 */
 		typedef struct
 		{
-			uint8_t       ResponseCode;
-
-			uint8_t       SegmentNumber;
-
-			unsigned char SenseKey            : 4;
-			unsigned char Reserved            : 1;
-			unsigned char ILI                 : 1;
-			unsigned char EOM                 : 1;
-			unsigned char FileMark            : 1;
-
-			uint8_t       Information[4];
-			uint8_t       AdditionalLength;
-			uint8_t       CmdSpecificInformation[4];
-			uint8_t       AdditionalSenseCode;
-			uint8_t       AdditionalSenseQualifier;
-			uint8_t       FieldReplaceableUnitCode;
-			uint8_t       SenseKeySpecific[3];
+			uint8_t  ResponseCode;
+
+			uint8_t  SegmentNumber;
+
+			unsigned SenseKey            : 4;
+			unsigned Reserved            : 1;
+			unsigned ILI                 : 1;
+			unsigned EOM                 : 1;
+			unsigned FileMark            : 1;
+
+			uint8_t  Information[4];
+			uint8_t  AdditionalLength;
+			uint8_t  CmdSpecificInformation[4];
+			uint8_t  AdditionalSenseCode;
+			uint8_t  AdditionalSenseQualifier;
+			uint8_t  FieldReplaceableUnitCode;
+			uint8_t  SenseKeySpecific[3];
 		} MS_SCSI_Request_Sense_Response_t;
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.h
index fb6ed0400..0e875621a 100644
--- a/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.h
+++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.h
@@ -72,21 +72,21 @@
 		/** Type define of an IP packet header. */
 		typedef struct
 		{
-			unsigned char  HeaderLength   : 4; /**< Total length of the packet header, in 4-byte blocks */
-			unsigned char  Version        : 4; /**< IP protocol version */
-			uint8_t        TypeOfService; /**< Special service type identifier, indicating delay/throughput/reliability levels */
-			uint16_t       TotalLength; /**< Total length of the IP packet, in bytes */
+			unsigned     HeaderLength   : 4; /**< Total length of the packet header, in 4-byte blocks */
+			unsigned     Version        : 4; /**< IP protocol version */
+			uint8_t      TypeOfService; /**< Special service type identifier, indicating delay/throughput/reliability levels */
+			uint16_t     TotalLength; /**< Total length of the IP packet, in bytes */
 
-			uint16_t       Identification; /**< Identification value for identifying fragmented packets */
-			unsigned int   FragmentOffset : 13; /**< Offset of this IP fragment */
-			unsigned int   Flags          : 3; /**< Fragment flags, to indicate if a packet is fragmented */
+			uint16_t     Identification; /**< Identification value for identifying fragmented packets */
+			unsigned     FragmentOffset : 13; /**< Offset of this IP fragment */
+			unsigned     Flags          : 3; /**< Fragment flags, to indicate if a packet is fragmented */
 
-			uint8_t        TTL; /**< Maximum allowable number of hops to reach the packet destination */
-			uint8_t        Protocol; /**< Encapsulated protocol type */
-			uint16_t       HeaderChecksum; /**< Ethernet checksum of the IP header */
+			uint8_t      TTL; /**< Maximum allowable number of hops to reach the packet destination */
+			uint8_t      Protocol; /**< Encapsulated protocol type */
+			uint16_t     HeaderChecksum; /**< Ethernet checksum of the IP header */
 
-			IP_Address_t  SourceAddress; /**< Source protocol IP address of the packet */
-			IP_Address_t  DestinationAddress; /**< Destination protocol IP address of the packet */
+			IP_Address_t SourceAddress; /**< Source protocol IP address of the packet */
+			IP_Address_t DestinationAddress; /**< Destination protocol IP address of the packet */
 		} IP_Header_t;
 
 	/* Function Prototypes: */
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h
index 58574d8a6..373ff5baa 100644
--- a/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h
+++ b/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h
@@ -219,8 +219,8 @@
 			uint32_t               SequenceNumber; /**< Data sequence number of the packet */
 			uint32_t               AcknowledgmentNumber; /**< Data acknowledgment number of the packet */
 
-			unsigned char          Reserved   : 4; /**< Reserved, must be all 0 */
-			unsigned char          DataOffset : 4; /**< Offset of the data from the start of the header, in 4 byte chunks */
+			unsigned               Reserved   : 4; /**< Reserved, must be all 0 */
+			unsigned               DataOffset : 4; /**< Offset of the data from the start of the header, in 4 byte chunks */
 			uint8_t                Flags; /**< TCP packet flags */
 			uint16_t               WindowSize; /**< Current data window size (bytes remaining in reception buffer) */
 
diff --git a/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMMControl.h b/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMMControl.h
index 8ff633404..6242d51d9 100644
--- a/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMMControl.h
+++ b/Demos/Host/Incomplete/BluetoothHost/Lib/RFCOMMControl.h
@@ -77,9 +77,9 @@
 	/* Type Defines: */
 		typedef struct
 		{
-			unsigned char EA   : 1;
-			unsigned char CR   : 1;
-			unsigned char DLCI : 6;
+			unsigned EA   : 1;
+			unsigned CR   : 1;
+			unsigned DLCI : 6;
 		} RFCOMM_Address_t;
 
 		typedef struct
@@ -90,21 +90,21 @@
 
 		typedef struct
 		{
-			unsigned char EA      : 1;
-			unsigned char CR      : 1;
-			unsigned char Command : 6;
+			unsigned EA      : 1;
+			unsigned CR      : 1;
+			unsigned Command : 6;
 		} RFCOMM_Command_t;
 
 		typedef struct
 		{
-			uint8_t          DLCI;
-			unsigned char    FrameType        : 4;
-			unsigned char    ConvergenceLayer : 4;
-			uint8_t          Priority;
-			uint8_t          ACKTimerTicks;
-			uint16_t         MaximumFrameSize;
-			uint8_t          MaxRetransmissions;
-			uint8_t          RecoveryWindowSize;
+			uint8_t  DLCI;
+			unsigned FrameType        : 4;
+			unsigned ConvergenceLayer : 4;
+			uint8_t  Priority;
+			uint8_t  ACKTimerTicks;
+			uint16_t MaximumFrameSize;
+			uint8_t  MaxRetransmissions;
+			uint8_t  RecoveryWindowSize;
 		} RFCOMM_DPN_Parameters_t;
 
 		typedef struct
diff --git a/LUFA/Common/Common.h b/LUFA/Common/Common.h
index 93c7289c3..9d64403bc 100644
--- a/LUFA/Common/Common.h
+++ b/LUFA/Common/Common.h
@@ -99,7 +99,7 @@
 			#define pgm_read_byte(x)         *x
 			#define memcmp_P(...)            memcmp(__VA_ARGS__)
 			#define memcpy_P(...)            memcpy(__VA_ARGS__)
-			// ==================================================
+			// =================================================
 
 			typedef uint32_t uint_reg_t;
 			
@@ -159,6 +159,8 @@
 				 *  be set as a breakpoint in the resulting code. Useful for debugging purposes, where the optimiser
 				 *  removes/reorders code to the point where break points cannot reliably be set.
 				 *
+				 *  \note This macro is not available for all architectures.
+				 *
 				 *  \ingroup Group_Debugging
 				 */
 				#define JTAG_DEBUG_POINT()      __asm__ __volatile__ ("NOP" ::)
@@ -166,27 +168,17 @@
 				/** Defines an explicit JTAG break point in the resulting binary via the assembly \c BREAK statement. When
 				 *  a JTAG is used, this causes the program execution to halt when reached until manually resumed.
 				 *
+				 *  \note This macro is not available for all architectures.
+				 *
 				 *  \ingroup Group_Debugging
 				 */
 				#define JTAG_DEBUG_BREAK()      __asm__ __volatile__ ("BREAK" ::)
 
-				#if !defined(pgm_read_ptr) || defined(__DOXYGEN__)
-					/** Reads a pointer out of PROGMEM space on the AVR8 architecture. This is currently a wrapper for the
-					 *  avr-libc \c pgm_read_ptr() macro with a \c void* cast, so that its value can be assigned directly
-					 *  to a pointer variable or used in pointer arithmetic without further casting in C. In a future
-					 *  avr-libc distribution this will be part of the standard API and will be implemented in a more formal
-					 *  manner.
-					 *
-					 *  \param[in] Addr  Address of the pointer to read.
-					 *
-					 *  \return Pointer retrieved from PROGMEM space.
-					 */
-					#define pgm_read_ptr(Addr)    (void*)pgm_read_word(Addr)
-				#endif
-
 				/** Macro for testing condition "x" and breaking via \ref JTAG_DEBUG_BREAK() if the condition is false.
 				 *
-				 *  \param[in] Condition  Condition that will be evaluated,
+				 *  \note This macro is not available for all architectures.
+				 *
+				 *  \param[in] Condition  Condition that will be evaluated.
 				 *
 				 *  \ingroup Group_Debugging
 				*/
@@ -198,6 +190,8 @@
 				 *
 				 *  The output takes the form "{FILENAME}: Function {FUNCTION NAME}, Line {LINE NUMBER}: Assertion {Condition} failed."
 				 *
+				 *  \note This macro is not available for all architectures.
+				 *
 				 *  \param[in] Condition  Condition that will be evaluated,
 				 *
 				 *  \ingroup Group_Debugging
@@ -205,6 +199,22 @@
 				#define STDOUT_ASSERT(Condition)        MACROS{ if (!(x)) { printf_P(PSTR("%s: Function \"%s\", Line %d: "   \
 				                                                "Assertion \"%s\" failed.\r\n"),     \
 				                                                __FILE__, __func__, __LINE__, #Condition); } }MACROE
+
+				#if !defined(pgm_read_ptr) || defined(__DOXYGEN__)
+					/** Reads a pointer out of PROGMEM space on the AVR8 architecture. This is currently a wrapper for the
+					 *  avr-libc \c pgm_read_ptr() macro with a \c void* cast, so that its value can be assigned directly
+					 *  to a pointer variable or used in pointer arithmetic without further casting in C. In a future
+					 *  avr-libc distribution this will be part of the standard API and will be implemented in a more formal
+					 *  manner.
+					 *
+					 *  \note This macro is not available for all architectures.
+					 *
+					 *  \param[in] Address  Address of the pointer to read.
+					 *
+					 *  \return Pointer retrieved from PROGMEM space.
+					 */
+					#define pgm_read_ptr(Addr)          (void*)pgm_read_word(Address)
+				#endif
 			#endif
 			
 			/** Forces GCC to use pointer indirection (via the device's pointer register pairs) when accessing the given
@@ -231,8 +241,8 @@
 				 *  Interrupt handlers written using this macro may still need to be registered with the microcontroller's
 				 *  Interrupt Controller (if present) before they will properly handle incoming interrupt events.
 				 *
-				 *  \note This is supplied on some architectures where the standard library does not include a valid
-				 *        definition. If an existing definition exists, the definition here will be ignored.
+				 *  \note This macro is only supplied on some architectures, where the standard library does not include a valid
+				 *        definition. If an existing definition exists, the alternative definition here will be ignored.
 				 *
 				 *  \ingroup Group_GlobalInt
 				 *
diff --git a/LUFA/Drivers/USB/Class/Common/MIDI.h b/LUFA/Drivers/USB/Class/Common/MIDI.h
index 2525ccfca..1d6eb703d 100644
--- a/LUFA/Drivers/USB/Class/Common/MIDI.h
+++ b/LUFA/Drivers/USB/Class/Common/MIDI.h
@@ -272,12 +272,12 @@
 		 */
 		typedef struct
 		{
-			unsigned char Command     : 4; /**< Upper nibble of the MIDI command being sent or received in the event packet. */
-			unsigned char CableNumber : 4; /**< Virtual cable number of the event being sent or received in the given MIDI interface. */
+			unsigned Command     : 4; /**< Upper nibble of the MIDI command being sent or received in the event packet. */
+			unsigned CableNumber : 4; /**< Virtual cable number of the event being sent or received in the given MIDI interface. */
 
-			uint8_t Data1; /**< First byte of data in the MIDI event. */
-			uint8_t Data2; /**< Second byte of data in the MIDI event. */
-			uint8_t Data3; /**< Third byte of data in the MIDI event. */
+			uint8_t  Data1; /**< First byte of data in the MIDI event. */
+			uint8_t  Data2; /**< Second byte of data in the MIDI event. */
+			uint8_t  Data3; /**< Third byte of data in the MIDI event. */
 		} ATTR_PACKED MIDI_EventPacket_t;
 
 	/* Disable C linkage for C++ Compilers: */
diff --git a/LUFA/Drivers/USB/Class/Common/MassStorage.h b/LUFA/Drivers/USB/Class/Common/MassStorage.h
index d641c33a3..0f5db97ec 100644
--- a/LUFA/Drivers/USB/Class/Common/MassStorage.h
+++ b/LUFA/Drivers/USB/Class/Common/MassStorage.h
@@ -289,23 +289,23 @@
 		 */
 		typedef struct
 		{
-			uint8_t       ResponseCode;
-
-			uint8_t       SegmentNumber;
-
-			unsigned char SenseKey            : 4;
-			unsigned char Reserved            : 1;
-			unsigned char ILI                 : 1;
-			unsigned char EOM                 : 1;
-			unsigned char FileMark            : 1;
-
-			uint8_t       Information[4];
-			uint8_t       AdditionalLength;
-			uint8_t       CmdSpecificInformation[4];
-			uint8_t       AdditionalSenseCode;
-			uint8_t       AdditionalSenseQualifier;
-			uint8_t       FieldReplaceableUnitCode;
-			uint8_t       SenseKeySpecific[3];
+			uint8_t  ResponseCode;
+
+			uint8_t  SegmentNumber;
+
+			unsigned SenseKey            : 4;
+			unsigned Reserved            : 1;
+			unsigned ILI                 : 1;
+			unsigned EOM                 : 1;
+			unsigned FileMark            : 1;
+
+			uint8_t  Information[4];
+			uint8_t  AdditionalLength;
+			uint8_t  CmdSpecificInformation[4];
+			uint8_t  AdditionalSenseCode;
+			uint8_t  AdditionalSenseQualifier;
+			uint8_t  FieldReplaceableUnitCode;
+			uint8_t  SenseKeySpecific[3];
 		} ATTR_PACKED SCSI_Request_Sense_Response_t;
 
 		/** \brief Mass Storage Class SCSI Inquiry Structure.
@@ -318,35 +318,35 @@
 		 */
 		typedef struct
 		{
-			unsigned char DeviceType          : 5;
-			unsigned char PeripheralQualifier : 3;
-
-			unsigned char Reserved            : 7;
-			unsigned char Removable           : 1;
-
-			uint8_t       Version;
-
-			unsigned char ResponseDataFormat  : 4;
-			unsigned char Reserved2           : 1;
-			unsigned char NormACA             : 1;
-			unsigned char TrmTsk              : 1;
-			unsigned char AERC                : 1;
-
-			uint8_t       AdditionalLength;
-			uint8_t       Reserved3[2];
-
-			unsigned char SoftReset           : 1;
-			unsigned char CmdQue              : 1;
-			unsigned char Reserved4           : 1;
-			unsigned char Linked              : 1;
-			unsigned char Sync                : 1;
-			unsigned char WideBus16Bit        : 1;
-			unsigned char WideBus32Bit        : 1;
-			unsigned char RelAddr             : 1;
-
-			uint8_t       VendorID[8];
-			uint8_t       ProductID[16];
-			uint8_t       RevisionID[4];
+			unsigned DeviceType          : 5;
+			unsigned PeripheralQualifier : 3;
+
+			unsigned Reserved            : 7;
+			unsigned Removable           : 1;
+
+			uint8_t  Version;
+
+			unsigned ResponseDataFormat  : 4;
+			unsigned Reserved2           : 1;
+			unsigned NormACA             : 1;
+			unsigned TrmTsk              : 1;
+			unsigned AERC                : 1;
+
+			uint8_t  AdditionalLength;
+			uint8_t  Reserved3[2];
+
+			unsigned SoftReset           : 1;
+			unsigned CmdQue              : 1;
+			unsigned Reserved4           : 1;
+			unsigned Linked              : 1;
+			unsigned Sync                : 1;
+			unsigned WideBus16Bit        : 1;
+			unsigned WideBus32Bit        : 1;
+			unsigned RelAddr             : 1;
+
+			uint8_t  VendorID[8];
+			uint8_t  ProductID[16];
+			uint8_t  RevisionID[4];
 		} ATTR_PACKED SCSI_Inquiry_Response_t;
 
 	/* Disable C linkage for C++ Compilers: */
diff --git a/LUFA/Drivers/USB/Class/Device/MIDI.h b/LUFA/Drivers/USB/Class/Device/MIDI.h
index 137513676..c3a97f6ef 100644
--- a/LUFA/Drivers/USB/Class/Device/MIDI.h
+++ b/LUFA/Drivers/USB/Class/Device/MIDI.h
@@ -91,6 +91,7 @@
 				} Config; /**< Config data for the USB class interface within the device. All elements in this section
 				           *   <b>must</b> be set or the interface will fail to enumerate and operate correctly.
 				           */
+				
 				struct
 				{
 					// No state information for this class
diff --git a/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c b/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c
index 14f66d922..b978ec7f1 100644
--- a/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c
+++ b/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c
@@ -39,7 +39,7 @@
 uint8_t USB_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE;
 #endif
 
-volatile uint8_t  USB_SelectedEndpoint = ENDPOINT_CONTROLEP;
+volatile uint32_t USB_SelectedEndpoint = ENDPOINT_CONTROLEP;
 volatile uint8_t* USB_EndpointFIFOPos[ENDPOINT_TOTAL_ENDPOINTS];
 
 bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number,
diff --git a/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.h b/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.h
index 2fe42aa30..43e432b04 100644
--- a/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.h
+++ b/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.h
@@ -155,7 +155,7 @@
 			                                    const uint32_t UECFGXData);
 		
 		/* External Variables: */
-			extern volatile uint8_t  USB_SelectedEndpoint;
+			extern volatile uint32_t USB_SelectedEndpoint;
 			extern volatile uint8_t* USB_EndpointFIFOPos[];
 	#endif
 
diff --git a/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c b/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c
index 870828ec1..86bed0388 100644
--- a/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c
+++ b/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c
@@ -37,7 +37,7 @@
 
 uint8_t USB_ControlPipeSize = PIPE_CONTROLPIPE_DEFAULT_SIZE;
 
-volatile uint8_t  USB_SelectedPipe = PIPE_CONTROLPIPE;
+volatile uint32_t USB_SelectedPipe = PIPE_CONTROLPIPE;
 volatile uint8_t* USB_PipeFIFOPos[PIPE_TOTAL_PIPES];
 
 bool Pipe_ConfigurePipe(const uint8_t Number,
diff --git a/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h b/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h
index 045aaad1d..7edfb3e1b 100644
--- a/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h
+++ b/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h
@@ -102,7 +102,7 @@
 			#define PIPE_HSB_ADDRESS_SPACE_SIZE     (64 * 1024UL)
 	
 		/* External Variables: */
-			extern volatile uint8_t  USB_SelectedPipe;
+			extern volatile uint32_t USB_SelectedPipe;
 			extern volatile uint8_t* USB_PipeFIFOPos[];
 	#endif
 
diff --git a/LUFA/ManPages/LUFAPoweredProjects.txt b/LUFA/ManPages/LUFAPoweredProjects.txt
index 5aff7d162..59baa9745 100644
--- a/LUFA/ManPages/LUFAPoweredProjects.txt
+++ b/LUFA/ManPages/LUFAPoweredProjects.txt
@@ -55,6 +55,7 @@
  *  - IR Remote to Keyboard decoder: http://netzhansa.blogspot.com/2010/04/our-living-room-hi-fi-setup-needs-mp3.html
  *  - LED Panel controller: http://projects.peterpolidoro.net/caltech/panelscontroller/panelscontroller.htm
  *  - LUFA powered DDR dance mat (French): http://logicien-parfait.fr/dokuwiki/doku.php?id=projet:ddr_repair
+ *  - MIDI Theremin: http://baldwisdom.com/usb-midi-controller-theremin-style-on-arduino-uno/
  *  - Motherboard BIOS flasher: http://www.coreboot.org/InSystemFlasher
  *  - Multi-button Joystick (French): http://logicien-parfait.fr/dokuwiki/doku.php?id=projet:joystick
  *  - Nikon wireless camera remote control (Norwegian): http://hekta.org/~hpe1119/
diff --git a/Projects/TempDataLogger/Lib/DS1307.h b/Projects/TempDataLogger/Lib/DS1307.h
index 5181c3e87..9d93f2c4c 100644
--- a/Projects/TempDataLogger/Lib/DS1307.h
+++ b/Projects/TempDataLogger/Lib/DS1307.h
@@ -30,9 +30,9 @@
 			{
 				struct
 				{
-					unsigned int Sec            : 4;
-					unsigned int TenSec         : 3;
-					unsigned int CH             : 1;
+					unsigned Sec            : 4;
+					unsigned TenSec         : 3;
+					unsigned CH             : 1;
 				} Fields;
 
 				uint8_t IntVal;
@@ -42,9 +42,9 @@
 			{
 				struct
 				{
-					unsigned int Min            : 4;
-					unsigned int TenMin         : 3;
-					unsigned int Reserved       : 1;
+					unsigned Min            : 4;
+					unsigned TenMin         : 3;
+					unsigned Reserved       : 1;
 				} Fields;
 
 				uint8_t IntVal;
@@ -54,10 +54,10 @@
 			{
 				struct
 				{
-					unsigned int Hour            : 4;
-					unsigned int TenHour         : 2;
-					unsigned int TwelveHourMode  : 1;
-					unsigned int Reserved        : 1;
+					unsigned Hour            : 4;
+					unsigned TenHour         : 2;
+					unsigned TwelveHourMode  : 1;
+					unsigned Reserved        : 1;
 				} Fields;
 
 				uint8_t IntVal;
@@ -67,8 +67,8 @@
 			{
 				struct
 				{
-					unsigned int DayOfWeek       : 3;
-					unsigned int Reserved        : 5;
+					unsigned DayOfWeek       : 3;
+					unsigned Reserved        : 5;
 				} Fields;
 
 				uint8_t IntVal;
@@ -78,9 +78,9 @@
 			{
 				struct
 				{
-					unsigned int Day             : 4;
-					unsigned int TenDay          : 2;
-					unsigned int Reserved        : 2;
+					unsigned Day             : 4;
+					unsigned TenDay          : 2;
+					unsigned Reserved        : 2;
 				} Fields;
 
 				uint8_t IntVal;
@@ -90,9 +90,9 @@
 			{
 				struct
 				{
-					unsigned int Month           : 4;
-					unsigned int TenMonth        : 1;
-					unsigned int Reserved        : 3;
+					unsigned Month           : 4;
+					unsigned TenMonth        : 1;
+					unsigned Reserved        : 3;
 				} Fields;
 
 				uint8_t IntVal;
@@ -102,8 +102,8 @@
 			{
 				struct
 				{
-					unsigned int Year            : 4;
-					unsigned int TenYear         : 4;
+					unsigned Year            : 4;
+					unsigned TenYear         : 4;
 				} Fields;
 
 				uint8_t IntVal;
-- 
GitLab