diff --git a/Demos/Device/Incomplete/TestAndMeasurement/Descriptors.h b/Demos/Device/Incomplete/TestAndMeasurement/Descriptors.h
index e45654a27bc22f0925a1c9d91fb5f03a9448148b..17f68f3a3adb9acdd6d46809028ce1e466b4445b 100644
--- a/Demos/Device/Incomplete/TestAndMeasurement/Descriptors.h
+++ b/Demos/Device/Incomplete/TestAndMeasurement/Descriptors.h
@@ -1,84 +1,84 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-              
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-  Copyright 2010  Peter Lawrence (majbthrd [at] gmail [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this 
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Header file for Descriptors.c.
- */
- 
-#ifndef _DESCRIPTORS_H_
-#define _DESCRIPTORS_H_
-
-	/* Includes: */
-		#include <avr/pgmspace.h>
-
-		#include <LUFA/Drivers/USB/USB.h>
-
-	/* Macros: */
-		/** Endpoint address of the TMC notification IN endpoint. */
-		#define TMC_NOTIFICATION_EPADDR  (ENDPOINT_DIR_IN  | 2)
-
-		/** Endpoint address of the TMC device-to-host data IN endpoint. */
-		#define TMC_IN_EPADDR            (ENDPOINT_DIR_IN  | 3)
-
-		/** Endpoint address of the TMC host-to-device data OUT endpoint. */
-		#define TMC_OUT_EPADDR           (ENDPOINT_DIR_OUT | 4)
-
-		/** Size in bytes of the TMC data endpoints. */
-		#define TMC_IO_EPSIZE            64
-
-		/** Size in bytes of the TMC notification endpoint. */
-		#define TMC_NOTIFICATION_EPSIZE  8
-
-	/* Type Defines: */
-		/** Type define for the device configuration descriptor structure. This must be defined in the
-		 *  application code, as the configuration descriptor contains several sub-descriptors which
-		 *  vary between devices, and which describe the device's usage to the host.
-		 */
-		typedef struct
-		{
-			USB_Descriptor_Configuration_Header_t Config;
-			
-			// Test and Measurement Interface
-			USB_Descriptor_Interface_t            TM_Interface;
-			USB_Descriptor_Endpoint_t             TM_DataOutEndpoint;
-			USB_Descriptor_Endpoint_t             TM_DataInEndpoint;
-			USB_Descriptor_Endpoint_t             TM_NotificationEndpoint;
-		} USB_Descriptor_Configuration_t;
-
-	/* Function Prototypes: */
-		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-		                                    const uint8_t wIndex,
-		                                    const void** const DescriptorAddress)
-		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+              
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2010  Peter Lawrence (majbthrd [at] gmail [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this 
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in 
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting 
+  documentation, and that the name of the author not be used in 
+  advertising or publicity pertaining to distribution of the 
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *
+ *  Header file for Descriptors.c.
+ */
+ 
+#ifndef _DESCRIPTORS_H_
+#define _DESCRIPTORS_H_
+
+	/* Includes: */
+		#include <avr/pgmspace.h>
+
+		#include <LUFA/Drivers/USB/USB.h>
+
+	/* Macros: */
+		/** Endpoint address of the TMC notification IN endpoint. */
+		#define TMC_NOTIFICATION_EPADDR  (ENDPOINT_DIR_IN  | 2)
+
+		/** Endpoint address of the TMC device-to-host data IN endpoint. */
+		#define TMC_IN_EPADDR            (ENDPOINT_DIR_IN  | 3)
+
+		/** Endpoint address of the TMC host-to-device data OUT endpoint. */
+		#define TMC_OUT_EPADDR           (ENDPOINT_DIR_OUT | 4)
+
+		/** Size in bytes of the TMC data endpoints. */
+		#define TMC_IO_EPSIZE            64
+
+		/** Size in bytes of the TMC notification endpoint. */
+		#define TMC_NOTIFICATION_EPSIZE  8
+
+	/* Type Defines: */
+		/** Type define for the device configuration descriptor structure. This must be defined in the
+		 *  application code, as the configuration descriptor contains several sub-descriptors which
+		 *  vary between devices, and which describe the device's usage to the host.
+		 */
+		typedef struct
+		{
+			USB_Descriptor_Configuration_Header_t Config;
+			
+			// Test and Measurement Interface
+			USB_Descriptor_Interface_t            TM_Interface;
+			USB_Descriptor_Endpoint_t             TM_DataOutEndpoint;
+			USB_Descriptor_Endpoint_t             TM_DataInEndpoint;
+			USB_Descriptor_Endpoint_t             TM_NotificationEndpoint;
+		} USB_Descriptor_Configuration_t;
+
+	/* Function Prototypes: */
+		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
+		                                    const uint8_t wIndex,
+		                                    const void** const DescriptorAddress)
+		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
+
+#endif
 
diff --git a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h
index bd93154f8457150032057b4f8a82efc83ed992b6..9fa9f23d0b465d3f4433cf806b00d5ae28bf4afa 100644
--- a/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h
+++ b/Demos/Device/Incomplete/TestAndMeasurement/TestAndMeasurement.h
@@ -1,149 +1,149 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-              
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this 
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-#ifndef _TESTANDMEASUREMENT_H_
-#define _TESTANDMEASUREMENT_H_
-
-	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/wdt.h>
-		#include <avr/power.h>
-		#include <avr/interrupt.h>
-
-		#include "Descriptors.h"
-
-		#include <LUFA/Drivers/USB/USB.h>
-		#include <LUFA/Drivers/Board/LEDs.h>
-
-	/* Macros: */
-		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
-		#define LEDMASK_USB_NOTREADY                  LEDS_LED1
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
-		#define LEDMASK_USB_ENUMERATING              (LEDS_LED2 | LEDS_LED3)
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
-		#define LEDMASK_USB_READY                    (LEDS_LED2 | LEDS_LED4)
-
-		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
-		#define LEDMASK_USB_ERROR                    (LEDS_LED1 | LEDS_LED3)
-		
-		/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
-		#define LEDMASK_USB_BUSY                      LEDS_LED2
-
-		#define Req_InitiateAbortBulkOut              0x01
-		#define Req_CheckAbortBulkOutStatus           0x02
-		#define Req_InitiateAbortBulkIn               0x03
-		#define Req_CheckAbortBulkInStatus            0x04
-		#define Req_InitiateClear                     0x05
-		#define Req_CheckClearStatus                  0x06
-		#define Req_GetCapabilities                   0x07
-		#define Req_IndicatorPulse                    0x40
-		
-		#define TMC_STATUS_SUCCESS                    0x01
-		#define TMC_STATUS_PENDING                    0x02
-		#define TMC_STATUS_FAILED                     0x80
-		#define TMC_STATUS_TRANSFER_NOT_IN_PROGRESS   0x81
-		#define TMC_STATUS_SPLIT_NOT_IN_PROGRESS      0x82
-		#define TMC_STATUS_SPLIT_IN_PROGRESS          0x83
-		
-		#define TMC_MESSAGEID_DEV_DEP_MSG_OUT         0x01
-		#define TMC_MESSAGEID_DEV_DEP_MSG_IN          0x02
-		#define TMC_MESSAGEID_DEV_VENDOR_OUT          0x7E
-		#define TMC_MESSAGEID_DEV_VENDOR_IN           0x7F
-
-	/* Type Defines */
-		typedef struct
-		{
-			uint8_t  Status;
-			uint8_t  Reserved;
-
-			uint16_t TMCVersion;
-			
-			struct
-			{
-				unsigned ListenOnly             : 1;
-				unsigned TalkOnly               : 1;
-				unsigned PulseIndicateSupported : 1;
-				unsigned Reserved               : 5;
-			} Interface;
-			
-			struct
-			{
-				unsigned SupportsAbortINOnMatch : 1;
-				unsigned Reserved               : 7;
-			} Device;
-			
-			uint8_t Reserved2[6];
-			uint8_t Reserved3[12];			
-		} TMC_Capabilities_t;
-		
-		typedef struct
-		{
-			uint8_t LastMessageTransaction;
-			uint8_t TermChar;
-			uint8_t Reserved[2];
-		} TMC_DevOUTMessageHeader_t;
-
-		typedef struct
-		{
-			uint8_t LastMessageTransaction;
-			uint8_t Reserved[3];
-		} TMC_DevINMessageHeader_t;
-
-		typedef struct
-		{
-			uint8_t  MessageID;
-			uint8_t  Tag;
-			uint8_t  InverseTag;
-			uint8_t  Reserved;
-			uint32_t TransferSize;
-			
-			union
-			{
-				TMC_DevOUTMessageHeader_t DeviceOUT;
-				TMC_DevINMessageHeader_t  DeviceIN;
-				uint32_t                  VendorSpecific;
-			} MessageIDSpecific;
-		} TMC_MessageHeader_t;
-
-	/* Function Prototypes: */
-		void SetupHardware(void);
-		void TMC_Task(void);
-		bool ReadTMCHeader(TMC_MessageHeader_t* const MessageHeader);
-		bool WriteTMCHeader(TMC_MessageHeader_t* const MessageHeader);
-
-		void EVENT_USB_Device_Connect(void);
-		void EVENT_USB_Device_Disconnect(void);
-		void EVENT_USB_Device_ConfigurationChanged(void);
-		void EVENT_USB_Device_ControlRequest(void);
-
-#endif
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+              
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this 
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in 
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting 
+  documentation, and that the name of the author not be used in 
+  advertising or publicity pertaining to distribution of the 
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+#ifndef _TESTANDMEASUREMENT_H_
+#define _TESTANDMEASUREMENT_H_
+
+	/* Includes: */
+		#include <avr/io.h>
+		#include <avr/wdt.h>
+		#include <avr/power.h>
+		#include <avr/interrupt.h>
+
+		#include "Descriptors.h"
+
+		#include <LUFA/Drivers/USB/USB.h>
+		#include <LUFA/Drivers/Board/LEDs.h>
+
+	/* Macros: */
+		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
+		#define LEDMASK_USB_NOTREADY                  LEDS_LED1
+
+		/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
+		#define LEDMASK_USB_ENUMERATING              (LEDS_LED2 | LEDS_LED3)
+
+		/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
+		#define LEDMASK_USB_READY                    (LEDS_LED2 | LEDS_LED4)
+
+		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
+		#define LEDMASK_USB_ERROR                    (LEDS_LED1 | LEDS_LED3)
+		
+		/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
+		#define LEDMASK_USB_BUSY                      LEDS_LED2
+
+		#define Req_InitiateAbortBulkOut              0x01
+		#define Req_CheckAbortBulkOutStatus           0x02
+		#define Req_InitiateAbortBulkIn               0x03
+		#define Req_CheckAbortBulkInStatus            0x04
+		#define Req_InitiateClear                     0x05
+		#define Req_CheckClearStatus                  0x06
+		#define Req_GetCapabilities                   0x07
+		#define Req_IndicatorPulse                    0x40
+		
+		#define TMC_STATUS_SUCCESS                    0x01
+		#define TMC_STATUS_PENDING                    0x02
+		#define TMC_STATUS_FAILED                     0x80
+		#define TMC_STATUS_TRANSFER_NOT_IN_PROGRESS   0x81
+		#define TMC_STATUS_SPLIT_NOT_IN_PROGRESS      0x82
+		#define TMC_STATUS_SPLIT_IN_PROGRESS          0x83
+		
+		#define TMC_MESSAGEID_DEV_DEP_MSG_OUT         0x01
+		#define TMC_MESSAGEID_DEV_DEP_MSG_IN          0x02
+		#define TMC_MESSAGEID_DEV_VENDOR_OUT          0x7E
+		#define TMC_MESSAGEID_DEV_VENDOR_IN           0x7F
+
+	/* Type Defines */
+		typedef struct
+		{
+			uint8_t  Status;
+			uint8_t  Reserved;
+
+			uint16_t TMCVersion;
+			
+			struct
+			{
+				unsigned ListenOnly             : 1;
+				unsigned TalkOnly               : 1;
+				unsigned PulseIndicateSupported : 1;
+				unsigned Reserved               : 5;
+			} Interface;
+			
+			struct
+			{
+				unsigned SupportsAbortINOnMatch : 1;
+				unsigned Reserved               : 7;
+			} Device;
+			
+			uint8_t Reserved2[6];
+			uint8_t Reserved3[12];			
+		} TMC_Capabilities_t;
+		
+		typedef struct
+		{
+			uint8_t LastMessageTransaction;
+			uint8_t TermChar;
+			uint8_t Reserved[2];
+		} TMC_DevOUTMessageHeader_t;
+
+		typedef struct
+		{
+			uint8_t LastMessageTransaction;
+			uint8_t Reserved[3];
+		} TMC_DevINMessageHeader_t;
+
+		typedef struct
+		{
+			uint8_t  MessageID;
+			uint8_t  Tag;
+			uint8_t  InverseTag;
+			uint8_t  Reserved;
+			uint32_t TransferSize;
+			
+			union
+			{
+				TMC_DevOUTMessageHeader_t DeviceOUT;
+				TMC_DevINMessageHeader_t  DeviceIN;
+				uint32_t                  VendorSpecific;
+			} MessageIDSpecific;
+		} TMC_MessageHeader_t;
+
+	/* Function Prototypes: */
+		void SetupHardware(void);
+		void TMC_Task(void);
+		bool ReadTMCHeader(TMC_MessageHeader_t* const MessageHeader);
+		bool WriteTMCHeader(TMC_MessageHeader_t* const MessageHeader);
+
+		void EVENT_USB_Device_Connect(void);
+		void EVENT_USB_Device_Disconnect(void);
+		void EVENT_USB_Device_ConfigurationChanged(void);
+		void EVENT_USB_Device_ControlRequest(void);
+
+#endif
 
diff --git a/Demos/Host/ClassDriver/AndroidAccessoryHost/AndroidAccessoryHost.c b/Demos/Host/ClassDriver/AndroidAccessoryHost/AndroidAccessoryHost.c
index 4c53cc221577365e224815f59e500d8f1da28c8c..b1e988cca24a662801caa9b2553dc63c3aee84cf 100644
--- a/Demos/Host/ClassDriver/AndroidAccessoryHost/AndroidAccessoryHost.c
+++ b/Demos/Host/ClassDriver/AndroidAccessoryHost/AndroidAccessoryHost.c
@@ -1,232 +1,232 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Main source file for the AndroidAccessoryHost demo. This file contains the main tasks of
- *  the demo and is responsible for the initial application hardware configuration.
- */
-
-#include "AndroidAccessoryHost.h"
-
-/** LUFA Android Open Accessory Class driver interface configuration and state information. This
- *  structure is passed to all Android Open Accessory Class driver functions, so that multiple
- *  instances of the same class within a device can be differentiated from one another.
- */
-USB_ClassInfo_AOA_Host_t AndroidDevice_AOA_Interface =
-	{
-		.Config =
-			{
-				.DataINPipe             =
-					{
-						.Address        = (PIPE_DIR_IN  | 1),
-						.Banks          = 1,
-					},
-				.DataOUTPipe            =
-					{
-						.Address        = (PIPE_DIR_OUT | 2),
-						.Banks          = 1,
-					},				
-				.PropertyStrings =
-					{
-						[AOA_STRING_Manufacturer] = "Dean Camera",
-						[AOA_STRING_Model]        = "LUFA Android Demo",
-						[AOA_STRING_Description]  = "LUFA Android Demo",
-						[AOA_STRING_Version]      = "1.0",
-						[AOA_STRING_URI]          = "http://www.lufa-lib.org",
-						[AOA_STRING_Serial]       = "0000000012345678",
-					},
-			},
-	};
-
-
-/** Main program entry point. This routine configures the hardware required by the application, then
- *  enters a loop to run the application tasks in sequence.
- */
-int main(void)
-{
-	SetupHardware();
-	
-	puts_P(PSTR(ESC_FG_CYAN "Android Accessory Host Demo running.\r\n" ESC_FG_WHITE));
-
-	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
-	sei();
-
-	for (;;)
-	{
-		AOAHost_Task();
-
-		AOA_Host_USBTask(&AndroidDevice_AOA_Interface);
-		USB_USBTask();
-	}
-}
-
-/** Configures the board hardware and chip peripherals for the demo's functionality. */
-void SetupHardware(void)
-{
-	/* Disable watchdog if enabled by bootloader/fuses */
-	MCUSR &= ~(1 << WDRF);
-	wdt_disable();
-
-	/* Disable clock division */
-	clock_prescale_set(clock_div_1);
-
-	/* Hardware Initialization */
-	Serial_Init(9600, false);
-	LEDs_Init();
-	USB_Init();
-
-	/* Create a stdio stream for the serial port for stdin and stdout */
-	Serial_CreateStream(NULL);
-}
-
-/** Task to manage an enumerated USB Android Accessory device once connected, to print received data
- *  from the device to the serial port.
- */
-void AOAHost_Task(void)
-{
-	if (USB_HostState != HOST_STATE_Configured)
-	  return;
-
-	if (AOA_Host_BytesReceived(&AndroidDevice_AOA_Interface))
-	{
-		/* Echo received bytes from the attached device through the USART */
-		int16_t ReceivedByte = AOA_Host_ReceiveByte(&AndroidDevice_AOA_Interface);
-		if (!(ReceivedByte < 0))
-		  putchar(ReceivedByte);
-	}
-}
-
-/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and
- *  starts the library USB task to begin the enumeration and USB management process.
- */
-void EVENT_USB_Host_DeviceAttached(void)
-{
-	puts_P(PSTR("Device Attached.\r\n"));
-	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
-}
-
-/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and
- *  stops the library USB task management process.
- */
-void EVENT_USB_Host_DeviceUnattached(void)
-{
-	puts_P(PSTR("\r\nDevice Unattached.\r\n"));
-	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
-}
-
-/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully
- *  enumerated by the host and is now ready to be used by the application.
- */
-void EVENT_USB_Host_DeviceEnumerationComplete(void)
-{
-	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
-
-	USB_Descriptor_Device_t DeviceDescriptor;
-
-	if (USB_Host_GetDeviceDescriptor(&DeviceDescriptor) != HOST_SENDCONTROL_Successful)
-	{
-		puts_P(PSTR("Error Retrieving Device Descriptor.\r\n"));
-		LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-		return;	
-	}
-
-	bool NeedModeSwitch;
-	if (!(AOA_Host_ValidateAccessoryDevice(&AndroidDevice_AOA_Interface, &DeviceDescriptor, &NeedModeSwitch)))
-	{
-		puts_P(PSTR("Not an Android device.\r\n"));
-		LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-		return;
-	}
-	
-	if (NeedModeSwitch)
-	{
-		puts_P(PSTR("Not in Accessory mode, switching...\r\n"));
-		AOA_Host_StartAccessoryMode(&AndroidDevice_AOA_Interface);
-		return;
-	}
-
-	uint16_t ConfigDescriptorSize;
-	uint8_t  ConfigDescriptorData[512];
-
-	if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData,
-	                                       sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful)
-	{
-		puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n"));
-		LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-		return;
-	}
-
-	if (AOA_Host_ConfigurePipes(&AndroidDevice_AOA_Interface,
-	                            ConfigDescriptorSize, ConfigDescriptorData) != AOA_ENUMERROR_NoError)
-	{
-		puts_P(PSTR("Attached Device Not a Valid Android Accessory Class Device.\r\n"));
-		LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-		return;
-	}
-
-	if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful)
-	{
-		puts_P(PSTR("Error Setting Device Configuration.\r\n"));
-		LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-		return;
-	}
-
-	puts_P(PSTR("Android Device Enumerated.\r\n"));
-	LEDs_SetAllLEDs(LEDMASK_USB_READY);
-}
-
-/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */
-void EVENT_USB_Host_HostError(const uint8_t ErrorCode)
-{
-	USB_Disable();
-
-	printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n"
-	                         " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode);
-
-	LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-	for(;;);
-}
-
-/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while
- *  enumerating an attached USB device.
- */
-void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode,
-                                            const uint8_t SubErrorCode)
-{
-	printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n"
-	                         " -- Error Code %d\r\n"
-	                         " -- Sub Error Code %d\r\n"
-	                         " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState);
-
-	LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
-}
-
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *
+ *  Main source file for the AndroidAccessoryHost demo. This file contains the main tasks of
+ *  the demo and is responsible for the initial application hardware configuration.
+ */
+
+#include "AndroidAccessoryHost.h"
+
+/** LUFA Android Open Accessory Class driver interface configuration and state information. This
+ *  structure is passed to all Android Open Accessory Class driver functions, so that multiple
+ *  instances of the same class within a device can be differentiated from one another.
+ */
+USB_ClassInfo_AOA_Host_t AndroidDevice_AOA_Interface =
+	{
+		.Config =
+			{
+				.DataINPipe             =
+					{
+						.Address        = (PIPE_DIR_IN  | 1),
+						.Banks          = 1,
+					},
+				.DataOUTPipe            =
+					{
+						.Address        = (PIPE_DIR_OUT | 2),
+						.Banks          = 1,
+					},				
+				.PropertyStrings =
+					{
+						[AOA_STRING_Manufacturer] = "Dean Camera",
+						[AOA_STRING_Model]        = "LUFA Android Demo",
+						[AOA_STRING_Description]  = "LUFA Android Demo",
+						[AOA_STRING_Version]      = "1.0",
+						[AOA_STRING_URI]          = "http://www.lufa-lib.org",
+						[AOA_STRING_Serial]       = "0000000012345678",
+					},
+			},
+	};
+
+
+/** Main program entry point. This routine configures the hardware required by the application, then
+ *  enters a loop to run the application tasks in sequence.
+ */
+int main(void)
+{
+	SetupHardware();
+	
+	puts_P(PSTR(ESC_FG_CYAN "Android Accessory Host Demo running.\r\n" ESC_FG_WHITE));
+
+	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
+	sei();
+
+	for (;;)
+	{
+		AOAHost_Task();
+
+		AOA_Host_USBTask(&AndroidDevice_AOA_Interface);
+		USB_USBTask();
+	}
+}
+
+/** Configures the board hardware and chip peripherals for the demo's functionality. */
+void SetupHardware(void)
+{
+	/* Disable watchdog if enabled by bootloader/fuses */
+	MCUSR &= ~(1 << WDRF);
+	wdt_disable();
+
+	/* Disable clock division */
+	clock_prescale_set(clock_div_1);
+
+	/* Hardware Initialization */
+	Serial_Init(9600, false);
+	LEDs_Init();
+	USB_Init();
+
+	/* Create a stdio stream for the serial port for stdin and stdout */
+	Serial_CreateStream(NULL);
+}
+
+/** Task to manage an enumerated USB Android Accessory device once connected, to print received data
+ *  from the device to the serial port.
+ */
+void AOAHost_Task(void)
+{
+	if (USB_HostState != HOST_STATE_Configured)
+	  return;
+
+	if (AOA_Host_BytesReceived(&AndroidDevice_AOA_Interface))
+	{
+		/* Echo received bytes from the attached device through the USART */
+		int16_t ReceivedByte = AOA_Host_ReceiveByte(&AndroidDevice_AOA_Interface);
+		if (!(ReceivedByte < 0))
+		  putchar(ReceivedByte);
+	}
+}
+
+/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and
+ *  starts the library USB task to begin the enumeration and USB management process.
+ */
+void EVENT_USB_Host_DeviceAttached(void)
+{
+	puts_P(PSTR("Device Attached.\r\n"));
+	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
+}
+
+/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and
+ *  stops the library USB task management process.
+ */
+void EVENT_USB_Host_DeviceUnattached(void)
+{
+	puts_P(PSTR("\r\nDevice Unattached.\r\n"));
+	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
+}
+
+/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully
+ *  enumerated by the host and is now ready to be used by the application.
+ */
+void EVENT_USB_Host_DeviceEnumerationComplete(void)
+{
+	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
+
+	USB_Descriptor_Device_t DeviceDescriptor;
+
+	if (USB_Host_GetDeviceDescriptor(&DeviceDescriptor) != HOST_SENDCONTROL_Successful)
+	{
+		puts_P(PSTR("Error Retrieving Device Descriptor.\r\n"));
+		LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+		return;	
+	}
+
+	bool NeedModeSwitch;
+	if (!(AOA_Host_ValidateAccessoryDevice(&AndroidDevice_AOA_Interface, &DeviceDescriptor, &NeedModeSwitch)))
+	{
+		puts_P(PSTR("Not an Android device.\r\n"));
+		LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+		return;
+	}
+	
+	if (NeedModeSwitch)
+	{
+		puts_P(PSTR("Not in Accessory mode, switching...\r\n"));
+		AOA_Host_StartAccessoryMode(&AndroidDevice_AOA_Interface);
+		return;
+	}
+
+	uint16_t ConfigDescriptorSize;
+	uint8_t  ConfigDescriptorData[512];
+
+	if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData,
+	                                       sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful)
+	{
+		puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n"));
+		LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+		return;
+	}
+
+	if (AOA_Host_ConfigurePipes(&AndroidDevice_AOA_Interface,
+	                            ConfigDescriptorSize, ConfigDescriptorData) != AOA_ENUMERROR_NoError)
+	{
+		puts_P(PSTR("Attached Device Not a Valid Android Accessory Class Device.\r\n"));
+		LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+		return;
+	}
+
+	if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful)
+	{
+		puts_P(PSTR("Error Setting Device Configuration.\r\n"));
+		LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+		return;
+	}
+
+	puts_P(PSTR("Android Device Enumerated.\r\n"));
+	LEDs_SetAllLEDs(LEDMASK_USB_READY);
+}
+
+/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */
+void EVENT_USB_Host_HostError(const uint8_t ErrorCode)
+{
+	USB_Disable();
+
+	printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n"
+	                         " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode);
+
+	LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+	for(;;);
+}
+
+/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while
+ *  enumerating an attached USB device.
+ */
+void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode,
+                                            const uint8_t SubErrorCode)
+{
+	printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n"
+	                         " -- Error Code %d\r\n"
+	                         " -- Sub Error Code %d\r\n"
+	                         " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState);
+
+	LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+}
+
 
diff --git a/Demos/Host/ClassDriver/AndroidAccessoryHost/AndroidAccessoryHost.h b/Demos/Host/ClassDriver/AndroidAccessoryHost/AndroidAccessoryHost.h
index 95cecca5c48b018b49f5f650072c75e645eab250..000069620602cd24fb340a380b7e94f8b284464f 100644
--- a/Demos/Host/ClassDriver/AndroidAccessoryHost/AndroidAccessoryHost.h
+++ b/Demos/Host/ClassDriver/AndroidAccessoryHost/AndroidAccessoryHost.h
@@ -1,78 +1,78 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *
- *  Header file for AndroidAccessoryHost.c.
- */
-
-#ifndef _ANDROIDACCESSORY_HOST_H_
-#define _ANDROIDACCESSORY_HOST_H_
-
-	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/wdt.h>
-		#include <avr/pgmspace.h>
-		#include <avr/power.h>
-		#include <avr/interrupt.h>
-		#include <stdio.h>
-
-		#include <LUFA/Drivers/Misc/TerminalCodes.h>
-		#include <LUFA/Drivers/Peripheral/Serial.h>
-		#include <LUFA/Drivers/Board/LEDs.h>
-		#include <LUFA/Drivers/USB/USB.h>
-
-	/* Macros: */
-		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
-		#define LEDMASK_USB_NOTREADY      LEDS_LED1
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
-		#define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
-		#define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)
-
-		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
-		#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)
-
-	/* Function Prototypes: */
-		void SetupHardware(void);
-		void AOAHost_Task(void);
-
-		void EVENT_USB_Host_HostError(const uint8_t ErrorCode);
-		void EVENT_USB_Host_DeviceAttached(void);
-		void EVENT_USB_Host_DeviceUnattached(void);
-		void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode,
-		                                            const uint8_t SubErrorCode);
-		void EVENT_USB_Host_DeviceEnumerationComplete(void);
-
-#endif
-
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *
+ *  Header file for AndroidAccessoryHost.c.
+ */
+
+#ifndef _ANDROIDACCESSORY_HOST_H_
+#define _ANDROIDACCESSORY_HOST_H_
+
+	/* Includes: */
+		#include <avr/io.h>
+		#include <avr/wdt.h>
+		#include <avr/pgmspace.h>
+		#include <avr/power.h>
+		#include <avr/interrupt.h>
+		#include <stdio.h>
+
+		#include <LUFA/Drivers/Misc/TerminalCodes.h>
+		#include <LUFA/Drivers/Peripheral/Serial.h>
+		#include <LUFA/Drivers/Board/LEDs.h>
+		#include <LUFA/Drivers/USB/USB.h>
+
+	/* Macros: */
+		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
+		#define LEDMASK_USB_NOTREADY      LEDS_LED1
+
+		/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
+		#define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)
+
+		/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
+		#define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)
+
+		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
+		#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)
+
+	/* Function Prototypes: */
+		void SetupHardware(void);
+		void AOAHost_Task(void);
+
+		void EVENT_USB_Host_HostError(const uint8_t ErrorCode);
+		void EVENT_USB_Host_DeviceAttached(void);
+		void EVENT_USB_Host_DeviceUnattached(void);
+		void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode,
+		                                            const uint8_t SubErrorCode);
+		void EVENT_USB_Host_DeviceEnumerationComplete(void);
+
+#endif
+
 
diff --git a/LUFA/Build/lufa.hid.in b/LUFA/Build/lufa.hid.in
index 2dd1d463b58277fe0619a134f0fc69862b09e7e7..34d1e2b809cebbabc9e09155bd682b67c08e2ce3 100644
--- a/LUFA/Build/lufa.hid.in
+++ b/LUFA/Build/lufa.hid.in
@@ -1,70 +1,70 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2012.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-
-LUFA_BUILD_MODULES         += HID
-LUFA_BUILD_TARGETS         += hid hid-teensy
-LUFA_BUILD_MANDATORY_VARS  += MCU TARGET
-LUFA_BUILD_OPTIONAL_VARS   += 
-LUFA_BUILD_PROVIDED_VARS   += 
-LUFA_BUILD_PROVIDED_MACROS += 
-
-# -----------------------------------------------------------------------------
-#               LUFA HID Bootloader Buildsystem Makefile Module.
-# -----------------------------------------------------------------------------
-# DESCRIPTION:
-#   Provides a set of targets to re-program a device currently running a HID
-#   class bootloader with a project's FLASH files.
-# -----------------------------------------------------------------------------
-# TARGETS:
-#
-#    hid                       - Program FLASH into target via
-#                                hid_bootloader_cli
-#    hid-teensy                - Program FLASH into target via
-#                                teensy_loader_cli
-#
-# MANDATORY PARAMETERS:
-#
-#    MCU                       - Microcontroller device model name
-#    TARGET                    - Application name
-#
-# OPTIONAL PARAMETERS:
-#
-#    (None)
-#
-# PROVIDED VARIABLES:
-#
-#    (None)
-#
-# PROVIDED MACROS:
-#
-#    (None)
-#
-# -----------------------------------------------------------------------------
-
-ERROR_IF_UNSET   ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set))
-ERROR_IF_EMPTY   ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank))
-ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N))
-
-# Sanity-check values of mandatory user-supplied variables
-$(foreach MANDATORY_VAR, $(LUFA_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR)))
-$(call ERROR_IF_EMPTY, MCU)
-$(call ERROR_IF_EMPTY, TARGET)
-
-# Output Messages
-MSG_HID_BOOTLOADER_CMD := ' [HID]     :'
-
-hid: $(TARGET).hex $(MAKEFILE_LIST)
-	@echo $(MSG_HID_BOOTLOADER_CMD) Programming FLASH with hid_bootloader_cli using \"$<\"
-	hid_bootloader_cli -mmcu=$(MCU) -v $<
-
-hid-teensy: $(TARGET).hex $(MAKEFILE_LIST)
-	@echo $(MSG_HID_BOOTLOADER_CMD) Programming FLASH with teensy_loader_cli using \"$<\"
-	teensy_loader_cli -mmcu=$(MCU) -v $<
-
-# Phony build targets for this module
-.PHONY: hid hid-teensy
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2012.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+
+LUFA_BUILD_MODULES         += HID
+LUFA_BUILD_TARGETS         += hid hid-teensy
+LUFA_BUILD_MANDATORY_VARS  += MCU TARGET
+LUFA_BUILD_OPTIONAL_VARS   += 
+LUFA_BUILD_PROVIDED_VARS   += 
+LUFA_BUILD_PROVIDED_MACROS += 
+
+# -----------------------------------------------------------------------------
+#               LUFA HID Bootloader Buildsystem Makefile Module.
+# -----------------------------------------------------------------------------
+# DESCRIPTION:
+#   Provides a set of targets to re-program a device currently running a HID
+#   class bootloader with a project's FLASH files.
+# -----------------------------------------------------------------------------
+# TARGETS:
+#
+#    hid                       - Program FLASH into target via
+#                                hid_bootloader_cli
+#    hid-teensy                - Program FLASH into target via
+#                                teensy_loader_cli
+#
+# MANDATORY PARAMETERS:
+#
+#    MCU                       - Microcontroller device model name
+#    TARGET                    - Application name
+#
+# OPTIONAL PARAMETERS:
+#
+#    (None)
+#
+# PROVIDED VARIABLES:
+#
+#    (None)
+#
+# PROVIDED MACROS:
+#
+#    (None)
+#
+# -----------------------------------------------------------------------------
+
+ERROR_IF_UNSET   ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set))
+ERROR_IF_EMPTY   ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank))
+ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N))
+
+# Sanity-check values of mandatory user-supplied variables
+$(foreach MANDATORY_VAR, $(LUFA_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR)))
+$(call ERROR_IF_EMPTY, MCU)
+$(call ERROR_IF_EMPTY, TARGET)
+
+# Output Messages
+MSG_HID_BOOTLOADER_CMD := ' [HID]     :'
+
+hid: $(TARGET).hex $(MAKEFILE_LIST)
+	@echo $(MSG_HID_BOOTLOADER_CMD) Programming FLASH with hid_bootloader_cli using \"$<\"
+	hid_bootloader_cli -mmcu=$(MCU) -v $<
+
+hid-teensy: $(TARGET).hex $(MAKEFILE_LIST)
+	@echo $(MSG_HID_BOOTLOADER_CMD) Programming FLASH with teensy_loader_cli using \"$<\"
+	teensy_loader_cli -mmcu=$(MCU) -v $<
+
+# Phony build targets for this module
+.PHONY: hid hid-teensy
diff --git a/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h b/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h
index 731d1b05bfdf58e5cb9f9ddb3ef822f4d69dcabd..60d81b782ef47bd5bb2a3c2765aaf6fae70b47ac 100644
--- a/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h
+++ b/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h
@@ -1,208 +1,208 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *  \brief Board specific Buttons driver header for the Micropendous series boards.
- *  \copydetails Group_Buttons_MICROPENDOUS_32U2
- *
- *  \note This file should not be included directly. It is automatically included as needed by the Buttons driver
- *        dispatch header located in LUFA/Drivers/Board/Buttons.h.
- */
-
-/** \ingroup Group_Buttons
- *  \defgroup Group_Buttons_MICROPENDOUS_A MICROPENDOUS_A
- *  \brief Board specific Button driver header for the Micropendous A (https://code.google.com/p/micropendous/wiki/MicropendousA).
- *
- *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
- */
-
-/** \ingroup Group_Buttons
- *  \defgroup Group_Buttons_MICROPENDOUS_1 MICROPENDOUS_1
- *  \brief Board specific Button driver header for the Micropendous 1 (https://code.google.com/p/micropendous/wiki/Micropendous1).
- *
- *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
- */
-
-/** \ingroup Group_Buttons
- *  \defgroup Group_Buttons_MICROPENDOUS_2 MICROPENDOUS_2
- *  \brief Board specific Button driver header for the Micropendous 2 (https://code.google.com/p/micropendous/wiki/Micropendous2).
- *
- *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
- */
- 
-/** \ingroup Group_Buttons
- *  \defgroup Group_Buttons_MICROPENDOUS_3 MICROPENDOUS_3
- *  \brief Board specific Button driver header for the Micropendous 3 (https://code.google.com/p/micropendous/wiki/Micropendous3).
- *
- *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
- */
- 
-/** \ingroup Group_Buttons
- *  \defgroup Group_Buttons_MICROPENDOUS_4 MICROPENDOUS_4
- *  \brief Board specific Button driver header for the Micropendous 4 (https://code.google.com/p/micropendous/wiki/Micropendous4).
- *
- *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
- */
-
-/** \ingroup Group_Buttons
- *  \defgroup Group_Buttons_MICROPENDOUS_DIP MICROPENDOUS_DIP
- *  \brief Board specific Button driver header for the Micropendous DIP (https://code.google.com/p/micropendous/wiki/MicropendousDIP).
- *
- *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
- */
-
-/** \ingroup Group_Buttons
- *  \defgroup Group_Buttons_MICROPENDOUS_REV1 MICROPENDOUS_REV1
- *  \brief Board specific Button driver header for the Micropendous Arduino-like Revision 1 (https://code.google.com/p/micropendous/wiki/Micropendous).
- *
- *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
- */
-
-/** \ingroup Group_Buttons
- *  \defgroup Group_Buttons_MICROPENDOUS_REV2 MICROPENDOUS_REV2
- *  \brief Board specific Button driver header for the Micropendous Arduino-like Revision 2 (https://code.google.com/p/micropendous/wiki/Micropendous).
- *
- *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
- */
-
-/** \ingroup Group_Buttons
- *  \defgroup Group_Buttons_MICROPENDOUS_32U2 MICROPENDOUS_32U2
- *  \brief Board specific Buttons driver header for the Micropendous 32U2.
- *
- *  \note There are multiple supported Micropendous boards, compile with <code>BOARD = MICROPENDOUS_{VERSION}</code>.
- *
- *  Board specific Buttons driver header for the Micropendous 32U2 (https://code.google.com/p/micropendous/wiki/Micropendous_32U2).
- *
- *  <b>BOARD_MICROPENDOUS_1 and BOARD_MICROPENDOUS_32U2</b>:
- *  <table>
- *    <tr><th>Name</th><th>Info</th><th>Active Level</th><th>Port Pin</th></tr>
- *    <tr><td>BUTTONS_BUTTON1</td><td>HWB Button</td><td>Low</td><td>PORTD.7</td></tr>
- *  </table>
- *
- *  <b>Other Revisions</b>:
- *  <table>
- *    <tr><th>Name</th><th>Info</th><th>Active Level</th><th>Port Pin</th></tr>
- *    <tr><td>BUTTONS_BUTTON1</td><td>HWB Button</td><td>Low</td><td>PORTE.2</td></tr>
- *  </table>
- *
- *  @{
- */
-
-#ifndef __BUTTONS_MICROPENDOUS_H__
-#define __BUTTONS_MICROPENDOUS_H__
-
-	/* Includes: */
-		#include "../../../../Common/Common.h"
-
-	/* Enable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			extern "C" {
-		#endif
-
-	/* Preprocessor Checks: */
-		#if !defined(__INCLUDE_FROM_BUTTONS_H)
-			#error Do not include this file directly. Include LUFA/Drivers/Board/Buttons.h instead.
-		#endif
-
-	/* Private Interface - For use in library only: */
-	#if !defined(__DOXYGEN__)
-		#if (BOARD == BOARD_MICROPENDOUS_32U2)
-			#define _BOARD_BUTTON1_MASK             (1 << 7)
-			#define _BOARD_BUTTON_PORTLETTER        D
-		#elif (BOARD == BOARD_MICROPENDOUS_A)
-			#define _BOARD_BUTTON1_MASK             (1 << 2)
-			#define _BOARD_BUTTON_PORTLETTER        E
-		#elif (BOARD == BOARD_MICROPENDOUS_1)
-			#define _BOARD_BUTTON1_MASK             (1 << 7)
-			#define _BOARD_BUTTON_PORTLETTER        D
-		#elif (BOARD == BOARD_MICROPENDOUS_2)
-			#define _BOARD_BUTTON1_MASK             (1 << 2)
-			#define _BOARD_BUTTON_PORTLETTER        E
-		#elif (BOARD == BOARD_MICROPENDOUS_3)
-			#define _BOARD_BUTTON1_MASK             (1 << 2)
-			#define _BOARD_BUTTON_PORTLETTER        E
-		#elif (BOARD == BOARD_MICROPENDOUS_4)
-			#define _BOARD_BUTTON1_MASK             (1 << 2)
-			#define _BOARD_BUTTON_PORTLETTER        E
-		#elif (BOARD == BOARD_MICROPENDOUS_DIP)
-			#define _BOARD_BUTTON1_MASK             (1 << 2)
-			#define _BOARD_BUTTON_PORTLETTER        E
-		#elif (BOARD == BOARD_MICROPENDOUS_REV1)
-			#define _BOARD_BUTTON1_MASK             (1 << 2)
-			#define _BOARD_BUTTON_PORTLETTER        E
-		#elif (BOARD == BOARD_MICROPENDOUS_REV2)
-			#define _BOARD_BUTTON1_MASK             (1 << 2)
-			#define _BOARD_BUTTON_PORTLETTER        E
-		#endif
-		
-		#define _BOARD_BUTTON_CONCAT2(Reg, Letter)  Reg ## Letter
-		#define _BOARD_BUTTON_CONCAT(Reg, Letter)   _BOARD_BUTTON_CONCAT2(Reg, Letter)
-
-		#define _BOARD_BUTTON_PORT                 _BOARD_BUTTON_CONCAT(PORT, _BOARD_BUTTON_PORTLETTER)
-		#define _BOARD_BUTTON_PIN                  _BOARD_BUTTON_CONCAT(PIN,  _BOARD_BUTTON_PORTLETTER)
-		#define _BOARD_BUTTON_DDR                  _BOARD_BUTTON_CONCAT(DDR,  _BOARD_BUTTON_PORTLETTER)
-	#endif
-
-	/* Public Interface - May be used in end-application: */
-		/* Macros: */
-			/** Button mask for the first button on the board. */
-			#define BUTTONS_BUTTON1                _BOARD_BUTTON1_MASK
-
-		/* Inline Functions: */
-		#if !defined(__DOXYGEN__)
-			static inline void Buttons_Init(void)
-			{
-				_BOARD_BUTTON_DDR  &= ~BUTTONS_BUTTON1;
-				_BOARD_BUTTON_PORT |=  BUTTONS_BUTTON1;
-			}
-
-			static inline void Buttons_Disable(void)
-			{
-				_BOARD_BUTTON_DDR  &= ~BUTTONS_BUTTON1;
-				_BOARD_BUTTON_PORT &= ~BUTTONS_BUTTON1;
-			}
-
-			static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
-			static inline uint8_t Buttons_GetStatus(void)
-			{
-				return ((_BOARD_BUTTON_PIN & BUTTONS_BUTTON1) ^ BUTTONS_BUTTON1);
-			}
-		#endif
-
-	/* Disable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			}
-		#endif
-
-#endif
-
-/** @} */
-
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *  \brief Board specific Buttons driver header for the Micropendous series boards.
+ *  \copydetails Group_Buttons_MICROPENDOUS_32U2
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the Buttons driver
+ *        dispatch header located in LUFA/Drivers/Board/Buttons.h.
+ */
+
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_MICROPENDOUS_A MICROPENDOUS_A
+ *  \brief Board specific Button driver header for the Micropendous A (https://code.google.com/p/micropendous/wiki/MicropendousA).
+ *
+ *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
+ */
+
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_MICROPENDOUS_1 MICROPENDOUS_1
+ *  \brief Board specific Button driver header for the Micropendous 1 (https://code.google.com/p/micropendous/wiki/Micropendous1).
+ *
+ *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
+ */
+
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_MICROPENDOUS_2 MICROPENDOUS_2
+ *  \brief Board specific Button driver header for the Micropendous 2 (https://code.google.com/p/micropendous/wiki/Micropendous2).
+ *
+ *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
+ */
+ 
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_MICROPENDOUS_3 MICROPENDOUS_3
+ *  \brief Board specific Button driver header for the Micropendous 3 (https://code.google.com/p/micropendous/wiki/Micropendous3).
+ *
+ *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
+ */
+ 
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_MICROPENDOUS_4 MICROPENDOUS_4
+ *  \brief Board specific Button driver header for the Micropendous 4 (https://code.google.com/p/micropendous/wiki/Micropendous4).
+ *
+ *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
+ */
+
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_MICROPENDOUS_DIP MICROPENDOUS_DIP
+ *  \brief Board specific Button driver header for the Micropendous DIP (https://code.google.com/p/micropendous/wiki/MicropendousDIP).
+ *
+ *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
+ */
+
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_MICROPENDOUS_REV1 MICROPENDOUS_REV1
+ *  \brief Board specific Button driver header for the Micropendous Arduino-like Revision 1 (https://code.google.com/p/micropendous/wiki/Micropendous).
+ *
+ *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
+ */
+
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_MICROPENDOUS_REV2 MICROPENDOUS_REV2
+ *  \brief Board specific Button driver header for the Micropendous Arduino-like Revision 2 (https://code.google.com/p/micropendous/wiki/Micropendous).
+ *
+ *  See \ref Group_Buttons_MICROPENDOUS_32U2 for more details.
+ */
+
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_MICROPENDOUS_32U2 MICROPENDOUS_32U2
+ *  \brief Board specific Buttons driver header for the Micropendous 32U2.
+ *
+ *  \note There are multiple supported Micropendous boards, compile with <code>BOARD = MICROPENDOUS_{VERSION}</code>.
+ *
+ *  Board specific Buttons driver header for the Micropendous 32U2 (https://code.google.com/p/micropendous/wiki/Micropendous_32U2).
+ *
+ *  <b>BOARD_MICROPENDOUS_1 and BOARD_MICROPENDOUS_32U2</b>:
+ *  <table>
+ *    <tr><th>Name</th><th>Info</th><th>Active Level</th><th>Port Pin</th></tr>
+ *    <tr><td>BUTTONS_BUTTON1</td><td>HWB Button</td><td>Low</td><td>PORTD.7</td></tr>
+ *  </table>
+ *
+ *  <b>Other Revisions</b>:
+ *  <table>
+ *    <tr><th>Name</th><th>Info</th><th>Active Level</th><th>Port Pin</th></tr>
+ *    <tr><td>BUTTONS_BUTTON1</td><td>HWB Button</td><td>Low</td><td>PORTE.2</td></tr>
+ *  </table>
+ *
+ *  @{
+ */
+
+#ifndef __BUTTONS_MICROPENDOUS_H__
+#define __BUTTONS_MICROPENDOUS_H__
+
+	/* Includes: */
+		#include "../../../../Common/Common.h"
+
+	/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_BUTTONS_H)
+			#error Do not include this file directly. Include LUFA/Drivers/Board/Buttons.h instead.
+		#endif
+
+	/* Private Interface - For use in library only: */
+	#if !defined(__DOXYGEN__)
+		#if (BOARD == BOARD_MICROPENDOUS_32U2)
+			#define _BOARD_BUTTON1_MASK             (1 << 7)
+			#define _BOARD_BUTTON_PORTLETTER        D
+		#elif (BOARD == BOARD_MICROPENDOUS_A)
+			#define _BOARD_BUTTON1_MASK             (1 << 2)
+			#define _BOARD_BUTTON_PORTLETTER        E
+		#elif (BOARD == BOARD_MICROPENDOUS_1)
+			#define _BOARD_BUTTON1_MASK             (1 << 7)
+			#define _BOARD_BUTTON_PORTLETTER        D
+		#elif (BOARD == BOARD_MICROPENDOUS_2)
+			#define _BOARD_BUTTON1_MASK             (1 << 2)
+			#define _BOARD_BUTTON_PORTLETTER        E
+		#elif (BOARD == BOARD_MICROPENDOUS_3)
+			#define _BOARD_BUTTON1_MASK             (1 << 2)
+			#define _BOARD_BUTTON_PORTLETTER        E
+		#elif (BOARD == BOARD_MICROPENDOUS_4)
+			#define _BOARD_BUTTON1_MASK             (1 << 2)
+			#define _BOARD_BUTTON_PORTLETTER        E
+		#elif (BOARD == BOARD_MICROPENDOUS_DIP)
+			#define _BOARD_BUTTON1_MASK             (1 << 2)
+			#define _BOARD_BUTTON_PORTLETTER        E
+		#elif (BOARD == BOARD_MICROPENDOUS_REV1)
+			#define _BOARD_BUTTON1_MASK             (1 << 2)
+			#define _BOARD_BUTTON_PORTLETTER        E
+		#elif (BOARD == BOARD_MICROPENDOUS_REV2)
+			#define _BOARD_BUTTON1_MASK             (1 << 2)
+			#define _BOARD_BUTTON_PORTLETTER        E
+		#endif
+		
+		#define _BOARD_BUTTON_CONCAT2(Reg, Letter)  Reg ## Letter
+		#define _BOARD_BUTTON_CONCAT(Reg, Letter)   _BOARD_BUTTON_CONCAT2(Reg, Letter)
+
+		#define _BOARD_BUTTON_PORT                 _BOARD_BUTTON_CONCAT(PORT, _BOARD_BUTTON_PORTLETTER)
+		#define _BOARD_BUTTON_PIN                  _BOARD_BUTTON_CONCAT(PIN,  _BOARD_BUTTON_PORTLETTER)
+		#define _BOARD_BUTTON_DDR                  _BOARD_BUTTON_CONCAT(DDR,  _BOARD_BUTTON_PORTLETTER)
+	#endif
+
+	/* Public Interface - May be used in end-application: */
+		/* Macros: */
+			/** Button mask for the first button on the board. */
+			#define BUTTONS_BUTTON1                _BOARD_BUTTON1_MASK
+
+		/* Inline Functions: */
+		#if !defined(__DOXYGEN__)
+			static inline void Buttons_Init(void)
+			{
+				_BOARD_BUTTON_DDR  &= ~BUTTONS_BUTTON1;
+				_BOARD_BUTTON_PORT |=  BUTTONS_BUTTON1;
+			}
+
+			static inline void Buttons_Disable(void)
+			{
+				_BOARD_BUTTON_DDR  &= ~BUTTONS_BUTTON1;
+				_BOARD_BUTTON_PORT &= ~BUTTONS_BUTTON1;
+			}
+
+			static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint8_t Buttons_GetStatus(void)
+			{
+				return ((_BOARD_BUTTON_PIN & BUTTONS_BUTTON1) ^ BUTTONS_BUTTON1);
+			}
+		#endif
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+
+#endif
+
+/** @} */
+
 
diff --git a/LUFA/Drivers/Board/AVR8/USB2AX/Buttons.h b/LUFA/Drivers/Board/AVR8/USB2AX/Buttons.h
index 73d05a5b39e92372f9d9cf31b4ebdda2e02e21d8..cb0eecdf683d376e9d67c0f040d02cae889c5843 100644
--- a/LUFA/Drivers/Board/AVR8/USB2AX/Buttons.h
+++ b/LUFA/Drivers/Board/AVR8/USB2AX/Buttons.h
@@ -1,113 +1,113 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *  \brief Board specific Buttons driver header for the Paranoid Studio USB2AX.
- *  \copydetails Group_Buttons_USB2AX
- *
- *  \note This file should not be included directly. It is automatically included as needed by the Buttons driver
- *        dispatch header located in LUFA/Drivers/Board/Buttons.h.
- */
-
-/** \ingroup Group_Buttons
- *  \defgroup Group_Buttons_USB2AX_V3 USB2AX_V3
- *  \brief Board specific Button driver header for the Paranoid Studio USB2AX revision 3.
- *
- *  See \ref Group_Buttons_USB2AX for more details.
- */
-
-/** \ingroup Group_Buttons
- *  \defgroup Group_Buttons_USB2AX USB2AX
- *  \brief Board specific Buttons driver header for the Paranoid Studio USB2AX.
- *
- *  \note For version 3 USB2AX boards, compile with <code>BOARD = USB2AX_V3</code>.
- *
- *  Board specific Buttons driver header for the Paranoid Studio USB2AX (http://paranoidstudio.assembla.com/wiki/show/paranoidstudio/USB2AX).
- *
- *  <table>
- *    <tr><th>Name</th><th>Info</th><th>Active Level</th><th>Port Pin</th></tr>
- *    <tr><td>BUTTONS_BUTTON1</td><td>HWB Button</td><td>Low</td><td>PORTD.7</td></tr>
- *  </table>
- *
- *  @{
- */
-
-#ifndef __BUTTONS_USB2AX_H__
-#define __BUTTONS_USB2AX_H__
-
-	/* Includes: */
-		#include "../../../../Common/Common.h"
-
-	/* Enable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			extern "C" {
-		#endif
-
-	/* Preprocessor Checks: */
-		#if !defined(__INCLUDE_FROM_BUTTONS_H)
-			#error Do not include this file directly. Include LUFA/Drivers/Board/Buttons.h instead.
-		#endif
-
-	/* Public Interface - May be used in end-application: */
-		/* Macros: */
-			/** Button mask for the first button on the board. */
-			#define BUTTONS_BUTTON1      (1 << 7)
-
-		/* Inline Functions: */
-		#if !defined(__DOXYGEN__)
-			static inline void Buttons_Init(void)
-			{
-				DDRD  &= ~BUTTONS_BUTTON1;
-				PORTD |=  BUTTONS_BUTTON1;
-			}
-
-			static inline void Buttons_Disable(void)
-			{
-				DDRD  &= ~BUTTONS_BUTTON1;
-				PORTD &= ~BUTTONS_BUTTON1;
-			}
-
-			static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
-			static inline uint8_t Buttons_GetStatus(void)
-			{
-				return ((PIND & BUTTONS_BUTTON1) ^ BUTTONS_BUTTON1);
-			}
-		#endif
-
-	/* Disable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			}
-		#endif
-
-#endif
-
-/** @} */
-
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *  \brief Board specific Buttons driver header for the Paranoid Studio USB2AX.
+ *  \copydetails Group_Buttons_USB2AX
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the Buttons driver
+ *        dispatch header located in LUFA/Drivers/Board/Buttons.h.
+ */
+
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_USB2AX_V3 USB2AX_V3
+ *  \brief Board specific Button driver header for the Paranoid Studio USB2AX revision 3.
+ *
+ *  See \ref Group_Buttons_USB2AX for more details.
+ */
+
+/** \ingroup Group_Buttons
+ *  \defgroup Group_Buttons_USB2AX USB2AX
+ *  \brief Board specific Buttons driver header for the Paranoid Studio USB2AX.
+ *
+ *  \note For version 3 USB2AX boards, compile with <code>BOARD = USB2AX_V3</code>.
+ *
+ *  Board specific Buttons driver header for the Paranoid Studio USB2AX (http://paranoidstudio.assembla.com/wiki/show/paranoidstudio/USB2AX).
+ *
+ *  <table>
+ *    <tr><th>Name</th><th>Info</th><th>Active Level</th><th>Port Pin</th></tr>
+ *    <tr><td>BUTTONS_BUTTON1</td><td>HWB Button</td><td>Low</td><td>PORTD.7</td></tr>
+ *  </table>
+ *
+ *  @{
+ */
+
+#ifndef __BUTTONS_USB2AX_H__
+#define __BUTTONS_USB2AX_H__
+
+	/* Includes: */
+		#include "../../../../Common/Common.h"
+
+	/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_BUTTONS_H)
+			#error Do not include this file directly. Include LUFA/Drivers/Board/Buttons.h instead.
+		#endif
+
+	/* Public Interface - May be used in end-application: */
+		/* Macros: */
+			/** Button mask for the first button on the board. */
+			#define BUTTONS_BUTTON1      (1 << 7)
+
+		/* Inline Functions: */
+		#if !defined(__DOXYGEN__)
+			static inline void Buttons_Init(void)
+			{
+				DDRD  &= ~BUTTONS_BUTTON1;
+				PORTD |=  BUTTONS_BUTTON1;
+			}
+
+			static inline void Buttons_Disable(void)
+			{
+				DDRD  &= ~BUTTONS_BUTTON1;
+				PORTD &= ~BUTTONS_BUTTON1;
+			}
+
+			static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint8_t Buttons_GetStatus(void)
+			{
+				return ((PIND & BUTTONS_BUTTON1) ^ BUTTONS_BUTTON1);
+			}
+		#endif
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+
+#endif
+
+/** @} */
+
 
diff --git a/LUFA/Drivers/Board/AVR8/USB2AX/LEDs.h b/LUFA/Drivers/Board/AVR8/USB2AX/LEDs.h
index 12fa73cd175b0bfedfd0f9d7705deb7433c1bc7f..364c88de206496529d47eeb82ad62a5959181ad0 100644
--- a/LUFA/Drivers/Board/AVR8/USB2AX/LEDs.h
+++ b/LUFA/Drivers/Board/AVR8/USB2AX/LEDs.h
@@ -1,196 +1,196 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *  \brief Board specific LED driver header for the Paranoid Studio USB2AX.
- *  \copydetails Group_LEDs_USB2AX
- *
- *  \note This file should not be included directly. It is automatically included as needed by the LEDs driver
- *        dispatch header located in LUFA/Drivers/Board/LEDs.h.
- */
- 
-/** \ingroup Group_LEDs
- *  \defgroup Group_LEDs_USB2AX_V3 USB2AX_V3
- *  \brief Board specific LED driver header for the Paranoid Studio USB2AX revision 3.
- *
- *  See \ref Group_LEDs_USB2AX for more details.
- */
-
-/** \ingroup Group_LEDs
- *  \defgroup Group_LEDs_USB2AX USB2AX
- *  \brief Board specific LED driver header for the Paranoid Studio USB2AX.
- *
- *  \note For version 3 USB2AX boards, compile with <code>BOARD = USB2AX_V3</code>.
- *
- *  Board specific LED driver header for the Paranoid Studio USB2AX (http://paranoidstudio.assembla.com/wiki/show/paranoidstudio/USB2AX).
- *
- *  <b>USB2AX</b>:
- *  <table>
- *    <tr><th>Name</th><th>Color</th><th>Info</th><th>Active Level</th><th>Port Pin</th></tr>
- *    <tr><td>LEDS_LED1</td><td>Green</td><td>General Indicator</td><td>High</td><td>PORTC.6</td></tr>
- *  </table>
- *
- *  <b>USB2AX_V3</b>:
- *  <table>
- *    <tr><th>Name</th><th>Color</th><th>Info</th><th>Active Level</th><th>Port Pin</th></tr>
- *    <tr><td>LEDS_LED1</td><td>Green</td><td>General Indicator</td><td>High</td><td>PORTD.1</td></tr>
- *  </table>
- *
- *  @{
- */
-
-#ifndef __LEDS_USB2AX_H__
-#define __LEDS_USB2AX_H__
-
-	/* Includes: */
-		#include "../../../../Common/Common.h"
-
-	/* Enable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			extern "C" {
-		#endif
-
-	/* Preprocessor Checks: */
-		#if !defined(__INCLUDE_FROM_LEDS_H)
-			#error Do not include this file directly. Include LUFA/Drivers/Board/LEDS.h instead.
-		#endif
-
-	/* Private Interface - For use in library only: */
-	#if !defined(__DOXYGEN__)
-		/* Macros: */
-			#if (BOARD == BOARD_USB2AX)
-				#define USB2AX_LEDS_LED1   (1 << 6)
-			#else
-				#define USB2AX_LEDS_LED1   (1 << 1)			
-			#endif
-	#endif
-
-	/* Public Interface - May be used in end-application: */
-		/* Macros: */
-			/** LED mask for the first LED on the board. */
-			#define LEDS_LED1        USB2AX_LEDS_LED1
-
-			/** LED mask for all the LEDs on the board. */
-			#define LEDS_ALL_LEDS    LEDS_LED1
-
-			/** LED mask for none of the board LEDs. */
-			#define LEDS_NO_LEDS     0
-
-		/* Inline Functions: */
-		#if !defined(__DOXYGEN__)
-			static inline void LEDs_Init(void)
-			{
-				#if (BOARD == BOARD_USB2AX)
-				DDRC  |=  LEDS_ALL_LEDS;
-				PORTC &= ~LEDS_ALL_LEDS;				
-				#else
-				DDRD  |=  LEDS_ALL_LEDS;
-				PORTD &= ~LEDS_ALL_LEDS;				
-				#endif				
-			}
-
-			static inline void LEDs_Disable(void)
-			{
-				#if (BOARD == BOARD_USB2AX)
-				DDRC  &= ~LEDS_ALL_LEDS;
-				PORTC &= ~LEDS_ALL_LEDS;				
-				#else
-				DDRD  &= ~LEDS_ALL_LEDS;
-				PORTD &= ~LEDS_ALL_LEDS;				
-				#endif				
-			}
-
-			static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
-			{
-				#if (BOARD == BOARD_USB2AX)
-				PORTC |= LEDMask;				
-				#else
-				PORTD |= LEDMask;
-				#endif
-			}
-
-			static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
-			{
-				#if (BOARD == BOARD_USB2AX)
-				PORTC &= ~LEDMask;
-				#else
-				PORTD &= ~LEDMask;
-				#endif
-			}
-
-			static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
-			{
-				#if (BOARD == BOARD_USB2AX)
-				PORTC = ((PORTC & ~LEDS_ALL_LEDS) | LEDMask);				
-				#else
-				PORTD = ((PORTD & ~LEDS_ALL_LEDS) | LEDMask);
-				#endif
-			}
-
-			static inline void LEDs_ChangeLEDs(const uint8_t LEDMask,
-			                                   const uint8_t ActiveMask)
-			{
-				#if (BOARD == BOARD_USB2AX)
-				PORTC = ((PORTC & ~LEDMask) | ActiveMask);				
-				#else
-				PORTD = ((PORTD & ~LEDMask) | ActiveMask);
-				#endif
-			}
-
-			static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
-			{
-				#if (BOARD == BOARD_USB2AX)
-				PINC  = LEDMask;				
-				#else
-				PIND  = LEDMask;
-				#endif
-			}
-
-			static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
-			static inline uint8_t LEDs_GetLEDs(void)
-			{
-				#if (BOARD == BOARD_USB2AX)
-				return (PORTC & LEDS_ALL_LEDS);				
-				#else
-				return (PORTD & LEDS_ALL_LEDS);
-				#endif
-			}
-		#endif
-
-	/* Disable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			}
-		#endif
-
-#endif
-
-/** @} */
-
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *  \brief Board specific LED driver header for the Paranoid Studio USB2AX.
+ *  \copydetails Group_LEDs_USB2AX
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the LEDs driver
+ *        dispatch header located in LUFA/Drivers/Board/LEDs.h.
+ */
+ 
+/** \ingroup Group_LEDs
+ *  \defgroup Group_LEDs_USB2AX_V3 USB2AX_V3
+ *  \brief Board specific LED driver header for the Paranoid Studio USB2AX revision 3.
+ *
+ *  See \ref Group_LEDs_USB2AX for more details.
+ */
+
+/** \ingroup Group_LEDs
+ *  \defgroup Group_LEDs_USB2AX USB2AX
+ *  \brief Board specific LED driver header for the Paranoid Studio USB2AX.
+ *
+ *  \note For version 3 USB2AX boards, compile with <code>BOARD = USB2AX_V3</code>.
+ *
+ *  Board specific LED driver header for the Paranoid Studio USB2AX (http://paranoidstudio.assembla.com/wiki/show/paranoidstudio/USB2AX).
+ *
+ *  <b>USB2AX</b>:
+ *  <table>
+ *    <tr><th>Name</th><th>Color</th><th>Info</th><th>Active Level</th><th>Port Pin</th></tr>
+ *    <tr><td>LEDS_LED1</td><td>Green</td><td>General Indicator</td><td>High</td><td>PORTC.6</td></tr>
+ *  </table>
+ *
+ *  <b>USB2AX_V3</b>:
+ *  <table>
+ *    <tr><th>Name</th><th>Color</th><th>Info</th><th>Active Level</th><th>Port Pin</th></tr>
+ *    <tr><td>LEDS_LED1</td><td>Green</td><td>General Indicator</td><td>High</td><td>PORTD.1</td></tr>
+ *  </table>
+ *
+ *  @{
+ */
+
+#ifndef __LEDS_USB2AX_H__
+#define __LEDS_USB2AX_H__
+
+	/* Includes: */
+		#include "../../../../Common/Common.h"
+
+	/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_LEDS_H)
+			#error Do not include this file directly. Include LUFA/Drivers/Board/LEDS.h instead.
+		#endif
+
+	/* Private Interface - For use in library only: */
+	#if !defined(__DOXYGEN__)
+		/* Macros: */
+			#if (BOARD == BOARD_USB2AX)
+				#define USB2AX_LEDS_LED1   (1 << 6)
+			#else
+				#define USB2AX_LEDS_LED1   (1 << 1)			
+			#endif
+	#endif
+
+	/* Public Interface - May be used in end-application: */
+		/* Macros: */
+			/** LED mask for the first LED on the board. */
+			#define LEDS_LED1        USB2AX_LEDS_LED1
+
+			/** LED mask for all the LEDs on the board. */
+			#define LEDS_ALL_LEDS    LEDS_LED1
+
+			/** LED mask for none of the board LEDs. */
+			#define LEDS_NO_LEDS     0
+
+		/* Inline Functions: */
+		#if !defined(__DOXYGEN__)
+			static inline void LEDs_Init(void)
+			{
+				#if (BOARD == BOARD_USB2AX)
+				DDRC  |=  LEDS_ALL_LEDS;
+				PORTC &= ~LEDS_ALL_LEDS;				
+				#else
+				DDRD  |=  LEDS_ALL_LEDS;
+				PORTD &= ~LEDS_ALL_LEDS;				
+				#endif				
+			}
+
+			static inline void LEDs_Disable(void)
+			{
+				#if (BOARD == BOARD_USB2AX)
+				DDRC  &= ~LEDS_ALL_LEDS;
+				PORTC &= ~LEDS_ALL_LEDS;				
+				#else
+				DDRD  &= ~LEDS_ALL_LEDS;
+				PORTD &= ~LEDS_ALL_LEDS;				
+				#endif				
+			}
+
+			static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
+			{
+				#if (BOARD == BOARD_USB2AX)
+				PORTC |= LEDMask;				
+				#else
+				PORTD |= LEDMask;
+				#endif
+			}
+
+			static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
+			{
+				#if (BOARD == BOARD_USB2AX)
+				PORTC &= ~LEDMask;
+				#else
+				PORTD &= ~LEDMask;
+				#endif
+			}
+
+			static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
+			{
+				#if (BOARD == BOARD_USB2AX)
+				PORTC = ((PORTC & ~LEDS_ALL_LEDS) | LEDMask);				
+				#else
+				PORTD = ((PORTD & ~LEDS_ALL_LEDS) | LEDMask);
+				#endif
+			}
+
+			static inline void LEDs_ChangeLEDs(const uint8_t LEDMask,
+			                                   const uint8_t ActiveMask)
+			{
+				#if (BOARD == BOARD_USB2AX)
+				PORTC = ((PORTC & ~LEDMask) | ActiveMask);				
+				#else
+				PORTD = ((PORTD & ~LEDMask) | ActiveMask);
+				#endif
+			}
+
+			static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
+			{
+				#if (BOARD == BOARD_USB2AX)
+				PINC  = LEDMask;				
+				#else
+				PIND  = LEDMask;
+				#endif
+			}
+
+			static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
+			static inline uint8_t LEDs_GetLEDs(void)
+			{
+				#if (BOARD == BOARD_USB2AX)
+				return (PORTC & LEDS_ALL_LEDS);				
+				#else
+				return (PORTD & LEDS_ALL_LEDS);
+				#endif
+			}
+		#endif
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+
+#endif
+
+/** @} */
+
 
diff --git a/LUFA/Drivers/USB/Class/AndroidAccessoryClass.h b/LUFA/Drivers/USB/Class/AndroidAccessoryClass.h
index 3cede6026744dc944dc8b487329e70c0f19ec87f..7b1fbfcc200a40014a87b517e139f3cb0556f4f6 100644
--- a/LUFA/Drivers/USB/Class/AndroidAccessoryClass.h
+++ b/LUFA/Drivers/USB/Class/AndroidAccessoryClass.h
@@ -1,76 +1,76 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *  \brief Master include file for the library USB Android Open Accessory Class driver.
- *
- *  Master include file for the library USB Android Open Accessory Class driver, for both host and device modes, where available.
- *
- *  This file should be included in all user projects making use of this optional class driver, instead of
- *  including any headers in the USB/ClassDriver/Device, USB/ClassDriver/Host or USB/ClassDriver/Common subdirectories.
- */
-
-/** \ingroup Group_USBClassDrivers
- *  \defgroup Group_USBClassAOA Android Open Accessory Class Driver
- *
- *  \section Sec_Dependencies Module Source Dependencies
- *  The following files must be built with any user project that uses this module:
- *    - LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c <i>(Makefile source module name: LUFA_SRC_USBCLASS)</i>
- *
- *  \section Sec_ModDescription Module Description
- *  Android Open Accessory Class Driver module. This module contains an internal implementation of the USB Android Open Accessory
- *  Class, for Host USB mode. User applications can use this class driver instead of implementing the Android Open Accessory Class
- *  manually via the low-level LUFA APIs.
- *
- *  This module is designed to simplify the user code by exposing only the required interface needed to interface with
- *  Host using the USB Android Open Accessory Class.
- *
- *  @{
- */
-
-#ifndef _AOA_CLASS_H_
-#define _AOA_CLASS_H_
-
-	/* Macros: */
-		#define __INCLUDE_FROM_USB_DRIVER
-		#define __INCLUDE_FROM_AOA_DRIVER
-
-	/* Includes: */
-		#include "../Core/USBMode.h"
-
-		#if defined(USB_CAN_BE_HOST)
-			#include "Host/AndroidAccessoryClassHost.h"
-		#endif
-
-#endif
-
-/** @} */
-
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *  \brief Master include file for the library USB Android Open Accessory Class driver.
+ *
+ *  Master include file for the library USB Android Open Accessory Class driver, for both host and device modes, where available.
+ *
+ *  This file should be included in all user projects making use of this optional class driver, instead of
+ *  including any headers in the USB/ClassDriver/Device, USB/ClassDriver/Host or USB/ClassDriver/Common subdirectories.
+ */
+
+/** \ingroup Group_USBClassDrivers
+ *  \defgroup Group_USBClassAOA Android Open Accessory Class Driver
+ *
+ *  \section Sec_Dependencies Module Source Dependencies
+ *  The following files must be built with any user project that uses this module:
+ *    - LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c <i>(Makefile source module name: LUFA_SRC_USBCLASS)</i>
+ *
+ *  \section Sec_ModDescription Module Description
+ *  Android Open Accessory Class Driver module. This module contains an internal implementation of the USB Android Open Accessory
+ *  Class, for Host USB mode. User applications can use this class driver instead of implementing the Android Open Accessory Class
+ *  manually via the low-level LUFA APIs.
+ *
+ *  This module is designed to simplify the user code by exposing only the required interface needed to interface with
+ *  Host using the USB Android Open Accessory Class.
+ *
+ *  @{
+ */
+
+#ifndef _AOA_CLASS_H_
+#define _AOA_CLASS_H_
+
+	/* Macros: */
+		#define __INCLUDE_FROM_USB_DRIVER
+		#define __INCLUDE_FROM_AOA_DRIVER
+
+	/* Includes: */
+		#include "../Core/USBMode.h"
+
+		#if defined(USB_CAN_BE_HOST)
+			#include "Host/AndroidAccessoryClassHost.h"
+		#endif
+
+#endif
+
+/** @} */
+
 
diff --git a/LUFA/Drivers/USB/Class/Common/AndroidAccessoryClassCommon.h b/LUFA/Drivers/USB/Class/Common/AndroidAccessoryClassCommon.h
index c1c0e8df0508b05b078c8c771ee0868fc4947f22..dc1289da65ffefd7e0a7af40204509a3a173589e 100644
--- a/LUFA/Drivers/USB/Class/Common/AndroidAccessoryClassCommon.h
+++ b/LUFA/Drivers/USB/Class/Common/AndroidAccessoryClassCommon.h
@@ -1,128 +1,128 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *  \brief Common definitions and declarations for the library USB Android Open Accessory Class driver.
- *
- *  Common definitions and declarations for the library USB Android Open Accessory Class driver.
- *
- *  \note This file should not be included directly. It is automatically included as needed by the USB module driver
- *        dispatch header located in LUFA/Drivers/USB.h.
- */
-
-/** \ingroup Group_USBClassAOA
- *  \defgroup Group_USBClassAOACommon  Common Class Definitions
- *
- *  \section Sec_ModDescription Module Description
- *  Constants, Types and Enum definitions that are common to both Device and Host modes for the USB
- *  Android Open Accessory Class.
- *
- *  @{
- */
-
-#ifndef _AOA_CLASS_COMMON_H_
-#define _AOA_CLASS_COMMON_H_
-
-	/* Includes: */
-		#include "../../Core/StdDescriptors.h"
-
-	/* Enable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			extern "C" {
-		#endif
-
-	/* Preprocessor Checks: */
-		#if !defined(__INCLUDE_FROM_AOA_DRIVER)
-			#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
-		#endif
-
-	/* Macros: */
-		/** Product ID value in a Device Descriptor to indicate an Android device in Open Accessory mode. */
-		#define ANDROID_ACCESSORY_PRODUCT_ID        0x2D00
-
-		/** Product ID value in a Device Descriptor to indicate an Android device in Open Accessory and Android Debug mode. */
-		#define ANDROID_ACCESSORY_ADB_PRODUCT_ID    0x2D01
-
-	/* Enums: */
-		/** Enum for possible Class, Subclass and Protocol values of device and interface descriptors relating to the
-		 *  Android Open Accessory class.
-		 */
-		enum AOA_Descriptor_ClassSubclassProtocol_t
-		{
-			AOA_CSCP_AOADataClass    = 0xFF, /**< Descriptor Class value indicating that the device or interface
-			                                  *   belongs to the AOA data class.
-			                                  */
-			AOA_CSCP_AOADataSubclass = 0xFF, /**< Descriptor Subclass value indicating that the device or interface
-			                                  *   belongs to AOA data subclass.
-			                                  */
-			AOA_CSCP_AOADataProtocol = 0x00, /**< Descriptor Protocol value indicating that the device or interface
-			                                  *   belongs to the AOA data class protocol.
-			                                  */
-		};
-
-		/** Enum for the Android Open Accessory class specific control requests that can be issued by the USB bus host. */
-		enum AOA_ClassRequests_t
-		{
-			AOA_REQ_GetAccessoryProtocol    = 0x33, /**< Android Open Accessory control request to retrieve the device's supported Accessory Protocol version. */
-			AOA_REQ_SendString              = 0x34, /**< Android Open Accessory control request to set an accessory property string in the device. */
-			AOA_REQ_StartAccessoryMode      = 0x35, /**< Android Open Accessory control request to switch the device into Accessory mode. */
-		};
-
-		/** Enum for the possible Android Open Accessory property string indexes. */
-		enum AOA_Strings_t
-		{
-			AOA_STRING_Manufacturer         = 0, /**< Index of the Manufacturer property string. */
-			AOA_STRING_Model                = 1, /**< Index of the Model Name property string. */
-			AOA_STRING_Description          = 2, /**< Index of the Description property string. */
-			AOA_STRING_Version              = 3, /**< Index of the Version Number property string. */
-			AOA_STRING_URI                  = 4, /**< Index of the URI Information property string. */
-			AOA_STRING_Serial               = 5, /**< Index of the Serial Number property string. */
-			
-			#if !defined(__DOXYGEN__)
-			AOA_STRING_TOTAL_STRINGS
-			#endif
-		};
-		
-		/** Enum for the possible Android Open Accessory protocol versions. */
-		enum AOA_Protocols_t
-		{
-			AOA_PROTOCOL_AccessoryV1        = 0x0001, /**< Android Open Accessory version 1. */
-		};
-
-	/* Disable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			}
-		#endif
-
-#endif
-
-/** @} */
-
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *  \brief Common definitions and declarations for the library USB Android Open Accessory Class driver.
+ *
+ *  Common definitions and declarations for the library USB Android Open Accessory Class driver.
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the USB module driver
+ *        dispatch header located in LUFA/Drivers/USB.h.
+ */
+
+/** \ingroup Group_USBClassAOA
+ *  \defgroup Group_USBClassAOACommon  Common Class Definitions
+ *
+ *  \section Sec_ModDescription Module Description
+ *  Constants, Types and Enum definitions that are common to both Device and Host modes for the USB
+ *  Android Open Accessory Class.
+ *
+ *  @{
+ */
+
+#ifndef _AOA_CLASS_COMMON_H_
+#define _AOA_CLASS_COMMON_H_
+
+	/* Includes: */
+		#include "../../Core/StdDescriptors.h"
+
+	/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_AOA_DRIVER)
+			#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
+		#endif
+
+	/* Macros: */
+		/** Product ID value in a Device Descriptor to indicate an Android device in Open Accessory mode. */
+		#define ANDROID_ACCESSORY_PRODUCT_ID        0x2D00
+
+		/** Product ID value in a Device Descriptor to indicate an Android device in Open Accessory and Android Debug mode. */
+		#define ANDROID_ACCESSORY_ADB_PRODUCT_ID    0x2D01
+
+	/* Enums: */
+		/** Enum for possible Class, Subclass and Protocol values of device and interface descriptors relating to the
+		 *  Android Open Accessory class.
+		 */
+		enum AOA_Descriptor_ClassSubclassProtocol_t
+		{
+			AOA_CSCP_AOADataClass    = 0xFF, /**< Descriptor Class value indicating that the device or interface
+			                                  *   belongs to the AOA data class.
+			                                  */
+			AOA_CSCP_AOADataSubclass = 0xFF, /**< Descriptor Subclass value indicating that the device or interface
+			                                  *   belongs to AOA data subclass.
+			                                  */
+			AOA_CSCP_AOADataProtocol = 0x00, /**< Descriptor Protocol value indicating that the device or interface
+			                                  *   belongs to the AOA data class protocol.
+			                                  */
+		};
+
+		/** Enum for the Android Open Accessory class specific control requests that can be issued by the USB bus host. */
+		enum AOA_ClassRequests_t
+		{
+			AOA_REQ_GetAccessoryProtocol    = 0x33, /**< Android Open Accessory control request to retrieve the device's supported Accessory Protocol version. */
+			AOA_REQ_SendString              = 0x34, /**< Android Open Accessory control request to set an accessory property string in the device. */
+			AOA_REQ_StartAccessoryMode      = 0x35, /**< Android Open Accessory control request to switch the device into Accessory mode. */
+		};
+
+		/** Enum for the possible Android Open Accessory property string indexes. */
+		enum AOA_Strings_t
+		{
+			AOA_STRING_Manufacturer         = 0, /**< Index of the Manufacturer property string. */
+			AOA_STRING_Model                = 1, /**< Index of the Model Name property string. */
+			AOA_STRING_Description          = 2, /**< Index of the Description property string. */
+			AOA_STRING_Version              = 3, /**< Index of the Version Number property string. */
+			AOA_STRING_URI                  = 4, /**< Index of the URI Information property string. */
+			AOA_STRING_Serial               = 5, /**< Index of the Serial Number property string. */
+			
+			#if !defined(__DOXYGEN__)
+			AOA_STRING_TOTAL_STRINGS
+			#endif
+		};
+		
+		/** Enum for the possible Android Open Accessory protocol versions. */
+		enum AOA_Protocols_t
+		{
+			AOA_PROTOCOL_AccessoryV1        = 0x0001, /**< Android Open Accessory version 1. */
+		};
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+
+#endif
+
+/** @} */
+
 
diff --git a/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c b/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c
index 7c564e01247f174f40b3588515da4d18bbf12d84..f71fa2b95b46278f3854bf3eeee5775febda96cf 100644
--- a/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c
+++ b/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c
@@ -1,422 +1,422 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-#define  __INCLUDE_FROM_USB_DRIVER
-#include "../../Core/USBMode.h"
-
-#if defined(USB_CAN_BE_HOST)
-
-#define  __INCLUDE_FROM_AOA_DRIVER
-#define  __INCLUDE_FROM_ANDROIDACCESSORY_HOST_C
-#include "AndroidAccessoryClassHost.h"
-
-bool AOA_Host_ValidateAccessoryDevice(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
-                                      const USB_Descriptor_Device_t* const DeviceDescriptor,
-                                      bool* const NeedModeSwitch)
-{
-	(void)AOAInterfaceInfo;
-
-	if (DeviceDescriptor->Header.Type != DTYPE_Device)
-	  return false;
-
-	*NeedModeSwitch = ((DeviceDescriptor->ProductID != ANDROID_ACCESSORY_PRODUCT_ID) &&
-	                   (DeviceDescriptor->ProductID != ANDROID_ACCESSORY_ADB_PRODUCT_ID));
-
-	return true;
-}
-
-uint8_t AOA_Host_ConfigurePipes(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
-                                uint16_t ConfigDescriptorSize,
-                                void* ConfigDescriptorData)
-{
-	USB_Descriptor_Endpoint_t*  DataINEndpoint  = NULL;
-	USB_Descriptor_Endpoint_t*  DataOUTEndpoint = NULL;
-	USB_Descriptor_Interface_t* AOAInterface    = NULL;
-
-	memset(&AOAInterfaceInfo->State, 0x00, sizeof(AOAInterfaceInfo->State));
-
-	if (DESCRIPTOR_TYPE(ConfigDescriptorData) != DTYPE_Configuration)
-	  return AOA_ENUMERROR_InvalidConfigDescriptor;
-	
-	if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
-	                              DCOMP_AOA_Host_NextAndroidAccessoryInterface) != DESCRIPTOR_SEARCH_COMP_Found)
-	{
-		return AOA_ENUMERROR_NoCompatibleInterfaceFound;
-	}
-	
-	AOAInterface = DESCRIPTOR_PCAST(ConfigDescriptorData, USB_Descriptor_Interface_t);
-
-	while (!(DataINEndpoint) || !(DataOUTEndpoint))
-	{
-		if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
-		                              DCOMP_AOA_Host_NextInterfaceBulkEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
-		{
-			return AOA_ENUMERROR_NoCompatibleInterfaceFound;
-		}
-
-		USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(ConfigDescriptorData, USB_Descriptor_Endpoint_t);
-
-		if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_IN)
-		  DataINEndpoint  = EndpointData;
-		else
-		  DataOUTEndpoint = EndpointData;
-	}
-
-	AOAInterfaceInfo->Config.DataINPipe.Size  = le16_to_cpu(DataINEndpoint->EndpointSize);
-	AOAInterfaceInfo->Config.DataINPipe.EndpointAddress = DataINEndpoint->EndpointAddress;
-	AOAInterfaceInfo->Config.DataINPipe.Type  = EP_TYPE_BULK;
-	
-	AOAInterfaceInfo->Config.DataOUTPipe.Size = le16_to_cpu(DataOUTEndpoint->EndpointSize);
-	AOAInterfaceInfo->Config.DataOUTPipe.EndpointAddress = DataOUTEndpoint->EndpointAddress;
-	AOAInterfaceInfo->Config.DataOUTPipe.Type = EP_TYPE_BULK;
-	
-	if (!(Pipe_ConfigurePipeTable(&AOAInterfaceInfo->Config.DataINPipe, 1)))
-	  return false;
-	
-	if (!(Pipe_ConfigurePipeTable(&AOAInterfaceInfo->Config.DataOUTPipe, 1)))
-	  return false;
-
-	AOAInterfaceInfo->State.IsActive        = true;
-	AOAInterfaceInfo->State.InterfaceNumber = AOAInterface->InterfaceNumber;
-
-	return AOA_ENUMERROR_NoError;
-}
-
-static uint8_t DCOMP_AOA_Host_NextAndroidAccessoryInterface(void* const CurrentDescriptor)
-{
-	USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t);
-
-	if (Header->Type == DTYPE_Interface)
-	{
-		USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t);
-
-		if ((Interface->Class    == AOA_CSCP_AOADataClass)    &&
-		    (Interface->SubClass == AOA_CSCP_AOADataSubclass) &&
-		    (Interface->Protocol == AOA_CSCP_AOADataProtocol))
-		{
-			return DESCRIPTOR_SEARCH_Found;
-		}
-	}
-
-	return DESCRIPTOR_SEARCH_NotFound;
-}
-
-static uint8_t DCOMP_AOA_Host_NextInterfaceBulkEndpoint(void* const CurrentDescriptor)
-{
-	USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t);
-
-	if (Header->Type == DTYPE_Endpoint)
-	{
-		USB_Descriptor_Endpoint_t* Endpoint = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Endpoint_t);
-
-		uint8_t EndpointType = (Endpoint->Attributes & EP_TYPE_MASK);
-
-		if ((EndpointType == EP_TYPE_BULK) && (!(Pipe_IsEndpointBound(Endpoint->EndpointAddress))))
-		  return DESCRIPTOR_SEARCH_Found;
-	}
-	else if (Header->Type == DTYPE_Interface)
-	{
-		return DESCRIPTOR_SEARCH_Fail;
-	}
-
-	return DESCRIPTOR_SEARCH_NotFound;
-}
-
-void AOA_Host_USBTask(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo)
-{
-	if ((USB_HostState != HOST_STATE_Configured) || !(AOAInterfaceInfo->State.IsActive))
-	  return;
-
-	#if !defined(NO_CLASS_DRIVER_AUTOFLUSH)
-	AOA_Host_Flush(AOAInterfaceInfo);
-	#endif
-}
-
-uint8_t AOA_Host_StartAccessoryMode(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo)
-{
-	uint8_t ErrorCode;
-	
-	uint16_t AccessoryProtocol;
-	if ((ErrorCode = AOA_Host_GetAccessoryProtocol(&AccessoryProtocol)) != HOST_WAITERROR_Successful)
-	  return ErrorCode;
-
-	if (AccessoryProtocol != CPU_TO_LE16(AOA_PROTOCOL_AccessoryV1))
-	  return AOA_ERROR_LOGICAL_CMD_FAILED;
-
-	for (uint8_t PropertyIndex = 0; PropertyIndex < AOA_STRING_TOTAL_STRINGS; PropertyIndex++)
-	{
-		if ((ErrorCode = AOA_Host_SendPropertyString(AOAInterfaceInfo, PropertyIndex)) != HOST_WAITERROR_Successful)
-		  return ErrorCode;
-	}
-
-	USB_ControlRequest = (USB_Request_Header_t)
-	{
-		.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_VENDOR | REQREC_DEVICE),
-		.bRequest      = AOA_REQ_StartAccessoryMode,
-		.wValue        = 0,
-		.wIndex        = 0,
-		.wLength       = 0,
-	};
-
-	Pipe_SelectPipe(PIPE_CONTROLPIPE);
-	return USB_Host_SendControlRequest(NULL);	
-}
-
-static uint8_t AOA_Host_GetAccessoryProtocol(uint16_t* const Protocol)
-{
-	USB_ControlRequest = (USB_Request_Header_t)
-	{
-		.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_VENDOR | REQREC_DEVICE),
-		.bRequest      = AOA_REQ_GetAccessoryProtocol,
-		.wValue        = 0,
-		.wIndex        = 0,
-		.wLength       = sizeof(uint16_t),
-	};
-
-	Pipe_SelectPipe(PIPE_CONTROLPIPE);
-	return USB_Host_SendControlRequest(Protocol);
-}
-
-static uint8_t AOA_Host_SendPropertyString(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
-                                           const uint8_t StringIndex)
-{	
-	const char* String = AOAInterfaceInfo->Config.PropertyStrings[StringIndex];
-	
-	if (String == NULL)
-	  String = "";
-
-	USB_ControlRequest = (USB_Request_Header_t)
-	{
-		.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_VENDOR | REQREC_DEVICE),
-		.bRequest      = AOA_REQ_SendString,
-		.wValue        = 0,
-		.wIndex        = StringIndex,
-		.wLength       = (strlen(String) + 1),
-	};
-
-	Pipe_SelectPipe(PIPE_CONTROLPIPE);
-	return USB_Host_SendControlRequest((char*)String);
-}
-
-uint8_t AOA_Host_SendData(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
-                          const uint8_t* const Buffer,
-                          const uint16_t Length)
-{
-	if ((USB_HostState != HOST_STATE_Configured) || !(AOAInterfaceInfo->State.IsActive))
-	  return PIPE_READYWAIT_DeviceDisconnected;
-
-	uint8_t ErrorCode;
-
-	Pipe_SelectPipe(AOAInterfaceInfo->Config.DataOUTPipe.Address);
-
-	Pipe_Unfreeze();
-	ErrorCode = Pipe_Write_Stream_LE(Buffer, Length, NULL);
-	Pipe_Freeze();
-
-	return ErrorCode;
-}
-
-uint8_t AOA_Host_SendString(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
-                            const char* const String)
-{
-	if ((USB_HostState != HOST_STATE_Configured) || !(AOAInterfaceInfo->State.IsActive))
-	  return PIPE_READYWAIT_DeviceDisconnected;
-
-	uint8_t ErrorCode;
-
-	Pipe_SelectPipe(AOAInterfaceInfo->Config.DataOUTPipe.Address);
-
-	Pipe_Unfreeze();
-	ErrorCode = Pipe_Write_Stream_LE(String, strlen(String), NULL);
-	Pipe_Freeze();
-
-	return ErrorCode;
-}
-
-uint8_t AOA_Host_SendByte(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
-                          const uint8_t Data)
-{
-	if ((USB_HostState != HOST_STATE_Configured) || !(AOAInterfaceInfo->State.IsActive))
-	  return PIPE_READYWAIT_DeviceDisconnected;
-
-	uint8_t ErrorCode;
-
-	Pipe_SelectPipe(AOAInterfaceInfo->Config.DataOUTPipe.Address);
-	Pipe_Unfreeze();
-
-	if (!(Pipe_IsReadWriteAllowed()))
-	{
-		Pipe_ClearOUT();
-
-		if ((ErrorCode = Pipe_WaitUntilReady()) != PIPE_READYWAIT_NoError)
-		  return ErrorCode;
-	}
-
-	Pipe_Write_8(Data);
-	Pipe_Freeze();
-
-	return PIPE_READYWAIT_NoError;
-}
-
-uint16_t AOA_Host_BytesReceived(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo)
-{
-	if ((USB_HostState != HOST_STATE_Configured) || !(AOAInterfaceInfo->State.IsActive))
-	  return 0;
-
-	Pipe_SelectPipe(AOAInterfaceInfo->Config.DataINPipe.Address);
-	Pipe_Unfreeze();
-
-	if (Pipe_IsINReceived())
-	{
-		if (!(Pipe_BytesInPipe()))
-		{
-			Pipe_ClearIN();
-			Pipe_Freeze();
-			return 0;
-		}
-		else
-		{
-			Pipe_Freeze();
-			return Pipe_BytesInPipe();
-		}
-	}
-	else
-	{
-		Pipe_Freeze();
-
-		return 0;
-	}
-}
-
-int16_t AOA_Host_ReceiveByte(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo)
-{
-	if ((USB_HostState != HOST_STATE_Configured) || !(AOAInterfaceInfo->State.IsActive))
-	  return -1;
-
-	int16_t ReceivedByte = -1;
-
-	Pipe_SelectPipe(AOAInterfaceInfo->Config.DataINPipe.Address);
-	Pipe_Unfreeze();
-
-	if (Pipe_IsINReceived())
-	{
-		if (Pipe_BytesInPipe())
-		  ReceivedByte = Pipe_Read_8();
-
-		if (!(Pipe_BytesInPipe()))
-		  Pipe_ClearIN();
-	}
-
-	Pipe_Freeze();
-
-	return ReceivedByte;
-}
-
-uint8_t AOA_Host_Flush(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo)
-{
-	if ((USB_HostState != HOST_STATE_Configured) || !(AOAInterfaceInfo->State.IsActive))
-	  return PIPE_READYWAIT_DeviceDisconnected;
-
-	uint8_t ErrorCode;
-
-	Pipe_SelectPipe(AOAInterfaceInfo->Config.DataOUTPipe.Address);
-	Pipe_Unfreeze();
-
-	if (!(Pipe_BytesInPipe()))
-	  return PIPE_READYWAIT_NoError;
-
-	bool BankFull = !(Pipe_IsReadWriteAllowed());
-
-	Pipe_ClearOUT();
-
-	if (BankFull)
-	{
-		if ((ErrorCode = Pipe_WaitUntilReady()) != PIPE_READYWAIT_NoError)
-		  return ErrorCode;
-
-		Pipe_ClearOUT();
-	}
-
-	Pipe_Freeze();
-
-	return PIPE_READYWAIT_NoError;
-}
-
-#if defined(FDEV_SETUP_STREAM)
-void AOA_Host_CreateStream(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
-                           FILE* const Stream)
-{
-	*Stream = (FILE)FDEV_SETUP_STREAM(AOA_Host_putchar, AOA_Host_getchar, _FDEV_SETUP_RW);
-	fdev_set_udata(Stream, AOAInterfaceInfo);
-}
-
-void AOA_Host_CreateBlockingStream(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
-                                   FILE* const Stream)
-{
-	*Stream = (FILE)FDEV_SETUP_STREAM(AOA_Host_putchar, AOA_Host_getchar_Blocking, _FDEV_SETUP_RW);
-	fdev_set_udata(Stream, AOAInterfaceInfo);
-}
-
-static int AOA_Host_putchar(char c,
-                            FILE* Stream)
-{
-	return AOA_Host_SendByte((USB_ClassInfo_AOA_Host_t*)fdev_get_udata(Stream), c) ? _FDEV_ERR : 0;
-}
-
-static int AOA_Host_getchar(FILE* Stream)
-{
-	int16_t ReceivedByte = AOA_Host_ReceiveByte((USB_ClassInfo_AOA_Host_t*)fdev_get_udata(Stream));
-
-	if (ReceivedByte < 0)
-	  return _FDEV_EOF;
-
-	return ReceivedByte;
-}
-
-static int AOA_Host_getchar_Blocking(FILE* Stream)
-{
-	int16_t ReceivedByte;
-
-	while ((ReceivedByte = AOA_Host_ReceiveByte((USB_ClassInfo_AOA_Host_t*)fdev_get_udata(Stream))) < 0)
-	{
-		if (USB_HostState == HOST_STATE_Unattached)
-		  return _FDEV_EOF;
-
-		AOA_Host_USBTask((USB_ClassInfo_AOA_Host_t*)fdev_get_udata(Stream));
-		USB_USBTask();
-	}
-
-	return ReceivedByte;
-}
-#endif
-
-#endif
-
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+#define  __INCLUDE_FROM_USB_DRIVER
+#include "../../Core/USBMode.h"
+
+#if defined(USB_CAN_BE_HOST)
+
+#define  __INCLUDE_FROM_AOA_DRIVER
+#define  __INCLUDE_FROM_ANDROIDACCESSORY_HOST_C
+#include "AndroidAccessoryClassHost.h"
+
+bool AOA_Host_ValidateAccessoryDevice(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
+                                      const USB_Descriptor_Device_t* const DeviceDescriptor,
+                                      bool* const NeedModeSwitch)
+{
+	(void)AOAInterfaceInfo;
+
+	if (DeviceDescriptor->Header.Type != DTYPE_Device)
+	  return false;
+
+	*NeedModeSwitch = ((DeviceDescriptor->ProductID != ANDROID_ACCESSORY_PRODUCT_ID) &&
+	                   (DeviceDescriptor->ProductID != ANDROID_ACCESSORY_ADB_PRODUCT_ID));
+
+	return true;
+}
+
+uint8_t AOA_Host_ConfigurePipes(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
+                                uint16_t ConfigDescriptorSize,
+                                void* ConfigDescriptorData)
+{
+	USB_Descriptor_Endpoint_t*  DataINEndpoint  = NULL;
+	USB_Descriptor_Endpoint_t*  DataOUTEndpoint = NULL;
+	USB_Descriptor_Interface_t* AOAInterface    = NULL;
+
+	memset(&AOAInterfaceInfo->State, 0x00, sizeof(AOAInterfaceInfo->State));
+
+	if (DESCRIPTOR_TYPE(ConfigDescriptorData) != DTYPE_Configuration)
+	  return AOA_ENUMERROR_InvalidConfigDescriptor;
+	
+	if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
+	                              DCOMP_AOA_Host_NextAndroidAccessoryInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+	{
+		return AOA_ENUMERROR_NoCompatibleInterfaceFound;
+	}
+	
+	AOAInterface = DESCRIPTOR_PCAST(ConfigDescriptorData, USB_Descriptor_Interface_t);
+
+	while (!(DataINEndpoint) || !(DataOUTEndpoint))
+	{
+		if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
+		                              DCOMP_AOA_Host_NextInterfaceBulkEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
+		{
+			return AOA_ENUMERROR_NoCompatibleInterfaceFound;
+		}
+
+		USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(ConfigDescriptorData, USB_Descriptor_Endpoint_t);
+
+		if ((EndpointData->EndpointAddress & ENDPOINT_DIR_MASK) == ENDPOINT_DIR_IN)
+		  DataINEndpoint  = EndpointData;
+		else
+		  DataOUTEndpoint = EndpointData;
+	}
+
+	AOAInterfaceInfo->Config.DataINPipe.Size  = le16_to_cpu(DataINEndpoint->EndpointSize);
+	AOAInterfaceInfo->Config.DataINPipe.EndpointAddress = DataINEndpoint->EndpointAddress;
+	AOAInterfaceInfo->Config.DataINPipe.Type  = EP_TYPE_BULK;
+	
+	AOAInterfaceInfo->Config.DataOUTPipe.Size = le16_to_cpu(DataOUTEndpoint->EndpointSize);
+	AOAInterfaceInfo->Config.DataOUTPipe.EndpointAddress = DataOUTEndpoint->EndpointAddress;
+	AOAInterfaceInfo->Config.DataOUTPipe.Type = EP_TYPE_BULK;
+	
+	if (!(Pipe_ConfigurePipeTable(&AOAInterfaceInfo->Config.DataINPipe, 1)))
+	  return false;
+	
+	if (!(Pipe_ConfigurePipeTable(&AOAInterfaceInfo->Config.DataOUTPipe, 1)))
+	  return false;
+
+	AOAInterfaceInfo->State.IsActive        = true;
+	AOAInterfaceInfo->State.InterfaceNumber = AOAInterface->InterfaceNumber;
+
+	return AOA_ENUMERROR_NoError;
+}
+
+static uint8_t DCOMP_AOA_Host_NextAndroidAccessoryInterface(void* const CurrentDescriptor)
+{
+	USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t);
+
+	if (Header->Type == DTYPE_Interface)
+	{
+		USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t);
+
+		if ((Interface->Class    == AOA_CSCP_AOADataClass)    &&
+		    (Interface->SubClass == AOA_CSCP_AOADataSubclass) &&
+		    (Interface->Protocol == AOA_CSCP_AOADataProtocol))
+		{
+			return DESCRIPTOR_SEARCH_Found;
+		}
+	}
+
+	return DESCRIPTOR_SEARCH_NotFound;
+}
+
+static uint8_t DCOMP_AOA_Host_NextInterfaceBulkEndpoint(void* const CurrentDescriptor)
+{
+	USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t);
+
+	if (Header->Type == DTYPE_Endpoint)
+	{
+		USB_Descriptor_Endpoint_t* Endpoint = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Endpoint_t);
+
+		uint8_t EndpointType = (Endpoint->Attributes & EP_TYPE_MASK);
+
+		if ((EndpointType == EP_TYPE_BULK) && (!(Pipe_IsEndpointBound(Endpoint->EndpointAddress))))
+		  return DESCRIPTOR_SEARCH_Found;
+	}
+	else if (Header->Type == DTYPE_Interface)
+	{
+		return DESCRIPTOR_SEARCH_Fail;
+	}
+
+	return DESCRIPTOR_SEARCH_NotFound;
+}
+
+void AOA_Host_USBTask(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo)
+{
+	if ((USB_HostState != HOST_STATE_Configured) || !(AOAInterfaceInfo->State.IsActive))
+	  return;
+
+	#if !defined(NO_CLASS_DRIVER_AUTOFLUSH)
+	AOA_Host_Flush(AOAInterfaceInfo);
+	#endif
+}
+
+uint8_t AOA_Host_StartAccessoryMode(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo)
+{
+	uint8_t ErrorCode;
+	
+	uint16_t AccessoryProtocol;
+	if ((ErrorCode = AOA_Host_GetAccessoryProtocol(&AccessoryProtocol)) != HOST_WAITERROR_Successful)
+	  return ErrorCode;
+
+	if (AccessoryProtocol != CPU_TO_LE16(AOA_PROTOCOL_AccessoryV1))
+	  return AOA_ERROR_LOGICAL_CMD_FAILED;
+
+	for (uint8_t PropertyIndex = 0; PropertyIndex < AOA_STRING_TOTAL_STRINGS; PropertyIndex++)
+	{
+		if ((ErrorCode = AOA_Host_SendPropertyString(AOAInterfaceInfo, PropertyIndex)) != HOST_WAITERROR_Successful)
+		  return ErrorCode;
+	}
+
+	USB_ControlRequest = (USB_Request_Header_t)
+	{
+		.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_VENDOR | REQREC_DEVICE),
+		.bRequest      = AOA_REQ_StartAccessoryMode,
+		.wValue        = 0,
+		.wIndex        = 0,
+		.wLength       = 0,
+	};
+
+	Pipe_SelectPipe(PIPE_CONTROLPIPE);
+	return USB_Host_SendControlRequest(NULL);	
+}
+
+static uint8_t AOA_Host_GetAccessoryProtocol(uint16_t* const Protocol)
+{
+	USB_ControlRequest = (USB_Request_Header_t)
+	{
+		.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_VENDOR | REQREC_DEVICE),
+		.bRequest      = AOA_REQ_GetAccessoryProtocol,
+		.wValue        = 0,
+		.wIndex        = 0,
+		.wLength       = sizeof(uint16_t),
+	};
+
+	Pipe_SelectPipe(PIPE_CONTROLPIPE);
+	return USB_Host_SendControlRequest(Protocol);
+}
+
+static uint8_t AOA_Host_SendPropertyString(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
+                                           const uint8_t StringIndex)
+{	
+	const char* String = AOAInterfaceInfo->Config.PropertyStrings[StringIndex];
+	
+	if (String == NULL)
+	  String = "";
+
+	USB_ControlRequest = (USB_Request_Header_t)
+	{
+		.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_VENDOR | REQREC_DEVICE),
+		.bRequest      = AOA_REQ_SendString,
+		.wValue        = 0,
+		.wIndex        = StringIndex,
+		.wLength       = (strlen(String) + 1),
+	};
+
+	Pipe_SelectPipe(PIPE_CONTROLPIPE);
+	return USB_Host_SendControlRequest((char*)String);
+}
+
+uint8_t AOA_Host_SendData(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
+                          const uint8_t* const Buffer,
+                          const uint16_t Length)
+{
+	if ((USB_HostState != HOST_STATE_Configured) || !(AOAInterfaceInfo->State.IsActive))
+	  return PIPE_READYWAIT_DeviceDisconnected;
+
+	uint8_t ErrorCode;
+
+	Pipe_SelectPipe(AOAInterfaceInfo->Config.DataOUTPipe.Address);
+
+	Pipe_Unfreeze();
+	ErrorCode = Pipe_Write_Stream_LE(Buffer, Length, NULL);
+	Pipe_Freeze();
+
+	return ErrorCode;
+}
+
+uint8_t AOA_Host_SendString(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
+                            const char* const String)
+{
+	if ((USB_HostState != HOST_STATE_Configured) || !(AOAInterfaceInfo->State.IsActive))
+	  return PIPE_READYWAIT_DeviceDisconnected;
+
+	uint8_t ErrorCode;
+
+	Pipe_SelectPipe(AOAInterfaceInfo->Config.DataOUTPipe.Address);
+
+	Pipe_Unfreeze();
+	ErrorCode = Pipe_Write_Stream_LE(String, strlen(String), NULL);
+	Pipe_Freeze();
+
+	return ErrorCode;
+}
+
+uint8_t AOA_Host_SendByte(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
+                          const uint8_t Data)
+{
+	if ((USB_HostState != HOST_STATE_Configured) || !(AOAInterfaceInfo->State.IsActive))
+	  return PIPE_READYWAIT_DeviceDisconnected;
+
+	uint8_t ErrorCode;
+
+	Pipe_SelectPipe(AOAInterfaceInfo->Config.DataOUTPipe.Address);
+	Pipe_Unfreeze();
+
+	if (!(Pipe_IsReadWriteAllowed()))
+	{
+		Pipe_ClearOUT();
+
+		if ((ErrorCode = Pipe_WaitUntilReady()) != PIPE_READYWAIT_NoError)
+		  return ErrorCode;
+	}
+
+	Pipe_Write_8(Data);
+	Pipe_Freeze();
+
+	return PIPE_READYWAIT_NoError;
+}
+
+uint16_t AOA_Host_BytesReceived(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo)
+{
+	if ((USB_HostState != HOST_STATE_Configured) || !(AOAInterfaceInfo->State.IsActive))
+	  return 0;
+
+	Pipe_SelectPipe(AOAInterfaceInfo->Config.DataINPipe.Address);
+	Pipe_Unfreeze();
+
+	if (Pipe_IsINReceived())
+	{
+		if (!(Pipe_BytesInPipe()))
+		{
+			Pipe_ClearIN();
+			Pipe_Freeze();
+			return 0;
+		}
+		else
+		{
+			Pipe_Freeze();
+			return Pipe_BytesInPipe();
+		}
+	}
+	else
+	{
+		Pipe_Freeze();
+
+		return 0;
+	}
+}
+
+int16_t AOA_Host_ReceiveByte(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo)
+{
+	if ((USB_HostState != HOST_STATE_Configured) || !(AOAInterfaceInfo->State.IsActive))
+	  return -1;
+
+	int16_t ReceivedByte = -1;
+
+	Pipe_SelectPipe(AOAInterfaceInfo->Config.DataINPipe.Address);
+	Pipe_Unfreeze();
+
+	if (Pipe_IsINReceived())
+	{
+		if (Pipe_BytesInPipe())
+		  ReceivedByte = Pipe_Read_8();
+
+		if (!(Pipe_BytesInPipe()))
+		  Pipe_ClearIN();
+	}
+
+	Pipe_Freeze();
+
+	return ReceivedByte;
+}
+
+uint8_t AOA_Host_Flush(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo)
+{
+	if ((USB_HostState != HOST_STATE_Configured) || !(AOAInterfaceInfo->State.IsActive))
+	  return PIPE_READYWAIT_DeviceDisconnected;
+
+	uint8_t ErrorCode;
+
+	Pipe_SelectPipe(AOAInterfaceInfo->Config.DataOUTPipe.Address);
+	Pipe_Unfreeze();
+
+	if (!(Pipe_BytesInPipe()))
+	  return PIPE_READYWAIT_NoError;
+
+	bool BankFull = !(Pipe_IsReadWriteAllowed());
+
+	Pipe_ClearOUT();
+
+	if (BankFull)
+	{
+		if ((ErrorCode = Pipe_WaitUntilReady()) != PIPE_READYWAIT_NoError)
+		  return ErrorCode;
+
+		Pipe_ClearOUT();
+	}
+
+	Pipe_Freeze();
+
+	return PIPE_READYWAIT_NoError;
+}
+
+#if defined(FDEV_SETUP_STREAM)
+void AOA_Host_CreateStream(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
+                           FILE* const Stream)
+{
+	*Stream = (FILE)FDEV_SETUP_STREAM(AOA_Host_putchar, AOA_Host_getchar, _FDEV_SETUP_RW);
+	fdev_set_udata(Stream, AOAInterfaceInfo);
+}
+
+void AOA_Host_CreateBlockingStream(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
+                                   FILE* const Stream)
+{
+	*Stream = (FILE)FDEV_SETUP_STREAM(AOA_Host_putchar, AOA_Host_getchar_Blocking, _FDEV_SETUP_RW);
+	fdev_set_udata(Stream, AOAInterfaceInfo);
+}
+
+static int AOA_Host_putchar(char c,
+                            FILE* Stream)
+{
+	return AOA_Host_SendByte((USB_ClassInfo_AOA_Host_t*)fdev_get_udata(Stream), c) ? _FDEV_ERR : 0;
+}
+
+static int AOA_Host_getchar(FILE* Stream)
+{
+	int16_t ReceivedByte = AOA_Host_ReceiveByte((USB_ClassInfo_AOA_Host_t*)fdev_get_udata(Stream));
+
+	if (ReceivedByte < 0)
+	  return _FDEV_EOF;
+
+	return ReceivedByte;
+}
+
+static int AOA_Host_getchar_Blocking(FILE* Stream)
+{
+	int16_t ReceivedByte;
+
+	while ((ReceivedByte = AOA_Host_ReceiveByte((USB_ClassInfo_AOA_Host_t*)fdev_get_udata(Stream))) < 0)
+	{
+		if (USB_HostState == HOST_STATE_Unattached)
+		  return _FDEV_EOF;
+
+		AOA_Host_USBTask((USB_ClassInfo_AOA_Host_t*)fdev_get_udata(Stream));
+		USB_USBTask();
+	}
+
+	return ReceivedByte;
+}
+#endif
+
+#endif
+
 
diff --git a/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.h b/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.h
index f55cd340ae71f1c93b3664afe23e3adaebe6f86e..c437a4b61b57345263165eaae0b847c558d489a8 100644
--- a/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.h
+++ b/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.h
@@ -1,314 +1,314 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting
-  documentation, and that the name of the author not be used in
-  advertising or publicity pertaining to distribution of the
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *  \brief Host mode driver for the library USB Android Open Accessory Class driver.
- *
- *  Host mode driver for the library USB Android Open Accessory Class driver.
- *
- *  \note This file should not be included directly. It is automatically included as needed by the USB module driver
- *        dispatch header located in LUFA/Drivers/USB.h.
- */
-
-/** \ingroup Group_USBClassAOA
- *  \defgroup Group_USBClassAndroidAccessoryHost Android Open Accessory Class Host Mode Driver
- *
- *  \section Sec_Dependencies Module Source Dependencies
- *  The following files must be built with any user project that uses this module:
- *    - LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c <i>(Makefile source module name: LUFA_SRC_USBCLASS)</i>
- *
- *  \section Sec_ModDescription Module Description
- *  Host Mode USB Class driver framework interface, for the Android Open Accessory USB Class driver.
- *
- *  @{
- */
-
-#ifndef __AOA_CLASS_HOST_H__
-#define __AOA_CLASS_HOST_H__
-
-	/* Includes: */
-		#include "../../USB.h"
-		#include "../Common/AndroidAccessoryClassCommon.h"
-
-		#include <stdio.h>
-
-	/* Enable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			extern "C" {
-		#endif
-
-	/* Preprocessor Checks: */
-		#if !defined(__INCLUDE_FROM_AOA_DRIVER)
-			#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
-		#endif
-
-	/* Public Interface - May be used in end-application: */
-		/* Macros: */
-			/** Error code for some Android Open Accessory Host functions, indicating a logical (and not hardware) error. */
-			#define AOA_ERROR_LOGICAL_CMD_FAILED              0x80
-
-		/* Type Defines: */
-			/** \brief Android Open Accessory Class Host Mode Configuration and State Structure.
-			 *
-			 *  Class state structure. An instance of this structure should be made within the user application,
-			 *  and passed to each of the Android Open Accessory class driver functions as the \c AOAInterfaceInfo
-			 *  parameter. This stores each Android Open Accessory interface's configuration and state information.
-			 */
-			typedef struct
-			{
-				struct
-				{
-					USB_Pipe_Table_t DataINPipe; /**< Data IN Pipe configuration table. */
-					USB_Pipe_Table_t DataOUTPipe; /**< Data OUT Pipe configuration table. */
-					
-					char*    PropertyStrings[AOA_STRING_TOTAL_STRINGS]; /**< Android Accessory property strings, sent to identify the accessory when the
-					                                                     *   Android device is switched into Open Accessory mode. */
-				} 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
-				{
-					bool IsActive; /**< Indicates if the current interface instance is connected to an attached device, valid
-					                *   after \ref AOA_Host_ConfigurePipes() is called and the Host state machine is in the
-					                *   Configured state.
-					                */
-					uint8_t  InterfaceNumber; /**< Interface index of the AOA interface within the attached device. */
-				} State; /**< State data for the USB class interface within the device. All elements in this section
-						  *   <b>may</b> be set to initial values, but may also be ignored to default to sane values when
-						  *   the interface is enumerated.
-						  */
-			} USB_ClassInfo_AOA_Host_t;
-
-		/* Enums: */
-			/** Enum for the possible error codes returned by the \ref AOA_Host_ConfigurePipes() function. */
-			enum AOA_Host_EnumerationFailure_ErrorCodes_t
-			{
-				AOA_ENUMERROR_NoError                    = 0, /**< Configuration Descriptor was processed successfully. */
-				AOA_ENUMERROR_InvalidConfigDescriptor    = 1, /**< The device returned an invalid Configuration Descriptor. */
-				AOA_ENUMERROR_NoCompatibleInterfaceFound = 2, /**< A compatible Android Open Accessory interface was not found in the device's Configuration Descriptor. */
-				AOA_ENUMERROR_PipeConfigurationFailed    = 3, /**< One or more pipes for the specified interface could not be configured correctly. */
-			};
-
-		/* Function Prototypes: */
-			/** General management task for a given Android Open Accessory host class interface, required for the correct operation of the interface.
-			 *  This should be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
-			 *
-			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing an Android Open Accessory Class host configuration and state.
-			 */
-			void AOA_Host_USBTask(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Validates a device descriptor, to check if the device is a valid Android device, and if it is currently in Android Open Accessory mode.
-			 *
-			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing an AOA Class host configuration and state.
-			 *  \param[in]     DeviceDescriptor  Pointer a buffer containing the attached device's Device Descriptor.
-			 *  \param[out]    NeedModeSwitch    Pointer to a boolean where the mode switch requirement of the attached device is to be stored.
-			 *
-			 *  \return Boolean \c true if the attached device is a valid Android device, \c false otherwise.
-			 */
-			bool AOA_Host_ValidateAccessoryDevice(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
-                                                  const USB_Descriptor_Device_t* const DeviceDescriptor,
-			                                      bool* const NeedModeSwitch) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2) ATTR_NON_NULL_PTR_ARG(3);
-
-			/** Host interface configuration routine, to configure a given Android Open Accessory host interface instance using the Configuration
-			 *  Descriptor read from an attached USB device. This function automatically updates the given Android Open Accessory Host instance's
-			 *  state values and configures the pipes required to communicate with the interface if it is found within the device. This should be
-			 *  called once after the stack has enumerated the attached device, while the host state machine is in the Addressed state.
-			 *
-			 *  \param[in,out] AOAInterfaceInfo      Pointer to a structure containing an AOA Class host configuration and state.
-			 *  \param[in]     ConfigDescriptorSize  Length of the attached device's Configuration Descriptor.
-			 *  \param[in]     ConfigDescriptorData  Pointer to a buffer containing the attached device's Configuration Descriptor.
-			 *
-			 *  \return A value from the \ref AOA_Host_EnumerationFailure_ErrorCodes_t enum.
-			 */
-			uint8_t AOA_Host_ConfigurePipes(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
-			                                uint16_t ConfigDescriptorSize,
-			                                void* ConfigDescriptorData) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(3);
-									   
-			/** Starts Accessory Mode in the attached Android device. This function will validate the device's Android Open Accessory protocol
-			 *  version, send the configured property strings, and request a switch to Android Open Accessory mode.
-			 *
-			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing an AOA Class host configuration and state.
-			 *
-			 *  \return A value from the \ref USB_Host_SendControlErrorCodes_t enum, or \ref AOA_ERROR_LOGICAL_CMD_FAILED if a logical error occurred..
-			 */
-			uint8_t AOA_Host_StartAccessoryMode(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Sends a given data buffer to the attached USB device, if connected. If a device is not connected when the function is
-			 *  called, the data will be discarded. Bytes will be queued for transmission to the device until either the pipe bank
-			 *  becomes full, or the \ref AOA_Host_Flush() function is called to flush the pending data to the device. This allows for
-			 *  multiple bytes to be packed into a single pipe packet, increasing data throughput.
-			 *
-			 *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
-			 *       call will fail.
-			 *
-			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing a AOA Class host configuration and state.
-			 *  \param[in]     Buffer            Pointer to a buffer containing the data to send to the device.
-			 *  \param[in]     Length            Length of the data to send to the device.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t AOA_Host_SendData(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
-			                          const uint8_t* const Buffer,
-			                          const uint16_t Length);
-
-			/** Sends a given null-terminated string to the attached USB device, if connected. If a device is not connected when the
-			 *  function is called, the string is discarded. Bytes will be queued for transmission to the device until either the pipe
-			 *  bank becomes full, or the \ref AOA_Host_Flush() function is called to flush the pending data to the device. This allows
-			 *  for multiple bytes to be packed into a single pipe packet, increasing data throughput.
-			 *
-			 *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
-			 *       call will fail.
-			 *
-			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing a AOA Class host configuration and state.
-			 *  \param[in]     String            Pointer to the null terminated string to send to the device.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t AOA_Host_SendString(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
-			                            const char* const String) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
-
-			/** Sends a given byte to the attached USB device, if connected. If a device is not connected when the function is called, the
-			 *  byte is discarded. Bytes will be queued for transmission to the device until either the pipe bank becomes full, or the
-			 *  \ref AOA_Host_Flush() function is called to flush the pending data to the host. This allows for multiple bytes to be
-			 *  packed into a single pipe packet, increasing data throughput.
-			 *
-			 *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
-			 *       call will fail.
-			 *
-			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing a AOA Class host configuration and state.
-			 *  \param[in]     Data              Byte of data to send to the device.
-			 *
-			 *  \return A value from the \ref Pipe_WaitUntilReady_ErrorCodes_t enum.
-			 */
-			uint8_t AOA_Host_SendByte(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
-			                          const uint8_t Data) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Determines the number of bytes received by the AOA interface from the device, waiting to be read. This indicates the number
-			 *  of bytes in the IN pipe bank only, and thus the number of calls to \ref AOA_Host_ReceiveByte() which are guaranteed to succeed
-			 *  immediately. If multiple bytes are to be received, they should be buffered by the user application, as the pipe bank will not be
-			 *  released back to the USB controller until all bytes are read.
-			 *
-			 *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
-			 *       call will fail.
-			 *
-			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing a AOA Class host configuration and state.
-			 *
-			 *  \return Total number of buffered bytes received from the device.
-			 */
-			uint16_t AOA_Host_BytesReceived(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Reads a byte of data from the device. If no data is waiting to be read of if a USB device is not connected, the function
-			 *  returns a negative value. The \ref AOA_Host_BytesReceived() function may be queried in advance to determine how many bytes
-			 *  are currently buffered in the AOA interface's data receive pipe.
-			 *
-			 *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
-			 *       call will fail.
-			 *
-			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing a AOA Class host configuration and state.
-			 *
-			 *  \return Next received byte from the device, or a negative value if no data received.
-			 */
-			int16_t AOA_Host_ReceiveByte(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Flushes any data waiting to be sent, ensuring that the send buffer is cleared.
-			 *
-			 *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
-			 *       call will fail.
-			 *
-			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing a AOA Class host configuration and state.
-			 *
-			 *  \return A value from the \ref Pipe_WaitUntilReady_ErrorCodes_t enum.
-			 */
-			uint8_t AOA_Host_Flush(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Creates a standard character stream for the given AOA Device instance so that it can be used with all the regular
-			 *  functions in the standard \c <stdio.h> library that accept a \c FILE stream as a destination (e.g. \c fprintf). The created
-			 *  stream is bidirectional and can be used for both input and output functions.
-			 *
-			 *  Reading data from this stream is non-blocking, i.e. in most instances, complete strings cannot be read in by a single
-			 *  fetch, as the endpoint will not be ready at some point in the transmission, aborting the transfer. However, this may
-			 *  be used when the read data is processed byte-per-bye (via \c getc()) or when the user application will implement its own
-			 *  line buffering.
-			 *
-			 *  \note The created stream can be given as \c stdout if desired to direct the standard output from all \c <stdio.h> functions
-			 *        to the given AOA interface.
-			 *        \n\n
-			 *
-			 *  \note This function is not available on all microcontroller architectures.
-			 *
-			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing a AOA Class configuration and state.
-			 *  \param[in,out] Stream            Pointer to a FILE structure where the created stream should be placed.
-			 */
-			void AOA_Host_CreateStream(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
-			                           FILE* const Stream);
-
-			/** Identical to \ref AOA_Host_CreateStream(), except that reads are blocking until the calling stream function terminates
-			 *  the transfer. While blocking, the USB and AOA service tasks are called repeatedly to maintain USB communications.
-			 *
-			 *  \note This function is not available on all microcontroller architectures.
-			 *
-			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing a AOA Class configuration and state.
-			 *  \param[in,out] Stream            Pointer to a FILE structure where the created stream should be placed.
-			 */
-			void AOA_Host_CreateBlockingStream(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
-			                                   FILE* const Stream);
-
-	/* Private Interface - For use in library only: */
-	#if !defined(__DOXYGEN__)
-		/* Function Prototypes: */
-			#if defined(__INCLUDE_FROM_ANDROIDACCESSORY_HOST_C)
-				#if defined(FDEV_SETUP_STREAM)
-				static int AOA_Host_putchar(char c,
-				                            FILE* Stream) ATTR_NON_NULL_PTR_ARG(2);
-				static int AOA_Host_getchar(FILE* Stream) ATTR_NON_NULL_PTR_ARG(1);
-				static int AOA_Host_getchar_Blocking(FILE* Stream) ATTR_NON_NULL_PTR_ARG(1);
-				#endif
-
-				static uint8_t AOA_Host_GetAccessoryProtocol(uint16_t* const Protocol) ATTR_NON_NULL_PTR_ARG(1);
-				static uint8_t AOA_Host_SendPropertyString(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
-			                                               const uint8_t StringIndex) ATTR_NON_NULL_PTR_ARG(1);
-
-				static uint8_t DCOMP_AOA_Host_NextAndroidAccessoryInterface(void* const CurrentDescriptor)
-				                                                            ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(1);
-				static uint8_t DCOMP_AOA_Host_NextInterfaceBulkEndpoint(void* const CurrentDescriptor)
-				                                                        ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(1);
-			#endif
-	#endif
-
-	/* Disable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			}
-		#endif
-
-#endif
-
-/** @} */
-
-
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *  \brief Host mode driver for the library USB Android Open Accessory Class driver.
+ *
+ *  Host mode driver for the library USB Android Open Accessory Class driver.
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the USB module driver
+ *        dispatch header located in LUFA/Drivers/USB.h.
+ */
+
+/** \ingroup Group_USBClassAOA
+ *  \defgroup Group_USBClassAndroidAccessoryHost Android Open Accessory Class Host Mode Driver
+ *
+ *  \section Sec_Dependencies Module Source Dependencies
+ *  The following files must be built with any user project that uses this module:
+ *    - LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c <i>(Makefile source module name: LUFA_SRC_USBCLASS)</i>
+ *
+ *  \section Sec_ModDescription Module Description
+ *  Host Mode USB Class driver framework interface, for the Android Open Accessory USB Class driver.
+ *
+ *  @{
+ */
+
+#ifndef __AOA_CLASS_HOST_H__
+#define __AOA_CLASS_HOST_H__
+
+	/* Includes: */
+		#include "../../USB.h"
+		#include "../Common/AndroidAccessoryClassCommon.h"
+
+		#include <stdio.h>
+
+	/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_AOA_DRIVER)
+			#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
+		#endif
+
+	/* Public Interface - May be used in end-application: */
+		/* Macros: */
+			/** Error code for some Android Open Accessory Host functions, indicating a logical (and not hardware) error. */
+			#define AOA_ERROR_LOGICAL_CMD_FAILED              0x80
+
+		/* Type Defines: */
+			/** \brief Android Open Accessory Class Host Mode Configuration and State Structure.
+			 *
+			 *  Class state structure. An instance of this structure should be made within the user application,
+			 *  and passed to each of the Android Open Accessory class driver functions as the \c AOAInterfaceInfo
+			 *  parameter. This stores each Android Open Accessory interface's configuration and state information.
+			 */
+			typedef struct
+			{
+				struct
+				{
+					USB_Pipe_Table_t DataINPipe; /**< Data IN Pipe configuration table. */
+					USB_Pipe_Table_t DataOUTPipe; /**< Data OUT Pipe configuration table. */
+					
+					char*    PropertyStrings[AOA_STRING_TOTAL_STRINGS]; /**< Android Accessory property strings, sent to identify the accessory when the
+					                                                     *   Android device is switched into Open Accessory mode. */
+				} 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
+				{
+					bool IsActive; /**< Indicates if the current interface instance is connected to an attached device, valid
+					                *   after \ref AOA_Host_ConfigurePipes() is called and the Host state machine is in the
+					                *   Configured state.
+					                */
+					uint8_t  InterfaceNumber; /**< Interface index of the AOA interface within the attached device. */
+				} State; /**< State data for the USB class interface within the device. All elements in this section
+						  *   <b>may</b> be set to initial values, but may also be ignored to default to sane values when
+						  *   the interface is enumerated.
+						  */
+			} USB_ClassInfo_AOA_Host_t;
+
+		/* Enums: */
+			/** Enum for the possible error codes returned by the \ref AOA_Host_ConfigurePipes() function. */
+			enum AOA_Host_EnumerationFailure_ErrorCodes_t
+			{
+				AOA_ENUMERROR_NoError                    = 0, /**< Configuration Descriptor was processed successfully. */
+				AOA_ENUMERROR_InvalidConfigDescriptor    = 1, /**< The device returned an invalid Configuration Descriptor. */
+				AOA_ENUMERROR_NoCompatibleInterfaceFound = 2, /**< A compatible Android Open Accessory interface was not found in the device's Configuration Descriptor. */
+				AOA_ENUMERROR_PipeConfigurationFailed    = 3, /**< One or more pipes for the specified interface could not be configured correctly. */
+			};
+
+		/* Function Prototypes: */
+			/** General management task for a given Android Open Accessory host class interface, required for the correct operation of the interface.
+			 *  This should be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
+			 *
+			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing an Android Open Accessory Class host configuration and state.
+			 */
+			void AOA_Host_USBTask(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Validates a device descriptor, to check if the device is a valid Android device, and if it is currently in Android Open Accessory mode.
+			 *
+			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing an AOA Class host configuration and state.
+			 *  \param[in]     DeviceDescriptor  Pointer a buffer containing the attached device's Device Descriptor.
+			 *  \param[out]    NeedModeSwitch    Pointer to a boolean where the mode switch requirement of the attached device is to be stored.
+			 *
+			 *  \return Boolean \c true if the attached device is a valid Android device, \c false otherwise.
+			 */
+			bool AOA_Host_ValidateAccessoryDevice(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
+                                                  const USB_Descriptor_Device_t* const DeviceDescriptor,
+			                                      bool* const NeedModeSwitch) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2) ATTR_NON_NULL_PTR_ARG(3);
+
+			/** Host interface configuration routine, to configure a given Android Open Accessory host interface instance using the Configuration
+			 *  Descriptor read from an attached USB device. This function automatically updates the given Android Open Accessory Host instance's
+			 *  state values and configures the pipes required to communicate with the interface if it is found within the device. This should be
+			 *  called once after the stack has enumerated the attached device, while the host state machine is in the Addressed state.
+			 *
+			 *  \param[in,out] AOAInterfaceInfo      Pointer to a structure containing an AOA Class host configuration and state.
+			 *  \param[in]     ConfigDescriptorSize  Length of the attached device's Configuration Descriptor.
+			 *  \param[in]     ConfigDescriptorData  Pointer to a buffer containing the attached device's Configuration Descriptor.
+			 *
+			 *  \return A value from the \ref AOA_Host_EnumerationFailure_ErrorCodes_t enum.
+			 */
+			uint8_t AOA_Host_ConfigurePipes(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
+			                                uint16_t ConfigDescriptorSize,
+			                                void* ConfigDescriptorData) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(3);
+									   
+			/** Starts Accessory Mode in the attached Android device. This function will validate the device's Android Open Accessory protocol
+			 *  version, send the configured property strings, and request a switch to Android Open Accessory mode.
+			 *
+			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing an AOA Class host configuration and state.
+			 *
+			 *  \return A value from the \ref USB_Host_SendControlErrorCodes_t enum, or \ref AOA_ERROR_LOGICAL_CMD_FAILED if a logical error occurred..
+			 */
+			uint8_t AOA_Host_StartAccessoryMode(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Sends a given data buffer to the attached USB device, if connected. If a device is not connected when the function is
+			 *  called, the data will be discarded. Bytes will be queued for transmission to the device until either the pipe bank
+			 *  becomes full, or the \ref AOA_Host_Flush() function is called to flush the pending data to the device. This allows for
+			 *  multiple bytes to be packed into a single pipe packet, increasing data throughput.
+			 *
+			 *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
+			 *       call will fail.
+			 *
+			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing a AOA Class host configuration and state.
+			 *  \param[in]     Buffer            Pointer to a buffer containing the data to send to the device.
+			 *  \param[in]     Length            Length of the data to send to the device.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t AOA_Host_SendData(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
+			                          const uint8_t* const Buffer,
+			                          const uint16_t Length);
+
+			/** Sends a given null-terminated string to the attached USB device, if connected. If a device is not connected when the
+			 *  function is called, the string is discarded. Bytes will be queued for transmission to the device until either the pipe
+			 *  bank becomes full, or the \ref AOA_Host_Flush() function is called to flush the pending data to the device. This allows
+			 *  for multiple bytes to be packed into a single pipe packet, increasing data throughput.
+			 *
+			 *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
+			 *       call will fail.
+			 *
+			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing a AOA Class host configuration and state.
+			 *  \param[in]     String            Pointer to the null terminated string to send to the device.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t AOA_Host_SendString(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
+			                            const char* const String) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
+
+			/** Sends a given byte to the attached USB device, if connected. If a device is not connected when the function is called, the
+			 *  byte is discarded. Bytes will be queued for transmission to the device until either the pipe bank becomes full, or the
+			 *  \ref AOA_Host_Flush() function is called to flush the pending data to the host. This allows for multiple bytes to be
+			 *  packed into a single pipe packet, increasing data throughput.
+			 *
+			 *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
+			 *       call will fail.
+			 *
+			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing a AOA Class host configuration and state.
+			 *  \param[in]     Data              Byte of data to send to the device.
+			 *
+			 *  \return A value from the \ref Pipe_WaitUntilReady_ErrorCodes_t enum.
+			 */
+			uint8_t AOA_Host_SendByte(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
+			                          const uint8_t Data) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Determines the number of bytes received by the AOA interface from the device, waiting to be read. This indicates the number
+			 *  of bytes in the IN pipe bank only, and thus the number of calls to \ref AOA_Host_ReceiveByte() which are guaranteed to succeed
+			 *  immediately. If multiple bytes are to be received, they should be buffered by the user application, as the pipe bank will not be
+			 *  released back to the USB controller until all bytes are read.
+			 *
+			 *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
+			 *       call will fail.
+			 *
+			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing a AOA Class host configuration and state.
+			 *
+			 *  \return Total number of buffered bytes received from the device.
+			 */
+			uint16_t AOA_Host_BytesReceived(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Reads a byte of data from the device. If no data is waiting to be read of if a USB device is not connected, the function
+			 *  returns a negative value. The \ref AOA_Host_BytesReceived() function may be queried in advance to determine how many bytes
+			 *  are currently buffered in the AOA interface's data receive pipe.
+			 *
+			 *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
+			 *       call will fail.
+			 *
+			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing a AOA Class host configuration and state.
+			 *
+			 *  \return Next received byte from the device, or a negative value if no data received.
+			 */
+			int16_t AOA_Host_ReceiveByte(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Flushes any data waiting to be sent, ensuring that the send buffer is cleared.
+			 *
+			 *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
+			 *       call will fail.
+			 *
+			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing a AOA Class host configuration and state.
+			 *
+			 *  \return A value from the \ref Pipe_WaitUntilReady_ErrorCodes_t enum.
+			 */
+			uint8_t AOA_Host_Flush(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Creates a standard character stream for the given AOA Device instance so that it can be used with all the regular
+			 *  functions in the standard \c <stdio.h> library that accept a \c FILE stream as a destination (e.g. \c fprintf). The created
+			 *  stream is bidirectional and can be used for both input and output functions.
+			 *
+			 *  Reading data from this stream is non-blocking, i.e. in most instances, complete strings cannot be read in by a single
+			 *  fetch, as the endpoint will not be ready at some point in the transmission, aborting the transfer. However, this may
+			 *  be used when the read data is processed byte-per-bye (via \c getc()) or when the user application will implement its own
+			 *  line buffering.
+			 *
+			 *  \note The created stream can be given as \c stdout if desired to direct the standard output from all \c <stdio.h> functions
+			 *        to the given AOA interface.
+			 *        \n\n
+			 *
+			 *  \note This function is not available on all microcontroller architectures.
+			 *
+			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing a AOA Class configuration and state.
+			 *  \param[in,out] Stream            Pointer to a FILE structure where the created stream should be placed.
+			 */
+			void AOA_Host_CreateStream(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
+			                           FILE* const Stream);
+
+			/** Identical to \ref AOA_Host_CreateStream(), except that reads are blocking until the calling stream function terminates
+			 *  the transfer. While blocking, the USB and AOA service tasks are called repeatedly to maintain USB communications.
+			 *
+			 *  \note This function is not available on all microcontroller architectures.
+			 *
+			 *  \param[in,out] AOAInterfaceInfo  Pointer to a structure containing a AOA Class configuration and state.
+			 *  \param[in,out] Stream            Pointer to a FILE structure where the created stream should be placed.
+			 */
+			void AOA_Host_CreateBlockingStream(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
+			                                   FILE* const Stream);
+
+	/* Private Interface - For use in library only: */
+	#if !defined(__DOXYGEN__)
+		/* Function Prototypes: */
+			#if defined(__INCLUDE_FROM_ANDROIDACCESSORY_HOST_C)
+				#if defined(FDEV_SETUP_STREAM)
+				static int AOA_Host_putchar(char c,
+				                            FILE* Stream) ATTR_NON_NULL_PTR_ARG(2);
+				static int AOA_Host_getchar(FILE* Stream) ATTR_NON_NULL_PTR_ARG(1);
+				static int AOA_Host_getchar_Blocking(FILE* Stream) ATTR_NON_NULL_PTR_ARG(1);
+				#endif
+
+				static uint8_t AOA_Host_GetAccessoryProtocol(uint16_t* const Protocol) ATTR_NON_NULL_PTR_ARG(1);
+				static uint8_t AOA_Host_SendPropertyString(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo,
+			                                               const uint8_t StringIndex) ATTR_NON_NULL_PTR_ARG(1);
+
+				static uint8_t DCOMP_AOA_Host_NextAndroidAccessoryInterface(void* const CurrentDescriptor)
+				                                                            ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(1);
+				static uint8_t DCOMP_AOA_Host_NextInterfaceBulkEndpoint(void* const CurrentDescriptor)
+				                                                        ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(1);
+			#endif
+	#endif
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+
+#endif
+
+/** @} */
+
+
diff --git a/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c b/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c
index 0117a1d665f18318b257ae5b5e97c2433a4461ff..a267be1ee1d37b78eeb1cdd68987e1e0122cca28 100644
--- a/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c
+++ b/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c
@@ -1,275 +1,275 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-              
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this 
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-#include "../../../../Common/Common.h"
-#if (ARCH == ARCH_AVR8)
-
-#define  __INCLUDE_FROM_USB_DRIVER
-#include "../USBMode.h"
-
-#if defined(USB_CAN_BE_DEVICE)
-
-#include "EndpointStream_AVR8.h"
-
-#if !defined(CONTROL_ONLY_DEVICE)
-uint8_t Endpoint_Discard_Stream(uint16_t Length,
-                                uint16_t* const BytesProcessed)
-{
-	uint8_t  ErrorCode;
-	uint16_t BytesInTransfer = 0;
-	
-	if ((ErrorCode = Endpoint_WaitUntilReady()))
-	  return ErrorCode;
-	  
-	if (BytesProcessed != NULL)
-	  Length -= *BytesProcessed;
-
-	while (Length)
-	{
-		if (!(Endpoint_IsReadWriteAllowed()))
-		{
-			Endpoint_ClearOUT();
-
-			if (BytesProcessed != NULL)
-			{
-				*BytesProcessed += BytesInTransfer;
-				return ENDPOINT_RWSTREAM_IncompleteTransfer;
-			}
-
-			if ((ErrorCode = Endpoint_WaitUntilReady()))
-			  return ErrorCode;
-		}
-		else
-		{
-			Endpoint_Discard_8();
-
-			Length--;
-			BytesInTransfer++;
-		}
-	}
-	
-	return ENDPOINT_RWSTREAM_NoError;
-}
-
-uint8_t Endpoint_Null_Stream(uint16_t Length,
-                             uint16_t* const BytesProcessed)
-{
-	uint8_t  ErrorCode;
-	uint16_t BytesInTransfer = 0;
-	
-	if ((ErrorCode = Endpoint_WaitUntilReady()))
-	  return ErrorCode;
-	  
-	if (BytesProcessed != NULL)
-	  Length -= *BytesProcessed;
-
-	while (Length)
-	{
-		if (!(Endpoint_IsReadWriteAllowed()))
-		{
-			Endpoint_ClearIN();
-
-			if (BytesProcessed != NULL)
-			{
-				*BytesProcessed += BytesInTransfer;
-				return ENDPOINT_RWSTREAM_IncompleteTransfer;
-			}
-
-			if ((ErrorCode = Endpoint_WaitUntilReady()))
-			  return ErrorCode;
-		}
-		else
-		{
-			Endpoint_Write_8(0);
-
-			Length--;
-			BytesInTransfer++;
-		}
-	}
-	
-	return ENDPOINT_RWSTREAM_NoError;
-}
-
-/* The following abuses the C preprocessor in order to copy-paste common code with slight alterations,
- * so that the code needs to be written once. It is a crude form of templating to reduce code maintenance. */
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_LE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_BE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_LE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_BE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
-#include "Template/Template_Endpoint_RW.c"
-
-#if defined(ARCH_HAS_FLASH_ADDRESS_SPACE)
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_LE
-	#define  TEMPLATE_BUFFER_TYPE                      const void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_RW.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_BE
-	#define  TEMPLATE_BUFFER_TYPE                      const void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_RW.c"
-#endif
-
-#if defined(ARCH_HAS_EEPROM_ADDRESS_SPACE)
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_LE
-	#define  TEMPLATE_BUFFER_TYPE                      const void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_RW.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_BE
-	#define  TEMPLATE_BUFFER_TYPE                      const void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_RW.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_LE
-	#define  TEMPLATE_BUFFER_TYPE                      void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
-	#include "Template/Template_Endpoint_RW.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_BE
-	#define  TEMPLATE_BUFFER_TYPE                      void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
-	#include "Template/Template_Endpoint_RW.c"
-#endif
-
-#endif
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_LE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
-#include "Template/Template_Endpoint_Control_W.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_BE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
-#include "Template/Template_Endpoint_Control_W.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_LE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
-#include "Template/Template_Endpoint_Control_R.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_BE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
-#include "Template/Template_Endpoint_Control_R.c"
-
-#if defined(ARCH_HAS_FLASH_ADDRESS_SPACE)
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_PStream_LE
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_Control_W.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_PStream_BE
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_Control_W.c"
-#endif
-
-#if defined(ARCH_HAS_EEPROM_ADDRESS_SPACE)
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_EStream_LE
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_Control_W.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_EStream_BE
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_Control_W.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_LE
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
-	#include "Template/Template_Endpoint_Control_R.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_BE
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
-	#include "Template/Template_Endpoint_Control_R.c"
-#endif
-
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+              
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this 
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in 
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting 
+  documentation, and that the name of the author not be used in 
+  advertising or publicity pertaining to distribution of the 
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+#include "../../../../Common/Common.h"
+#if (ARCH == ARCH_AVR8)
+
+#define  __INCLUDE_FROM_USB_DRIVER
+#include "../USBMode.h"
+
+#if defined(USB_CAN_BE_DEVICE)
+
+#include "EndpointStream_AVR8.h"
+
+#if !defined(CONTROL_ONLY_DEVICE)
+uint8_t Endpoint_Discard_Stream(uint16_t Length,
+                                uint16_t* const BytesProcessed)
+{
+	uint8_t  ErrorCode;
+	uint16_t BytesInTransfer = 0;
+	
+	if ((ErrorCode = Endpoint_WaitUntilReady()))
+	  return ErrorCode;
+	  
+	if (BytesProcessed != NULL)
+	  Length -= *BytesProcessed;
+
+	while (Length)
+	{
+		if (!(Endpoint_IsReadWriteAllowed()))
+		{
+			Endpoint_ClearOUT();
+
+			if (BytesProcessed != NULL)
+			{
+				*BytesProcessed += BytesInTransfer;
+				return ENDPOINT_RWSTREAM_IncompleteTransfer;
+			}
+
+			if ((ErrorCode = Endpoint_WaitUntilReady()))
+			  return ErrorCode;
+		}
+		else
+		{
+			Endpoint_Discard_8();
+
+			Length--;
+			BytesInTransfer++;
+		}
+	}
+	
+	return ENDPOINT_RWSTREAM_NoError;
+}
+
+uint8_t Endpoint_Null_Stream(uint16_t Length,
+                             uint16_t* const BytesProcessed)
+{
+	uint8_t  ErrorCode;
+	uint16_t BytesInTransfer = 0;
+	
+	if ((ErrorCode = Endpoint_WaitUntilReady()))
+	  return ErrorCode;
+	  
+	if (BytesProcessed != NULL)
+	  Length -= *BytesProcessed;
+
+	while (Length)
+	{
+		if (!(Endpoint_IsReadWriteAllowed()))
+		{
+			Endpoint_ClearIN();
+
+			if (BytesProcessed != NULL)
+			{
+				*BytesProcessed += BytesInTransfer;
+				return ENDPOINT_RWSTREAM_IncompleteTransfer;
+			}
+
+			if ((ErrorCode = Endpoint_WaitUntilReady()))
+			  return ErrorCode;
+		}
+		else
+		{
+			Endpoint_Write_8(0);
+
+			Length--;
+			BytesInTransfer++;
+		}
+	}
+	
+	return ENDPOINT_RWSTREAM_NoError;
+}
+
+/* The following abuses the C preprocessor in order to copy-paste common code with slight alterations,
+ * so that the code needs to be written once. It is a crude form of templating to reduce code maintenance. */
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_LE
+#define  TEMPLATE_BUFFER_TYPE                      const void*
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
+#include "Template/Template_Endpoint_RW.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_BE
+#define  TEMPLATE_BUFFER_TYPE                      const void*
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
+#include "Template/Template_Endpoint_RW.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_LE
+#define  TEMPLATE_BUFFER_TYPE                      void*
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
+#include "Template/Template_Endpoint_RW.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_BE
+#define  TEMPLATE_BUFFER_TYPE                      void*
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
+#include "Template/Template_Endpoint_RW.c"
+
+#if defined(ARCH_HAS_FLASH_ADDRESS_SPACE)
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_LE
+	#define  TEMPLATE_BUFFER_TYPE                      const void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_RW.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_BE
+	#define  TEMPLATE_BUFFER_TYPE                      const void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_RW.c"
+#endif
+
+#if defined(ARCH_HAS_EEPROM_ADDRESS_SPACE)
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_LE
+	#define  TEMPLATE_BUFFER_TYPE                      const void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_RW.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_BE
+	#define  TEMPLATE_BUFFER_TYPE                      const void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_RW.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_LE
+	#define  TEMPLATE_BUFFER_TYPE                      void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
+	#include "Template/Template_Endpoint_RW.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_BE
+	#define  TEMPLATE_BUFFER_TYPE                      void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
+	#include "Template/Template_Endpoint_RW.c"
 #endif
 
-#endif
+#endif
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_LE
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
+#include "Template/Template_Endpoint_Control_W.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_BE
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
+#include "Template/Template_Endpoint_Control_W.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_LE
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
+#include "Template/Template_Endpoint_Control_R.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_BE
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
+#include "Template/Template_Endpoint_Control_R.c"
+
+#if defined(ARCH_HAS_FLASH_ADDRESS_SPACE)
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_PStream_LE
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_Control_W.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_PStream_BE
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_Control_W.c"
+#endif
+
+#if defined(ARCH_HAS_EEPROM_ADDRESS_SPACE)
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_EStream_LE
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_Control_W.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_EStream_BE
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_Control_W.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_LE
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
+	#include "Template/Template_Endpoint_Control_R.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_BE
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
+	#include "Template/Template_Endpoint_Control_R.c"
+#endif
+
+#endif
+
+#endif
diff --git a/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.h b/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.h
index 072d859329cf2646fb5e6c8d71f707371c1fe66d..2d98ef4d61c860a5b5bda3af76dec94f80c45a91 100644
--- a/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.h
+++ b/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.h
@@ -1,648 +1,648 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-              
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this 
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *  \brief Endpoint data stream transmission and reception management for the AVR8 microcontrollers.
- *  \copydetails Group_EndpointStreamRW_AVR8
- *
- *  \note This file should not be included directly. It is automatically included as needed by the USB driver
- *        dispatch header located in LUFA/Drivers/USB/USB.h.
- */
-
-/** \ingroup Group_EndpointStreamRW
- *  \defgroup Group_EndpointStreamRW_AVR8 Read/Write of Multi-Byte Streams (AVR8)
- *  \brief Endpoint data stream transmission and reception management for the Atmel AVR8 architecture.
- *
- *  Functions, macros, variables, enums and types related to data reading and writing of data streams from
- *  and to endpoints.
- *
- *  @{
- */ 
-
-#ifndef __ENDPOINT_STREAM_AVR8_H__
-#define __ENDPOINT_STREAM_AVR8_H__
-
-	/* Includes: */
-		#include "../../../../Common/Common.h"
-		#include "../USBMode.h"		
-		#include "../USBTask.h"
-		
-	/* Enable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			extern "C" {
-		#endif
-
-	/* Preprocessor Checks: */
-		#if !defined(__INCLUDE_FROM_USB_DRIVER)
-			#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
-		#endif
-
-	/* Public Interface - May be used in end-application: */
-		/* Function Prototypes: */
-			/** \name Stream functions for null data */
-			//@{
-
-			/** Reads and discards the given number of bytes from the currently selected endpoint's bank,
-			 *  discarding fully read packets from the host as needed. The last packet is not automatically
-			 *  discarded once the remaining bytes has been read; the user is responsible for manually
-			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
-			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
-			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
-			 *  the endpoint bank becomes empty while there is still data to process (and after the current
-			 *  packet has been acknowledged) the BytesProcessed location will be updated with the total number
-			 *  of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
-			 *  in the user code - to continue the transfer, call the function again with identical parameters
-			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Endpoint_Discard_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Endpoint_Discard_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[in] Length          Number of bytes to discard via the currently selected endpoint.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Discard_Stream(uint16_t Length,
-			                                uint16_t* const BytesProcessed);
-
-			/** Writes a given number of zeroed bytes to the currently selected endpoint's bank, sending
-			 *  full packets to the host as needed. The last packet is not automatically sent once the 
-			 *  remaining bytes have been written; the user is responsible for manually sending the last
-			 *  packet to the host via the \ref Endpoint_ClearIN() macro.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
-			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
-			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
-			 *  the endpoint bank becomes full while there is still data to process (and after the current
-			 *  packet transmission has been initiated) the BytesProcessed location will be updated with the
-			 *  total number of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
-			 *  in the user code - to continue the transfer, call the function again with identical parameters
-			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Endpoint_Null_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Endpoint_Null_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[in] Length          Number of zero bytes to send via the currently selected endpoint.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Null_Stream(uint16_t Length,
-			                             uint16_t* const BytesProcessed);
-
-			//@}
-
-			/** \name Stream functions for RAM source/destination data */
-			//@{
-		
-			/** Writes the given number of bytes to the endpoint from the given buffer in little endian,
-			 *  sending full packets to the host as needed. The last packet filled is not automatically sent;
-			 *  the user is responsible for manually sending the last written packet to the host via the
-			 *  \ref Endpoint_ClearIN() macro.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
-			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
-			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
-			 *  the endpoint bank becomes full while there is still data to process (and after the current
-			 *  packet transmission has been initiated) the BytesProcessed location will be updated with the
-			 *  total number of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
-			 *  in the user code - to continue the transfer, call the function again with identical parameters
-			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t DataStream[512];
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                            NULL)) != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  DataStream[512];
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                               &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *
-			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Stream_LE(const void* const Buffer,
-			                                 uint16_t Length,
-			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Writes the given number of bytes to the endpoint from the given buffer in big endian,
-			 *  sending full packets to the host as needed. The last packet filled is not automatically sent;
-			 *  the user is responsible for manually sending the last written packet to the host via the
-			 *  \ref Endpoint_ClearIN() macro.
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Stream_BE(const void* const Buffer,
-			                                 uint16_t Length,
-			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-			
-			/** Reads the given number of bytes from the endpoint from the given buffer in little endian,
-			 *  discarding fully read packets from the host as needed. The last packet is not automatically
-			 *  discarded once the remaining bytes has been read; the user is responsible for manually
-			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
-			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
-			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
-			 *  the endpoint bank becomes empty while there is still data to process (and after the current
-			 *  packet has been acknowledged) the BytesProcessed location will be updated with the total number
-			 *  of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
-			 *  in the user code - to continue the transfer, call the function again with identical parameters
-			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t DataStream[512];
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                           NULL)) != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  DataStream[512];
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                              &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[out] Buffer          Pointer to the destination data buffer to write to.
-			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
-			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_Stream_LE(void* const Buffer,
-			                                uint16_t Length,
-			                                uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Reads the given number of bytes from the endpoint from the given buffer in big endian,
-			 *  discarding fully read packets from the host as needed. The last packet is not automatically
-			 *  discarded once the remaining bytes has been read; the user is responsible for manually
-			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[out] Buffer          Pointer to the destination data buffer to write to.
-			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
-			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_Stream_BE(void* const Buffer,
-			                                uint16_t Length,
-			                                uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in little endian,
-			 *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared
-			 *  in both failure and success states; the user is responsible for manually clearing the setup OUT to
-			 *  finalize the transfer via the \ref Endpoint_ClearOUT() macro.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
-			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Control_Stream_LE(const void* const Buffer,
-			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in big endian,
-			 *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared
-			 *  in both failure and success states; the user is responsible for manually clearing the setup OUT to
-			 *  finalize the transfer via the \ref Endpoint_ClearOUT() macro.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
-			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Control_Stream_BE(const void* const Buffer,
-			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Reads the given number of bytes from the CONTROL endpoint from the given buffer in little endian,
-			 *  discarding fully read packets from the host as needed. The device IN acknowledgement is not
-			 *  automatically sent after success or failure states; the user is responsible for manually sending the
-			 *  setup IN to finalize the transfer via the \ref Endpoint_ClearIN() macro.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
-			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_Control_Stream_LE(void* const Buffer,
-			                                        uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Reads the given number of bytes from the CONTROL endpoint from the given buffer in big endian,
-			 *  discarding fully read packets from the host as needed. The device IN acknowledgement is not
-			 *  automatically sent after success or failure states; the user is responsible for manually sending the
-			 *  setup IN to finalize the transfer via the \ref Endpoint_ClearIN() macro.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
-			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_Control_Stream_BE(void* const Buffer,
-			                                        uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-			//@}
-
-			/** \name Stream functions for EEPROM source/destination data */
-			//@{
-
-			/** EEPROM buffer source version of \ref Endpoint_Write_Stream_LE().
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_EStream_LE(const void* const Buffer,
-			                                  uint16_t Length,
-			                                  uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** EEPROM buffer source version of \ref Endpoint_Write_Stream_BE().
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_EStream_BE(const void* const Buffer,
-			                                  uint16_t Length,
-			                                  uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** EEPROM buffer destination version of \ref Endpoint_Read_Stream_LE().
-			 *
-			 *  \param[out] Buffer          Pointer to the destination data buffer to write to, located in EEPROM memory space.
-			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
-			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_EStream_LE(void* const Buffer,
-			                                 uint16_t Length,
-			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** EEPROM buffer destination version of \ref Endpoint_Read_Stream_BE().
-			 *
-			 *  \param[out] Buffer          Pointer to the destination data buffer to write to, located in EEPROM memory space.
-			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
-			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_EStream_BE(void* const Buffer,
-			                                 uint16_t Length,
-			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** EEPROM buffer source version of Endpoint_Write_Control_Stream_LE.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *        \n\n
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
-			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Control_EStream_LE(const void* const Buffer,
-			                                          uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** EEPROM buffer source version of \ref Endpoint_Write_Control_Stream_BE().
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *        \n\n
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
-			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Control_EStream_BE(const void* const Buffer,
-			                                          uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_LE().
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *        \n\n
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
-			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_Control_EStream_LE(void* const Buffer,
-			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_BE().
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *        \n\n
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
-			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_Control_EStream_BE(void* const Buffer,
-			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-			//@}
-
-			/** \name Stream functions for PROGMEM source/destination data */
-			//@{
-
-			/** FLASH buffer source version of \ref Endpoint_Write_Stream_LE().
-			 *
-			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_PStream_LE(const void* const Buffer,
-			                                  uint16_t Length,
-			                                  uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** FLASH buffer source version of \ref Endpoint_Write_Stream_BE().
-			 *
-			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_PStream_BE(const void* const Buffer,
-			                                  uint16_t Length,
-			                                  uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_LE().
-			 *
-			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *        \n\n
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
-			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Control_PStream_LE(const void* const Buffer,
-			                                          uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_BE().
-			 *
-			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *        \n\n
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
-			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Control_PStream_BE(const void* const Buffer,
-			                                          uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-			//@}
-
-	/* Disable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			}
-		#endif
-		
-#endif
-
-/** @} */
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+              
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this 
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in 
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting 
+  documentation, and that the name of the author not be used in 
+  advertising or publicity pertaining to distribution of the 
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *  \brief Endpoint data stream transmission and reception management for the AVR8 microcontrollers.
+ *  \copydetails Group_EndpointStreamRW_AVR8
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the USB driver
+ *        dispatch header located in LUFA/Drivers/USB/USB.h.
+ */
+
+/** \ingroup Group_EndpointStreamRW
+ *  \defgroup Group_EndpointStreamRW_AVR8 Read/Write of Multi-Byte Streams (AVR8)
+ *  \brief Endpoint data stream transmission and reception management for the Atmel AVR8 architecture.
+ *
+ *  Functions, macros, variables, enums and types related to data reading and writing of data streams from
+ *  and to endpoints.
+ *
+ *  @{
+ */ 
+
+#ifndef __ENDPOINT_STREAM_AVR8_H__
+#define __ENDPOINT_STREAM_AVR8_H__
+
+	/* Includes: */
+		#include "../../../../Common/Common.h"
+		#include "../USBMode.h"		
+		#include "../USBTask.h"
+		
+	/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_USB_DRIVER)
+			#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
+		#endif
+
+	/* Public Interface - May be used in end-application: */
+		/* Function Prototypes: */
+			/** \name Stream functions for null data */
+			//@{
+
+			/** Reads and discards the given number of bytes from the currently selected endpoint's bank,
+			 *  discarding fully read packets from the host as needed. The last packet is not automatically
+			 *  discarded once the remaining bytes has been read; the user is responsible for manually
+			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
+			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
+			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
+			 *  the endpoint bank becomes empty while there is still data to process (and after the current
+			 *  packet has been acknowledged) the BytesProcessed location will be updated with the total number
+			 *  of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
+			 *  in the user code - to continue the transfer, call the function again with identical parameters
+			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Endpoint_Discard_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Endpoint_Discard_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[in] Length          Number of bytes to discard via the currently selected endpoint.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Discard_Stream(uint16_t Length,
+			                                uint16_t* const BytesProcessed);
+
+			/** Writes a given number of zeroed bytes to the currently selected endpoint's bank, sending
+			 *  full packets to the host as needed. The last packet is not automatically sent once the 
+			 *  remaining bytes have been written; the user is responsible for manually sending the last
+			 *  packet to the host via the \ref Endpoint_ClearIN() macro.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
+			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
+			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
+			 *  the endpoint bank becomes full while there is still data to process (and after the current
+			 *  packet transmission has been initiated) the BytesProcessed location will be updated with the
+			 *  total number of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
+			 *  in the user code - to continue the transfer, call the function again with identical parameters
+			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Endpoint_Null_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Endpoint_Null_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[in] Length          Number of zero bytes to send via the currently selected endpoint.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Null_Stream(uint16_t Length,
+			                             uint16_t* const BytesProcessed);
+
+			//@}
+
+			/** \name Stream functions for RAM source/destination data */
+			//@{
+		
+			/** Writes the given number of bytes to the endpoint from the given buffer in little endian,
+			 *  sending full packets to the host as needed. The last packet filled is not automatically sent;
+			 *  the user is responsible for manually sending the last written packet to the host via the
+			 *  \ref Endpoint_ClearIN() macro.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
+			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
+			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
+			 *  the endpoint bank becomes full while there is still data to process (and after the current
+			 *  packet transmission has been initiated) the BytesProcessed location will be updated with the
+			 *  total number of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
+			 *  in the user code - to continue the transfer, call the function again with identical parameters
+			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t DataStream[512];
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                            NULL)) != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  DataStream[512];
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                               &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *
+			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Stream_LE(const void* const Buffer,
+			                                 uint16_t Length,
+			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Writes the given number of bytes to the endpoint from the given buffer in big endian,
+			 *  sending full packets to the host as needed. The last packet filled is not automatically sent;
+			 *  the user is responsible for manually sending the last written packet to the host via the
+			 *  \ref Endpoint_ClearIN() macro.
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Stream_BE(const void* const Buffer,
+			                                 uint16_t Length,
+			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+			
+			/** Reads the given number of bytes from the endpoint from the given buffer in little endian,
+			 *  discarding fully read packets from the host as needed. The last packet is not automatically
+			 *  discarded once the remaining bytes has been read; the user is responsible for manually
+			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
+			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
+			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
+			 *  the endpoint bank becomes empty while there is still data to process (and after the current
+			 *  packet has been acknowledged) the BytesProcessed location will be updated with the total number
+			 *  of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
+			 *  in the user code - to continue the transfer, call the function again with identical parameters
+			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t DataStream[512];
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                           NULL)) != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  DataStream[512];
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                              &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[out] Buffer          Pointer to the destination data buffer to write to.
+			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
+			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_Stream_LE(void* const Buffer,
+			                                uint16_t Length,
+			                                uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Reads the given number of bytes from the endpoint from the given buffer in big endian,
+			 *  discarding fully read packets from the host as needed. The last packet is not automatically
+			 *  discarded once the remaining bytes has been read; the user is responsible for manually
+			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[out] Buffer          Pointer to the destination data buffer to write to.
+			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
+			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_Stream_BE(void* const Buffer,
+			                                uint16_t Length,
+			                                uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in little endian,
+			 *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared
+			 *  in both failure and success states; the user is responsible for manually clearing the setup OUT to
+			 *  finalize the transfer via the \ref Endpoint_ClearOUT() macro.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
+			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Control_Stream_LE(const void* const Buffer,
+			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in big endian,
+			 *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared
+			 *  in both failure and success states; the user is responsible for manually clearing the setup OUT to
+			 *  finalize the transfer via the \ref Endpoint_ClearOUT() macro.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
+			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Control_Stream_BE(const void* const Buffer,
+			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Reads the given number of bytes from the CONTROL endpoint from the given buffer in little endian,
+			 *  discarding fully read packets from the host as needed. The device IN acknowledgement is not
+			 *  automatically sent after success or failure states; the user is responsible for manually sending the
+			 *  setup IN to finalize the transfer via the \ref Endpoint_ClearIN() macro.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
+			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_Control_Stream_LE(void* const Buffer,
+			                                        uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Reads the given number of bytes from the CONTROL endpoint from the given buffer in big endian,
+			 *  discarding fully read packets from the host as needed. The device IN acknowledgement is not
+			 *  automatically sent after success or failure states; the user is responsible for manually sending the
+			 *  setup IN to finalize the transfer via the \ref Endpoint_ClearIN() macro.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
+			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_Control_Stream_BE(void* const Buffer,
+			                                        uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+			//@}
+
+			/** \name Stream functions for EEPROM source/destination data */
+			//@{
+
+			/** EEPROM buffer source version of \ref Endpoint_Write_Stream_LE().
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_EStream_LE(const void* const Buffer,
+			                                  uint16_t Length,
+			                                  uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** EEPROM buffer source version of \ref Endpoint_Write_Stream_BE().
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_EStream_BE(const void* const Buffer,
+			                                  uint16_t Length,
+			                                  uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** EEPROM buffer destination version of \ref Endpoint_Read_Stream_LE().
+			 *
+			 *  \param[out] Buffer          Pointer to the destination data buffer to write to, located in EEPROM memory space.
+			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
+			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_EStream_LE(void* const Buffer,
+			                                 uint16_t Length,
+			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** EEPROM buffer destination version of \ref Endpoint_Read_Stream_BE().
+			 *
+			 *  \param[out] Buffer          Pointer to the destination data buffer to write to, located in EEPROM memory space.
+			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
+			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_EStream_BE(void* const Buffer,
+			                                 uint16_t Length,
+			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** EEPROM buffer source version of Endpoint_Write_Control_Stream_LE.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *        \n\n
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
+			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Control_EStream_LE(const void* const Buffer,
+			                                          uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** EEPROM buffer source version of \ref Endpoint_Write_Control_Stream_BE().
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *        \n\n
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
+			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Control_EStream_BE(const void* const Buffer,
+			                                          uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_LE().
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *        \n\n
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
+			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_Control_EStream_LE(void* const Buffer,
+			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_BE().
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *        \n\n
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
+			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_Control_EStream_BE(void* const Buffer,
+			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+			//@}
+
+			/** \name Stream functions for PROGMEM source/destination data */
+			//@{
+
+			/** FLASH buffer source version of \ref Endpoint_Write_Stream_LE().
+			 *
+			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_PStream_LE(const void* const Buffer,
+			                                  uint16_t Length,
+			                                  uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** FLASH buffer source version of \ref Endpoint_Write_Stream_BE().
+			 *
+			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_PStream_BE(const void* const Buffer,
+			                                  uint16_t Length,
+			                                  uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_LE().
+			 *
+			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *        \n\n
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
+			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Control_PStream_LE(const void* const Buffer,
+			                                          uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_BE().
+			 *
+			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *        \n\n
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
+			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Control_PStream_BE(const void* const Buffer,
+			                                          uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+			//@}
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+		
+#endif
+
+/** @} */
 
diff --git a/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.h b/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.h
index 53316f2f92a83a1d939fa01dbd36180ccfadfe3e..f69469f28871e808743840f187da7223b56e742f 100644
--- a/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.h
+++ b/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.h
@@ -1,442 +1,442 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-              
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this 
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
- 
-/** \file
- *  \brief Pipe data stream transmission and reception management for the AVR8 microcontrollers
- *  \copydetails Group_PipeStreamRW_AVR8
- *
- *  \note This file should not be included directly. It is automatically included as needed by the USB driver
- *        dispatch header located in LUFA/Drivers/USB/USB.h.
- */
-
-/** \ingroup Group_PipeStreamRW
- *  \defgroup Group_PipeStreamRW_AVR8 Read/Write of Multi-Byte Streams (AVR8)
- *  \brief Pipe data stream transmission and reception management for the Atmel AVR8 architecture.
- *
- *  Functions, macros, variables, enums and types related to data reading and writing of data streams from
- *  and to pipes.
- *
- *  @{
- */
-
-#ifndef __PIPE_STREAM_AVR8_H__
-#define __PIPE_STREAM_AVR8_H__
-
-	/* Includes: */
-		#include "../../../../Common/Common.h"
-		#include "../USBMode.h"		
-		#include "../USBTask.h"
-		
-	/* Enable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			extern "C" {
-		#endif
-
-	/* Preprocessor Checks: */
-		#if !defined(__INCLUDE_FROM_USB_DRIVER)
-			#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
-		#endif
-		
-	/* Public Interface - May be used in end-application: */
-		/* Function Prototypes: */
-			/** \name Stream functions for null data */
-			//@{
-
-			/** Reads and discards the given number of bytes from the pipe, discarding fully read packets from the host
-			 *  as needed. The last packet is not automatically discarded once the remaining bytes has been read; the
-			 *  user is responsible for manually discarding the last packet from the device via the \ref Pipe_ClearIN() macro.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once, failing or
-			 *  succeeding as a single unit. If the BytesProcessed parameter points to a valid storage location, the transfer
-			 *  will instead be performed as a series of chunks. Each time the pipe bank becomes empty while there is still data
-			 *  to process (and after the current packet has been acknowledged) the BytesProcessed location will be updated with
-			 *  the total number of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref PIPE_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed in the user code - to
-			 *  continue the transfer, call the function again with identical parameters and it will resume until the BytesProcessed
-			 *  value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Pipe_Discard_Stream(512, NULL)) != PIPE_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Pipe_Discard_Stream(512, &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != PIPE_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-			 *
-			 *  \param[in] Length          Number of bytes to discard via the currently selected pipe.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                             updated, \c NULL if the entire stream should be processed at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Discard_Stream(uint16_t Length,
-			                            uint16_t* const BytesProcessed);
-
-			/** Writes a given number of zeroed bytes to the pipe, sending full pipe packets from the host to the device
-			 *  as needed. The last packet is not automatically sent once the remaining bytes has been written; the
-			 *  user is responsible for manually discarding the last packet from the device via the \ref Pipe_ClearOUT() macro.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once, failing or
-			 *  succeeding as a single unit. If the BytesProcessed parameter points to a valid storage location, the transfer
-			 *  will instead be performed as a series of chunks. Each time the pipe bank becomes full while there is still data
-			 *  to process (and after the current packet transmission has been initiated) the BytesProcessed location will be
-			 *  updated with the total number of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref PIPE_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed in the user code - to
-			 *  continue the transfer, call the function again with identical parameters and it will resume until the BytesProcessed
-			 *  value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Pipe_Null_Stream(512, NULL)) != PIPE_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Pipe_Null_Stream(512, &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != PIPE_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-			 *
-			 *  \param[in] Length          Number of zero bytes to write via the currently selected pipe.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                             updated, \c NULL if the entire stream should be processed at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Null_Stream(uint16_t Length,
-			                         uint16_t* const BytesProcessed);
-
-			//@}
-
-			/** \name Stream functions for RAM source/destination data */
-			//@{
-			
-			/** Writes the given number of bytes to the pipe from the given buffer in little endian,
-			 *  sending full packets to the device as needed. The last packet filled is not automatically sent;
-			 *  the user is responsible for manually sending the last written packet to the host via the
-			 *  \ref Pipe_ClearOUT() macro. Between each USB packet, the given stream callback function is
-			 *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
-			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
-			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
-			 *  the pipe bank becomes full while there is still data to process (and after the current
-			 *  packet transmission has been initiated) the BytesProcessed location will be updated with the
-			 *  total number of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref PIPE_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
-			 *  in the user code - to continue the transfer, call the function again with identical parameters
-			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t DataStream[512];
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Pipe_Write_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                        NULL)) != PIPE_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  DataStream[512];
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Pipe_Write_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                           &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != PIPE_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected pipe into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                             updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Write_Stream_LE(const void* const Buffer,
-			                             uint16_t Length,
-			                             uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Writes the given number of bytes to the pipe from the given buffer in big endian,
-			 *  sending full packets to the device as needed. The last packet filled is not automatically sent;
-			 *  the user is responsible for manually sending the last written packet to the host via the
-			 *  \ref Pipe_ClearOUT() macro. Between each USB packet, the given stream callback function is
-			 *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
-			 *
-			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected pipe into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                             updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Write_Stream_BE(const void* const Buffer,
-			                             uint16_t Length,
-			                             uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Reads the given number of bytes from the pipe into the given buffer in little endian,
-			 *  sending full packets to the device as needed. The last packet filled is not automatically sent;
-			 *  the user is responsible for manually sending the last written packet to the host via the
-			 *  \ref Pipe_ClearIN() macro. Between each USB packet, the given stream callback function is
-			 *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
-			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
-			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
-			 *  the pipe bank becomes empty while there is still data to process (and after the current
-			 *  packet has been acknowledged) the BytesProcessed location will be updated with the total number
-			 *  of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref PIPE_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
-			 *  in the user code - to continue the transfer, call the function again with identical parameters
-			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t DataStream[512];
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Pipe_Read_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                       NULL)) != PIPE_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  DataStream[512];
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Pipe_Read_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                          &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != PIPE_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-			 *
-			 *  \param[out] Buffer          Pointer to the source data buffer to write to.
-			 *  \param[in]  Length          Number of bytes to read for the currently selected pipe to read from.
-			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                              updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Read_Stream_LE(void* const Buffer,
-			                            uint16_t Length,
-			                            uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Reads the given number of bytes from the pipe into the given buffer in big endian,
-			 *  sending full packets to the device as needed. The last packet filled is not automatically sent;
-			 *  the user is responsible for manually sending the last written packet to the host via the
-			 *  \ref Pipe_ClearIN() macro. Between each USB packet, the given stream callback function is
-			 *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
-			 *
-			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-			 *
-			 *  \param[out] Buffer          Pointer to the source data buffer to write to.
-			 *  \param[in]  Length          Number of bytes to read for the currently selected pipe to read from.
-			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                              updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Read_Stream_BE(void* const Buffer,
-			                            uint16_t Length,
-			                            uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-			//@}
-
-			/** \name Stream functions for EEPROM source/destination data */
-			//@{
-			
-			/** EEPROM buffer source version of \ref Pipe_Write_Stream_LE().
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected pipe into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                             updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Write_EStream_LE(const void* const Buffer,
-			                              uint16_t Length,
-			                              uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-			
-			/** EEPROM buffer source version of \ref Pipe_Write_Stream_BE().
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected pipe into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                             updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Write_EStream_BE(const void* const Buffer,
-			                              uint16_t Length,
-			                              uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** EEPROM buffer source version of \ref Pipe_Read_Stream_LE().
-			 *
-			 *  \param[out] Buffer          Pointer to the source data buffer to write to.
-			 *  \param[in]  Length          Number of bytes to read for the currently selected pipe to read from.
-			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                              updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Read_EStream_LE(void* const Buffer,
-			                             uint16_t Length,
-			                             uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-			
-			/** EEPROM buffer source version of \ref Pipe_Read_Stream_BE().
-			 *
-			 *  \param[out] Buffer          Pointer to the source data buffer to write to.
-			 *  \param[in]  Length          Number of bytes to read for the currently selected pipe to read from.
-			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                              updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Read_EStream_BE(void* const Buffer,
-			                             uint16_t Length,
-			                             uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-			//@}
-
-			/** \name Stream functions for PROGMEM source/destination data */
-			//@{
-			
-			/** FLASH buffer source version of \ref Pipe_Write_Stream_LE().
-			 *
-			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected pipe into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                             updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Write_PStream_LE(const void* const Buffer,
-			                              uint16_t Length,
-			                              uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-			
-			/** FLASH buffer source version of \ref Pipe_Write_Stream_BE().
-			 *
-			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected pipe into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                             updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Write_PStream_BE(const void* const Buffer,
-			                              uint16_t Length,
-			                              uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-			//@}
-
-	/* Disable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			}
-		#endif
-	
-#endif
-
-/** @} */
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+              
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this 
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in 
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting 
+  documentation, and that the name of the author not be used in 
+  advertising or publicity pertaining to distribution of the 
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+ 
+/** \file
+ *  \brief Pipe data stream transmission and reception management for the AVR8 microcontrollers
+ *  \copydetails Group_PipeStreamRW_AVR8
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the USB driver
+ *        dispatch header located in LUFA/Drivers/USB/USB.h.
+ */
+
+/** \ingroup Group_PipeStreamRW
+ *  \defgroup Group_PipeStreamRW_AVR8 Read/Write of Multi-Byte Streams (AVR8)
+ *  \brief Pipe data stream transmission and reception management for the Atmel AVR8 architecture.
+ *
+ *  Functions, macros, variables, enums and types related to data reading and writing of data streams from
+ *  and to pipes.
+ *
+ *  @{
+ */
+
+#ifndef __PIPE_STREAM_AVR8_H__
+#define __PIPE_STREAM_AVR8_H__
+
+	/* Includes: */
+		#include "../../../../Common/Common.h"
+		#include "../USBMode.h"		
+		#include "../USBTask.h"
+		
+	/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_USB_DRIVER)
+			#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
+		#endif
+		
+	/* Public Interface - May be used in end-application: */
+		/* Function Prototypes: */
+			/** \name Stream functions for null data */
+			//@{
+
+			/** Reads and discards the given number of bytes from the pipe, discarding fully read packets from the host
+			 *  as needed. The last packet is not automatically discarded once the remaining bytes has been read; the
+			 *  user is responsible for manually discarding the last packet from the device via the \ref Pipe_ClearIN() macro.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once, failing or
+			 *  succeeding as a single unit. If the BytesProcessed parameter points to a valid storage location, the transfer
+			 *  will instead be performed as a series of chunks. Each time the pipe bank becomes empty while there is still data
+			 *  to process (and after the current packet has been acknowledged) the BytesProcessed location will be updated with
+			 *  the total number of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref PIPE_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed in the user code - to
+			 *  continue the transfer, call the function again with identical parameters and it will resume until the BytesProcessed
+			 *  value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Pipe_Discard_Stream(512, NULL)) != PIPE_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Pipe_Discard_Stream(512, &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != PIPE_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
+			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
+			 *
+			 *  \param[in] Length          Number of bytes to discard via the currently selected pipe.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                             updated, \c NULL if the entire stream should be processed at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Discard_Stream(uint16_t Length,
+			                            uint16_t* const BytesProcessed);
+
+			/** Writes a given number of zeroed bytes to the pipe, sending full pipe packets from the host to the device
+			 *  as needed. The last packet is not automatically sent once the remaining bytes has been written; the
+			 *  user is responsible for manually discarding the last packet from the device via the \ref Pipe_ClearOUT() macro.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once, failing or
+			 *  succeeding as a single unit. If the BytesProcessed parameter points to a valid storage location, the transfer
+			 *  will instead be performed as a series of chunks. Each time the pipe bank becomes full while there is still data
+			 *  to process (and after the current packet transmission has been initiated) the BytesProcessed location will be
+			 *  updated with the total number of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref PIPE_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed in the user code - to
+			 *  continue the transfer, call the function again with identical parameters and it will resume until the BytesProcessed
+			 *  value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Pipe_Null_Stream(512, NULL)) != PIPE_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Pipe_Null_Stream(512, &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != PIPE_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
+			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
+			 *
+			 *  \param[in] Length          Number of zero bytes to write via the currently selected pipe.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                             updated, \c NULL if the entire stream should be processed at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Null_Stream(uint16_t Length,
+			                         uint16_t* const BytesProcessed);
+
+			//@}
+
+			/** \name Stream functions for RAM source/destination data */
+			//@{
+			
+			/** Writes the given number of bytes to the pipe from the given buffer in little endian,
+			 *  sending full packets to the device as needed. The last packet filled is not automatically sent;
+			 *  the user is responsible for manually sending the last written packet to the host via the
+			 *  \ref Pipe_ClearOUT() macro. Between each USB packet, the given stream callback function is
+			 *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
+			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
+			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
+			 *  the pipe bank becomes full while there is still data to process (and after the current
+			 *  packet transmission has been initiated) the BytesProcessed location will be updated with the
+			 *  total number of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref PIPE_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
+			 *  in the user code - to continue the transfer, call the function again with identical parameters
+			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t DataStream[512];
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Pipe_Write_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                        NULL)) != PIPE_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  DataStream[512];
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Pipe_Write_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                           &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != PIPE_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
+			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected pipe into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                             updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Write_Stream_LE(const void* const Buffer,
+			                             uint16_t Length,
+			                             uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Writes the given number of bytes to the pipe from the given buffer in big endian,
+			 *  sending full packets to the device as needed. The last packet filled is not automatically sent;
+			 *  the user is responsible for manually sending the last written packet to the host via the
+			 *  \ref Pipe_ClearOUT() macro. Between each USB packet, the given stream callback function is
+			 *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
+			 *
+			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
+			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected pipe into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                             updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Write_Stream_BE(const void* const Buffer,
+			                             uint16_t Length,
+			                             uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Reads the given number of bytes from the pipe into the given buffer in little endian,
+			 *  sending full packets to the device as needed. The last packet filled is not automatically sent;
+			 *  the user is responsible for manually sending the last written packet to the host via the
+			 *  \ref Pipe_ClearIN() macro. Between each USB packet, the given stream callback function is
+			 *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
+			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
+			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
+			 *  the pipe bank becomes empty while there is still data to process (and after the current
+			 *  packet has been acknowledged) the BytesProcessed location will be updated with the total number
+			 *  of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref PIPE_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
+			 *  in the user code - to continue the transfer, call the function again with identical parameters
+			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t DataStream[512];
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Pipe_Read_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                       NULL)) != PIPE_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  DataStream[512];
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Pipe_Read_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                          &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != PIPE_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
+			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
+			 *
+			 *  \param[out] Buffer          Pointer to the source data buffer to write to.
+			 *  \param[in]  Length          Number of bytes to read for the currently selected pipe to read from.
+			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                              updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Read_Stream_LE(void* const Buffer,
+			                            uint16_t Length,
+			                            uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Reads the given number of bytes from the pipe into the given buffer in big endian,
+			 *  sending full packets to the device as needed. The last packet filled is not automatically sent;
+			 *  the user is responsible for manually sending the last written packet to the host via the
+			 *  \ref Pipe_ClearIN() macro. Between each USB packet, the given stream callback function is
+			 *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
+			 *
+			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
+			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
+			 *
+			 *  \param[out] Buffer          Pointer to the source data buffer to write to.
+			 *  \param[in]  Length          Number of bytes to read for the currently selected pipe to read from.
+			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                              updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Read_Stream_BE(void* const Buffer,
+			                            uint16_t Length,
+			                            uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+			//@}
+
+			/** \name Stream functions for EEPROM source/destination data */
+			//@{
+			
+			/** EEPROM buffer source version of \ref Pipe_Write_Stream_LE().
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected pipe into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                             updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Write_EStream_LE(const void* const Buffer,
+			                              uint16_t Length,
+			                              uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+			
+			/** EEPROM buffer source version of \ref Pipe_Write_Stream_BE().
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected pipe into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                             updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Write_EStream_BE(const void* const Buffer,
+			                              uint16_t Length,
+			                              uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** EEPROM buffer source version of \ref Pipe_Read_Stream_LE().
+			 *
+			 *  \param[out] Buffer          Pointer to the source data buffer to write to.
+			 *  \param[in]  Length          Number of bytes to read for the currently selected pipe to read from.
+			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                              updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Read_EStream_LE(void* const Buffer,
+			                             uint16_t Length,
+			                             uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+			
+			/** EEPROM buffer source version of \ref Pipe_Read_Stream_BE().
+			 *
+			 *  \param[out] Buffer          Pointer to the source data buffer to write to.
+			 *  \param[in]  Length          Number of bytes to read for the currently selected pipe to read from.
+			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                              updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Read_EStream_BE(void* const Buffer,
+			                             uint16_t Length,
+			                             uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+			//@}
+
+			/** \name Stream functions for PROGMEM source/destination data */
+			//@{
+			
+			/** FLASH buffer source version of \ref Pipe_Write_Stream_LE().
+			 *
+			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected pipe into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                             updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Write_PStream_LE(const void* const Buffer,
+			                              uint16_t Length,
+			                              uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+			
+			/** FLASH buffer source version of \ref Pipe_Write_Stream_BE().
+			 *
+			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected pipe into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                             updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Write_PStream_BE(const void* const Buffer,
+			                              uint16_t Length,
+			                              uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+			//@}
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+	
+#endif
+
+/** @} */
 
diff --git a/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.c b/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.c
index b4e130e746967e3b135a5e2a53612b934dc60040..51546106551f673eef988752c3b7c3406b24e625 100644
--- a/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.c
+++ b/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.c
@@ -1,235 +1,235 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-              
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this 
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-#include "../../../../Common/Common.h"
-#if (ARCH == ARCH_UC3)
-
-#define  __INCLUDE_FROM_USB_DRIVER
-#include "../USBMode.h"
-
-#if defined(USB_CAN_BE_DEVICE)
-
-#include "EndpointStream_UC3.h"
-
-#if !defined(CONTROL_ONLY_DEVICE)
-uint8_t Endpoint_Discard_Stream(uint16_t Length,
-                                uint16_t* const BytesProcessed)
-{
-	uint8_t  ErrorCode;
-	uint16_t BytesInTransfer = 0;
-	
-	if ((ErrorCode = Endpoint_WaitUntilReady()))
-	  return ErrorCode;
-	  
-	if (BytesProcessed != NULL)
-	  Length -= *BytesProcessed;
-
-	while (Length)
-	{
-		if (!(Endpoint_IsReadWriteAllowed()))
-		{
-			Endpoint_ClearOUT();
-
-			if (BytesProcessed != NULL)
-			{
-				*BytesProcessed += BytesInTransfer;
-				return ENDPOINT_RWSTREAM_IncompleteTransfer;
-			}
-
-			if ((ErrorCode = Endpoint_WaitUntilReady()))
-			  return ErrorCode;
-		}
-		else
-		{
-			Endpoint_Discard_8();
-
-			Length--;
-			BytesInTransfer++;
-		}
-	}
-	
-	return ENDPOINT_RWSTREAM_NoError;
-}
-
-uint8_t Endpoint_Null_Stream(uint16_t Length,
-                             uint16_t* const BytesProcessed)
-{
-	uint8_t  ErrorCode;
-	uint16_t BytesInTransfer = 0;
-	
-	if ((ErrorCode = Endpoint_WaitUntilReady()))
-	  return ErrorCode;
-	  
-	if (BytesProcessed != NULL)
-	  Length -= *BytesProcessed;
-
-	while (Length)
-	{
-		if (!(Endpoint_IsReadWriteAllowed()))
-		{
-			Endpoint_ClearIN();
-
-			if (BytesProcessed != NULL)
-			{
-				*BytesProcessed += BytesInTransfer;
-				return ENDPOINT_RWSTREAM_IncompleteTransfer;
-			}
-
-			if ((ErrorCode = Endpoint_WaitUntilReady()))
-			  return ErrorCode;
-		}
-		else
-		{
-			Endpoint_Write_8(0);
-
-			Length--;
-			BytesInTransfer++;
-		}
-	}
-	
-	return ENDPOINT_RWSTREAM_NoError;
-}
-
-/* The following abuses the C preprocessor in order to copy-paste common code with slight alterations,
- * so that the code needs to be written once. It is a crude form of templating to reduce code maintenance. */
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_LE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_BE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_LE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_BE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
-#include "Template/Template_Endpoint_RW.c"
-
-#if defined(ARCH_HAS_FLASH_ADDRESS_SPACE)
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_LE
-	#define  TEMPLATE_BUFFER_TYPE                      const void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_RW.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_BE
-	#define  TEMPLATE_BUFFER_TYPE                      const void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_RW.c"
-#endif
-
-#if defined(ARCH_HAS_EEPROM_ADDRESS_SPACE)
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_LE
-	#define  TEMPLATE_BUFFER_TYPE                      const void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_RW.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_BE
-	#define  TEMPLATE_BUFFER_TYPE                      const void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_RW.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_LE
-	#define  TEMPLATE_BUFFER_TYPE                      void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
-	#include "Template/Template_Endpoint_RW.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_BE
-	#define  TEMPLATE_BUFFER_TYPE                      void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
-	#include "Template/Template_Endpoint_RW.c"
-#endif
-
-#endif
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_LE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
-#include "Template/Template_Endpoint_Control_W.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_BE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
-#include "Template/Template_Endpoint_Control_W.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_LE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
-#include "Template/Template_Endpoint_Control_R.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_BE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
-#include "Template/Template_Endpoint_Control_R.c"
-
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+              
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this 
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in 
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting 
+  documentation, and that the name of the author not be used in 
+  advertising or publicity pertaining to distribution of the 
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+#include "../../../../Common/Common.h"
+#if (ARCH == ARCH_UC3)
+
+#define  __INCLUDE_FROM_USB_DRIVER
+#include "../USBMode.h"
+
+#if defined(USB_CAN_BE_DEVICE)
+
+#include "EndpointStream_UC3.h"
+
+#if !defined(CONTROL_ONLY_DEVICE)
+uint8_t Endpoint_Discard_Stream(uint16_t Length,
+                                uint16_t* const BytesProcessed)
+{
+	uint8_t  ErrorCode;
+	uint16_t BytesInTransfer = 0;
+	
+	if ((ErrorCode = Endpoint_WaitUntilReady()))
+	  return ErrorCode;
+	  
+	if (BytesProcessed != NULL)
+	  Length -= *BytesProcessed;
+
+	while (Length)
+	{
+		if (!(Endpoint_IsReadWriteAllowed()))
+		{
+			Endpoint_ClearOUT();
+
+			if (BytesProcessed != NULL)
+			{
+				*BytesProcessed += BytesInTransfer;
+				return ENDPOINT_RWSTREAM_IncompleteTransfer;
+			}
+
+			if ((ErrorCode = Endpoint_WaitUntilReady()))
+			  return ErrorCode;
+		}
+		else
+		{
+			Endpoint_Discard_8();
+
+			Length--;
+			BytesInTransfer++;
+		}
+	}
+	
+	return ENDPOINT_RWSTREAM_NoError;
+}
+
+uint8_t Endpoint_Null_Stream(uint16_t Length,
+                             uint16_t* const BytesProcessed)
+{
+	uint8_t  ErrorCode;
+	uint16_t BytesInTransfer = 0;
+	
+	if ((ErrorCode = Endpoint_WaitUntilReady()))
+	  return ErrorCode;
+	  
+	if (BytesProcessed != NULL)
+	  Length -= *BytesProcessed;
+
+	while (Length)
+	{
+		if (!(Endpoint_IsReadWriteAllowed()))
+		{
+			Endpoint_ClearIN();
+
+			if (BytesProcessed != NULL)
+			{
+				*BytesProcessed += BytesInTransfer;
+				return ENDPOINT_RWSTREAM_IncompleteTransfer;
+			}
+
+			if ((ErrorCode = Endpoint_WaitUntilReady()))
+			  return ErrorCode;
+		}
+		else
+		{
+			Endpoint_Write_8(0);
+
+			Length--;
+			BytesInTransfer++;
+		}
+	}
+	
+	return ENDPOINT_RWSTREAM_NoError;
+}
+
+/* The following abuses the C preprocessor in order to copy-paste common code with slight alterations,
+ * so that the code needs to be written once. It is a crude form of templating to reduce code maintenance. */
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_LE
+#define  TEMPLATE_BUFFER_TYPE                      const void*
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
+#include "Template/Template_Endpoint_RW.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_BE
+#define  TEMPLATE_BUFFER_TYPE                      const void*
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
+#include "Template/Template_Endpoint_RW.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_LE
+#define  TEMPLATE_BUFFER_TYPE                      void*
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
+#include "Template/Template_Endpoint_RW.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_BE
+#define  TEMPLATE_BUFFER_TYPE                      void*
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
+#include "Template/Template_Endpoint_RW.c"
+
+#if defined(ARCH_HAS_FLASH_ADDRESS_SPACE)
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_LE
+	#define  TEMPLATE_BUFFER_TYPE                      const void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_RW.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_BE
+	#define  TEMPLATE_BUFFER_TYPE                      const void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_RW.c"
+#endif
+
+#if defined(ARCH_HAS_EEPROM_ADDRESS_SPACE)
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_LE
+	#define  TEMPLATE_BUFFER_TYPE                      const void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_RW.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_BE
+	#define  TEMPLATE_BUFFER_TYPE                      const void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_RW.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_LE
+	#define  TEMPLATE_BUFFER_TYPE                      void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
+	#include "Template/Template_Endpoint_RW.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_BE
+	#define  TEMPLATE_BUFFER_TYPE                      void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
+	#include "Template/Template_Endpoint_RW.c"
 #endif
 
-#endif
+#endif
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_LE
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
+#include "Template/Template_Endpoint_Control_W.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_BE
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
+#include "Template/Template_Endpoint_Control_W.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_LE
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
+#include "Template/Template_Endpoint_Control_R.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_BE
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
+#include "Template/Template_Endpoint_Control_R.c"
+
+#endif
+
+#endif
diff --git a/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.h b/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.h
index 40a54ee1767c90e155f487718495d96e95dc4de4..3eccb7f15a56323fa0c7ca2d7c0fe85447ac3fe0 100644
--- a/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.h
+++ b/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.h
@@ -1,434 +1,434 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-              
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this 
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *  \brief Endpoint data stream transmission and reception management for the AVR32 UC3 microcontrollers.
- *  \copydetails Group_EndpointStreamRW_UC3
- *
- *  \note This file should not be included directly. It is automatically included as needed by the USB driver
- *        dispatch header located in LUFA/Drivers/USB/USB.h.
- */
-
-/** \ingroup Group_EndpointStreamRW
- *  \defgroup Group_EndpointStreamRW_UC3 Read/Write of Multi-Byte Streams (UC3)
- *  \brief Endpoint data stream transmission and reception management for the Atmel AVR32 UC3 architecture.
- *
- *  Functions, macros, variables, enums and types related to data reading and writing of data streams from
- *  and to endpoints.
- *
- *  @{
- */ 
-
-#ifndef __ENDPOINT_STREAM_UC3_H__
-#define __ENDPOINT_STREAM_UC3_H__
-
-	/* Includes: */
-		#include "../../../../Common/Common.h"
-		#include "../USBMode.h"
-		#include "../USBTask.h"
-		
-	/* Enable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			extern "C" {
-		#endif
-
-	/* Preprocessor Checks: */
-		#if !defined(__INCLUDE_FROM_USB_DRIVER)
-			#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
-		#endif
-
-	/* Public Interface - May be used in end-application: */
-		/* Function Prototypes: */
-			/** \name Stream functions for null data */
-			//@{
-
-			/** Reads and discards the given number of bytes from the currently selected endpoint's bank,
-			 *  discarding fully read packets from the host as needed. The last packet is not automatically
-			 *  discarded once the remaining bytes has been read; the user is responsible for manually
-			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
-			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
-			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
-			 *  the endpoint bank becomes empty while there is still data to process (and after the current
-			 *  packet has been acknowledged) the BytesProcessed location will be updated with the total number
-			 *  of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
-			 *  in the user code - to continue the transfer, call the function again with identical parameters
-			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Endpoint_Discard_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Endpoint_Discard_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[in] Length          Number of bytes to discard via the currently selected endpoint.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Discard_Stream(uint16_t Length,
-			                                uint16_t* const BytesProcessed);
-
-			/** Writes a given number of zeroed bytes to the currently selected endpoint's bank, sending
-			 *  full packets to the host as needed. The last packet is not automatically sent once the 
-			 *  remaining bytes have been written; the user is responsible for manually sending the last
-			 *  packet to the host via the \ref Endpoint_ClearIN() macro.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
-			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
-			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
-			 *  the endpoint bank becomes full while there is still data to process (and after the current
-			 *  packet transmission has been initiated) the BytesProcessed location will be updated with the
-			 *  total number of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
-			 *  in the user code - to continue the transfer, call the function again with identical parameters
-			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Endpoint_Null_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Endpoint_Null_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[in] Length          Number of zero bytes to send via the currently selected endpoint.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Null_Stream(uint16_t Length,
-			                             uint16_t* const BytesProcessed);
-
-			//@}
-
-			/** \name Stream functions for RAM source/destination data */
-			//@{
-		
-			/** Writes the given number of bytes to the endpoint from the given buffer in little endian,
-			 *  sending full packets to the host as needed. The last packet filled is not automatically sent;
-			 *  the user is responsible for manually sending the last written packet to the host via the
-			 *  \ref Endpoint_ClearIN() macro.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
-			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
-			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
-			 *  the endpoint bank becomes full while there is still data to process (and after the current
-			 *  packet transmission has been initiated) the BytesProcessed location will be updated with the
-			 *  total number of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
-			 *  in the user code - to continue the transfer, call the function again with identical parameters
-			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t DataStream[512];
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                            NULL)) != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  DataStream[512];
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                               &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Stream_LE(const void* const Buffer,
-			                                 uint16_t Length,
-			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Writes the given number of bytes to the endpoint from the given buffer in big endian,
-			 *  sending full packets to the host as needed. The last packet filled is not automatically sent;
-			 *  the user is responsible for manually sending the last written packet to the host via the
-			 *  \ref Endpoint_ClearIN() macro.
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Stream_BE(const void* const Buffer,
-			                                 uint16_t Length,
-			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-			
-			/** Reads the given number of bytes from the endpoint from the given buffer in little endian,
-			 *  discarding fully read packets from the host as needed. The last packet is not automatically
-			 *  discarded once the remaining bytes has been read; the user is responsible for manually
-			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
-			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
-			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
-			 *  the endpoint bank becomes empty while there is still data to process (and after the current
-			 *  packet has been acknowledged) the BytesProcessed location will be updated with the total number
-			 *  of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
-			 *  in the user code - to continue the transfer, call the function again with identical parameters
-			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t DataStream[512];
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                           NULL)) != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  DataStream[512];
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                              &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[out] Buffer          Pointer to the destination data buffer to write to.
-			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
-			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_Stream_LE(void* const Buffer,
-			                                uint16_t Length,
-			                                uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Reads the given number of bytes from the endpoint from the given buffer in big endian,
-			 *  discarding fully read packets from the host as needed. The last packet is not automatically
-			 *  discarded once the remaining bytes has been read; the user is responsible for manually
-			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[out] Buffer          Pointer to the destination data buffer to write to.
-			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
-			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_Stream_BE(void* const Buffer,
-			                                uint16_t Length,
-			                                uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in little endian,
-			 *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared
-			 *  in both failure and success states; the user is responsible for manually clearing the setup OUT to
-			 *  finalize the transfer via the \ref Endpoint_ClearOUT() macro.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
-			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Control_Stream_LE(const void* const Buffer,
-			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in big endian,
-			 *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared
-			 *  in both failure and success states; the user is responsible for manually clearing the setup OUT to
-			 *  finalize the transfer via the \ref Endpoint_ClearOUT() macro.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
-			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Control_Stream_BE(const void* const Buffer,
-			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Reads the given number of bytes from the CONTROL endpoint from the given buffer in little endian,
-			 *  discarding fully read packets from the host as needed. The device IN acknowledgement is not
-			 *  automatically sent after success or failure states; the user is responsible for manually sending the
-			 *  setup IN to finalize the transfer via the \ref Endpoint_ClearIN() macro.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
-			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_Control_Stream_LE(void* const Buffer,
-			                                        uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Reads the given number of bytes from the CONTROL endpoint from the given buffer in big endian,
-			 *  discarding fully read packets from the host as needed. The device IN acknowledgement is not
-			 *  automatically sent after success or failure states; the user is responsible for manually sending the
-			 *  setup IN to finalize the transfer via the \ref Endpoint_ClearIN() macro.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
-			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_Control_Stream_BE(void* const Buffer,
-			                                        uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-			//@}
-
-	/* Disable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			}
-		#endif
-		
-#endif
-
-/** @} */
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+              
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this 
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in 
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting 
+  documentation, and that the name of the author not be used in 
+  advertising or publicity pertaining to distribution of the 
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *  \brief Endpoint data stream transmission and reception management for the AVR32 UC3 microcontrollers.
+ *  \copydetails Group_EndpointStreamRW_UC3
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the USB driver
+ *        dispatch header located in LUFA/Drivers/USB/USB.h.
+ */
+
+/** \ingroup Group_EndpointStreamRW
+ *  \defgroup Group_EndpointStreamRW_UC3 Read/Write of Multi-Byte Streams (UC3)
+ *  \brief Endpoint data stream transmission and reception management for the Atmel AVR32 UC3 architecture.
+ *
+ *  Functions, macros, variables, enums and types related to data reading and writing of data streams from
+ *  and to endpoints.
+ *
+ *  @{
+ */ 
+
+#ifndef __ENDPOINT_STREAM_UC3_H__
+#define __ENDPOINT_STREAM_UC3_H__
+
+	/* Includes: */
+		#include "../../../../Common/Common.h"
+		#include "../USBMode.h"
+		#include "../USBTask.h"
+		
+	/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_USB_DRIVER)
+			#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
+		#endif
+
+	/* Public Interface - May be used in end-application: */
+		/* Function Prototypes: */
+			/** \name Stream functions for null data */
+			//@{
+
+			/** Reads and discards the given number of bytes from the currently selected endpoint's bank,
+			 *  discarding fully read packets from the host as needed. The last packet is not automatically
+			 *  discarded once the remaining bytes has been read; the user is responsible for manually
+			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
+			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
+			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
+			 *  the endpoint bank becomes empty while there is still data to process (and after the current
+			 *  packet has been acknowledged) the BytesProcessed location will be updated with the total number
+			 *  of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
+			 *  in the user code - to continue the transfer, call the function again with identical parameters
+			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Endpoint_Discard_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Endpoint_Discard_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[in] Length          Number of bytes to discard via the currently selected endpoint.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Discard_Stream(uint16_t Length,
+			                                uint16_t* const BytesProcessed);
+
+			/** Writes a given number of zeroed bytes to the currently selected endpoint's bank, sending
+			 *  full packets to the host as needed. The last packet is not automatically sent once the 
+			 *  remaining bytes have been written; the user is responsible for manually sending the last
+			 *  packet to the host via the \ref Endpoint_ClearIN() macro.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
+			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
+			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
+			 *  the endpoint bank becomes full while there is still data to process (and after the current
+			 *  packet transmission has been initiated) the BytesProcessed location will be updated with the
+			 *  total number of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
+			 *  in the user code - to continue the transfer, call the function again with identical parameters
+			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Endpoint_Null_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Endpoint_Null_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[in] Length          Number of zero bytes to send via the currently selected endpoint.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Null_Stream(uint16_t Length,
+			                             uint16_t* const BytesProcessed);
+
+			//@}
+
+			/** \name Stream functions for RAM source/destination data */
+			//@{
+		
+			/** Writes the given number of bytes to the endpoint from the given buffer in little endian,
+			 *  sending full packets to the host as needed. The last packet filled is not automatically sent;
+			 *  the user is responsible for manually sending the last written packet to the host via the
+			 *  \ref Endpoint_ClearIN() macro.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
+			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
+			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
+			 *  the endpoint bank becomes full while there is still data to process (and after the current
+			 *  packet transmission has been initiated) the BytesProcessed location will be updated with the
+			 *  total number of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
+			 *  in the user code - to continue the transfer, call the function again with identical parameters
+			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t DataStream[512];
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                            NULL)) != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  DataStream[512];
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                               &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Stream_LE(const void* const Buffer,
+			                                 uint16_t Length,
+			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Writes the given number of bytes to the endpoint from the given buffer in big endian,
+			 *  sending full packets to the host as needed. The last packet filled is not automatically sent;
+			 *  the user is responsible for manually sending the last written packet to the host via the
+			 *  \ref Endpoint_ClearIN() macro.
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Stream_BE(const void* const Buffer,
+			                                 uint16_t Length,
+			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+			
+			/** Reads the given number of bytes from the endpoint from the given buffer in little endian,
+			 *  discarding fully read packets from the host as needed. The last packet is not automatically
+			 *  discarded once the remaining bytes has been read; the user is responsible for manually
+			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
+			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
+			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
+			 *  the endpoint bank becomes empty while there is still data to process (and after the current
+			 *  packet has been acknowledged) the BytesProcessed location will be updated with the total number
+			 *  of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
+			 *  in the user code - to continue the transfer, call the function again with identical parameters
+			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t DataStream[512];
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                           NULL)) != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  DataStream[512];
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                              &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[out] Buffer          Pointer to the destination data buffer to write to.
+			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
+			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_Stream_LE(void* const Buffer,
+			                                uint16_t Length,
+			                                uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Reads the given number of bytes from the endpoint from the given buffer in big endian,
+			 *  discarding fully read packets from the host as needed. The last packet is not automatically
+			 *  discarded once the remaining bytes has been read; the user is responsible for manually
+			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[out] Buffer          Pointer to the destination data buffer to write to.
+			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
+			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_Stream_BE(void* const Buffer,
+			                                uint16_t Length,
+			                                uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in little endian,
+			 *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared
+			 *  in both failure and success states; the user is responsible for manually clearing the setup OUT to
+			 *  finalize the transfer via the \ref Endpoint_ClearOUT() macro.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
+			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Control_Stream_LE(const void* const Buffer,
+			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in big endian,
+			 *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared
+			 *  in both failure and success states; the user is responsible for manually clearing the setup OUT to
+			 *  finalize the transfer via the \ref Endpoint_ClearOUT() macro.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
+			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Control_Stream_BE(const void* const Buffer,
+			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Reads the given number of bytes from the CONTROL endpoint from the given buffer in little endian,
+			 *  discarding fully read packets from the host as needed. The device IN acknowledgement is not
+			 *  automatically sent after success or failure states; the user is responsible for manually sending the
+			 *  setup IN to finalize the transfer via the \ref Endpoint_ClearIN() macro.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
+			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_Control_Stream_LE(void* const Buffer,
+			                                        uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Reads the given number of bytes from the CONTROL endpoint from the given buffer in big endian,
+			 *  discarding fully read packets from the host as needed. The device IN acknowledgement is not
+			 *  automatically sent after success or failure states; the user is responsible for manually sending the
+			 *  setup IN to finalize the transfer via the \ref Endpoint_ClearIN() macro.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
+			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_Control_Stream_BE(void* const Buffer,
+			                                        uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+			//@}
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+		
+#endif
+
+/** @} */
 
diff --git a/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.c b/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.c
index bb4cbc6593216861f4b380165bb1256172233ebf..76fbfd8f506bb9377480889845255795a8b95414 100644
--- a/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.c
+++ b/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.c
@@ -1,166 +1,166 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-              
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this 
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-#include "../../../../Common/Common.h"
-#if (ARCH == ARCH_UC3)
-
-#define  __INCLUDE_FROM_USB_DRIVER
-#include "../USBMode.h"
-
-#if defined(USB_CAN_BE_HOST)
-
-#include "PipeStream_UC3.h"
-
-uint8_t Pipe_Discard_Stream(uint16_t Length,
-                            uint16_t* const BytesProcessed)
-{
-	uint8_t  ErrorCode;
-	uint16_t BytesInTransfer = 0;
-	
-	Pipe_SetPipeToken(PIPE_TOKEN_IN);
-
-	if ((ErrorCode = Pipe_WaitUntilReady()))
-	  return ErrorCode;
-
-	if (BytesProcessed != NULL)
-	  Length -= *BytesProcessed;
-
-	while (Length)
-	{
-		if (!(Pipe_IsReadWriteAllowed()))
-		{
-			Pipe_ClearIN();
-				
-			if (BytesProcessed != NULL)
-			{
-				*BytesProcessed += BytesInTransfer;
-				return PIPE_RWSTREAM_IncompleteTransfer;
-			}
-
-			if ((ErrorCode = Pipe_WaitUntilReady()))
-			  return ErrorCode;
-		}
-		else
-		{
-			Pipe_Discard_8();
-			
-			Length--;
-			BytesInTransfer++;
-		}
-	}
-
-	return PIPE_RWSTREAM_NoError;
-}
-
-uint8_t Pipe_Null_Stream(uint16_t Length,
-                         uint16_t* const BytesProcessed)
-{
-	uint8_t  ErrorCode;
-	uint16_t BytesInTransfer = 0;
-	
-	Pipe_SetPipeToken(PIPE_TOKEN_OUT);
-
-	if ((ErrorCode = Pipe_WaitUntilReady()))
-	  return ErrorCode;
-
-	if (BytesProcessed != NULL)
-	  Length -= *BytesProcessed;
-
-	while (Length)
-	{
-		if (!(Pipe_IsReadWriteAllowed()))
-		{
-			Pipe_ClearOUT();
-				
-			if (BytesProcessed != NULL)
-			{
-				*BytesProcessed += BytesInTransfer;
-				return PIPE_RWSTREAM_IncompleteTransfer;
-			}
-			
-			USB_USBTask();
-
-			if ((ErrorCode = Pipe_WaitUntilReady()))
-			  return ErrorCode;
-		}
-		else
-		{
-			Pipe_Write_8(0);
-			
-			Length--;
-			BytesInTransfer++;
-		}
-	}
-
-	return PIPE_RWSTREAM_NoError;
-}
-
-/* The following abuses the C preprocessor in order to copy-paste common code with slight alterations,
- * so that the code needs to be written once. It is a crude form of templating to reduce code maintenance. */
-
-#define  TEMPLATE_FUNC_NAME                        Pipe_Write_Stream_LE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   DataStream += Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_8(*BufferPtr)
-#include "Template/Template_Pipe_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Pipe_Write_Stream_BE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   DataStream -= Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_8(*BufferPtr)
-#include "Template/Template_Pipe_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Pipe_Read_Stream_LE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_IN
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   DataStream += Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Pipe_Read_8()
-#include "Template/Template_Pipe_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Pipe_Read_Stream_BE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_IN
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   DataStream -= Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Pipe_Read_8()
-#include "Template/Template_Pipe_RW.c"
-
-#endif
-
-#endif
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+              
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this 
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in 
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting 
+  documentation, and that the name of the author not be used in 
+  advertising or publicity pertaining to distribution of the 
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+#include "../../../../Common/Common.h"
+#if (ARCH == ARCH_UC3)
+
+#define  __INCLUDE_FROM_USB_DRIVER
+#include "../USBMode.h"
+
+#if defined(USB_CAN_BE_HOST)
+
+#include "PipeStream_UC3.h"
+
+uint8_t Pipe_Discard_Stream(uint16_t Length,
+                            uint16_t* const BytesProcessed)
+{
+	uint8_t  ErrorCode;
+	uint16_t BytesInTransfer = 0;
+	
+	Pipe_SetPipeToken(PIPE_TOKEN_IN);
+
+	if ((ErrorCode = Pipe_WaitUntilReady()))
+	  return ErrorCode;
+
+	if (BytesProcessed != NULL)
+	  Length -= *BytesProcessed;
+
+	while (Length)
+	{
+		if (!(Pipe_IsReadWriteAllowed()))
+		{
+			Pipe_ClearIN();
+				
+			if (BytesProcessed != NULL)
+			{
+				*BytesProcessed += BytesInTransfer;
+				return PIPE_RWSTREAM_IncompleteTransfer;
+			}
+
+			if ((ErrorCode = Pipe_WaitUntilReady()))
+			  return ErrorCode;
+		}
+		else
+		{
+			Pipe_Discard_8();
+			
+			Length--;
+			BytesInTransfer++;
+		}
+	}
+
+	return PIPE_RWSTREAM_NoError;
+}
+
+uint8_t Pipe_Null_Stream(uint16_t Length,
+                         uint16_t* const BytesProcessed)
+{
+	uint8_t  ErrorCode;
+	uint16_t BytesInTransfer = 0;
+	
+	Pipe_SetPipeToken(PIPE_TOKEN_OUT);
+
+	if ((ErrorCode = Pipe_WaitUntilReady()))
+	  return ErrorCode;
+
+	if (BytesProcessed != NULL)
+	  Length -= *BytesProcessed;
+
+	while (Length)
+	{
+		if (!(Pipe_IsReadWriteAllowed()))
+		{
+			Pipe_ClearOUT();
+				
+			if (BytesProcessed != NULL)
+			{
+				*BytesProcessed += BytesInTransfer;
+				return PIPE_RWSTREAM_IncompleteTransfer;
+			}
+			
+			USB_USBTask();
+
+			if ((ErrorCode = Pipe_WaitUntilReady()))
+			  return ErrorCode;
+		}
+		else
+		{
+			Pipe_Write_8(0);
+			
+			Length--;
+			BytesInTransfer++;
+		}
+	}
+
+	return PIPE_RWSTREAM_NoError;
+}
+
+/* The following abuses the C preprocessor in order to copy-paste common code with slight alterations,
+ * so that the code needs to be written once. It is a crude form of templating to reduce code maintenance. */
+
+#define  TEMPLATE_FUNC_NAME                        Pipe_Write_Stream_LE
+#define  TEMPLATE_BUFFER_TYPE                      const void*
+#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT
+#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   DataStream += Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_8(*BufferPtr)
+#include "Template/Template_Pipe_RW.c"
+
+#define  TEMPLATE_FUNC_NAME                        Pipe_Write_Stream_BE
+#define  TEMPLATE_BUFFER_TYPE                      const void*
+#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT
+#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   DataStream -= Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_8(*BufferPtr)
+#include "Template/Template_Pipe_RW.c"
+
+#define  TEMPLATE_FUNC_NAME                        Pipe_Read_Stream_LE
+#define  TEMPLATE_BUFFER_TYPE                      void*
+#define  TEMPLATE_TOKEN                            PIPE_TOKEN_IN
+#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearIN()
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   DataStream += Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Pipe_Read_8()
+#include "Template/Template_Pipe_RW.c"
+
+#define  TEMPLATE_FUNC_NAME                        Pipe_Read_Stream_BE
+#define  TEMPLATE_BUFFER_TYPE                      void*
+#define  TEMPLATE_TOKEN                            PIPE_TOKEN_IN
+#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearIN()
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   DataStream -= Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Pipe_Read_8()
+#include "Template/Template_Pipe_RW.c"
+
+#endif
+
+#endif
diff --git a/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.h b/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.h
index cb8a28c86c780b0b4deddc943bfb1d08a5d64a32..72bf83c6c2c7d48cd7ee5408ae890681dd74f289 100644
--- a/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.h
+++ b/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.h
@@ -1,352 +1,352 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-              
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this 
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
- 
-/** \file
- *  \brief Pipe data stream transmission and reception management for the AVR32 UC3 microcontrollers.
- *  \copydetails Group_PipeStreamRW_UC3
- *
- *  \note This file should not be included directly. It is automatically included as needed by the USB driver
- *        dispatch header located in LUFA/Drivers/USB/USB.h.
- */
-
-/** \ingroup Group_PipeStreamRW
- *  \defgroup Group_PipeStreamRW_UC3 Read/Write of Multi-Byte Streams (UC3)
- *  \brief Pipe data stream transmission and reception management for the Atmel AVR32 UC3 architecture.
- *
- *  Functions, macros, variables, enums and types related to data reading and writing of data streams from
- *  and to pipes.
- *
- *  @{
- */
-
-#ifndef __PIPE_STREAM_UC3_H__
-#define __PIPE_STREAM_UC3_H__
-
-	/* Includes: */
-		#include "../../../../Common/Common.h"
-		#include "../USBMode.h"
-		#include "../USBTask.h"
-		
-	/* Enable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			extern "C" {
-		#endif
-
-	/* Preprocessor Checks: */
-		#if !defined(__INCLUDE_FROM_USB_DRIVER)
-			#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
-		#endif
-		
-	/* Public Interface - May be used in end-application: */
-		/* Function Prototypes: */
-			/** \name Stream functions for null data */
-			//@{
-
-			/** Reads and discards the given number of bytes from the pipe, discarding fully read packets from the host
-			 *  as needed. The last packet is not automatically discarded once the remaining bytes has been read; the
-			 *  user is responsible for manually discarding the last packet from the device via the \ref Pipe_ClearIN() macro.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once, failing or
-			 *  succeeding as a single unit. If the BytesProcessed parameter points to a valid storage location, the transfer
-			 *  will instead be performed as a series of chunks. Each time the pipe bank becomes empty while there is still data
-			 *  to process (and after the current packet has been acknowledged) the BytesProcessed location will be updated with
-			 *  the total number of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref PIPE_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed in the user code - to
-			 *  continue the transfer, call the function again with identical parameters and it will resume until the BytesProcessed
-			 *  value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Pipe_Discard_Stream(512, NULL)) != PIPE_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *  
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Pipe_Discard_Stream(512, &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != PIPE_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-			 *
-			 *  \param[in] Length          Number of bytes to discard via the currently selected pipe.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                             updated, \c NULL if the entire stream should be processed at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Discard_Stream(uint16_t Length,
-			                            uint16_t* const BytesProcessed);
-
-			/** Writes a given number of zeroed bytes to the pipe, sending full pipe packets from the host to the device
-			 *  as needed. The last packet is not automatically sent once the remaining bytes has been written; the
-			 *  user is responsible for manually discarding the last packet from the device via the \ref Pipe_ClearOUT() macro.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once, failing or
-			 *  succeeding as a single unit. If the BytesProcessed parameter points to a valid storage location, the transfer
-			 *  will instead be performed as a series of chunks. Each time the pipe bank becomes full while there is still data
-			 *  to process (and after the current packet transmission has been initiated) the BytesProcessed location will be
-			 *  updated with the total number of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref PIPE_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed in the user code - to
-			 *  continue the transfer, call the function again with identical parameters and it will resume until the BytesProcessed
-			 *  value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Pipe_Null_Stream(512, NULL)) != PIPE_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Pipe_Null_Stream(512, &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != PIPE_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-			 *
-			 *  \param[in] Length          Number of zero bytes to write via the currently selected pipe.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                             updated, \c NULL if the entire stream should be processed at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Null_Stream(uint16_t Length,
-			                         uint16_t* const BytesProcessed);
-
-			//@}
-
-			/** \name Stream functions for RAM source/destination data */
-			//@{
-			
-			/** Writes the given number of bytes to the pipe from the given buffer in little endian,
-			 *  sending full packets to the device as needed. The last packet filled is not automatically sent;
-			 *  the user is responsible for manually sending the last written packet to the host via the
-			 *  \ref Pipe_ClearOUT() macro. Between each USB packet, the given stream callback function is
-			 *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
-			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
-			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
-			 *  the pipe bank becomes full while there is still data to process (and after the current
-			 *  packet transmission has been initiated) the BytesProcessed location will be updated with the
-			 *  total number of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref PIPE_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
-			 *  in the user code - to continue the transfer, call the function again with identical parameters
-			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t DataStream[512];
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Pipe_Write_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                        NULL)) != PIPE_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  DataStream[512];
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Pipe_Write_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                           &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != PIPE_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected pipe into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                             updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Write_Stream_LE(const void* const Buffer,
-			                             uint16_t Length,
-			                             uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Writes the given number of bytes to the pipe from the given buffer in big endian,
-			 *  sending full packets to the device as needed. The last packet filled is not automatically sent;
-			 *  the user is responsible for manually sending the last written packet to the host via the
-			 *  \ref Pipe_ClearOUT() macro. Between each USB packet, the given stream callback function is
-			 *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
-			 *
-			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected pipe into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                             updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Write_Stream_BE(const void* const Buffer,
-			                             uint16_t Length,
-			                             uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Reads the given number of bytes from the pipe into the given buffer in little endian,
-			 *  sending full packets to the device as needed. The last packet filled is not automatically sent;
-			 *  the user is responsible for manually sending the last written packet to the host via the
-			 *  \ref Pipe_ClearIN() macro. Between each USB packet, the given stream callback function is
-			 *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
-			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
-			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
-			 *  the pipe bank becomes empty while there is still data to process (and after the current
-			 *  packet has been acknowledged) the BytesProcessed location will be updated with the total number
-			 *  of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref PIPE_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
-			 *  in the user code - to continue the transfer, call the function again with identical parameters
-			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t DataStream[512];
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Pipe_Read_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                       NULL)) != PIPE_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  DataStream[512];
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Pipe_Read_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                          &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != PIPE_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-			 *
-			 *  \param[out] Buffer          Pointer to the source data buffer to write to.
-			 *  \param[in]  Length          Number of bytes to read for the currently selected pipe to read from.
-			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                              updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Read_Stream_LE(void* const Buffer,
-			                            uint16_t Length,
-			                            uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Reads the given number of bytes from the pipe into the given buffer in big endian,
-			 *  sending full packets to the device as needed. The last packet filled is not automatically sent;
-			 *  the user is responsible for manually sending the last written packet to the host via the
-			 *  \ref Pipe_ClearIN() macro. Between each USB packet, the given stream callback function is
-			 *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
-			 *
-			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-			 *
-			 *  \param[out] Buffer          Pointer to the source data buffer to write to.
-			 *  \param[in]  Length          Number of bytes to read for the currently selected pipe to read from.
-			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes already processed should
-			 *                              updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Pipe_Read_Stream_BE(void* const Buffer,
-			                            uint16_t Length,
-			                            uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-			//@}
-
-	/* Disable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			}
-		#endif
-	
-#endif
-
-/** @} */
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+              
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this 
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in 
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting 
+  documentation, and that the name of the author not be used in 
+  advertising or publicity pertaining to distribution of the 
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+ 
+/** \file
+ *  \brief Pipe data stream transmission and reception management for the AVR32 UC3 microcontrollers.
+ *  \copydetails Group_PipeStreamRW_UC3
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the USB driver
+ *        dispatch header located in LUFA/Drivers/USB/USB.h.
+ */
+
+/** \ingroup Group_PipeStreamRW
+ *  \defgroup Group_PipeStreamRW_UC3 Read/Write of Multi-Byte Streams (UC3)
+ *  \brief Pipe data stream transmission and reception management for the Atmel AVR32 UC3 architecture.
+ *
+ *  Functions, macros, variables, enums and types related to data reading and writing of data streams from
+ *  and to pipes.
+ *
+ *  @{
+ */
+
+#ifndef __PIPE_STREAM_UC3_H__
+#define __PIPE_STREAM_UC3_H__
+
+	/* Includes: */
+		#include "../../../../Common/Common.h"
+		#include "../USBMode.h"
+		#include "../USBTask.h"
+		
+	/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_USB_DRIVER)
+			#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
+		#endif
+		
+	/* Public Interface - May be used in end-application: */
+		/* Function Prototypes: */
+			/** \name Stream functions for null data */
+			//@{
+
+			/** Reads and discards the given number of bytes from the pipe, discarding fully read packets from the host
+			 *  as needed. The last packet is not automatically discarded once the remaining bytes has been read; the
+			 *  user is responsible for manually discarding the last packet from the device via the \ref Pipe_ClearIN() macro.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once, failing or
+			 *  succeeding as a single unit. If the BytesProcessed parameter points to a valid storage location, the transfer
+			 *  will instead be performed as a series of chunks. Each time the pipe bank becomes empty while there is still data
+			 *  to process (and after the current packet has been acknowledged) the BytesProcessed location will be updated with
+			 *  the total number of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref PIPE_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed in the user code - to
+			 *  continue the transfer, call the function again with identical parameters and it will resume until the BytesProcessed
+			 *  value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Pipe_Discard_Stream(512, NULL)) != PIPE_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *  
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Pipe_Discard_Stream(512, &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != PIPE_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
+			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
+			 *
+			 *  \param[in] Length          Number of bytes to discard via the currently selected pipe.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                             updated, \c NULL if the entire stream should be processed at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Discard_Stream(uint16_t Length,
+			                            uint16_t* const BytesProcessed);
+
+			/** Writes a given number of zeroed bytes to the pipe, sending full pipe packets from the host to the device
+			 *  as needed. The last packet is not automatically sent once the remaining bytes has been written; the
+			 *  user is responsible for manually discarding the last packet from the device via the \ref Pipe_ClearOUT() macro.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once, failing or
+			 *  succeeding as a single unit. If the BytesProcessed parameter points to a valid storage location, the transfer
+			 *  will instead be performed as a series of chunks. Each time the pipe bank becomes full while there is still data
+			 *  to process (and after the current packet transmission has been initiated) the BytesProcessed location will be
+			 *  updated with the total number of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref PIPE_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed in the user code - to
+			 *  continue the transfer, call the function again with identical parameters and it will resume until the BytesProcessed
+			 *  value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Pipe_Null_Stream(512, NULL)) != PIPE_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Pipe_Null_Stream(512, &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != PIPE_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
+			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
+			 *
+			 *  \param[in] Length          Number of zero bytes to write via the currently selected pipe.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                             updated, \c NULL if the entire stream should be processed at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Null_Stream(uint16_t Length,
+			                         uint16_t* const BytesProcessed);
+
+			//@}
+
+			/** \name Stream functions for RAM source/destination data */
+			//@{
+			
+			/** Writes the given number of bytes to the pipe from the given buffer in little endian,
+			 *  sending full packets to the device as needed. The last packet filled is not automatically sent;
+			 *  the user is responsible for manually sending the last written packet to the host via the
+			 *  \ref Pipe_ClearOUT() macro. Between each USB packet, the given stream callback function is
+			 *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
+			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
+			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
+			 *  the pipe bank becomes full while there is still data to process (and after the current
+			 *  packet transmission has been initiated) the BytesProcessed location will be updated with the
+			 *  total number of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref PIPE_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
+			 *  in the user code - to continue the transfer, call the function again with identical parameters
+			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t DataStream[512];
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Pipe_Write_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                        NULL)) != PIPE_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  DataStream[512];
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Pipe_Write_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                           &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != PIPE_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
+			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected pipe into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                             updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Write_Stream_LE(const void* const Buffer,
+			                             uint16_t Length,
+			                             uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Writes the given number of bytes to the pipe from the given buffer in big endian,
+			 *  sending full packets to the device as needed. The last packet filled is not automatically sent;
+			 *  the user is responsible for manually sending the last written packet to the host via the
+			 *  \ref Pipe_ClearOUT() macro. Between each USB packet, the given stream callback function is
+			 *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
+			 *
+			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
+			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected pipe into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                             updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Write_Stream_BE(const void* const Buffer,
+			                             uint16_t Length,
+			                             uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Reads the given number of bytes from the pipe into the given buffer in little endian,
+			 *  sending full packets to the device as needed. The last packet filled is not automatically sent;
+			 *  the user is responsible for manually sending the last written packet to the host via the
+			 *  \ref Pipe_ClearIN() macro. Between each USB packet, the given stream callback function is
+			 *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
+			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
+			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
+			 *  the pipe bank becomes empty while there is still data to process (and after the current
+			 *  packet has been acknowledged) the BytesProcessed location will be updated with the total number
+			 *  of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref PIPE_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
+			 *  in the user code - to continue the transfer, call the function again with identical parameters
+			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t DataStream[512];
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Pipe_Read_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                       NULL)) != PIPE_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  DataStream[512];
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Pipe_Read_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                          &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != PIPE_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
+			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
+			 *
+			 *  \param[out] Buffer          Pointer to the source data buffer to write to.
+			 *  \param[in]  Length          Number of bytes to read for the currently selected pipe to read from.
+			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                              updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Read_Stream_LE(void* const Buffer,
+			                            uint16_t Length,
+			                            uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Reads the given number of bytes from the pipe into the given buffer in big endian,
+			 *  sending full packets to the device as needed. The last packet filled is not automatically sent;
+			 *  the user is responsible for manually sending the last written packet to the host via the
+			 *  \ref Pipe_ClearIN() macro. Between each USB packet, the given stream callback function is
+			 *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
+			 *
+			 *  \note The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
+			 *        having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
+			 *
+			 *  \param[out] Buffer          Pointer to the source data buffer to write to.
+			 *  \param[in]  Length          Number of bytes to read for the currently selected pipe to read from.
+			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes already processed should
+			 *                              updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Pipe_Read_Stream_BE(void* const Buffer,
+			                            uint16_t Length,
+			                            uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+			//@}
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+	
+#endif
+
+/** @} */
 
diff --git a/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c b/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c
index 774a574f385632dddf5d4f7d630329e817f9125d..db804506e686106df165a9f7856ee08ab81bd37b 100644
--- a/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c
+++ b/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c
@@ -1,275 +1,275 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-              
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this 
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-#include "../../../../Common/Common.h"
-#if (ARCH == ARCH_XMEGA)
-
-#define  __INCLUDE_FROM_USB_DRIVER
-#include "../USBMode.h"
-
-#if defined(USB_CAN_BE_DEVICE)
-
-#include "EndpointStream_XMEGA.h"
-
-#if !defined(CONTROL_ONLY_DEVICE)
-uint8_t Endpoint_Discard_Stream(uint16_t Length,
-                                uint16_t* const BytesProcessed)
-{
-	uint8_t  ErrorCode;
-	uint16_t BytesInTransfer = 0;
-	
-	if ((ErrorCode = Endpoint_WaitUntilReady()))
-	  return ErrorCode;
-	  
-	if (BytesProcessed != NULL)
-	  Length -= *BytesProcessed;
-
-	while (Length)
-	{
-		if (!(Endpoint_IsReadWriteAllowed()))
-		{
-			Endpoint_ClearOUT();
-
-			if (BytesProcessed != NULL)
-			{
-				*BytesProcessed += BytesInTransfer;
-				return ENDPOINT_RWSTREAM_IncompleteTransfer;
-			}
-
-			if ((ErrorCode = Endpoint_WaitUntilReady()))
-			  return ErrorCode;
-		}
-		else
-		{
-			Endpoint_Discard_8();
-
-			Length--;
-			BytesInTransfer++;
-		}
-	}
-	
-	return ENDPOINT_RWSTREAM_NoError;
-}
-
-uint8_t Endpoint_Null_Stream(uint16_t Length,
-                             uint16_t* const BytesProcessed)
-{
-	uint8_t  ErrorCode;
-	uint16_t BytesInTransfer = 0;
-	
-	if ((ErrorCode = Endpoint_WaitUntilReady()))
-	  return ErrorCode;
-	  
-	if (BytesProcessed != NULL)
-	  Length -= *BytesProcessed;
-
-	while (Length)
-	{
-		if (!(Endpoint_IsReadWriteAllowed()))
-		{
-			Endpoint_ClearIN();
-
-			if (BytesProcessed != NULL)
-			{
-				*BytesProcessed += BytesInTransfer;
-				return ENDPOINT_RWSTREAM_IncompleteTransfer;
-			}
-
-			if ((ErrorCode = Endpoint_WaitUntilReady()))
-			  return ErrorCode;
-		}
-		else
-		{
-			Endpoint_Write_8(0);
-
-			Length--;
-			BytesInTransfer++;
-		}
-	}
-	
-	return ENDPOINT_RWSTREAM_NoError;
-}
-
-/* The following abuses the C preprocessor in order to copy-paste common code with slight alterations,
- * so that the code needs to be written once. It is a crude form of templating to reduce code maintenance. */
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_LE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_BE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_LE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_BE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
-#include "Template/Template_Endpoint_RW.c"
-
-#if defined(ARCH_HAS_FLASH_ADDRESS_SPACE)
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_LE
-	#define  TEMPLATE_BUFFER_TYPE                      const void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_RW.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_BE
-	#define  TEMPLATE_BUFFER_TYPE                      const void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_RW.c"
-#endif
-
-#if defined(ARCH_HAS_EEPROM_ADDRESS_SPACE)
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_LE
-	#define  TEMPLATE_BUFFER_TYPE                      const void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_RW.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_BE
-	#define  TEMPLATE_BUFFER_TYPE                      const void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_RW.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_LE
-	#define  TEMPLATE_BUFFER_TYPE                      void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
-	#include "Template/Template_Endpoint_RW.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_BE
-	#define  TEMPLATE_BUFFER_TYPE                      void*
-	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
-	#include "Template/Template_Endpoint_RW.c"
-#endif
-
-#endif
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_LE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
-#include "Template/Template_Endpoint_Control_W.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_BE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
-#include "Template/Template_Endpoint_Control_W.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_LE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
-#include "Template/Template_Endpoint_Control_R.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_BE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
-#include "Template/Template_Endpoint_Control_R.c"
-
-#if defined(ARCH_HAS_FLASH_ADDRESS_SPACE)
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_PStream_LE
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_Control_W.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_PStream_BE
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_Control_W.c"
-#endif
-
-#if defined(ARCH_HAS_EEPROM_ADDRESS_SPACE)
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_EStream_LE
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_Control_W.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_EStream_BE
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
-	#include "Template/Template_Endpoint_Control_W.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_LE
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
-	#include "Template/Template_Endpoint_Control_R.c"
-
-	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_BE
-	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
-	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
-	#include "Template/Template_Endpoint_Control_R.c"
-#endif
-
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+              
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this 
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in 
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting 
+  documentation, and that the name of the author not be used in 
+  advertising or publicity pertaining to distribution of the 
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+#include "../../../../Common/Common.h"
+#if (ARCH == ARCH_XMEGA)
+
+#define  __INCLUDE_FROM_USB_DRIVER
+#include "../USBMode.h"
+
+#if defined(USB_CAN_BE_DEVICE)
+
+#include "EndpointStream_XMEGA.h"
+
+#if !defined(CONTROL_ONLY_DEVICE)
+uint8_t Endpoint_Discard_Stream(uint16_t Length,
+                                uint16_t* const BytesProcessed)
+{
+	uint8_t  ErrorCode;
+	uint16_t BytesInTransfer = 0;
+	
+	if ((ErrorCode = Endpoint_WaitUntilReady()))
+	  return ErrorCode;
+	  
+	if (BytesProcessed != NULL)
+	  Length -= *BytesProcessed;
+
+	while (Length)
+	{
+		if (!(Endpoint_IsReadWriteAllowed()))
+		{
+			Endpoint_ClearOUT();
+
+			if (BytesProcessed != NULL)
+			{
+				*BytesProcessed += BytesInTransfer;
+				return ENDPOINT_RWSTREAM_IncompleteTransfer;
+			}
+
+			if ((ErrorCode = Endpoint_WaitUntilReady()))
+			  return ErrorCode;
+		}
+		else
+		{
+			Endpoint_Discard_8();
+
+			Length--;
+			BytesInTransfer++;
+		}
+	}
+	
+	return ENDPOINT_RWSTREAM_NoError;
+}
+
+uint8_t Endpoint_Null_Stream(uint16_t Length,
+                             uint16_t* const BytesProcessed)
+{
+	uint8_t  ErrorCode;
+	uint16_t BytesInTransfer = 0;
+	
+	if ((ErrorCode = Endpoint_WaitUntilReady()))
+	  return ErrorCode;
+	  
+	if (BytesProcessed != NULL)
+	  Length -= *BytesProcessed;
+
+	while (Length)
+	{
+		if (!(Endpoint_IsReadWriteAllowed()))
+		{
+			Endpoint_ClearIN();
+
+			if (BytesProcessed != NULL)
+			{
+				*BytesProcessed += BytesInTransfer;
+				return ENDPOINT_RWSTREAM_IncompleteTransfer;
+			}
+
+			if ((ErrorCode = Endpoint_WaitUntilReady()))
+			  return ErrorCode;
+		}
+		else
+		{
+			Endpoint_Write_8(0);
+
+			Length--;
+			BytesInTransfer++;
+		}
+	}
+	
+	return ENDPOINT_RWSTREAM_NoError;
+}
+
+/* The following abuses the C preprocessor in order to copy-paste common code with slight alterations,
+ * so that the code needs to be written once. It is a crude form of templating to reduce code maintenance. */
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_LE
+#define  TEMPLATE_BUFFER_TYPE                      const void*
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
+#include "Template/Template_Endpoint_RW.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_BE
+#define  TEMPLATE_BUFFER_TYPE                      const void*
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
+#include "Template/Template_Endpoint_RW.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_LE
+#define  TEMPLATE_BUFFER_TYPE                      void*
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
+#include "Template/Template_Endpoint_RW.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_BE
+#define  TEMPLATE_BUFFER_TYPE                      void*
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
+#include "Template/Template_Endpoint_RW.c"
+
+#if defined(ARCH_HAS_FLASH_ADDRESS_SPACE)
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_LE
+	#define  TEMPLATE_BUFFER_TYPE                      const void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_RW.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_BE
+	#define  TEMPLATE_BUFFER_TYPE                      const void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_RW.c"
+#endif
+
+#if defined(ARCH_HAS_EEPROM_ADDRESS_SPACE)
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_LE
+	#define  TEMPLATE_BUFFER_TYPE                      const void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_RW.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_BE
+	#define  TEMPLATE_BUFFER_TYPE                      const void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_RW.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_LE
+	#define  TEMPLATE_BUFFER_TYPE                      void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
+	#include "Template/Template_Endpoint_RW.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_BE
+	#define  TEMPLATE_BUFFER_TYPE                      void*
+	#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
+	#include "Template/Template_Endpoint_RW.c"
 #endif
 
-#endif
+#endif
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_LE
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
+#include "Template/Template_Endpoint_Control_W.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_BE
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(*BufferPtr)
+#include "Template/Template_Endpoint_Control_W.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_LE
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
+#include "Template/Template_Endpoint_Control_R.c"
+
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_BE
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *BufferPtr = Endpoint_Read_8()
+#include "Template/Template_Endpoint_Control_R.c"
+
+#if defined(ARCH_HAS_FLASH_ADDRESS_SPACE)
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_PStream_LE
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_Control_W.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_PStream_BE
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(pgm_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_Control_W.c"
+#endif
+
+#if defined(ARCH_HAS_EEPROM_ADDRESS_SPACE)
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_EStream_LE
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_Control_W.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_EStream_BE
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_8(eeprom_read_byte(BufferPtr))
+	#include "Template/Template_Endpoint_Control_W.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_LE
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            0
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr += Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
+	#include "Template/Template_Endpoint_Control_R.c"
+
+	#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_BE
+	#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
+	#define  TEMPLATE_BUFFER_MOVE(BufferPtr, Amount)   BufferPtr -= Amount
+	#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte(BufferPtr, Endpoint_Read_8())
+	#include "Template/Template_Endpoint_Control_R.c"
+#endif
+
+#endif
+
+#endif
diff --git a/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h b/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h
index 3269d2b1dfa8fbf89c0eebc4f9cbf6786a640631..43675288022384a1365a8234b70afe28811bdc0a 100644
--- a/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h
+++ b/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h
@@ -1,648 +1,648 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2012.
-              
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
-  Permission to use, copy, modify, distribute, and sell this 
-  software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
-  all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
-  software without specific, written prior permission.
-
-  The author disclaim all warranties with regard to this
-  software, including all implied warranties of merchantability
-  and fitness.  In no event shall the author be liable for any
-  special, indirect or consequential damages or any damages
-  whatsoever resulting from loss of use, data or profits, whether
-  in an action of contract, negligence or other tortious action,
-  arising out of or in connection with the use or performance of
-  this software.
-*/
-
-/** \file
- *  \brief Endpoint data stream transmission and reception management for the AVR XMEGA microcontrollers.
- *  \copydetails Group_EndpointStreamRW_XMEGA
- *
- *  \note This file should not be included directly. It is automatically included as needed by the USB driver
- *        dispatch header located in LUFA/Drivers/USB/USB.h.
- */
-
-/** \ingroup Group_EndpointStreamRW
- *  \defgroup Group_EndpointStreamRW_XMEGA Read/Write of Multi-Byte Streams (XMEGA)
- *  \brief Endpoint data stream transmission and reception management for the Atmel AVR XMEGA architecture.
- *
- *  Functions, macros, variables, enums and types related to data reading and writing of data streams from
- *  and to endpoints.
- *
- *  @{
- */ 
-
-#ifndef __ENDPOINT_STREAM_XMEGA_H__
-#define __ENDPOINT_STREAM_XMEGA_H__
-
-	/* Includes: */
-		#include "../../../../Common/Common.h"
-		#include "../USBMode.h"		
-		#include "../USBTask.h"
-		
-	/* Enable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			extern "C" {
-		#endif
-
-	/* Preprocessor Checks: */
-		#if !defined(__INCLUDE_FROM_USB_DRIVER)
-			#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
-		#endif
-
-	/* Public Interface - May be used in end-application: */
-		/* Function Prototypes: */
-			/** \name Stream functions for null data */
-			//@{
-
-			/** Reads and discards the given number of bytes from the currently selected endpoint's bank,
-			 *  discarding fully read packets from the host as needed. The last packet is not automatically
-			 *  discarded once the remaining bytes has been read; the user is responsible for manually
-			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
-			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
-			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
-			 *  the endpoint bank becomes empty while there is still data to process (and after the current
-			 *  packet has been acknowledged) the BytesProcessed location will be updated with the total number
-			 *  of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
-			 *  in the user code - to continue the transfer, call the function again with identical parameters
-			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Endpoint_Discard_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Endpoint_Discard_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[in] Length          Number of bytes to discard via the currently selected endpoint.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Discard_Stream(uint16_t Length,
-			                                uint16_t* const BytesProcessed);
-
-			/** Writes a given number of zeroed bytes to the currently selected endpoint's bank, sending
-			 *  full packets to the host as needed. The last packet is not automatically sent once the 
-			 *  remaining bytes have been written; the user is responsible for manually sending the last
-			 *  packet to the host via the \ref Endpoint_ClearIN() macro.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
-			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
-			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
-			 *  the endpoint bank becomes full while there is still data to process (and after the current
-			 *  packet transmission has been initiated) the BytesProcessed location will be updated with the
-			 *  total number of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
-			 *  in the user code - to continue the transfer, call the function again with identical parameters
-			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Endpoint_Null_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Endpoint_Null_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[in] Length          Number of zero bytes to send via the currently selected endpoint.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Null_Stream(uint16_t Length,
-			                             uint16_t* const BytesProcessed);
-
-			//@}
-
-			/** \name Stream functions for RAM source/destination data */
-			//@{
-		
-			/** Writes the given number of bytes to the endpoint from the given buffer in little endian,
-			 *  sending full packets to the host as needed. The last packet filled is not automatically sent;
-			 *  the user is responsible for manually sending the last written packet to the host via the
-			 *  \ref Endpoint_ClearIN() macro.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
-			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
-			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
-			 *  the endpoint bank becomes full while there is still data to process (and after the current
-			 *  packet transmission has been initiated) the BytesProcessed location will be updated with the
-			 *  total number of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
-			 *  in the user code - to continue the transfer, call the function again with identical parameters
-			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t DataStream[512];
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                            NULL)) != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  DataStream[512];
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                               &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Stream_LE(const void* const Buffer,
-			                                 uint16_t Length,
-			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Writes the given number of bytes to the endpoint from the given buffer in big endian,
-			 *  sending full packets to the host as needed. The last packet filled is not automatically sent;
-			 *  the user is responsible for manually sending the last written packet to the host via the
-			 *  \ref Endpoint_ClearIN() macro.
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Stream_BE(const void* const Buffer,
-			                                 uint16_t Length,
-			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-			
-			/** Reads the given number of bytes from the endpoint from the given buffer in little endian,
-			 *  discarding fully read packets from the host as needed. The last packet is not automatically
-			 *  discarded once the remaining bytes has been read; the user is responsible for manually
-			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
-			 *
-			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
-			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
-			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
-			 *  the endpoint bank becomes empty while there is still data to process (and after the current
-			 *  packet has been acknowledged) the BytesProcessed location will be updated with the total number
-			 *  of bytes processed in the stream, and the function will exit with an error code of
-			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
-			 *  in the user code - to continue the transfer, call the function again with identical parameters
-			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
-			 *
-			 *  <b>Single Stream Transfer Example:</b>
-			 *  \code
-			 *  uint8_t DataStream[512];
-			 *  uint8_t ErrorCode;
-			 *  
-			 *  if ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                           NULL)) != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *       // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  <b>Partial Stream Transfers Example:</b>
-			 *  \code
-			 *  uint8_t  DataStream[512];
-			 *  uint8_t  ErrorCode;
-			 *  uint16_t BytesProcessed;
-			 *  
-			 *  BytesProcessed = 0;
-			 *  while ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
-			 *                                              &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
-			 *  {
-			 *      // Stream not yet complete - do other actions here, abort if required
-			 *  }
-			 *  
-			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
-			 *  {
-			 *      // Stream failed to complete - check ErrorCode here
-			 *  }
-			 *  \endcode
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[out] Buffer          Pointer to the destination data buffer to write to.
-			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
-			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_Stream_LE(void* const Buffer,
-			                                uint16_t Length,
-			                                uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Reads the given number of bytes from the endpoint from the given buffer in big endian,
-			 *  discarding fully read packets from the host as needed. The last packet is not automatically
-			 *  discarded once the remaining bytes has been read; the user is responsible for manually
-			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
-			 *
-			 *  \note This routine should not be used on CONTROL type endpoints.
-			 *
-			 *  \param[out] Buffer          Pointer to the destination data buffer to write to.
-			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
-			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_Stream_BE(void* const Buffer,
-			                                uint16_t Length,
-			                                uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in little endian,
-			 *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared
-			 *  in both failure and success states; the user is responsible for manually clearing the setup OUT to
-			 *  finalize the transfer via the \ref Endpoint_ClearOUT() macro.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
-			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Control_Stream_LE(const void* const Buffer,
-			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in big endian,
-			 *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared
-			 *  in both failure and success states; the user is responsible for manually clearing the setup OUT to
-			 *  finalize the transfer via the \ref Endpoint_ClearOUT() macro.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
-			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Control_Stream_BE(const void* const Buffer,
-			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Reads the given number of bytes from the CONTROL endpoint from the given buffer in little endian,
-			 *  discarding fully read packets from the host as needed. The device IN acknowledgement is not
-			 *  automatically sent after success or failure states; the user is responsible for manually sending the
-			 *  setup IN to finalize the transfer via the \ref Endpoint_ClearIN() macro.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
-			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_Control_Stream_LE(void* const Buffer,
-			                                        uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** Reads the given number of bytes from the CONTROL endpoint from the given buffer in big endian,
-			 *  discarding fully read packets from the host as needed. The device IN acknowledgement is not
-			 *  automatically sent after success or failure states; the user is responsible for manually sending the
-			 *  setup IN to finalize the transfer via the \ref Endpoint_ClearIN() macro.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
-			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_Control_Stream_BE(void* const Buffer,
-			                                        uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-			//@}
-
-			/** \name Stream functions for EEPROM source/destination data */
-			//@{
-
-			/** EEPROM buffer source version of \ref Endpoint_Write_Stream_LE().
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_EStream_LE(const void* const Buffer,
-			                                  uint16_t Length,
-			                                  uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** EEPROM buffer source version of \ref Endpoint_Write_Stream_BE().
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_EStream_BE(const void* const Buffer,
-			                                  uint16_t Length,
-			                                  uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** EEPROM buffer destination version of \ref Endpoint_Read_Stream_LE().
-			 *
-			 *  \param[out] Buffer          Pointer to the destination data buffer to write to, located in EEPROM memory space.
-			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
-			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_EStream_LE(void* const Buffer,
-			                                 uint16_t Length,
-			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** EEPROM buffer destination version of \ref Endpoint_Read_Stream_BE().
-			 *
-			 *  \param[out] Buffer          Pointer to the destination data buffer to write to, located in EEPROM memory space.
-			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
-			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_EStream_BE(void* const Buffer,
-			                                 uint16_t Length,
-			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** EEPROM buffer source version of Endpoint_Write_Control_Stream_LE.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *        \n\n
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
-			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Control_EStream_LE(const void* const Buffer,
-			                                          uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** EEPROM buffer source version of \ref Endpoint_Write_Control_Stream_BE().
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *        \n\n
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
-			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Control_EStream_BE(const void* const Buffer,
-			                                          uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_LE().
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *        \n\n
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
-			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_Control_EStream_LE(void* const Buffer,
-			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_BE().
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *        \n\n
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
-			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Read_Control_EStream_BE(void* const Buffer,
-			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-			//@}
-
-			/** \name Stream functions for PROGMEM source/destination data */
-			//@{
-
-			/** FLASH buffer source version of \ref Endpoint_Write_Stream_LE().
-			 *
-			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_PStream_LE(const void* const Buffer,
-			                                  uint16_t Length,
-			                                  uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** FLASH buffer source version of \ref Endpoint_Write_Stream_BE().
-			 *
-			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
-			 *
-			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
-			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
-			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
-			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
-			 *
-			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_PStream_BE(const void* const Buffer,
-			                                  uint16_t Length,
-			                                  uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_LE().
-			 *
-			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *        \n\n
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
-			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Control_PStream_LE(const void* const Buffer,
-			                                          uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-			/** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_BE().
-			 *
-			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
-			 *
-			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-			 *        to clear the status stage when using this routine in a control transaction.
-			 *        \n\n
-			 *
-			 *  \note This routine should only be used on CONTROL type endpoints.
-			 *        \n\n
-			 *
-			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-			 *           together; i.e. the entire stream data must be read or written at the one time.
-			 *
-			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
-			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-			 *
-			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-			 */
-			uint8_t Endpoint_Write_Control_PStream_BE(const void* const Buffer,
-			                                          uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-			//@}
-
-	/* Disable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			}
-		#endif
-		
-#endif
-
-/** @} */
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+              
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this 
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in 
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting 
+  documentation, and that the name of the author not be used in 
+  advertising or publicity pertaining to distribution of the 
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *  \brief Endpoint data stream transmission and reception management for the AVR XMEGA microcontrollers.
+ *  \copydetails Group_EndpointStreamRW_XMEGA
+ *
+ *  \note This file should not be included directly. It is automatically included as needed by the USB driver
+ *        dispatch header located in LUFA/Drivers/USB/USB.h.
+ */
+
+/** \ingroup Group_EndpointStreamRW
+ *  \defgroup Group_EndpointStreamRW_XMEGA Read/Write of Multi-Byte Streams (XMEGA)
+ *  \brief Endpoint data stream transmission and reception management for the Atmel AVR XMEGA architecture.
+ *
+ *  Functions, macros, variables, enums and types related to data reading and writing of data streams from
+ *  and to endpoints.
+ *
+ *  @{
+ */ 
+
+#ifndef __ENDPOINT_STREAM_XMEGA_H__
+#define __ENDPOINT_STREAM_XMEGA_H__
+
+	/* Includes: */
+		#include "../../../../Common/Common.h"
+		#include "../USBMode.h"		
+		#include "../USBTask.h"
+		
+	/* Enable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			extern "C" {
+		#endif
+
+	/* Preprocessor Checks: */
+		#if !defined(__INCLUDE_FROM_USB_DRIVER)
+			#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
+		#endif
+
+	/* Public Interface - May be used in end-application: */
+		/* Function Prototypes: */
+			/** \name Stream functions for null data */
+			//@{
+
+			/** Reads and discards the given number of bytes from the currently selected endpoint's bank,
+			 *  discarding fully read packets from the host as needed. The last packet is not automatically
+			 *  discarded once the remaining bytes has been read; the user is responsible for manually
+			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
+			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
+			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
+			 *  the endpoint bank becomes empty while there is still data to process (and after the current
+			 *  packet has been acknowledged) the BytesProcessed location will be updated with the total number
+			 *  of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
+			 *  in the user code - to continue the transfer, call the function again with identical parameters
+			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Endpoint_Discard_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Endpoint_Discard_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[in] Length          Number of bytes to discard via the currently selected endpoint.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Discard_Stream(uint16_t Length,
+			                                uint16_t* const BytesProcessed);
+
+			/** Writes a given number of zeroed bytes to the currently selected endpoint's bank, sending
+			 *  full packets to the host as needed. The last packet is not automatically sent once the 
+			 *  remaining bytes have been written; the user is responsible for manually sending the last
+			 *  packet to the host via the \ref Endpoint_ClearIN() macro.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
+			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
+			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
+			 *  the endpoint bank becomes full while there is still data to process (and after the current
+			 *  packet transmission has been initiated) the BytesProcessed location will be updated with the
+			 *  total number of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
+			 *  in the user code - to continue the transfer, call the function again with identical parameters
+			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Endpoint_Null_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Endpoint_Null_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[in] Length          Number of zero bytes to send via the currently selected endpoint.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Null_Stream(uint16_t Length,
+			                             uint16_t* const BytesProcessed);
+
+			//@}
+
+			/** \name Stream functions for RAM source/destination data */
+			//@{
+		
+			/** Writes the given number of bytes to the endpoint from the given buffer in little endian,
+			 *  sending full packets to the host as needed. The last packet filled is not automatically sent;
+			 *  the user is responsible for manually sending the last written packet to the host via the
+			 *  \ref Endpoint_ClearIN() macro.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
+			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
+			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
+			 *  the endpoint bank becomes full while there is still data to process (and after the current
+			 *  packet transmission has been initiated) the BytesProcessed location will be updated with the
+			 *  total number of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
+			 *  in the user code - to continue the transfer, call the function again with identical parameters
+			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t DataStream[512];
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                            NULL)) != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  DataStream[512];
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                               &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Stream_LE(const void* const Buffer,
+			                                 uint16_t Length,
+			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Writes the given number of bytes to the endpoint from the given buffer in big endian,
+			 *  sending full packets to the host as needed. The last packet filled is not automatically sent;
+			 *  the user is responsible for manually sending the last written packet to the host via the
+			 *  \ref Endpoint_ClearIN() macro.
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Stream_BE(const void* const Buffer,
+			                                 uint16_t Length,
+			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+			
+			/** Reads the given number of bytes from the endpoint from the given buffer in little endian,
+			 *  discarding fully read packets from the host as needed. The last packet is not automatically
+			 *  discarded once the remaining bytes has been read; the user is responsible for manually
+			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
+			 *
+			 *  If the BytesProcessed parameter is \c NULL, the entire stream transfer is attempted at once,
+			 *  failing or succeeding as a single unit. If the BytesProcessed parameter points to a valid
+			 *  storage location, the transfer will instead be performed as a series of chunks. Each time
+			 *  the endpoint bank becomes empty while there is still data to process (and after the current
+			 *  packet has been acknowledged) the BytesProcessed location will be updated with the total number
+			 *  of bytes processed in the stream, and the function will exit with an error code of
+			 *  \ref ENDPOINT_RWSTREAM_IncompleteTransfer. This allows for any abort checking to be performed
+			 *  in the user code - to continue the transfer, call the function again with identical parameters
+			 *  and it will resume until the BytesProcessed value reaches the total transfer length.
+			 *
+			 *  <b>Single Stream Transfer Example:</b>
+			 *  \code
+			 *  uint8_t DataStream[512];
+			 *  uint8_t ErrorCode;
+			 *  
+			 *  if ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                           NULL)) != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *       // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  <b>Partial Stream Transfers Example:</b>
+			 *  \code
+			 *  uint8_t  DataStream[512];
+			 *  uint8_t  ErrorCode;
+			 *  uint16_t BytesProcessed;
+			 *  
+			 *  BytesProcessed = 0;
+			 *  while ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
+			 *                                              &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
+			 *  {
+			 *      // Stream not yet complete - do other actions here, abort if required
+			 *  }
+			 *  
+			 *  if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
+			 *  {
+			 *      // Stream failed to complete - check ErrorCode here
+			 *  }
+			 *  \endcode
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[out] Buffer          Pointer to the destination data buffer to write to.
+			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
+			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_Stream_LE(void* const Buffer,
+			                                uint16_t Length,
+			                                uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Reads the given number of bytes from the endpoint from the given buffer in big endian,
+			 *  discarding fully read packets from the host as needed. The last packet is not automatically
+			 *  discarded once the remaining bytes has been read; the user is responsible for manually
+			 *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro.
+			 *
+			 *  \note This routine should not be used on CONTROL type endpoints.
+			 *
+			 *  \param[out] Buffer          Pointer to the destination data buffer to write to.
+			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
+			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_Stream_BE(void* const Buffer,
+			                                uint16_t Length,
+			                                uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in little endian,
+			 *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared
+			 *  in both failure and success states; the user is responsible for manually clearing the setup OUT to
+			 *  finalize the transfer via the \ref Endpoint_ClearOUT() macro.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
+			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Control_Stream_LE(const void* const Buffer,
+			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in big endian,
+			 *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared
+			 *  in both failure and success states; the user is responsible for manually clearing the setup OUT to
+			 *  finalize the transfer via the \ref Endpoint_ClearOUT() macro.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
+			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Control_Stream_BE(const void* const Buffer,
+			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Reads the given number of bytes from the CONTROL endpoint from the given buffer in little endian,
+			 *  discarding fully read packets from the host as needed. The device IN acknowledgement is not
+			 *  automatically sent after success or failure states; the user is responsible for manually sending the
+			 *  setup IN to finalize the transfer via the \ref Endpoint_ClearIN() macro.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
+			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_Control_Stream_LE(void* const Buffer,
+			                                        uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** Reads the given number of bytes from the CONTROL endpoint from the given buffer in big endian,
+			 *  discarding fully read packets from the host as needed. The device IN acknowledgement is not
+			 *  automatically sent after success or failure states; the user is responsible for manually sending the
+			 *  setup IN to finalize the transfer via the \ref Endpoint_ClearIN() macro.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
+			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_Control_Stream_BE(void* const Buffer,
+			                                        uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+			//@}
+
+			/** \name Stream functions for EEPROM source/destination data */
+			//@{
+
+			/** EEPROM buffer source version of \ref Endpoint_Write_Stream_LE().
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_EStream_LE(const void* const Buffer,
+			                                  uint16_t Length,
+			                                  uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** EEPROM buffer source version of \ref Endpoint_Write_Stream_BE().
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_EStream_BE(const void* const Buffer,
+			                                  uint16_t Length,
+			                                  uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** EEPROM buffer destination version of \ref Endpoint_Read_Stream_LE().
+			 *
+			 *  \param[out] Buffer          Pointer to the destination data buffer to write to, located in EEPROM memory space.
+			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
+			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_EStream_LE(void* const Buffer,
+			                                 uint16_t Length,
+			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** EEPROM buffer destination version of \ref Endpoint_Read_Stream_BE().
+			 *
+			 *  \param[out] Buffer          Pointer to the destination data buffer to write to, located in EEPROM memory space.
+			 *  \param[in]  Length          Number of bytes to send via the currently selected endpoint.
+			 *  \param[in]  BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                              transaction should be updated, \c NULL if the entire stream should be read at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_EStream_BE(void* const Buffer,
+			                                 uint16_t Length,
+			                                 uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** EEPROM buffer source version of Endpoint_Write_Control_Stream_LE.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *        \n\n
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
+			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Control_EStream_LE(const void* const Buffer,
+			                                          uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** EEPROM buffer source version of \ref Endpoint_Write_Control_Stream_BE().
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *        \n\n
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
+			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Control_EStream_BE(const void* const Buffer,
+			                                          uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_LE().
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *        \n\n
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
+			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_Control_EStream_LE(void* const Buffer,
+			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_BE().
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *        \n\n
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[out] Buffer  Pointer to the destination data buffer to write to.
+			 *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Read_Control_EStream_BE(void* const Buffer,
+			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+			//@}
+
+			/** \name Stream functions for PROGMEM source/destination data */
+			//@{
+
+			/** FLASH buffer source version of \ref Endpoint_Write_Stream_LE().
+			 *
+			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_PStream_LE(const void* const Buffer,
+			                                  uint16_t Length,
+			                                  uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** FLASH buffer source version of \ref Endpoint_Write_Stream_BE().
+			 *
+			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
+			 *
+			 *  \param[in] Buffer          Pointer to the source data buffer to read from.
+			 *  \param[in] Length          Number of bytes to read for the currently selected endpoint into the buffer.
+			 *  \param[in] BytesProcessed  Pointer to a location where the total number of bytes processed in the current
+			 *                             transaction should be updated, \c NULL if the entire stream should be written at once.
+			 *
+			 *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_PStream_BE(const void* const Buffer,
+			                                  uint16_t Length,
+			                                  uint16_t* const BytesProcessed) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_LE().
+			 *
+			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *        \n\n
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
+			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Control_PStream_LE(const void* const Buffer,
+			                                          uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+
+			/** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_BE().
+			 *
+			 *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
+			 *
+			 *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
+			 *        to clear the status stage when using this routine in a control transaction.
+			 *        \n\n
+			 *
+			 *  \note This routine should only be used on CONTROL type endpoints.
+			 *        \n\n
+			 *
+			 *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
+			 *           together; i.e. the entire stream data must be read or written at the one time.
+			 *
+			 *  \param[in] Buffer  Pointer to the source data buffer to read from.
+			 *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
+			 *
+			 *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+			 */
+			uint8_t Endpoint_Write_Control_PStream_BE(const void* const Buffer,
+			                                          uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+			//@}
+
+	/* Disable C linkage for C++ Compilers: */
+		#if defined(__cplusplus)
+			}
+		#endif
+		
+#endif
+
+/** @} */