aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/USB/HighLevel
diff options
context:
space:
mode:
Diffstat (limited to 'LUFA/Drivers/USB/HighLevel')
-rw-r--r--LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c142
-rw-r--r--LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h287
-rw-r--r--LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c382
-rw-r--r--LUFA/Drivers/USB/HighLevel/DeviceStandardReq.h165
-rw-r--r--LUFA/Drivers/USB/HighLevel/EndpointStream.c259
-rw-r--r--LUFA/Drivers/USB/HighLevel/EndpointStream.h687
-rw-r--r--LUFA/Drivers/USB/HighLevel/Events.c39
-rw-r--r--LUFA/Drivers/USB/HighLevel/Events.h375
-rw-r--r--LUFA/Drivers/USB/HighLevel/HostStandardReq.c180
-rw-r--r--LUFA/Drivers/USB/HighLevel/HostStandardReq.h118
-rw-r--r--LUFA/Drivers/USB/HighLevel/PipeStream.c216
-rw-r--r--LUFA/Drivers/USB/HighLevel/PipeStream.h465
-rw-r--r--LUFA/Drivers/USB/HighLevel/StdDescriptors.h692
-rw-r--r--LUFA/Drivers/USB/HighLevel/StdRequestType.h247
-rw-r--r--LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_Control_R.c50
-rw-r--r--LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_Control_W.c58
-rw-r--r--LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_RW.c54
-rw-r--r--LUFA/Drivers/USB/HighLevel/Template/Template_Pipe_RW.c53
-rw-r--r--LUFA/Drivers/USB/HighLevel/USBMode.h138
-rw-r--r--LUFA/Drivers/USB/HighLevel/USBTask.c89
-rw-r--r--LUFA/Drivers/USB/HighLevel/USBTask.h206
21 files changed, 0 insertions, 4902 deletions
diff --git a/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c b/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c
deleted file mode 100644
index 9671659d6..000000000
--- a/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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 "ConfigDescriptor.h"
-
-#if defined(USB_CAN_BE_HOST)
-uint8_t USB_Host_GetDeviceConfigDescriptor(uint8_t ConfigNumber, uint16_t* const ConfigSizePtr,
- void* BufferPtr, uint16_t BufferSize)
-{
- uint8_t ErrorCode;
- uint8_t ConfigHeader[sizeof(USB_Descriptor_Configuration_Header_t)];
-
- USB_ControlRequest = (USB_Request_Header_t)
- {
- .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE),
- .bRequest = REQ_GetDescriptor,
- .wValue = ((DTYPE_Configuration << 8) | (ConfigNumber - 1)),
- .wIndex = 0,
- .wLength = sizeof(USB_Descriptor_Configuration_Header_t),
- };
-
- Pipe_SelectPipe(PIPE_CONTROLPIPE);
-
- if ((ErrorCode = USB_Host_SendControlRequest(ConfigHeader)) != HOST_SENDCONTROL_Successful)
- return ErrorCode;
-
- *ConfigSizePtr = DESCRIPTOR_PCAST(ConfigHeader, USB_Descriptor_Configuration_Header_t)->TotalConfigurationSize;
-
- if (*ConfigSizePtr > BufferSize)
- return HOST_GETCONFIG_BuffOverflow;
-
- USB_ControlRequest.wLength = *ConfigSizePtr;
-
- if ((ErrorCode = USB_Host_SendControlRequest(BufferPtr)) != HOST_SENDCONTROL_Successful)
- return ErrorCode;
-
- if (DESCRIPTOR_TYPE(BufferPtr) != DTYPE_Configuration)
- return HOST_GETCONFIG_InvalidData;
-
- return HOST_GETCONFIG_Successful;
-}
-#endif
-
-void USB_GetNextDescriptorOfType(uint16_t* const BytesRem,
- void** const CurrConfigLoc,
- const uint8_t Type)
-{
- while (*BytesRem)
- {
- USB_GetNextDescriptor(BytesRem, CurrConfigLoc);
-
- if (DESCRIPTOR_TYPE(*CurrConfigLoc) == Type)
- return;
- }
-}
-
-void USB_GetNextDescriptorOfTypeBefore(uint16_t* const BytesRem,
- void** const CurrConfigLoc,
- const uint8_t Type,
- const uint8_t BeforeType)
-{
- while (*BytesRem)
- {
- USB_GetNextDescriptor(BytesRem, CurrConfigLoc);
-
- if (DESCRIPTOR_TYPE(*CurrConfigLoc) == Type)
- {
- return;
- }
- else if (DESCRIPTOR_TYPE(*CurrConfigLoc) == BeforeType)
- {
- *BytesRem = 0;
- return;
- }
- }
-}
-
-void USB_GetNextDescriptorOfTypeAfter(uint16_t* const BytesRem,
- void** const CurrConfigLoc,
- const uint8_t Type,
- const uint8_t AfterType)
-{
- USB_GetNextDescriptorOfType(BytesRem, CurrConfigLoc, AfterType);
-
- if (*BytesRem)
- USB_GetNextDescriptorOfType(BytesRem, CurrConfigLoc, Type);
-}
-
-uint8_t USB_GetNextDescriptorComp(uint16_t* const BytesRem, void** const CurrConfigLoc, ConfigComparatorPtr_t const ComparatorRoutine)
-{
- uint8_t ErrorCode;
-
- while (*BytesRem)
- {
- uint8_t* PrevDescLoc = *CurrConfigLoc;
- uint16_t PrevBytesRem = *BytesRem;
-
- USB_GetNextDescriptor(BytesRem, CurrConfigLoc);
-
- if ((ErrorCode = ComparatorRoutine(*CurrConfigLoc)) != DESCRIPTOR_SEARCH_NotFound)
- {
- if (ErrorCode == DESCRIPTOR_SEARCH_Fail)
- {
- *CurrConfigLoc = PrevDescLoc;
- *BytesRem = PrevBytesRem;
- }
-
- return ErrorCode;
- }
- }
-
- return DESCRIPTOR_SEARCH_COMP_EndOfDescriptor;
-}
-
diff --git a/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h b/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h
deleted file mode 100644
index d51eb3d93..000000000
--- a/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.h
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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 Configuration descriptor parser API.
- *
- * This section of the library gives a friendly API which can be used in host applications to easily
- * parse an attached device's configuration descriptor so that endpoint, interface and other descriptor
- * data can be extracted and used as needed.
- *
- * \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_Descriptors
- * \defgroup Group_ConfigDescriptorParser Configuration Descriptor Parser
- *
- * Functions, macros, variables, enums and types related to the parsing of Configuration Descriptors.
- *
- * @{
- */
-
-#ifndef __CONFIGDESCRIPTOR_H__
-#define __CONFIGDESCRIPTOR_H__
-
- /* Includes: */
- #include <stdint.h>
-
- #include "../../../Common/Common.h"
- #include "HostStandardReq.h"
- #include "USBMode.h"
- #include "StdDescriptors.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: */
- /* Macros: */
- /** Mask for determining the type of an endpoint from an endpoint descriptor. This should then be compared
- * with the \c EP_TYPE_* masks to determine the exact type of the endpoint.
- */
- #define EP_TYPE_MASK 0x03
-
- /** Casts a pointer to a descriptor inside the configuration descriptor into a pointer to the given
- * descriptor type.
- *
- * Usage Example:
- * \code
- * uint8_t* CurrDescriptor = &ConfigDescriptor[0]; // Pointing to the configuration header
- * USB_Descriptor_Configuration_Header_t* ConfigHeaderPtr = DESCRIPTOR_PCAST(CurrDescriptor,
- * USB_Descriptor_Configuration_Header_t);
- *
- * // Can now access elements of the configuration header struct using the -> indirection operator
- * \endcode
- */
- #define DESCRIPTOR_PCAST(DescriptorPtr, Type) ((Type*)(DescriptorPtr))
-
- /** Casts a pointer to a descriptor inside the configuration descriptor into the given descriptor
- * type (as an actual struct instance rather than a pointer to a struct).
- *
- * Usage Example:
- * \code
- * uint8_t* CurrDescriptor = &ConfigDescriptor[0]; // Pointing to the configuration header
- * USB_Descriptor_Configuration_Header_t ConfigHeader = DESCRIPTOR_CAST(CurrDescriptor,
- * USB_Descriptor_Configuration_Header_t);
- *
- * // Can now access elements of the configuration header struct using the . operator
- * \endcode
- */
- #define DESCRIPTOR_CAST(DescriptorPtr, Type) (*DESCRIPTOR_PCAST(DescriptorPtr, Type))
-
- /** Returns the descriptor's type, expressed as the 8-bit type value in the header of the descriptor.
- * This value's meaning depends on the descriptor's placement in the descriptor, but standard type
- * values can be accessed in the \ref USB_DescriptorTypes_t enum.
- */
- #define DESCRIPTOR_TYPE(DescriptorPtr) DESCRIPTOR_PCAST(DescriptorPtr, USB_Descriptor_Header_t)->Type
-
- /** Returns the descriptor's size, expressed as the 8-bit value indicating the number of bytes. */
- #define DESCRIPTOR_SIZE(DescriptorPtr) DESCRIPTOR_PCAST(DescriptorPtr, USB_Descriptor_Header_t)->Size
-
- /* Type Defines: */
- /** Type define for a Configuration Descriptor comparator function (function taking a pointer to an array
- * of type void, returning a uint8_t value).
- *
- * \see \ref USB_GetNextDescriptorComp function for more details.
- */
- typedef uint8_t (* ConfigComparatorPtr_t)(void*);
-
- /* Enums: */
- /** Enum for the possible return codes of the \ref USB_Host_GetDeviceConfigDescriptor() function. */
- enum USB_Host_GetConfigDescriptor_ErrorCodes_t
- {
- HOST_GETCONFIG_Successful = 0, /**< No error occurred while retrieving the configuration descriptor. */
- HOST_GETCONFIG_DeviceDisconnect = 1, /**< The attached device was disconnected while retrieving the configuration
- * descriptor.
- */
- HOST_GETCONFIG_PipeError = 2, /**< An error occurred in the pipe while sending the request. */
- HOST_GETCONFIG_SetupStalled = 3, /**< The attached device stalled the request to retrieve the configuration
- * descriptor.
- */
- HOST_GETCONFIG_SoftwareTimeOut = 4, /**< The request or data transfer timed out. */
- HOST_GETCONFIG_BuffOverflow = 5, /**< The device's configuration descriptor is too large to fit into the allocated
- * buffer.
- */
- HOST_GETCONFIG_InvalidData = 6, /**< The device returned invalid configuration descriptor data. */
- };
-
- /** Enum for return values of a descriptor comparator function. */
- enum DSearch_Return_ErrorCodes_t
- {
- DESCRIPTOR_SEARCH_Found = 0, /**< Current descriptor matches comparator criteria. */
- DESCRIPTOR_SEARCH_Fail = 1, /**< No further descriptor could possibly match criteria, fail the search. */
- DESCRIPTOR_SEARCH_NotFound = 2, /**< Current descriptor does not match comparator criteria. */
- };
-
- /** Enum for return values of \ref USB_GetNextDescriptorComp(). */
- enum DSearch_Comp_Return_ErrorCodes_t
- {
- DESCRIPTOR_SEARCH_COMP_Found = 0, /**< Configuration descriptor now points to descriptor which matches
- * search criteria of the given comparator function. */
- DESCRIPTOR_SEARCH_COMP_Fail = 1, /**< Comparator function returned \ref DESCRIPTOR_SEARCH_Fail. */
- DESCRIPTOR_SEARCH_COMP_EndOfDescriptor = 2, /**< End of configuration descriptor reached before match found. */
- };
-
- /* Function Prototypes: */
- /** Retrieves the configuration descriptor data from an attached device via a standard request into a buffer,
- * including validity and size checking to prevent a buffer overflow.
- *
- * \param[in] ConfigNumber Device configuration descriptor number to fetch from the device (usually set to 1 for
- * single configuration devices).
- * \param[in,out] ConfigSizePtr Pointer to a location for storing the retrieved configuration descriptor size.
- * \param[out] BufferPtr Pointer to the buffer for storing the configuration descriptor data.
- * \param[out] BufferSize Size of the allocated buffer where the configuration descriptor is to be stored.
- *
- * \return A value from the \ref USB_Host_GetConfigDescriptor_ErrorCodes_t enum.
- */
- uint8_t USB_Host_GetDeviceConfigDescriptor(uint8_t ConfigNumber, uint16_t* const ConfigSizePtr, void* BufferPtr,
- uint16_t BufferSize) ATTR_NON_NULL_PTR_ARG(2) ATTR_NON_NULL_PTR_ARG(3);
-
- /** Skips to the next sub-descriptor inside the configuration descriptor of the specified type value.
- * The bytes remaining value is automatically decremented.
- *
- * \param[in,out] BytesRem Pointer to the number of bytes remaining of the configuration descriptor.
- * \param[in,out] CurrConfigLoc Pointer to the current descriptor inside the configuration descriptor.
- * \param[in] Type Descriptor type value to search for.
- */
- void USB_GetNextDescriptorOfType(uint16_t* const BytesRem,
- void** const CurrConfigLoc,
- const uint8_t Type)
- ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
-
- /** Skips to the next sub-descriptor inside the configuration descriptor of the specified type value,
- * which must come before a descriptor of the second given type value. If the BeforeType type
- * descriptor is reached first, the number of bytes remaining to process is set to zero and the
- * function exits. The bytes remaining value is automatically decremented.
- *
- * \param[in,out] BytesRem Pointer to the number of bytes remaining of the configuration descriptor.
- * \param[in,out] CurrConfigLoc Pointer to the current descriptor inside the configuration descriptor.
- * \param[in] Type Descriptor type value to search for.
- * \param[in] BeforeType Descriptor type value which must not be reached before the given Type descriptor.
- */
- void USB_GetNextDescriptorOfTypeBefore(uint16_t* const BytesRem,
- void** const CurrConfigLoc,
- const uint8_t Type,
- const uint8_t BeforeType)
- ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
-
- /** Skips to the next sub-descriptor inside the configuration descriptor of the specified type value,
- * which must come after a descriptor of the second given type value. The bytes remaining value is
- * automatically decremented.
- *
- * \param[in,out] BytesRem Pointer to the number of bytes remaining of the configuration descriptor.
- * \param[in,out] CurrConfigLoc Pointer to the current descriptor inside the configuration descriptor.
- * \param[in] Type Descriptor type value to search for.
- * \param[in] AfterType Descriptor type value which must be reached before the given Type descriptor.
- */
- void USB_GetNextDescriptorOfTypeAfter(uint16_t* const BytesRem,
- void** const CurrConfigLoc,
- const uint8_t Type,
- const uint8_t AfterType)
- ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
-
- /** Searches for the next descriptor in the given configuration descriptor using a pre-made comparator
- * function. The routine updates the position and remaining configuration descriptor bytes values
- * automatically. If a comparator routine fails a search, the descriptor pointer is retreated back
- * so that the next descriptor search invocation will start from the descriptor which first caused the
- * original search to fail. This behaviour allows for one comparator to be used immediately after another
- * has failed, starting the second search from the descriptor which failed the first.
- *
- * Comparator functions should be standard functions which accept a pointer to the header of the current
- * descriptor inside the configuration descriptor which is being compared, and should return a value from
- * the \ref DSearch_Return_ErrorCodes_t enum as a uint8_t value.
- *
- * \note This function is available in USB Host mode only.
- *
- * \param[in,out] BytesRem Pointer to an int storing the remaining bytes in the configuration descriptor.
- * \param[in,out] CurrConfigLoc Pointer to the current position in the configuration descriptor.
- * \param[in] ComparatorRoutine Name of the comparator search function to use on the configuration descriptor.
- *
- * \return Value of one of the members of the \ref DSearch_Comp_Return_ErrorCodes_t enum.
- *
- * Usage Example:
- * \code
- * uint8_t EndpointSearcher(void* CurrentDescriptor); // Comparator Prototype
- *
- * uint8_t EndpointSearcher(void* CurrentDescriptor)
- * {
- * if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)
- * return DESCRIPTOR_SEARCH_Found;
- * else
- * return DESCRIPTOR_SEARCH_NotFound;
- * }
- *
- * //...
- * // After retrieving configuration descriptor:
- * if (USB_Host_GetNextDescriptorComp(&BytesRemaining, &CurrentConfigLoc, EndpointSearcher) ==
- * Descriptor_Search_Comp_Found)
- * {
- * // Do something with the endpoint descriptor
- * }
- * \endcode
- */
- uint8_t USB_GetNextDescriptorComp(uint16_t* const BytesRem,
- void** const CurrConfigLoc,
- ConfigComparatorPtr_t const ComparatorRoutine);
-
- /* Inline Functions: */
- /** Skips over the current sub-descriptor inside the configuration descriptor, so that the pointer then
- points to the next sub-descriptor. The bytes remaining value is automatically decremented.
- *
- * \param[in,out] BytesRem Pointer to the number of bytes remaining of the configuration descriptor.
- * \param[in,out] CurrConfigLoc Pointer to the current descriptor inside the configuration descriptor.
- */
- static inline void USB_GetNextDescriptor(uint16_t* const BytesRem,
- void** CurrConfigLoc) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
- static inline void USB_GetNextDescriptor(uint16_t* const BytesRem,
- void** CurrConfigLoc)
- {
- uint16_t CurrDescriptorSize = DESCRIPTOR_CAST(*CurrConfigLoc, USB_Descriptor_Header_t).Size;
-
- *CurrConfigLoc = ((uint8_t*)*CurrConfigLoc) + CurrDescriptorSize;
- *BytesRem -= CurrDescriptorSize;
- }
-
- /* Disable C linkage for C++ Compilers: */
- #if defined(__cplusplus)
- }
- #endif
-
-#endif
-
-/** @} */
-
diff --git a/LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c b/LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c
deleted file mode 100644
index f9cec4168..000000000
--- a/LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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 "USBMode.h"
-
-#if defined(USB_CAN_BE_DEVICE)
-
-#define __INCLUDE_FROM_DEVICESTDREQ_C
-#include "DeviceStandardReq.h"
-
-uint8_t USB_ConfigurationNumber;
-
-#if !defined(NO_DEVICE_SELF_POWER)
-bool USB_CurrentlySelfPowered;
-#endif
-
-#if !defined(NO_DEVICE_REMOTE_WAKEUP)
-bool USB_RemoteWakeupEnabled;
-#endif
-
-void USB_Device_ProcessControlRequest(void)
-{
- uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest;
-
- for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++)
- *(RequestHeader++) = Endpoint_Read_Byte();
-
- EVENT_USB_Device_ControlRequest();
-
- if (Endpoint_IsSETUPReceived())
- {
- uint8_t bmRequestType = USB_ControlRequest.bmRequestType;
-
- switch (USB_ControlRequest.bRequest)
- {
- case REQ_GetStatus:
- if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) ||
- (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT)))
- {
- USB_Device_GetStatus();
- }
-
- break;
- case REQ_ClearFeature:
- case REQ_SetFeature:
- if ((bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) ||
- (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_ENDPOINT)))
- {
- USB_Device_ClearSetFeature();
- }
-
- break;
- case REQ_SetAddress:
- if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))
- USB_Device_SetAddress();
-
- break;
- case REQ_GetDescriptor:
- if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) ||
- (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_INTERFACE)))
- {
- USB_Device_GetDescriptor();
- }
-
- break;
- case REQ_GetConfiguration:
- if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE))
- USB_Device_GetConfiguration();
-
- break;
- case REQ_SetConfiguration:
- if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE))
- USB_Device_SetConfiguration();
-
- break;
- }
- }
-
- if (Endpoint_IsSETUPReceived())
- {
- Endpoint_StallTransaction();
- Endpoint_ClearSETUP();
- }
-}
-
-static void USB_Device_SetAddress(void)
-{
- uint8_t DeviceAddress = (USB_ControlRequest.wValue & 0x7F);
-
- ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
- {
- Endpoint_ClearSETUP();
-
- Endpoint_ClearStatusStage();
-
- while (!(Endpoint_IsINReady()));
-
- USB_Device_SetDeviceAddress(DeviceAddress);
- }
-
- USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default;
-}
-
-static void USB_Device_SetConfiguration(void)
-{
- #if defined(FIXED_NUM_CONFIGURATIONS)
- if ((uint8_t)USB_ControlRequest.wValue > FIXED_NUM_CONFIGURATIONS)
- return;
- #else
- USB_Descriptor_Device_t* DevDescriptorPtr;
-
- #if defined(USE_FLASH_DESCRIPTORS)
- #define MemoryAddressSpace MEMSPACE_FLASH
- #elif defined(USE_EEPROM_DESCRIPTORS)
- #define MemoryAddressSpace MEMSPACE_EEPROM
- #elif defined(USE_SRAM_DESCRIPTORS)
- #define MemoryAddressSpace MEMSPACE_SRAM
- #else
- uint8_t MemoryAddressSpace;
- #endif
-
- if (CALLBACK_USB_GetDescriptor((DTYPE_Device << 8), 0, (void*)&DevDescriptorPtr
- #if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS)
- , &MemoryAddressSpace
- #endif
- ) == NO_DESCRIPTOR)
- {
- return;
- }
-
- if (MemoryAddressSpace == MEMSPACE_FLASH)
- {
- if (((uint8_t)USB_ControlRequest.wValue > pgm_read_byte(&DevDescriptorPtr->NumberOfConfigurations)))
- return;
- }
- else if (MemoryAddressSpace == MEMSPACE_EEPROM)
- {
- if (((uint8_t)USB_ControlRequest.wValue > eeprom_read_byte(&DevDescriptorPtr->NumberOfConfigurations)))
- return;
- }
- else
- {
- if ((uint8_t)USB_ControlRequest.wValue > DevDescriptorPtr->NumberOfConfigurations)
- return;
- }
- #endif
-
- Endpoint_ClearSETUP();
-
- USB_ConfigurationNumber = (uint8_t)USB_ControlRequest.wValue;
-
- Endpoint_ClearStatusStage();
-
- if (USB_ConfigurationNumber)
- USB_DeviceState = DEVICE_STATE_Configured;
- else
- USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered;
-
- EVENT_USB_Device_ConfigurationChanged();
-}
-
-static void USB_Device_GetConfiguration(void)
-{
- Endpoint_ClearSETUP();
-
- Endpoint_Write_Byte(USB_ConfigurationNumber);
- Endpoint_ClearIN();
-
- Endpoint_ClearStatusStage();
-}
-
-#if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR)
-static void USB_Device_GetInternalSerialDescriptor(void)
-{
- struct
- {
- USB_Descriptor_Header_t Header;
- wchar_t UnicodeString[20];
- } SignatureDescriptor;
-
- SignatureDescriptor.Header.Type = DTYPE_String;
- SignatureDescriptor.Header.Size = sizeof(SignatureDescriptor);
-
- ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
- {
- uint8_t SigReadAddress = 0x0E;
-
- for (uint8_t SerialCharNum = 0; SerialCharNum < 20; SerialCharNum++)
- {
- uint8_t SerialByte = boot_signature_byte_get(SigReadAddress);
-
- if (SerialCharNum & 0x01)
- {
- SerialByte >>= 4;
- SigReadAddress++;
- }
-
- SerialByte &= 0x0F;
-
- SignatureDescriptor.UnicodeString[SerialCharNum] = (SerialByte >= 10) ?
- (('A' - 10) + SerialByte) : ('0' + SerialByte);
- }
- }
-
- Endpoint_ClearSETUP();
-
- Endpoint_Write_Control_Stream_LE(&SignatureDescriptor, sizeof(SignatureDescriptor));
-
- Endpoint_ClearOUT();
-}
-#endif
-
-static void USB_Device_GetDescriptor(void)
-{
- const void* DescriptorPointer;
- uint16_t DescriptorSize;
-
- #if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS)
- uint8_t DescriptorAddressSpace;
- #endif
-
- #if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR)
- if (USB_ControlRequest.wValue == ((DTYPE_String << 8) | USE_INTERNAL_SERIAL))
- {
- USB_Device_GetInternalSerialDescriptor();
- return;
- }
- #endif
-
- if ((DescriptorSize = CALLBACK_USB_GetDescriptor(USB_ControlRequest.wValue, USB_ControlRequest.wIndex,
- &DescriptorPointer
- #if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS)
- , &DescriptorAddressSpace
- #endif
- )) == NO_DESCRIPTOR)
- {
- return;
- }
-
- Endpoint_ClearSETUP();
-
- #if defined(USE_RAM_DESCRIPTORS)
- Endpoint_Write_Control_Stream_LE(DescriptorPointer, DescriptorSize);
- #elif defined(USE_EEPROM_DESCRIPTORS)
- Endpoint_Write_Control_EStream_LE(DescriptorPointer, DescriptorSize);
- #elif defined(USE_FLASH_DESCRIPTORS)
- Endpoint_Write_Control_PStream_LE(DescriptorPointer, DescriptorSize);
- #else
- if (DescriptorAddressSpace == MEMSPACE_FLASH)
- Endpoint_Write_Control_PStream_LE(DescriptorPointer, DescriptorSize);
- else if (DescriptorAddressSpace == MEMSPACE_EEPROM)
- Endpoint_Write_Control_EStream_LE(DescriptorPointer, DescriptorSize);
- else
- Endpoint_Write_Control_Stream_LE(DescriptorPointer, DescriptorSize);
- #endif
-
- Endpoint_ClearOUT();
-}
-
-static void USB_Device_GetStatus(void)
-{
- uint8_t CurrentStatus = 0;
-
- switch (USB_ControlRequest.bmRequestType)
- {
- #if !defined(NO_DEVICE_SELF_POWER) || !defined(NO_DEVICE_REMOTE_WAKEUP)
- case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE):
- #if !defined(NO_DEVICE_SELF_POWER)
- if (USB_CurrentlySelfPowered)
- CurrentStatus |= FEATURE_SELFPOWERED_ENABLED;
- #endif
-
- #if !defined(NO_DEVICE_REMOTE_WAKEUP)
- if (USB_RemoteWakeupEnabled)
- CurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED;
- #endif
- break;
- #endif
- #if !defined(CONTROL_ONLY_DEVICE)
- case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT):
- Endpoint_SelectEndpoint((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK);
-
- CurrentStatus = Endpoint_IsStalled();
-
- Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
-
- break;
- #endif
- default:
- return;
- }
-
- Endpoint_ClearSETUP();
-
- Endpoint_Write_Word_LE(CurrentStatus);
- Endpoint_ClearIN();
-
- Endpoint_ClearStatusStage();
-}
-
-static void USB_Device_ClearSetFeature(void)
-{
- switch (USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_RECIPIENT)
- {
- #if !defined(NO_DEVICE_REMOTE_WAKEUP)
- case REQREC_DEVICE:
- if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_DeviceRemoteWakeup)
- USB_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature);
- else
- return;
-
- break;
- #endif
- #if !defined(CONTROL_ONLY_DEVICE)
- case REQREC_ENDPOINT:
- if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_EndpointHalt)
- {
- uint8_t EndpointIndex = ((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK);
-
- if (EndpointIndex == ENDPOINT_CONTROLEP)
- return;
-
- Endpoint_SelectEndpoint(EndpointIndex);
-
- if (Endpoint_IsEnabled())
- {
- if (USB_ControlRequest.bRequest == REQ_SetFeature)
- {
- Endpoint_StallTransaction();
- }
- else
- {
- Endpoint_ClearStall();
- Endpoint_ResetFIFO(EndpointIndex);
- Endpoint_ResetDataToggle();
- }
- }
- }
-
- break;
- #endif
- default:
- return;
- }
-
- Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
-
- Endpoint_ClearSETUP();
-
- Endpoint_ClearStatusStage();
-}
-
-#endif
-
diff --git a/LUFA/Drivers/USB/HighLevel/DeviceStandardReq.h b/LUFA/Drivers/USB/HighLevel/DeviceStandardReq.h
deleted file mode 100644
index 4e67f8ae5..000000000
--- a/LUFA/Drivers/USB/HighLevel/DeviceStandardReq.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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 USB device standard request management.
- *
- * This file contains the function prototypes necessary for the processing of incoming standard control requests
- * when the library is in USB device mode.
- *
- * \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.
- */
-
-#ifndef __DEVICESTDREQ_H__
-#define __DEVICESTDREQ_H__
-
- /* Includes: */
- #include <avr/pgmspace.h>
- #include <avr/eeprom.h>
- #include <avr/boot.h>
- #include <util/atomic.h>
- #include <stdint.h>
- #include <stdbool.h>
-
- #include "StdDescriptors.h"
- #include "Events.h"
- #include "StdRequestType.h"
- #include "USBTask.h"
- #include "../LowLevel/USBController.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: */
- /* Macros: */
- #if defined(USE_SINGLE_DEVICE_CONFIGURATION)
- #define FIXED_NUM_CONFIGURATIONS 1
- #endif
-
- /* Enums: */
- #if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS)
- /** Enum for the possible descriptor memory spaces, for the \c MemoryAddressSpace parameter of the
- * \ref CALLBACK_USB_GetDescriptor() function. This can be used when none of the \c USE_*_DESCRIPTORS
- * compile time options are used, to indicate in which memory space the descriptor is stored.
- *
- * \ingroup Group_Device
- */
- enum USB_DescriptorMemorySpaces_t
- {
- MEMSPACE_FLASH = 0, /**< Indicates the requested descriptor is located in FLASH memory. */
- MEMSPACE_EEPROM = 1, /**< Indicates the requested descriptor is located in EEPROM memory. */
- MEMSPACE_RAM = 2, /**< Indicates the requested descriptor is located in RAM memory. */
- };
- #endif
-
- /* Global Variables: */
- /** Indicates the currently set configuration number of the device. USB devices may have several
- * different configurations which the host can select between; this indicates the currently selected
- * value, or 0 if no configuration has been selected.
- *
- * \note This variable should be treated as read-only in the user application, and never manually
- * changed in value.
- *
- * \ingroup Group_Device
- */
- extern uint8_t USB_ConfigurationNumber;
-
- #if !defined(NO_DEVICE_REMOTE_WAKEUP)
- /** Indicates if the host is currently allowing the device to issue remote wakeup events. If this
- * flag is cleared, the device should not issue remote wakeup events to the host.
- *
- * \note This variable should be treated as read-only in the user application, and never manually
- * changed in value.
- * \n\n
- *
- * \note To reduce FLASH usage of the compiled applications where Remote Wakeup is not supported,
- * this global and the underlying management code can be disabled by defining the
- * \c NO_DEVICE_REMOTE_WAKEUP token in the project makefile and passing it to the compiler via
- * the -D switch.
- *
- * \ingroup Group_Device
- */
- extern bool USB_RemoteWakeupEnabled;
- #endif
-
- #if !defined(NO_DEVICE_SELF_POWER)
- /** Indicates if the device is currently being powered by its own power supply, rather than being
- * powered by the host's USB supply. This flag should remain cleared if the device does not
- * support self powered mode, as indicated in the device descriptors.
- *
- * \ingroup Group_Device
- */
- extern bool USB_CurrentlySelfPowered;
- #endif
-
- /* Private Interface - For use in library only: */
- #if !defined(__DOXYGEN__)
- #if defined(USE_RAM_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS)
- #error USE_RAM_DESCRIPTORS and USE_EEPROM_DESCRIPTORS are mutually exclusive.
- #elif defined(USE_RAM_DESCRIPTORS) && defined(USE_FLASH_DESCRIPTORS)
- #error USE_RAM_DESCRIPTORS and USE_FLASH_DESCRIPTORS are mutually exclusive.
- #elif defined(USE_FLASH_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS)
- #error USE_FLASH_DESCRIPTORS and USE_EEPROM_DESCRIPTORS are mutually exclusive.
- #elif defined(USE_FLASH_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS) && defined(USE_RAM_DESCRIPTORS)
- #error Only one of the USE_*_DESCRIPTORS modes should be selected.
- #endif
-
- /* Function Prototypes: */
- void USB_Device_ProcessControlRequest(void);
-
- #if defined(__INCLUDE_FROM_DEVICESTDREQ_C)
- static void USB_Device_SetAddress(void);
- static void USB_Device_SetConfiguration(void);
- static void USB_Device_GetConfiguration(void);
- static void USB_Device_GetDescriptor(void);
- static void USB_Device_GetStatus(void);
- static void USB_Device_ClearSetFeature(void);
-
- #if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR)
- static void USB_Device_GetInternalSerialDescriptor(void);
- #endif
- #endif
- #endif
-
- /* Disable C linkage for C++ Compilers: */
- #if defined(__cplusplus)
- }
- #endif
-
-#endif
-
diff --git a/LUFA/Drivers/USB/HighLevel/EndpointStream.c b/LUFA/Drivers/USB/HighLevel/EndpointStream.c
deleted file mode 100644
index 974af682c..000000000
--- a/LUFA/Drivers/USB/HighLevel/EndpointStream.c
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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 "USBMode.h"
-
-#if defined(USB_CAN_BE_DEVICE)
-
-#include "EndpointStream.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_Byte();
-
- 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_Byte(0);
-
- Length--;
- BytesInTransfer++;
- }
- }
-
- return ENDPOINT_RWSTREAM_NoError;
-}
-
-#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_Byte(*BufferPtr)
-#include "Template/Template_Endpoint_RW.c"
-
-#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_Byte(pgm_read_byte(BufferPtr))
-#include "Template/Template_Endpoint_RW.c"
-
-#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_Byte(eeprom_read_byte(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_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_Byte(eeprom_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_Byte(pgm_read_byte(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_Byte()
-#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_Byte())
-#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_Byte()
-#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_Byte())
-#include "Template/Template_Endpoint_RW.c"
-
-#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_Byte(*BufferPtr)
-#include "Template/Template_Endpoint_Control_W.c"
-
-#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_Byte(pgm_read_byte(BufferPtr))
-#include "Template/Template_Endpoint_Control_W.c"
-
-#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_Byte(eeprom_read_byte(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_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_Byte(pgm_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_Byte(eeprom_read_byte(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_Byte()
-#include "Template/Template_Endpoint_Control_R.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_Byte())
-#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_Byte()
-#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_Byte())
-#include "Template/Template_Endpoint_Control_R.c"
-
-#endif
diff --git a/LUFA/Drivers/USB/HighLevel/EndpointStream.h b/LUFA/Drivers/USB/HighLevel/EndpointStream.h
deleted file mode 100644
index 726378bfb..000000000
--- a/LUFA/Drivers/USB/HighLevel/EndpointStream.h
+++ /dev/null
@@ -1,687 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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 USB device endpoint stream function definitions.
- *
- * This file contains structures, function prototypes and macros related to the sending and receiving of
- * arbitrary data streams through the device's data endpoints when the library is initialized in USB device mode.
- *
- * \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_EndpointRW
- * \defgroup Group_EndpointStreamRW Read/Write of Multi-Byte Streams
- *
- * Functions, macros, variables, enums and types related to data reading and writing of data streams from
- * and to endpoints.
- *
- * @{
- */
-
-#ifndef __ENDPOINT_STREAM_H__
-#define __ENDPOINT_STREAM_H__
-
- /* Includes: */
- #include <avr/pgmspace.h>
- #include <avr/eeprom.h>
- #include <stdbool.h>
-
- #include "../../../Common/Common.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: */
- /* Enums: */
- /** Enum for the possible error return codes of the \c Endpoint_*_Stream_* functions. */
- enum Endpoint_Stream_RW_ErrorCodes_t
- {
- ENDPOINT_RWSTREAM_NoError = 0, /**< Command completed successfully, no error. */
- ENDPOINT_RWSTREAM_EndpointStalled = 1, /**< The endpoint was stalled during the stream
- * transfer by the host or device.
- */
- ENDPOINT_RWSTREAM_DeviceDisconnected = 2, /**< Device was disconnected from the host during
- * the transfer.
- */
- ENDPOINT_RWSTREAM_BusSuspended = 3, /**< The USB bus has been suspended by the host and
- * no USB endpoint traffic can occur until the bus
- * has resumed.
- */
- ENDPOINT_RWSTREAM_Timeout = 4, /**< The host failed to accept or send the next packet
- * within the software timeout period set by the
- * \ref USB_STREAM_TIMEOUT_MS macro.
- */
- ENDPOINT_RWSTREAM_IncompleteTransfer = 5, /**< Indicates that the endpoint bank became full or empty before
- * the complete contents of the current stream could be
- * transferred. The endpoint stream function should be called
- * again to process the next chunk of data in the transfer.
- */
- };
-
- /** Enum for the possible error return codes of the \c Endpoint_*_Control_Stream_* functions. */
- enum Endpoint_ControlStream_RW_ErrorCodes_t
- {
- ENDPOINT_RWCSTREAM_NoError = 0, /**< Command completed successfully, no error. */
- ENDPOINT_RWCSTREAM_HostAborted = 1, /**< The aborted the transfer prematurely. */
- ENDPOINT_RWCSTREAM_DeviceDisconnected = 2, /**< Device was disconnected from the host during
- * the transfer.
- */
- ENDPOINT_RWCSTREAM_BusSuspended = 3, /**< The USB bus has been suspended by the host and
- * no USB endpoint traffic can occur until the bus
- * has resumed.
- */
- };
-
- /* 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 source 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 source 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.
- *
- * \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.
- *
- * \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.
- *
- * \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.
- *
- * \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.
- *
- * \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.
- *
- * \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/HighLevel/Events.c b/LUFA/Drivers/USB/HighLevel/Events.c
deleted file mode 100644
index cd340fbba..000000000
--- a/LUFA/Drivers/USB/HighLevel/Events.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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_EVENTS_C
-#define __INCLUDE_FROM_USB_DRIVER
-#include "Events.h"
-
-void USB_Event_Stub(void)
-{
-
-}
-
diff --git a/LUFA/Drivers/USB/HighLevel/Events.h b/LUFA/Drivers/USB/HighLevel/Events.h
deleted file mode 100644
index 368774bdd..000000000
--- a/LUFA/Drivers/USB/HighLevel/Events.h
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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 USB controller events manager.
- *
- * This file contains macros and functions relating to the management of library events, which are small
- * pieces of code similar to ISRs which are run when a given condition is met. Each event can be fired from
- * multiple places in the user or library code, which may or may not be inside an ISR, thus each handler
- * should be written to be as small and fast as possible to prevent possible problems.
- *
- * Events can be hooked by the user application by declaring a handler function with the same name and parameters
- * listed here. If an event with no user-associated handler is fired within the library, it by default maps to an
- * internal empty stub function.
- *
- * Each event must only have one associated event handler, but can be raised by multiple sources by calling the
- * event handler function (with any required event parameters).
- *
- * \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_USB
- * \defgroup Group_Events USB Events
- *
- * This module contains macros and functions relating to the management of library events, which are small
- * pieces of code similar to ISRs which are run when a given condition is met. Each event can be fired from
- * multiple places in the user or library code, which may or may not be inside an ISR, thus each handler
- * should be written to be as small and fast as possible to prevent possible problems.
- *
- * Events can be hooked by the user application by declaring a handler function with the same name and parameters
- * listed here. If an event with no user-associated handler is fired within the library, it by default maps to an
- * internal empty stub function.
- *
- * Each event must only have one associated event handler, but can be raised by multiple sources by calling the
- * event handler function (with any required event parameters).
- *
- * @{
- */
-
-#ifndef __USBEVENTS_H__
-#define __USBEVENTS_H__
-
- /* Includes: */
- #include <stdint.h>
-
- #include "../../../Common/Common.h"
- #include "USBMode.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: */
- /* Pseudo-Functions for Doxygen: */
- #if !defined(__INCLUDE_FROM_EVENTS_C) || defined(__DOXYGEN__)
- /** Event for USB mode pin level change. This event fires when the USB interface is set to dual role
- * mode, and the UID pin level has changed to indicate a new mode (device or host). This event fires
- * before the mode is switched to the newly indicated mode but after the \ref EVENT_USB_Device_Disconnect
- * event has fired (if connected before the role change).
- *
- * \note This event only exists on USB AVR models which support dual role modes.
- * \n\n
- *
- * \note This event does not exist if the \c USB_DEVICE_ONLY or \c USB_HOST_ONLY tokens have been supplied
- * to the compiler (see \ref Group_USBManagement documentation).
- */
- void EVENT_USB_UIDChange(void);
-
- /** Event for USB host error. This event fires when a hardware fault has occurred whilst the USB
- * interface is in host mode.
- *
- * \param[in] ErrorCode Error code indicating the failure reason, a value in \ref USB_Host_ErrorCodes_t.
- *
- * \note This event only exists on USB AVR models which supports host mode.
- * \n\n
- *
- * \note This event does not exist if the \c USB_DEVICE_ONLY token is supplied to the compiler (see
- * \ref Group_USBManagement documentation).
- */
- void EVENT_USB_Host_HostError(const uint8_t ErrorCode);
-
- /** Event for USB device attachment. This event fires when a the USB interface is in host mode, and
- * a USB device has been connected to the USB interface. This is interrupt driven, thus fires before
- * the standard \ref EVENT_USB_Device_Connect() event and so can be used to programmatically start the USB
- * management task to reduce CPU consumption.
- *
- * \note This event only exists on USB AVR models which supports host mode.
- * \n\n
- *
- * \note This event does not exist if the \c USB_DEVICE_ONLY token is supplied to the compiler (see
- * \ref Group_USBManagement documentation).
- *
- * \see \ref USB_USBTask() for more information on the USB management task and reducing CPU usage.
- */
- void EVENT_USB_Host_DeviceAttached(void);
-
- /** Event for USB device removal. This event fires when a the USB interface is in host mode, and
- * a USB device has been removed the USB interface whether or not it has been enumerated. This
- * can be used to programmatically stop the USB management task to reduce CPU consumption.
- *
- * \note This event only exists on USB AVR models which supports host mode.
- * \n\n
- *
- * \note This event does not exist if the \c USB_DEVICE_ONLY token is supplied to the compiler (see
- * \ref Group_USBManagement documentation).
- *
- * \see \ref USB_USBTask() for more information on the USB management task and reducing CPU usage.
- */
- void EVENT_USB_Host_DeviceUnattached(void);
-
- /** Event for USB device enumeration failure. This event fires when a the USB interface is
- * in host mode, and an attached USB device has failed to enumerate completely.
- *
- * \param[in] ErrorCode Error code indicating the failure reason, a value in
- * \ref USB_Host_EnumerationErrorCodes_t.
- *
- * \param[in] SubErrorCode Sub error code indicating the reason for failure - for example, if the
- * ErrorCode parameter indicates a control error, this will give the error
- * code returned by the \ref USB_Host_SendControlRequest() function.
- *
- * \note This event only exists on USB AVR models which supports host mode.
- * \n\n
- *
- * \note This event does not exist if the \c USB_DEVICE_ONLY token is supplied to the compiler (see
- * \ref Group_USBManagement documentation).
- */
- void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode,
- const uint8_t SubErrorCode);
-
- /** Event for USB device enumeration completion. This event fires when a the USB interface is
- * in host mode and an attached USB device has been completely enumerated and is ready to be
- * controlled by the user application.
- *
- * This event is time-critical; exceeding OS-specific delays within this event handler (typically of around
- * 1 second) when a transaction is waiting to be processed by the device will prevent break communications
- * and cause the host to reset the USB bus.
- */
- void EVENT_USB_Host_DeviceEnumerationComplete(void);
-
- /** Event for USB Start Of Frame detection, when enabled. This event fires at the start of each USB
- * frame, once per millisecond, and is synchronized to the USB bus. This can be used as an accurate
- * millisecond timer source when the USB bus is not suspended while in host mode.
- *
- * This event is time-critical; it is run once per millisecond and thus long handlers will significantly
- * degrade device performance. This event should only be enabled when needed to reduce device wake-ups.
- *
- * \note This event is not normally active - it must be manually enabled and disabled via the
- * \ref USB_Host_EnableSOFEvents() and \ref USB_Host_DisableSOFEvents() commands after enumeration of
- * a USB device.
- * \n\n
- *
- * \note This event does not exist if the \c USB_DEVICE_ONLY token is supplied to the compiler (see
- * \ref Group_USBManagement documentation).
- */
- void EVENT_USB_Host_StartOfFrame(void);
-
- /** Event for USB device connection. This event fires when the AVR in device mode and the device is connected
- * to a host, beginning the enumeration process, measured by a rising level on the AVR's VBUS pin.
- *
- * This event is time-critical; exceeding OS-specific delays within this event handler (typically of around
- * two seconds) will prevent the device from enumerating correctly.
- *
- * \note For the smaller series 2 USB AVRs with limited USB controllers, VBUS is not available to the USB controller.
- * this means that the current connection state is derived from the bus suspension and wake up events by default,
- * which is not always accurate (host may suspend the bus while still connected). If the actual connection state
- * needs to be determined, VBUS should be routed to an external pin, and the auto-detect behaviour turned off by
- * passing the \c NO_LIMITED_CONTROLLER_CONNECT token to the compiler via the -D switch at compile time. The connection
- * and disconnection events may be manually fired, and the \ref USB_DeviceState global changed manually.
- * \n\n
- *
- * \note This event may fire multiple times during device enumeration on the series 2 USB AVRs with limited USB controllers
- * if \c NO_LIMITED_CONTROLLER_CONNECT is not defined.
- *
- * \see \ref Group_USBManagement for more information on the USB management task and reducing CPU usage.
- */
- void EVENT_USB_Device_Connect(void);
-
- /** Event for USB device disconnection. This event fires when the AVR in device mode and the device is disconnected
- * from a host, measured by a falling level on the AVR's VBUS pin.
- *
- * \note For the smaller series 2 USB AVRs with limited USB controllers, VBUS is not available to the USB controller.
- * this means that the current connection state is derived from the bus suspension and wake up events by default,
- * which is not always accurate (host may suspend the bus while still connected). If the actual connection state
- * needs to be determined, VBUS should be routed to an external pin, and the auto-detect behaviour turned off by
- * passing the \c NO_LIMITED_CONTROLLER_CONNECT token to the compiler via the -D switch at compile time. The connection
- * and disconnection events may be manually fired, and the \ref USB_DeviceState global changed manually.
- * \n\n
- *
- * \note This event may fire multiple times during device enumeration on the series 2 USB AVRs with limited USB controllers
- * if \c NO_LIMITED_CONTROLLER_CONNECT is not defined.
- *
- * \see \ref Group_USBManagement for more information on the USB management task and reducing CPU usage.
- */
- void EVENT_USB_Device_Disconnect(void);
-
- /** Event for control requests. This event fires when a the USB host issues a control request
- * to the mandatory device control endpoint (of address 0). This may either be a standard
- * request that the library may have a handler code for internally, or a class specific request
- * issued to the device which must be handled appropriately. If a request is not processed in the
- * user application via this event, it will be passed to the library for processing internally
- * if a suitable handler exists.
- *
- * This event is time-critical; each packet within the request transaction must be acknowledged or
- * sent within 50ms or the host will abort the transfer.
- *
- * The library internally handles all standard control requests with the exceptions of SYNC FRAME,
- * SET DESCRIPTOR and SET INTERFACE. These and all other non-standard control requests will be left
- * for the user to process via this event if desired. If not handled in the user application or by
- * the library internally, unknown requests are automatically STALLed.
- *
- * \note This event does not exist if the \c USB_HOST_ONLY token is supplied to the compiler (see
- * \ref Group_USBManagement documentation).
- * \n\n
- *
- * \note Requests should be handled in the same manner as described in the USB 2.0 Specification,
- * or appropriate class specification. In all instances, the library has already read the
- * request SETUP parameters into the \ref USB_ControlRequest structure which should then be used
- * by the application to determine how to handle the issued request.
- */
- void EVENT_USB_Device_ControlRequest(void);
-
- /** Event for USB configuration number changed. This event fires when a the USB host changes the
- * selected configuration number while in device mode. This event should be hooked in device
- * applications to create the endpoints and configure the device for the selected configuration.
- *
- * This event is time-critical; exceeding OS-specific delays within this event handler (typically of around
- * one second) will prevent the device from enumerating correctly.
- *
- * This event fires after the value of \ref USB_ConfigurationNumber has been changed.
- *
- * \note This event does not exist if the \c USB_HOST_ONLY token is supplied to the compiler (see
- * \ref Group_USBManagement documentation).
- */
- void EVENT_USB_Device_ConfigurationChanged(void);
-
- /** Event for USB suspend. This event fires when a the USB host suspends the device by halting its
- * transmission of Start Of Frame pulses to the device. This is generally hooked in order to move
- * the device over to a low power state until the host wakes up the device. If the USB interface is
- * enumerated with the \ref USB_OPT_AUTO_PLL option set, the library will automatically suspend the
- * USB PLL before the event is fired to save power.
- *
- * \note This event does not exist if the \c USB_HOST_ONLY token is supplied to the compiler (see
- * \ref Group_USBManagement documentation).
- * \n\n
- *
- * \note This event does not exist on the series 2 USB AVRs when the \c NO_LIMITED_CONTROLLER_CONNECT
- * compile time token is not set - see \ref EVENT_USB_Device_Disconnect.
- *
- * \see \ref EVENT_USB_Device_WakeUp() event for accompanying Wake Up event.
- */
- void EVENT_USB_Device_Suspend(void);
-
- /** Event for USB wake up. This event fires when a the USB interface is suspended while in device
- * mode, and the host wakes up the device by supplying Start Of Frame pulses. This is generally
- * hooked to pull the user application out of a low power state and back into normal operating
- * mode. If the USB interface is enumerated with the \ref USB_OPT_AUTO_PLL option set, the library
- * will automatically restart the USB PLL before the event is fired.
- *
- * \note This event does not exist if the \c USB_HOST_ONLY token is supplied to the compiler (see
- * \ref Group_USBManagement documentation).
- * \n\n
- *
- * \note This event does not exist on the series 2 USB AVRs when the \c NO_LIMITED_CONTROLLER_CONNECT
- * compile time token is not set - see \ref EVENT_USB_Device_Connect.
- *
- * \see \ref EVENT_USB_Device_Suspend() event for accompanying Suspend event.
- */
- void EVENT_USB_Device_WakeUp(void);
-
- /** Event for USB interface reset. This event fires when the USB interface is in device mode, and
- * a the USB host requests that the device reset its interface. This event fires after the control
- * endpoint has been automatically configured by the library.
- *
- * This event is time-critical; exceeding OS-specific delays within this event handler (typically of around
- * two seconds) will prevent the device from enumerating correctly.
- *
- * \note This event does not exist if the \c USB_HOST_ONLY token is supplied to the compiler (see
- * \ref Group_USBManagement documentation).
- */
- void EVENT_USB_Device_Reset(void);
-
- /** Event for USB Start Of Frame detection, when enabled. This event fires at the start of each USB
- * frame, once per millisecond, and is synchronized to the USB bus. This can be used as an accurate
- * millisecond timer source when the USB bus is enumerated in device mode to a USB host.
- *
- * This event is time-critical; it is run once per millisecond and thus long handlers will significantly
- * degrade device performance. This event should only be enabled when needed to reduce device wake-ups.
- *
- * \pre This event is not normally active - it must be manually enabled and disabled via the
- * \ref USB_Device_EnableSOFEvents() and \ref USB_Device_DisableSOFEvents() commands after enumeration.
- * \n\n
- *
- * \note This event does not exist if the \c USB_HOST_ONLY token is supplied to the compiler (see
- * \ref Group_USBManagement documentation).
- */
- void EVENT_USB_Device_StartOfFrame(void);
- #endif
-
- /* Private Interface - For use in library only: */
- #if !defined(__DOXYGEN__)
- /* Function Prototypes: */
- #if defined(__INCLUDE_FROM_EVENTS_C)
- void USB_Event_Stub(void) ATTR_CONST;
-
- #if defined(USB_CAN_BE_BOTH)
- void EVENT_USB_UIDChange(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);
- #endif
-
- #if defined(USB_CAN_BE_HOST)
- void EVENT_USB_Host_HostError(const uint8_t ErrorCode) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);
- void EVENT_USB_Host_DeviceAttached(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);
- void EVENT_USB_Host_DeviceUnattached(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);
- void EVENT_USB_Host_DeviceEnumerationComplete(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);
- void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode,
- const uint8_t SubErrorCode)
- ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);
- void EVENT_USB_Host_StartOfFrame(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);
- #endif
-
- #if defined(USB_CAN_BE_DEVICE)
- void EVENT_USB_Device_Connect(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);
- void EVENT_USB_Device_Disconnect(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);
- void EVENT_USB_Device_ControlRequest(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);
- void EVENT_USB_Device_ConfigurationChanged(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);
- void EVENT_USB_Device_Suspend(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);
- void EVENT_USB_Device_WakeUp(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);
- void EVENT_USB_Device_Reset(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);
- void EVENT_USB_Device_StartOfFrame(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);
- #endif
- #endif
- #endif
-
- /* Disable C linkage for C++ Compilers: */
- #if defined(__cplusplus)
- }
- #endif
-
-#endif
-
-/** @} */
-
diff --git a/LUFA/Drivers/USB/HighLevel/HostStandardReq.c b/LUFA/Drivers/USB/HighLevel/HostStandardReq.c
deleted file mode 100644
index 16d0ffb17..000000000
--- a/LUFA/Drivers/USB/HighLevel/HostStandardReq.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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 "USBMode.h"
-
-#if defined(USB_CAN_BE_HOST)
-
-#define __INCLUDE_FROM_HOSTSTDREQ_C
-#include "HostStandardReq.h"
-
-uint8_t USB_Host_SendControlRequest(void* const BufferPtr)
-{
- uint8_t* HeaderStream = (uint8_t*)&USB_ControlRequest;
- uint8_t* DataStream = (uint8_t*)BufferPtr;
- bool BusSuspended = USB_Host_IsBusSuspended();
- uint8_t ReturnStatus = HOST_SENDCONTROL_Successful;
- uint16_t DataLen = USB_ControlRequest.wLength;
-
- USB_Host_ResumeBus();
-
- if ((ReturnStatus = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)
- goto End_Of_Control_Send;
-
- Pipe_SetPipeToken(PIPE_TOKEN_SETUP);
- Pipe_ClearErrorFlags();
-
- Pipe_Unfreeze();
-
- for (uint8_t HeaderByte = 0; HeaderByte < sizeof(USB_Request_Header_t); HeaderByte++)
- Pipe_Write_Byte(*(HeaderStream++));
-
- Pipe_ClearSETUP();
-
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_SetupSent)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
-
- Pipe_Freeze();
-
- if ((ReturnStatus = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)
- goto End_Of_Control_Send;
-
- if ((USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_DIRECTION) == REQDIR_DEVICETOHOST)
- {
- Pipe_SetPipeToken(PIPE_TOKEN_IN);
-
- if (DataStream != NULL)
- {
- while (DataLen)
- {
- Pipe_Unfreeze();
-
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
-
- if (!(Pipe_BytesInPipe()))
- DataLen = 0;
-
- while (Pipe_BytesInPipe() && DataLen)
- {
- *(DataStream++) = Pipe_Read_Byte();
- DataLen--;
- }
-
- Pipe_Freeze();
- Pipe_ClearIN();
- }
- }
-
- Pipe_SetPipeToken(PIPE_TOKEN_OUT);
- Pipe_Unfreeze();
-
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
-
- Pipe_ClearOUT();
-
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
- }
- else
- {
- if (DataStream != NULL)
- {
- Pipe_SetPipeToken(PIPE_TOKEN_OUT);
- Pipe_Unfreeze();
-
- while (DataLen)
- {
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
-
- while (DataLen && (Pipe_BytesInPipe() < USB_ControlPipeSize))
- {
- Pipe_Write_Byte(*(DataStream++));
- DataLen--;
- }
-
- Pipe_ClearOUT();
- }
-
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
-
- Pipe_Freeze();
- }
-
- Pipe_SetPipeToken(PIPE_TOKEN_IN);
- Pipe_Unfreeze();
-
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)) != HOST_SENDCONTROL_Successful)
- goto End_Of_Control_Send;
-
- Pipe_ClearIN();
- }
-
-End_Of_Control_Send:
- Pipe_Freeze();
-
- if (BusSuspended)
- USB_Host_SuspendBus();
-
- Pipe_ResetPipe(PIPE_CONTROLPIPE);
-
- return ReturnStatus;
-}
-
-static uint8_t USB_Host_WaitForIOS(const uint8_t WaitType)
-{
- #if (USB_HOST_TIMEOUT_MS < 0xFF)
- uint8_t TimeoutCounter = USB_HOST_TIMEOUT_MS;
- #else
- uint16_t TimeoutCounter = USB_HOST_TIMEOUT_MS;
- #endif
-
- while (!(((WaitType == USB_HOST_WAITFOR_SetupSent) && Pipe_IsSETUPSent()) ||
- ((WaitType == USB_HOST_WAITFOR_InReceived) && Pipe_IsINReceived()) ||
- ((WaitType == USB_HOST_WAITFOR_OutReady) && Pipe_IsOUTReady())))
- {
- uint8_t ErrorCode;
-
- if ((ErrorCode = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)
- return ErrorCode;
-
- if (!(TimeoutCounter--))
- return HOST_SENDCONTROL_SoftwareTimeOut;
- }
-
- return HOST_SENDCONTROL_Successful;
-}
-
-#endif
-
diff --git a/LUFA/Drivers/USB/HighLevel/HostStandardReq.h b/LUFA/Drivers/USB/HighLevel/HostStandardReq.h
deleted file mode 100644
index 9d2c2052f..000000000
--- a/LUFA/Drivers/USB/HighLevel/HostStandardReq.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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 USB host standard request management.
- *
- * This file contains the function prototypes necessary for the issuing of outgoing standard control requests
- * when the library is in USB host mode.
- *
- * \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.
- */
-
-#ifndef __HOSTSTDREQ_H__
-#define __HOSTSTDREQ_H__
-
- /* Includes: */
- #include <stdint.h>
- #include <stdbool.h>
-
- #include "USBMode.h"
- #include "StdRequestType.h"
- #include "../LowLevel/USBController.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: */
- /* Enums: */
- /** Enum for the \ref USB_Host_SendControlRequest() return code, indicating the reason for the error
- * if the transfer of the request is unsuccessful.
- *
- * \ingroup Group_PipeControlReq
- */
- enum USB_Host_SendControlErrorCodes_t
- {
- HOST_SENDCONTROL_Successful = 0, /**< No error occurred in the request transfer. */
- HOST_SENDCONTROL_DeviceDisconnected = 1, /**< The attached device was disconnected during the
- * request transfer.
- */
- HOST_SENDCONTROL_PipeError = 2, /**< An error occurred in the pipe while sending the request. */
- HOST_SENDCONTROL_SetupStalled = 3, /**< The attached device stalled the request, usually
- * indicating that the request is unsupported on the device.
- */
- HOST_SENDCONTROL_SoftwareTimeOut = 4, /**< The request or data transfer timed out. */
- };
-
- /* Function Prototypes: */
- /** Sends the request stored in the \ref USB_ControlRequest global structure to the attached device,
- * and transfers the data stored in the buffer to the device, or from the device to the buffer
- * as requested. The transfer is made on the currently selected pipe.
- *
- * \ingroup Group_PipeControlReq
- *
- * \param[in] BufferPtr Pointer to the start of the data buffer if the request has a data stage, or
- * \c NULL if the request transfers no data to or from the device.
- *
- * \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.
- */
- uint8_t USB_Host_SendControlRequest(void* const BufferPtr);
-
- /* Private Interface - For use in library only: */
- #if !defined(__DOXYGEN__)
- /* Enums: */
- enum USB_WaitForTypes_t
- {
- USB_HOST_WAITFOR_SetupSent,
- USB_HOST_WAITFOR_InReceived,
- USB_HOST_WAITFOR_OutReady,
- };
-
- /* Function Prototypes: */
- #if defined(__INCLUDE_FROM_HOSTSTDREQ_C)
- static uint8_t USB_Host_WaitForIOS(const uint8_t WaitType);
- #endif
- #endif
-
- /* Disable C linkage for C++ Compilers: */
- #if defined(__cplusplus)
- }
- #endif
-
-#endif
-
diff --git a/LUFA/Drivers/USB/HighLevel/PipeStream.c b/LUFA/Drivers/USB/HighLevel/PipeStream.c
deleted file mode 100644
index 4465471a8..000000000
--- a/LUFA/Drivers/USB/HighLevel/PipeStream.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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 "USBMode.h"
-
-#if defined(USB_CAN_BE_HOST)
-
-#include "PipeStream.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_Byte();
-
- 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_Byte(0);
-
- Length--;
- BytesInTransfer++;
- }
- }
-
- return PIPE_RWSTREAM_NoError;
-}
-
-/* The following abuses the C preprocessor in order to copy-past 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_Byte(*BufferPtr)
-#include "Template/Template_Pipe_RW.c"
-
-#define TEMPLATE_FUNC_NAME Pipe_Write_PStream_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_Byte(pgm_read_byte(BufferPtr))
-#include "Template/Template_Pipe_RW.c"
-
-#define TEMPLATE_FUNC_NAME Pipe_Write_EStream_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_Byte(eeprom_read_byte(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_Byte(*BufferPtr)
-#include "Template/Template_Pipe_RW.c"
-
-#define TEMPLATE_FUNC_NAME Pipe_Write_PStream_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_Byte(pgm_read_byte(BufferPtr))
-#include "Template/Template_Pipe_RW.c"
-
-#define TEMPLATE_FUNC_NAME Pipe_Write_EStream_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_Byte(eeprom_read_byte(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_Byte()
-#include "Template/Template_Pipe_RW.c"
-
-#define TEMPLATE_FUNC_NAME Pipe_Read_EStream_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) eeprom_update_byte(BufferPtr, Pipe_Read_Byte())
-#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_Byte()
-#include "Template/Template_Pipe_RW.c"
-
-#define TEMPLATE_FUNC_NAME Pipe_Read_EStream_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) eeprom_update_byte(BufferPtr, Pipe_Read_Byte())
-#include "Template/Template_Pipe_RW.c"
-
-#endif
-
diff --git a/LUFA/Drivers/USB/HighLevel/PipeStream.h b/LUFA/Drivers/USB/HighLevel/PipeStream.h
deleted file mode 100644
index 38ab09f0b..000000000
--- a/LUFA/Drivers/USB/HighLevel/PipeStream.h
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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 USB host pipe stream function definitions.
- *
- * This file contains structures, function prototypes and macros related to the sending and receiving of
- * arbitrary data streams through the device's data pipes when the library is initialized in USB host mode.
- *
- * \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_PipeRW
- * \defgroup Group_PipeStreamRW Read/Write of Multi-Byte Streams
- *
- * Functions, macros, variables, enums and types related to data reading and writing of data streams from
- * and to pipes.
- *
- * @{
- */
-
-#ifndef __PIPE_STREAM_H__
-#define __PIPE_STREAM_H__
-
- /* Includes: */
- #include <avr/pgmspace.h>
- #include <avr/eeprom.h>
- #include <stdbool.h>
-
- #include "../../../Common/Common.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: */
- /* Enums: */
- /** Enum for the possible error return codes of the Pipe_*_Stream_* functions. */
- enum Pipe_Stream_RW_ErrorCodes_t
- {
- PIPE_RWSTREAM_NoError = 0, /**< Command completed successfully, no error. */
- PIPE_RWSTREAM_PipeStalled = 1, /**< The device stalled the pipe during the transfer. */
- PIPE_RWSTREAM_DeviceDisconnected = 2, /**< Device was disconnected from the host during
- * the transfer.
- */
- PIPE_RWSTREAM_Timeout = 3, /**< The device failed to accept or send the next packet
- * within the software timeout period set by the
- * \ref USB_STREAM_TIMEOUT_MS macro.
- */
- PIPE_RWSTREAM_IncompleteTransfer = 4, /**< Indicates that the pipe bank became full/empty before the
- * complete contents of the stream could be transferred.
- */
- };
-
- /* 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/HighLevel/StdDescriptors.h b/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
deleted file mode 100644
index 7b8f4d7dc..000000000
--- a/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
+++ /dev/null
@@ -1,692 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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 USB standard descriptor definitions.
- *
- * This file contains structures and macros for the easy creation of standard USB descriptors in USB device projects.
- *
- * \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_USB
- * \defgroup Group_Descriptors USB Descriptors
- *
- * Standard USB device descriptor defines and retrieval routines, for USB devices. This module contains
- * structures and macros for the easy creation of standard USB descriptors in USB device projects.
- *
- * @{
- */
-
-#ifndef __USBDESCRIPTORS_H__
-#define __USBDESCRIPTORS_H__
-
- /* Includes: */
- #include <avr/pgmspace.h>
- #include <stdbool.h>
- #include <stdint.h>
- #include <stddef.h>
-
- #include "../../../Common/Common.h"
- #include "USBMode.h"
- #include "Events.h"
-
- #if defined(USB_CAN_BE_DEVICE)
- #include "../LowLevel/Device.h"
- #endif
-
- /* 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: */
- /* Macros: */
- /** Indicates that a given descriptor does not exist in the device. This can be used inside descriptors
- * for string descriptor indexes, or may be use as a return value for GetDescriptor when the specified
- * descriptor does not exist.
- */
- #define NO_DESCRIPTOR 0
-
- #if (!defined(NO_INTERNAL_SERIAL) && \
- (defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__) || \
- defined(__AVR_ATmega32U6__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) || \
- defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega8U2__)))
- /** String descriptor index for the device's unique serial number string descriptor within the device.
- * This unique serial number is used by the host to associate resources to the device (such as drivers or COM port
- * number allocations) to a device regardless of the port it is plugged in to on the host. Some USB AVRs contain
- * a unique serial number internally, and setting the device descriptors serial number string index to this value
- * will cause it to use the internal serial number.
- *
- * On unsupported devices, this will evaluate to NO_DESCRIPTOR and so will force the host to create a pseudo-serial
- * number for the device.
- */
- #define USE_INTERNAL_SERIAL 0xDC
- #else
- #define USE_INTERNAL_SERIAL NO_DESCRIPTOR
- #endif
-
- /** Macro to calculate the power value for the configuration descriptor, from a given number of milliamperes. */
- #define USB_CONFIG_POWER_MA(mA) ((mA) >> 1)
-
- /** Macro to calculate the Unicode length of a string with a given number of Unicode characters.
- * Should be used in string descriptor's headers for giving the string descriptor's byte length.
- */
- #define USB_STRING_LEN(str) (sizeof(USB_Descriptor_Header_t) + ((str) << 1))
-
- /** Macro to encode a given four digit floating point version number (e.g. 01.23) into Binary Coded
- * Decimal format for descriptor fields requiring BCD encoding, such as the USB version number in the
- * standard device descriptor.
- */
- #define VERSION_BCD(x) ((((VERSION_TENS(x) << 4) | VERSION_ONES(x)) << 8) | \
- ((VERSION_TENTHS(x) << 4) | VERSION_HUNDREDTHS(x)))
-
- /** String language ID for the English language. Should be used in \ref USB_Descriptor_String_t descriptors
- * to indicate that the English language is supported by the device in its string descriptors.
- */
- #define LANGUAGE_ID_ENG 0x0409
-
- /** \name Endpoint Address Direction Masks */
- //@{
- /** Can be masked with an endpoint address for a \ref USB_Descriptor_Endpoint_t endpoint descriptor's
- * EndpointAddress value to indicate to the host that the endpoint is of the IN direction (i.e, from
- * device to host).
- */
- #define ENDPOINT_DESCRIPTOR_DIR_IN 0x80
-
- /** Can be masked with an endpoint address for a \ref USB_Descriptor_Endpoint_t endpoint descriptor's
- * EndpointAddress value to indicate to the host that the endpoint is of the OUT direction (i.e, from
- * host to device).
- */
- #define ENDPOINT_DESCRIPTOR_DIR_OUT 0x00
- //@}
-
- /** \name USB Configuration Descriptor Attribute Masks */
- //@{
- /** Can be masked with other configuration descriptor attributes for a \ref USB_Descriptor_Configuration_Header_t
- * descriptor's ConfigAttributes value to indicate that the specified configuration can draw its power
- * from the host's VBUS line.
- */
- #define USB_CONFIG_ATTR_BUSPOWERED 0x80
-
- /** Can be masked with other configuration descriptor attributes for a \ref USB_Descriptor_Configuration_Header_t
- * descriptor's ConfigAttributes value to indicate that the specified configuration can draw its power
- * from the device's own power source.
- */
- #define USB_CONFIG_ATTR_SELFPOWERED 0x40
-
- /** Can be masked with other configuration descriptor attributes for a \ref USB_Descriptor_Configuration_Header_t
- * descriptor's ConfigAttributes value to indicate that the specified configuration supports the
- * remote wakeup feature of the USB standard, allowing a suspended USB device to wake up the host upon
- * request.
- */
- #define USB_CONFIG_ATTR_REMOTEWAKEUP 0x20
- //@}
-
- /** \name Endpoint Descriptor Attribute Masks */
- //@{
- /** Can be masked with other endpoint descriptor attributes for a \ref USB_Descriptor_Endpoint_t descriptor's
- * Attributes value to indicate that the specified endpoint is not synchronized.
- *
- * \see The USB specification for more details on the possible Endpoint attributes.
- */
- #define ENDPOINT_ATTR_NO_SYNC (0 << 2)
-
- /** Can be masked with other endpoint descriptor attributes for a \ref USB_Descriptor_Endpoint_t descriptor's
- * Attributes value to indicate that the specified endpoint is asynchronous.
- *
- * \see The USB specification for more details on the possible Endpoint attributes.
- */
- #define ENDPOINT_ATTR_ASYNC (1 << 2)
-
- /** Can be masked with other endpoint descriptor attributes for a \ref USB_Descriptor_Endpoint_t descriptor's
- * Attributes value to indicate that the specified endpoint is adaptive.
- *
- * \see The USB specification for more details on the possible Endpoint attributes.
- */
- #define ENDPOINT_ATTR_ADAPTIVE (2 << 2)
-
- /** Can be masked with other endpoint descriptor attributes for a \ref USB_Descriptor_Endpoint_t descriptor's
- * Attributes value to indicate that the specified endpoint is synchronized.
- *
- * \see The USB specification for more details on the possible Endpoint attributes.
- */
- #define ENDPOINT_ATTR_SYNC (3 << 2)
- //@}
-
- /** \name Endpoint Descriptor Usage Masks */
- //@{
- /** Can be masked with other endpoint descriptor attributes for a \ref USB_Descriptor_Endpoint_t descriptor's
- * Attributes value to indicate that the specified endpoint is used for data transfers.
- *
- * \see The USB specification for more details on the possible Endpoint usage attributes.
- */
- #define ENDPOINT_USAGE_DATA (0 << 4)
-
- /** Can be masked with other endpoint descriptor attributes for a \ref USB_Descriptor_Endpoint_t descriptor's
- * Attributes value to indicate that the specified endpoint is used for feedback.
- *
- * \see The USB specification for more details on the possible Endpoint usage attributes.
- */
- #define ENDPOINT_USAGE_FEEDBACK (1 << 4)
-
- /** Can be masked with other endpoint descriptor attributes for a \ref USB_Descriptor_Endpoint_t descriptor's
- * Attributes value to indicate that the specified endpoint is used for implicit feedback.
- *
- * \see The USB specification for more details on the possible Endpoint usage attributes.
- */
- #define ENDPOINT_USAGE_IMPLICIT_FEEDBACK (2 << 4)
- //@}
-
- /* Enums: */
- /** Enum for the possible standard descriptor types, as given in each descriptor's header. */
- enum USB_DescriptorTypes_t
- {
- DTYPE_Device = 0x01, /**< Indicates that the descriptor is a device descriptor. */
- DTYPE_Configuration = 0x02, /**< Indicates that the descriptor is a configuration descriptor. */
- DTYPE_String = 0x03, /**< Indicates that the descriptor is a string descriptor. */
- DTYPE_Interface = 0x04, /**< Indicates that the descriptor is an interface descriptor. */
- DTYPE_Endpoint = 0x05, /**< Indicates that the descriptor is an endpoint descriptor. */
- DTYPE_DeviceQualifier = 0x06, /**< Indicates that the descriptor is a device qualifier descriptor. */
- DTYPE_Other = 0x07, /**< Indicates that the descriptor is of other type. */
- DTYPE_InterfacePower = 0x08, /**< Indicates that the descriptor is an interface power descriptor. */
- DTYPE_InterfaceAssociation = 0x0B, /**< Indicates that the descriptor is an interface association descriptor. */
- DTYPE_CSInterface = 0x24, /**< Indicates that the descriptor is a class specific interface descriptor. */
- DTYPE_CSEndpoint = 0x25, /**< Indicates that the descriptor is a class specific endpoint descriptor. */
- };
-
- /** Enum for possible Class, Subclass and Protocol values of device and interface descriptors. */
- enum USB_Descriptor_ClassSubclassProtocol_t
- {
- USB_CSCP_NoDeviceClass = 0x00, /**< Descriptor Class value indicating that the device does not belong
- * to a particular class at the device level.
- */
- USB_CSCP_NoDeviceSubclass = 0x00, /**< Descriptor Subclass value indicating that the device does not belong
- * to a particular subclass at the device level.
- */
- USB_CSCP_NoDeviceProtocol = 0x00, /**< Descriptor Protocol value indicating that the device does not belong
- * to a particular protocol at the device level.
- */
- USB_CSCP_VendorSpecificClass = 0xFF, /**< Descriptor Class value indicating that the device/interface belongs
- * to a vendor specific class.
- */
- USB_CSCP_VendorSpecificSubclass = 0xFF, /**< Descriptor Subclass value indicating that the device/interface belongs
- * to a vendor specific subclass.
- */
- USB_CSCP_VendorSpecificProtocol = 0xFF, /**< Descriptor Protocol value indicating that the device/interface belongs
- * to a vendor specific protocol.
- */
- USB_CSCP_IADDeviceClass = 0xEF, /**< Descriptor Class value indicating that the device belongs to the
- * Interface Association Descriptor class.
- */
- USB_CSCP_IADDeviceSubclass = 0x02, /**< Descriptor Subclass value indicating that the device belongs to the
- * Interface Association Descriptor subclass.
- */
- USB_CSCP_IADDeviceProtocol = 0x01, /**< Descriptor Protocol value indicating that the device belongs to the
- * Interface Association Descriptor protocol.
- */
- };
-
- /* Type Defines: */
- /** \brief Standard USB Descriptor Header (LUFA naming conventions).
- *
- * Type define for all descriptors' standard header, indicating the descriptor's length and type. This structure
- * uses LUFA-specific element names to make each element's purpose clearer.
- *
- * \see \ref USB_StdDescriptor_Header_t for the version of this type with standard element names.
- */
- typedef struct
- {
- uint8_t Size; /**< Size of the descriptor, in bytes. */
- uint8_t Type; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value
- * given by the specific class.
- */
- } USB_Descriptor_Header_t;
-
- /** \brief Standard USB Descriptor Header (USB-IF naming conventions).
- *
- * Type define for all descriptors' standard header, indicating the descriptor's length and type. This structure
- * uses the relevant standard's given element names to ensure compatibility with the standard.
- *
- * \see \ref USB_Descriptor_Header_t for the version of this type with non-standard LUFA specific element names.
- */
- typedef struct
- {
- uint8_t bLength; /**< Size of the descriptor, in bytes. */
- uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value
- * given by the specific class.
- */
- } USB_StdDescriptor_Header_t;
-
- /** \brief Standard USB Device Descriptor (LUFA naming conventions).
- *
- * Type define for a standard Device Descriptor. This structure uses LUFA-specific element names to make each
- * element's purpose clearer.
- *
- * \see \ref USB_StdDescriptor_Device_t for the version of this type with standard element names.
- */
- typedef struct
- {
- USB_Descriptor_Header_t Header; /**< Descriptor header, including type and size. */
-
- uint16_t USBSpecification; /**< BCD of the supported USB specification. */
- uint8_t Class; /**< USB device class. */
- uint8_t SubClass; /**< USB device subclass. */
- uint8_t Protocol; /**< USB device protocol. */
-
- uint8_t Endpoint0Size; /**< Size of the control (address 0) endpoint's bank in bytes. */
-
- uint16_t VendorID; /**< Vendor ID for the USB product. */
- uint16_t ProductID; /**< Unique product ID for the USB product. */
- uint16_t ReleaseNumber; /**< Product release (version) number. */
-
- uint8_t ManufacturerStrIndex; /**< String index for the manufacturer's name. The
- * host will request this string via a separate
- * control request for the string descriptor.
- *
- * \note If no string supplied, use \ref NO_DESCRIPTOR.
- */
- uint8_t ProductStrIndex; /**< String index for the product name/details.
- *
- * \see ManufacturerStrIndex structure entry.
- */
- uint8_t SerialNumStrIndex; /**< String index for the product's globally unique hexadecimal
- * serial number, in uppercase Unicode ASCII.
- *
- * \note On some AVR models, there is an embedded serial number
- * in the chip which can be used for the device serial number.
- * To use this serial number, set this to USE_INTERNAL_SERIAL.
- * On unsupported devices, this will evaluate to 0 and will cause
- * the host to generate a pseudo-unique value for the device upon
- * insertion.
- *
- * \see ManufacturerStrIndex structure entry.
- */
- uint8_t NumberOfConfigurations; /**< Total number of configurations supported by
- * the device.
- */
- } USB_Descriptor_Device_t;
-
- /** \brief Standard USB Device Descriptor (USB-IF naming conventions).
- *
- * Type define for a standard Device Descriptor. This structure uses the relevant standard's given element names
- * to ensure compatibility with the standard.
- *
- * \see \ref USB_Descriptor_Device_t for the version of this type with non-standard LUFA specific element names.
- */
- typedef struct
- {
- uint8_t bLength; /**< Size of the descriptor, in bytes. */
- uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value
- * given by the specific class.
- */
- uint16_t bcdUSB; /**< BCD of the supported USB specification. */
- uint8_t bDeviceClass; /**< USB device class. */
- uint8_t bDeviceSubClass; /**< USB device subclass. */
- uint8_t bDeviceProtocol; /**< USB device protocol. */
- uint8_t bMaxPacketSize0; /**< Size of the control (address 0) endpoint's bank in bytes. */
- uint16_t idVendor; /**< Vendor ID for the USB product. */
- uint16_t idProduct; /**< Unique product ID for the USB product. */
- uint16_t bcdDevice; /**< Product release (version) number. */
- uint8_t iManufacturer; /**< String index for the manufacturer's name. The
- * host will request this string via a separate
- * control request for the string descriptor.
- *
- * \note If no string supplied, use \ref NO_DESCRIPTOR.
- */
- uint8_t iProduct; /**< String index for the product name/details.
- *
- * \see ManufacturerStrIndex structure entry.
- */
- uint8_t iSerialNumber; /**< String index for the product's globally unique hexadecimal
- * serial number, in uppercase Unicode ASCII.
- *
- * \note On some AVR models, there is an embedded serial number
- * in the chip which can be used for the device serial number.
- * To use this serial number, set this to USE_INTERNAL_SERIAL.
- * On unsupported devices, this will evaluate to 0 and will cause
- * the host to generate a pseudo-unique value for the device upon
- * insertion.
- *
- * \see ManufacturerStrIndex structure entry.
- */
- uint8_t bNumConfigurations; /**< Total number of configurations supported by
- * the device.
- */
- } USB_StdDescriptor_Device_t;
-
- /** \brief Standard USB Configuration Descriptor (LUFA naming conventions).
- *
- * Type define for a standard Configuration Descriptor header. This structure uses LUFA-specific element names
- * to make each element's purpose clearer.
- *
- * \see \ref USB_StdDescriptor_Configuration_Header_t for the version of this type with standard element names.
- */
- typedef struct
- {
- USB_Descriptor_Header_t Header; /**< Descriptor header, including type and size. */
-
- uint16_t TotalConfigurationSize; /**< Size of the configuration descriptor header,
- * and all sub descriptors inside the configuration.
- */
- uint8_t TotalInterfaces; /**< Total number of interfaces in the configuration. */
-
- uint8_t ConfigurationNumber; /**< Configuration index of the current configuration. */
- uint8_t ConfigurationStrIndex; /**< Index of a string descriptor describing the configuration. */
-
- uint8_t ConfigAttributes; /**< Configuration attributes, comprised of a mask of zero or
- * more USB_CONFIG_ATTR_* masks.
- */
-
- uint8_t MaxPowerConsumption; /**< Maximum power consumption of the device while in the
- * current configuration, calculated by the \ref USB_CONFIG_POWER_MA()
- * macro.
- */
- } USB_Descriptor_Configuration_Header_t;
-
- /** \brief Standard USB Configuration Descriptor (USB-IF naming conventions).
- *
- * Type define for a standard Configuration Descriptor header. This structure uses the relevant standard's given element names
- * to ensure compatibility with the standard.
- *
- * \see \ref USB_Descriptor_Device_t for the version of this type with non-standard LUFA specific element names.
- */
- typedef struct
- {
- uint8_t bLength; /**< Size of the descriptor, in bytes. */
- uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value
- * given by the specific class.
- */
- uint16_t wTotalLength; /**< Size of the configuration descriptor header,
- * and all sub descriptors inside the configuration.
- */
- uint8_t bNumInterfaces; /**< Total number of interfaces in the configuration. */
- uint8_t bConfigurationValue; /**< Configuration index of the current configuration. */
- uint8_t iConfiguration; /**< Index of a string descriptor describing the configuration. */
- uint8_t bmAttributes; /**< Configuration attributes, comprised of a mask of zero or
- * more USB_CONFIG_ATTR_* masks.
- */
- uint8_t bMaxPower; /**< Maximum power consumption of the device while in the
- * current configuration, calculated by the \ref USB_CONFIG_POWER_MA()
- * macro.
- */
- } USB_StdDescriptor_Configuration_Header_t;
-
- /** \brief Standard USB Interface Descriptor (LUFA naming conventions).
- *
- * Type define for a standard Interface Descriptor. This structure uses LUFA-specific element names
- * to make each element's purpose clearer.
- *
- * \see \ref USB_StdDescriptor_Interface_t for the version of this type with standard element names.
- */
- typedef struct
- {
- USB_Descriptor_Header_t Header; /**< Descriptor header, including type and size. */
-
- uint8_t InterfaceNumber; /**< Index of the interface in the current configuration. */
- uint8_t AlternateSetting; /**< Alternate setting for the interface number. The same
- * interface number can have multiple alternate settings
- * with different endpoint configurations, which can be
- * selected by the host.
- */
- uint8_t TotalEndpoints; /**< Total number of endpoints in the interface. */
-
- uint8_t Class; /**< Interface class ID. */
- uint8_t SubClass; /**< Interface subclass ID. */
- uint8_t Protocol; /**< Interface protocol ID. */
-
- uint8_t InterfaceStrIndex; /**< Index of the string descriptor describing the interface. */
- } USB_Descriptor_Interface_t;
-
- /** \brief Standard USB Interface Descriptor (USB-IF naming conventions).
- *
- * Type define for a standard Interface Descriptor. This structure uses the relevant standard's given element names
- * to ensure compatibility with the standard.
- *
- * \see \ref USB_Descriptor_Interface_t for the version of this type with non-standard LUFA specific element names.
- */
- typedef struct
- {
- uint8_t bLength; /**< Size of the descriptor, in bytes. */
- uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value
- * given by the specific class.
- */
- uint8_t bInterfaceNumber; /**< Index of the interface in the current configuration. */
- uint8_t bAlternateSetting; /**< Alternate setting for the interface number. The same
- * interface number can have multiple alternate settings
- * with different endpoint configurations, which can be
- * selected by the host.
- */
- uint8_t bNumEndpoints; /**< Total number of endpoints in the interface. */
- uint8_t bInterfaceClass; /**< Interface class ID. */
- uint8_t bInterfaceSubClass; /**< Interface subclass ID. */
- uint8_t bInterfaceProtocol; /**< Interface protocol ID. */
- uint8_t iInterface; /**< Index of the string descriptor describing the
- * interface.
- */
- } USB_StdDescriptor_Interface_t;
-
- /** \brief Standard USB Interface Association Descriptor (LUFA naming conventions).
- *
- * Type define for a standard Interface Association Descriptor. This structure uses LUFA-specific element names
- * to make each element's purpose clearer.
- *
- * This descriptor has been added as a supplement to the USB2.0 standard, in the ECN located at
- * <a>http://www.usb.org/developers/docs/InterfaceAssociationDescriptor_ecn.pdf</a>. It allows composite
- * devices with multiple interfaces related to the same function to have the multiple interfaces bound
- * together at the point of enumeration, loading one generic driver for all the interfaces in the single
- * function. Read the ECN for more information.
- *
- * \see \ref USB_StdDescriptor_Interface_Association_t for the version of this type with standard element names.
- */
- typedef struct
- {
- USB_Descriptor_Header_t Header; /**< Descriptor header, including type and size. */
-
- uint8_t FirstInterfaceIndex; /**< Index of the first associated interface. */
- uint8_t TotalInterfaces; /**< Total number of associated interfaces. */
-
- uint8_t Class; /**< Interface class ID. */
- uint8_t SubClass; /**< Interface subclass ID. */
- uint8_t Protocol; /**< Interface protocol ID. */
-
- uint8_t IADStrIndex; /**< Index of the string descriptor describing the
- * interface association.
- */
- } USB_Descriptor_Interface_Association_t;
-
- /** \brief Standard USB Interface Association Descriptor (USB-IF naming conventions).
- *
- * Type define for a standard Interface Association Descriptor. This structure uses the relevant standard's given
- * element names to ensure compatibility with the standard.
- *
- * This descriptor has been added as a supplement to the USB2.0 standard, in the ECN located at
- * <a>http://www.usb.org/developers/docs/InterfaceAssociationDescriptor_ecn.pdf</a>. It allows composite
- * devices with multiple interfaces related to the same function to have the multiple interfaces bound
- * together at the point of enumeration, loading one generic driver for all the interfaces in the single
- * function. Read the ECN for more information.
- *
- * \see \ref USB_Descriptor_Interface_Association_t for the version of this type with non-standard LUFA specific
- * element names.
- */
- typedef struct
- {
- uint8_t bLength; /**< Size of the descriptor, in bytes. */
- uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value
- * given by the specific class.
- */
- uint8_t bFirstInterface; /**< Index of the first associated interface. */
- uint8_t bInterfaceCount; /**< Total number of associated interfaces. */
- uint8_t bFunctionClass; /**< Interface class ID. */
- uint8_t bFunctionSubClass; /**< Interface subclass ID. */
- uint8_t bFunctionProtocol; /**< Interface protocol ID. */
- uint8_t iFunction; /**< Index of the string descriptor describing the
- * interface association.
- */
- } USB_StdDescriptor_Interface_Association_t;
-
- /** \brief Standard USB Endpoint Descriptor (LUFA naming conventions).
- *
- * Type define for a standard Endpoint Descriptor. This structure uses LUFA-specific element names
- * to make each element's purpose clearer.
- *
- * \see \ref USB_StdDescriptor_Endpoint_t for the version of this type with standard element names.
- */
- typedef struct
- {
- USB_Descriptor_Header_t Header; /**< Descriptor header, including type and size. */
-
- uint8_t EndpointAddress; /**< Logical address of the endpoint within the device for the current
- * configuration, including direction mask.
- */
- uint8_t Attributes; /**< Endpoint attributes, comprised of a mask of the endpoint type (EP_TYPE_*)
- * and attributes (ENDPOINT_ATTR_*) masks.
- */
- uint16_t EndpointSize; /**< Size of the endpoint bank, in bytes. This indicates the maximum packet
- * size that the endpoint can receive at a time.
- */
- uint8_t PollingIntervalMS; /**< Polling interval in milliseconds for the endpoint if it is an INTERRUPT
- * or ISOCHRONOUS type.
- */
- } USB_Descriptor_Endpoint_t;
-
- /** \brief Standard USB Endpoint Descriptor (USB-IF naming conventions).
- *
- * Type define for a standard Endpoint Descriptor. This structure uses the relevant standard's given
- * element names to ensure compatibility with the standard.
- *
- * \see \ref USB_Descriptor_Endpoint_t for the version of this type with non-standard LUFA specific
- * element names.
- */
- typedef struct
- {
- uint8_t bLength; /**< Size of the descriptor, in bytes. */
- uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a
- * value given by the specific class.
- */
- uint8_t bEndpointAddress; /**< Logical address of the endpoint within the device for the current
- * configuration, including direction mask.
- */
- uint8_t bmAttributes; /**< Endpoint attributes, comprised of a mask of the endpoint type (EP_TYPE_*)
- * and attributes (ENDPOINT_ATTR_*) masks.
- */
- uint16_t wMaxPacketSize; /**< Size of the endpoint bank, in bytes. This indicates the maximum packet size
- * that the endpoint can receive at a time.
- */
- uint8_t bInterval; /**< Polling interval in milliseconds for the endpoint if it is an INTERRUPT or
- * ISOCHRONOUS type.
- */
- } USB_StdDescriptor_Endpoint_t;
-
- /** \brief Standard USB String Descriptor (LUFA naming conventions).
- *
- * Type define for a standard string descriptor. Unlike other standard descriptors, the length
- * of the descriptor for placement in the descriptor header must be determined by the \ref USB_STRING_LEN()
- * macro rather than by the size of the descriptor structure, as the length is not fixed.
- *
- * This structure should also be used for string index 0, which contains the supported language IDs for
- * the device as an array.
- *
- * This structure uses LUFA-specific element names to make each element's purpose clearer.
- *
- * \see \ref USB_StdDescriptor_String_t for the version of this type with standard element names.
- */
- typedef struct
- {
- USB_Descriptor_Header_t Header; /**< Descriptor header, including type and size. */
-
- wchar_t UnicodeString[]; /**< String data, as unicode characters (alternatively,
- * string language IDs). If normal ASCII characters are
- * to be used, they must be added as an array of characters
- * rather than a normal C string so that they are widened to
- * Unicode size.
- *
- * Under GCC, strings prefixed with the "L" character (before
- * the opening string quotation mark) are considered to be
- * Unicode strings, and may be used instead of an explicit
- * array of ASCII characters.
- */
- } USB_Descriptor_String_t;
-
- /** \brief Standard USB String Descriptor (USB-IF naming conventions).
- *
- * Type define for a standard string descriptor. Unlike other standard descriptors, the length
- * of the descriptor for placement in the descriptor header must be determined by the \ref USB_STRING_LEN()
- * macro rather than by the size of the descriptor structure, as the length is not fixed.
- *
- * This structure should also be used for string index 0, which contains the supported language IDs for
- * the device as an array.
- *
- * This structure uses the relevant standard's given element names to ensure compatibility with the standard.
- *
- * \see \ref USB_Descriptor_String_t for the version of this type with with non-standard LUFA specific
- * element names.
- */
- typedef struct
- {
- uint8_t bLength; /**< Size of the descriptor, in bytes. */
- uint8_t bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t
- * or a value given by the specific class.
- */
- int16_t bString[]; /**< String data, as unicode characters (alternatively, string language IDs).
- * If normal ASCII characters are to be used, they must be added as an array
- * of characters rather than a normal C string so that they are widened to
- * Unicode size.
- *
- * Under GCC, strings prefixed with the "L" character (before the opening string
- * quotation mark) are considered to be Unicode strings, and may be used instead
- * of an explicit array of ASCII characters.
- */
- } USB_StdDescriptor_String_t;
-
- /* Private Interface - For use in library only: */
- #if !defined(__DOXYGEN__)
- /* Macros: */
- #define VERSION_TENS(x) (int)((x) / 10)
- #define VERSION_ONES(x) (int)((x) - (10 * VERSION_TENS(x)))
- #define VERSION_TENTHS(x) (int)(((x) - (int)(x)) * 10)
- #define VERSION_HUNDREDTHS(x) (int)((((x) - (int)(x)) * 100) - (10 * VERSION_TENTHS(x)))
- #endif
-
- /* Disable C linkage for C++ Compilers: */
- #if defined(__cplusplus)
- }
- #endif
-
-#endif
-
-/** @} */
-
diff --git a/LUFA/Drivers/USB/HighLevel/StdRequestType.h b/LUFA/Drivers/USB/HighLevel/StdRequestType.h
deleted file mode 100644
index c62aa502d..000000000
--- a/LUFA/Drivers/USB/HighLevel/StdRequestType.h
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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 USB control endpoint request definitions.
- *
- * This file contains structures and macros for the easy creation and parsing of standard USB control requests.
- *
- * \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_USB
- * \defgroup Group_StdRequest Standard USB Requests
- *
- * This module contains definitions for the various control request parameters, so that the request
- * details (such as data direction, request recipient, etc.) can be extracted via masking.
- *
- * @{
- */
-
-#ifndef __STDREQTYPE_H__
-#define __STDREQTYPE_H__
-
- /* Includes: */
- #include <stdint.h>
-
- /* 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: */
- /* Macros: */
- /** Mask for the request type parameter, to indicate the direction of the request data (Host to Device
- * or Device to Host). The result of this mask should then be compared to the request direction masks.
- *
- * \see REQDIR_* macros for masks indicating the request data direction.
- */
- #define CONTROL_REQTYPE_DIRECTION 0x80
-
- /** Mask for the request type parameter, to indicate the type of request (Device, Class or Vendor
- * Specific). The result of this mask should then be compared to the request type masks.
- *
- * \see REQTYPE_* macros for masks indicating the request type.
- */
- #define CONTROL_REQTYPE_TYPE 0x60
-
- /** Mask for the request type parameter, to indicate the recipient of the request (Standard, Class
- * or Vendor Specific). The result of this mask should then be compared to the request recipient
- * masks.
- *
- * \see REQREC_* macros for masks indicating the request recipient.
- */
- #define CONTROL_REQTYPE_RECIPIENT 0x1F
-
- /** \name Control Request Data Direction Masks */
- //@{
- /** Request data direction mask, indicating that the request data will flow from host to device.
- *
- * \see \ref CONTROL_REQTYPE_DIRECTION macro.
- */
- #define REQDIR_HOSTTODEVICE (0 << 7)
-
- /** Request data direction mask, indicating that the request data will flow from device to host.
- *
- * \see \ref CONTROL_REQTYPE_DIRECTION macro.
- */
- #define REQDIR_DEVICETOHOST (1 << 7)
- //@}
-
- /** \name Control Request Type Masks */
- //@{
- /** Request type mask, indicating that the request is a standard request.
- *
- * \see \ref CONTROL_REQTYPE_TYPE macro.
- */
- #define REQTYPE_STANDARD (0 << 5)
-
- /** Request type mask, indicating that the request is a class-specific request.
- *
- * \see \ref CONTROL_REQTYPE_TYPE macro.
- */
- #define REQTYPE_CLASS (1 << 5)
-
- /** Request type mask, indicating that the request is a vendor specific request.
- *
- * \see \ref CONTROL_REQTYPE_TYPE macro.
- */
- #define REQTYPE_VENDOR (2 << 5)
- //@}
-
- /** \name Control Request Recipient Masks */
- //@{
- /** Request recipient mask, indicating that the request is to be issued to the device as a whole.
- *
- * \see \ref CONTROL_REQTYPE_RECIPIENT macro.
- */
- #define REQREC_DEVICE (0 << 0)
-
- /** Request recipient mask, indicating that the request is to be issued to an interface in the
- * currently selected configuration.
- *
- * \see \ref CONTROL_REQTYPE_RECIPIENT macro.
- */
- #define REQREC_INTERFACE (1 << 0)
-
- /** Request recipient mask, indicating that the request is to be issued to an endpoint in the
- * currently selected configuration.
- *
- * \see \ref CONTROL_REQTYPE_RECIPIENT macro.
- */
- #define REQREC_ENDPOINT (2 << 0)
-
- /** Request recipient mask, indicating that the request is to be issued to an unspecified element
- * in the currently selected configuration.
- *
- * \see \ref CONTROL_REQTYPE_RECIPIENT macro.
- */
- #define REQREC_OTHER (3 << 0)
- //@}
-
- /* Type Defines: */
- /** \brief Standard USB Control Request
- *
- * Type define for a standard USB control request.
- *
- * \see The USB 2.0 specification for more information on standard control requests.
- */
- typedef struct
- {
- uint8_t bmRequestType; /**< Type of the request. */
- uint8_t bRequest; /**< Request command code. */
- uint16_t wValue; /**< wValue parameter of the request. */
- uint16_t wIndex; /**< wIndex parameter of the request. */
- uint16_t wLength; /**< Length of the data to transfer in bytes. */
- } USB_Request_Header_t;
-
- /* Enums: */
- /** Enumeration for the various standard request commands. These commands are applicable when the
- * request type is \ref REQTYPE_STANDARD (with the exception of \ref REQ_GetDescriptor, which is always
- * handled regardless of the request type value).
- *
- * \see Chapter 9 of the USB 2.0 Specification.
- */
- enum USB_Control_Request_t
- {
- REQ_GetStatus = 0, /**< Implemented in the library for device, endpoint and interface
- * recipients. Passed to the user application for other recipients
- * via the \ref EVENT_USB_Device_ControlRequest() event when received in
- * device mode. */
- REQ_ClearFeature = 1, /**< Implemented in the library for device, endpoint and interface
- * recipients. Passed to the user application for other recipients
- * via the \ref EVENT_USB_Device_ControlRequest() event when received in
- * device mode. */
- REQ_SetFeature = 3, /**< Implemented in the library for device, endpoint and interface
- * recipients. Passed to the user application for other recipients
- * via the \ref EVENT_USB_Device_ControlRequest() event when received in
- * device mode. */
- REQ_SetAddress = 5, /**< Implemented in the library for the device recipient. Passed
- * to the user application for other recipients via the
- * \ref EVENT_USB_Device_ControlRequest() event when received in
- * device mode. */
- REQ_GetDescriptor = 6, /**< Implemented in the library for device and interface recipients. Passed to the
- * user application for other recipients via the
- * \ref EVENT_USB_Device_ControlRequest() event when received in
- * device mode. */
- REQ_SetDescriptor = 7, /**< Not implemented in the library, passed to the user application
- * via the \ref EVENT_USB_Device_ControlRequest() event when received in
- * device mode. */
- REQ_GetConfiguration = 8, /**< Implemented in the library for the device recipient. Passed
- * to the user application for other recipients via the
- * \ref EVENT_USB_Device_ControlRequest() event when received in
- * device mode. */
- REQ_SetConfiguration = 9, /**< Implemented in the library for the device recipient. Passed
- * to the user application for other recipients via the
- * \ref EVENT_USB_Device_ControlRequest() event when received in
- * device mode. */
- REQ_GetInterface = 10, /**< Not implemented in the library, passed to the user application
- * via the \ref EVENT_USB_Device_ControlRequest() event when received in
- * device mode. */
- REQ_SetInterface = 11, /**< Not implemented in the library, passed to the user application
- * via the \ref EVENT_USB_Device_ControlRequest() event when received in
- * device mode. */
- REQ_SynchFrame = 12, /**< Not implemented in the library, passed to the user application
- * via the \ref EVENT_USB_Device_ControlRequest() event when received in
- * device mode. */
- };
-
- /** Feature Selector values for Set Feature and Clear Feature standard control requests directed to the device, interface
- * and endpoint recipients.
- */
- enum USB_Feature_Selectors_t
- {
- FEATURE_SEL_EndpointHalt = 0x00, /**< Feature selector for Clear Feature or Set Feature commands. When
- * used in a Set Feature or Clear Feature request this indicates that an
- * endpoint (whose address is given elsewhere in the request should have
- * its stall condition changed.
- */
- FEATURE_SEL_DeviceRemoteWakeup = 0x01, /**< Feature selector for Device level Remote Wakeup enable set or clear.
- * This feature can be controlled by the host on devices which indicate
- * remote wakeup support in their descriptors to selectively disable or
- * enable remote wakeup.
- */
- FEATURE_SEL_TestMode = 0x02, /**< Feature selector for Test Mode features, used to test the USB controller
- * to check for incorrect operation.
- */
- };
-
- /* Private Interface - For use in library only: */
- #if !defined(__DOXYGEN__)
- /* Macros: */
- #define FEATURE_SELFPOWERED_ENABLED (1 << 0)
- #define FEATURE_REMOTE_WAKEUP_ENABLED (1 << 1)
- #endif
-
-#endif
-
-/** @} */
-
diff --git a/LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_Control_R.c b/LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_Control_R.c
deleted file mode 100644
index e746b5124..000000000
--- a/LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_Control_R.c
+++ /dev/null
@@ -1,50 +0,0 @@
-uint8_t TEMPLATE_FUNC_NAME (void* const Buffer,
- uint16_t Length)
-{
- uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
-
- if (!(Length))
- Endpoint_ClearOUT();
-
- while (Length)
- {
- uint8_t USB_DeviceState_LCL = USB_DeviceState;
-
- if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
- return ENDPOINT_RWCSTREAM_DeviceDisconnected;
- else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
- return ENDPOINT_RWCSTREAM_BusSuspended;
- else if (Endpoint_IsSETUPReceived())
- return ENDPOINT_RWCSTREAM_HostAborted;
-
- if (Endpoint_IsOUTReceived())
- {
- while (Length && Endpoint_BytesInEndpoint())
- {
- TEMPLATE_TRANSFER_BYTE(DataStream);
- TEMPLATE_BUFFER_MOVE(DataStream, 1);
- Length--;
- }
-
- Endpoint_ClearOUT();
- }
- }
-
- while (!(Endpoint_IsINReady()))
- {
- uint8_t USB_DeviceState_LCL = USB_DeviceState;
-
- if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
- return ENDPOINT_RWCSTREAM_DeviceDisconnected;
- else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
- return ENDPOINT_RWCSTREAM_BusSuspended;
- }
-
- return ENDPOINT_RWCSTREAM_NoError;
-}
-
-
-#undef TEMPLATE_BUFFER_OFFSET
-#undef TEMPLATE_BUFFER_MOVE
-#undef TEMPLATE_FUNC_NAME
-#undef TEMPLATE_TRANSFER_BYTE
diff --git a/LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_Control_W.c b/LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_Control_W.c
deleted file mode 100644
index bdbbcfc11..000000000
--- a/LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_Control_W.c
+++ /dev/null
@@ -1,58 +0,0 @@
-uint8_t TEMPLATE_FUNC_NAME (const void* const Buffer,
- uint16_t Length)
-{
- uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
- bool LastPacketFull = false;
-
- if (Length > USB_ControlRequest.wLength)
- Length = USB_ControlRequest.wLength;
- else if (!(Length))
- Endpoint_ClearIN();
-
- while (Length || LastPacketFull)
- {
- uint8_t USB_DeviceState_LCL = USB_DeviceState;
-
- if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
- return ENDPOINT_RWCSTREAM_DeviceDisconnected;
- else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
- return ENDPOINT_RWCSTREAM_BusSuspended;
- else if (Endpoint_IsSETUPReceived())
- return ENDPOINT_RWCSTREAM_HostAborted;
- else if (Endpoint_IsOUTReceived())
- break;
-
- if (Endpoint_IsINReady())
- {
- uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint();
-
- while (Length && (BytesInEndpoint < USB_ControlEndpointSize))
- {
- TEMPLATE_TRANSFER_BYTE(DataStream);
- TEMPLATE_BUFFER_MOVE(DataStream, 1);
- Length--;
- BytesInEndpoint++;
- }
-
- LastPacketFull = (BytesInEndpoint == USB_ControlEndpointSize);
- Endpoint_ClearIN();
- }
- }
-
- while (!(Endpoint_IsOUTReceived()))
- {
- uint8_t USB_DeviceState_LCL = USB_DeviceState;
-
- if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)
- return ENDPOINT_RWCSTREAM_DeviceDisconnected;
- else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)
- return ENDPOINT_RWCSTREAM_BusSuspended;
- }
-
- return ENDPOINT_RWCSTREAM_NoError;
-}
-
-#undef TEMPLATE_BUFFER_OFFSET
-#undef TEMPLATE_BUFFER_MOVE
-#undef TEMPLATE_FUNC_NAME
-#undef TEMPLATE_TRANSFER_BYTE
diff --git a/LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_RW.c b/LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_RW.c
deleted file mode 100644
index a46d7513b..000000000
--- a/LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_RW.c
+++ /dev/null
@@ -1,54 +0,0 @@
-uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE const Buffer,
- uint16_t Length,
- uint16_t* const BytesProcessed)
-{
- uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
- uint16_t BytesInTransfer = 0;
- uint8_t ErrorCode;
-
- if ((ErrorCode = Endpoint_WaitUntilReady()))
- return ErrorCode;
-
- if (BytesProcessed != NULL)
- {
- Length -= *BytesProcessed;
- TEMPLATE_BUFFER_MOVE(DataStream, *BytesProcessed);
- }
-
- while (Length)
- {
- if (!(Endpoint_IsReadWriteAllowed()))
- {
- TEMPLATE_CLEAR_ENDPOINT();
-
- if (BytesProcessed != NULL)
- {
- *BytesProcessed += BytesInTransfer;
- return ENDPOINT_RWSTREAM_IncompleteTransfer;
- }
-
- #if !defined(INTERRUPT_CONTROL_ENDPOINT)
- USB_USBTask();
- #endif
-
- if ((ErrorCode = Endpoint_WaitUntilReady()))
- return ErrorCode;
- }
- else
- {
- TEMPLATE_TRANSFER_BYTE(DataStream);
- TEMPLATE_BUFFER_MOVE(DataStream, 1);
- Length--;
- BytesInTransfer++;
- }
- }
-
- return ENDPOINT_RWSTREAM_NoError;
-}
-
-#undef TEMPLATE_FUNC_NAME
-#undef TEMPLATE_BUFFER_TYPE
-#undef TEMPLATE_TRANSFER_BYTE
-#undef TEMPLATE_CLEAR_ENDPOINT
-#undef TEMPLATE_BUFFER_OFFSET
-#undef TEMPLATE_BUFFER_MOVE
diff --git a/LUFA/Drivers/USB/HighLevel/Template/Template_Pipe_RW.c b/LUFA/Drivers/USB/HighLevel/Template/Template_Pipe_RW.c
deleted file mode 100644
index 147ce5ad4..000000000
--- a/LUFA/Drivers/USB/HighLevel/Template/Template_Pipe_RW.c
+++ /dev/null
@@ -1,53 +0,0 @@
-uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE const Buffer,
- uint16_t Length,
- uint16_t* const BytesProcessed)
-{
- uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
- uint16_t BytesInTransfer = 0;
- uint8_t ErrorCode;
-
- Pipe_SetPipeToken(TEMPLATE_TOKEN);
-
- if ((ErrorCode = Pipe_WaitUntilReady()))
- return ErrorCode;
-
- if (BytesProcessed != NULL)
- {
- Length -= *BytesProcessed;
- TEMPLATE_BUFFER_MOVE(DataStream, *BytesProcessed);
- }
-
- while (Length)
- {
- if (!(Pipe_IsReadWriteAllowed()))
- {
- TEMPLATE_CLEAR_PIPE();
-
- if (BytesProcessed != NULL)
- {
- *BytesProcessed += BytesInTransfer;
- return PIPE_RWSTREAM_IncompleteTransfer;
- }
-
- if ((ErrorCode = Pipe_WaitUntilReady()))
- return ErrorCode;
- }
- else
- {
- TEMPLATE_TRANSFER_BYTE(DataStream);
- TEMPLATE_BUFFER_MOVE(DataStream, 1);
- Length--;
- BytesInTransfer++;
- }
- }
-
- return PIPE_RWSTREAM_NoError;
-}
-
-#undef TEMPLATE_FUNC_NAME
-#undef TEMPLATE_BUFFER_TYPE
-#undef TEMPLATE_TOKEN
-#undef TEMPLATE_TRANSFER_BYTE
-#undef TEMPLATE_CLEAR_PIPE
-#undef TEMPLATE_BUFFER_OFFSET
-#undef TEMPLATE_BUFFER_MOVE
diff --git a/LUFA/Drivers/USB/HighLevel/USBMode.h b/LUFA/Drivers/USB/HighLevel/USBMode.h
deleted file mode 100644
index 58f9927dc..000000000
--- a/LUFA/Drivers/USB/HighLevel/USBMode.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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 USB mode and capability macros.
- *
- * This file defines macros indicating the type of USB controller the library is being compiled for, and its
- * capabilities. These macros may then be referenced in the user application to selectively enable or disable
- * code sections depending on if they are defined or not.
- *
- * \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_USB
- * \defgroup Group_USBMode USB Mode Tokens
- *
- * After the inclusion of the master USB driver header, one or more of the following
- * tokens may be defined, to allow the user code to conditionally enable or disable
- * code based on the USB controller family and allowable USB modes. These tokens may
- * be tested against to eliminate code relating to a USB mode which is not enabled for
- * the given compilation.
- *
- * @{
- */
-
-#ifndef __USBMODE_H__
-#define __USBMODE_H__
-
- /* 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: */
- #if defined(__DOXYGEN__)
- /** Indicates that the target AVR microcontroller belongs to the Series 2 USB controller
- * (i.e. AT90USBxxx2 or ATMEGAxxU2) when defined.
- */
- #define USB_SERIES_2_AVR
-
- /** Indicates that the target AVR microcontroller belongs to the Series 4 USB controller
- * (i.e. ATMEGAxxU4) when defined.
- */
- #define USB_SERIES_4_AVR
-
- /** Indicates that the target AVR microcontroller belongs to the Series 6 USB controller
- * (i.e. AT90USBxxx6) when defined.
- */
- #define USB_SERIES_6_AVR
-
- /** Indicates that the target AVR microcontroller belongs to the Series 7 USB controller
- * (i.e. AT90USBxxx7) when defined.
- */
- #define USB_SERIES_7_AVR
-
- /** Indicates that the target AVR microcontroller and compilation settings allow for the
- * target to be configured in USB Device mode when defined.
- */
- #define USB_CAN_BE_DEVICE
-
- /** Indicates that the target AVR microcontroller and compilation settings allow for the
- * target to be configured in USB Host mode when defined.
- */
- #define USB_CAN_BE_HOST
-
- /** Indicates that the target AVR microcontroller and compilation settings allow for the
- * target to be configured in either USB Device or Host mode when defined.
- */
- #define USB_CAN_BE_BOTH
- #else
- /* Macros: */
- #if (defined(__AVR_AT90USB162__) || defined(__AVR_AT90USB82__) || \
- defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega8U2__))
- #define USB_SERIES_2_AVR
- #elif (defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega16U4__))
- #define USB_SERIES_4_AVR
- #elif (defined(__AVR_ATmega32U6__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__))
- #define USB_SERIES_6_AVR
- #elif (defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__))
- #define USB_SERIES_7_AVR
- #endif
-
- #if !defined(USB_SERIES_7_AVR)
- #if defined(USB_HOST_ONLY)
- #error USB_HOST_ONLY is not available for the currently selected USB AVR model.
- #endif
-
- #if !defined(USB_DEVICE_ONLY)
- #define USB_DEVICE_ONLY
- #endif
- #endif
-
- #if (!defined(USB_DEVICE_ONLY) && !defined(USB_HOST_ONLY))
- #define USB_CAN_BE_BOTH
- #define USB_CAN_BE_HOST
- #define USB_CAN_BE_DEVICE
- #elif defined(USB_HOST_ONLY)
- #define USB_CAN_BE_HOST
- #elif defined(USB_DEVICE_ONLY)
- #define USB_CAN_BE_DEVICE
- #endif
-
- #if (defined(USB_HOST_ONLY) && defined(USB_DEVICE_ONLY))
- #error USB_HOST_ONLY and USB_DEVICE_ONLY are mutually exclusive.
- #endif
- #endif
-
-#endif
-
-/** @} */
diff --git a/LUFA/Drivers/USB/HighLevel/USBTask.c b/LUFA/Drivers/USB/HighLevel/USBTask.c
deleted file mode 100644
index c0cd7119f..000000000
--- a/LUFA/Drivers/USB/HighLevel/USBTask.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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_USBTASK_C
-#define __INCLUDE_FROM_USB_DRIVER
-#include "USBTask.h"
-
-volatile bool USB_IsInitialized;
-USB_Request_Header_t USB_ControlRequest;
-
-#if defined(USB_CAN_BE_HOST) && !defined(HOST_STATE_AS_GPIOR)
-volatile uint8_t USB_HostState;
-#endif
-
-#if defined(USB_CAN_BE_DEVICE) && !defined(DEVICE_STATE_AS_GPIOR)
-volatile uint8_t USB_DeviceState;
-#endif
-
-void USB_USBTask(void)
-{
- #if defined(USB_HOST_ONLY)
- USB_HostTask();
- #elif defined(USB_DEVICE_ONLY)
- USB_DeviceTask();
- #else
- if (USB_CurrentMode == USB_MODE_Device)
- USB_DeviceTask();
- else if (USB_CurrentMode == USB_MODE_Host)
- USB_HostTask();
- #endif
-}
-
-#if defined(USB_CAN_BE_DEVICE)
-static void USB_DeviceTask(void)
-{
- if (USB_DeviceState != DEVICE_STATE_Unattached)
- {
- uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint();
-
- Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
-
- if (Endpoint_IsSETUPReceived())
- USB_Device_ProcessControlRequest();
-
- Endpoint_SelectEndpoint(PrevEndpoint);
- }
-}
-#endif
-
-#if defined(USB_CAN_BE_HOST)
-static void USB_HostTask(void)
-{
- uint8_t PrevPipe = Pipe_GetCurrentPipe();
-
- Pipe_SelectPipe(PIPE_CONTROLPIPE);
-
- USB_Host_ProcessNextHostState();
-
- Pipe_SelectPipe(PrevPipe);
-}
-#endif
-
diff --git a/LUFA/Drivers/USB/HighLevel/USBTask.h b/LUFA/Drivers/USB/HighLevel/USBTask.h
deleted file mode 100644
index 205fee622..000000000
--- a/LUFA/Drivers/USB/HighLevel/USBTask.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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 Main USB service task management.
- *
- * This file contains the function definitions required for the main USB service task, which must be called
- * from the user application to ensure that the USB connection to or from a connected USB device is maintained.
- *
- * \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.
- */
-
-#ifndef __USBTASK_H__
-#define __USBTASK_H__
-
- /* Includes: */
- #include <avr/interrupt.h>
- #include <stdint.h>
- #include <stdbool.h>
-
- #include "../LowLevel/USBController.h"
- #include "Events.h"
- #include "StdRequestType.h"
- #include "StdDescriptors.h"
- #include "USBMode.h"
-
- #if defined(USB_CAN_BE_DEVICE)
- #include "DeviceStandardReq.h"
- #endif
-
- #if defined(USB_CAN_BE_HOST)
- #include "HostStandardReq.h"
- #endif
-
- /* 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: */
- /* Global Variables: */
- /** Indicates if the USB interface is currently initialized but not necessarily connected to a host
- * or device (i.e. if \ref USB_Init() has been run). If this is false, all other library globals related
- * to the USB driver are invalid.
- *
- * \note This variable should be treated as read-only in the user application, and never manually
- * changed in value.
- *
- * \ingroup Group_USBManagement
- */
- extern volatile bool USB_IsInitialized;
-
- /** Structure containing the last received Control request when in Device mode (for use in user-applications
- * inside of the \ref EVENT_USB_Device_ControlRequest() event, or for filling up with a control request to
- * issue when in Host mode before calling \ref USB_Host_SendControlRequest().
- *
- * \ingroup Group_USBManagement
- */
- extern USB_Request_Header_t USB_ControlRequest;
-
- #if defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__)
- #if !defined(HOST_STATE_AS_GPIOR) || defined(__DOXYGEN__)
- /** Indicates the current host state machine state. When in host mode, this indicates the state
- * via one of the values of the \ref USB_Host_States_t enum values.
- *
- * This value may be altered by the user application to implement the \ref HOST_STATE_Addressed,
- * \ref HOST_STATE_Configured and \ref HOST_STATE_Suspended states which are not implemented by
- * the library internally.
- *
- * To reduce program size and speed up checks of this global, it can be placed into one of the AVR's
- * GPIOR hardware registers instead of RAM by defining the HOST_STATE_AS_GPIOR token to a value
- * between 0 and 2 in the project makefile and passing it to the compiler via the -D switch. When
- * defined, the corresponding GPIOR register should not be used in the user application except
- * implicitly via the library APIs.
- *
- * \note This global is only present if the user application can be a USB host.
- *
- * \see \ref USB_Host_States_t for a list of possible device states.
- *
- * \ingroup Group_Host
- */
- extern volatile uint8_t USB_HostState;
- #else
- #define _GET_HOST_GPIOR_NAME2(y) GPIOR ## y
- #define _GET_HOST_GPIOR_NAME(x) _GET_HOST_GPIOR_NAME2(x)
- #define USB_HostState _GET_HOST_GPIOR_NAME(HOST_STATE_AS_GPIOR)
- #endif
- #endif
-
- #if defined(USB_CAN_BE_DEVICE) || defined(__DOXYGEN__)
- #if !defined(DEVICE_STATE_AS_GPIOR) || defined(__DOXYGEN__)
- /** Indicates the current device state machine state. When in device mode, this indicates the state
- * via one of the values of the \ref USB_Device_States_t enum values.
- *
- * This value should not be altered by the user application as it is handled automatically by the
- * library. The only exception to this rule is if the NO_LIMITED_CONTROLLER_CONNECT token is used
- * (see \ref EVENT_USB_Device_Connect() and \ref EVENT_USB_Device_Disconnect() events).
- *
- * To reduce program size and speed up checks of this global, it can be placed into one of the AVR's
- * GPIOR hardware registers instead of RAM by defining the DEVICE_STATE_AS_GPIOR token to a value
- * between 0 and 2 in the project makefile and passing it to the compiler via the -D switch. When
- * defined, the corresponding GPIOR register should not be used in the user application except
- * implicitly via the library APIs.
- *
- * \note This global is only present if the user application can be a USB device.
- * \n\n
- *
- * \note This variable should be treated as read-only in the user application, and never manually
- * changed in value except in the circumstances outlined above.
- *
- * \see \ref USB_Device_States_t for a list of possible device states.
- *
- * \ingroup Group_Device
- */
- extern volatile uint8_t USB_DeviceState;
- #else
- #define _GET_DEVICE_GPIOR_NAME2(y) GPIOR ## y
- #define _GET_DEVICE_GPIOR_NAME(x) _GET_DEVICE_GPIOR_NAME2(x)
- #define USB_DeviceState _GET_DEVICE_GPIOR_NAME(DEVICE_STATE_AS_GPIOR)
- #endif
- #endif
-
- /* Function Prototypes: */
- /** This is the main USB management task. The USB driver requires this task to be executed
- * continuously when the USB system is active (device attached in host mode, or attached to a host
- * in device mode) in order to manage USB communications. This task may be executed inside an RTOS,
- * fast timer ISR or the main user application loop.
- *
- * The USB task must be serviced within 30ms while in device mode, or within 1ms while in host mode.
- * The task may be serviced at all times, or (for minimum CPU consumption):
- *
- * - In device mode, it may be disabled at start-up, enabled on the firing of the \ref EVENT_USB_Device_Connect()
- * event and disabled again on the firing of the \ref EVENT_USB_Device_Disconnect() event.
- *
- * - In host mode, it may be disabled at start-up, enabled on the firing of the \ref EVENT_USB_Host_DeviceAttached()
- * event and disabled again on the firing of the \ref EVENT_USB_Host_DeviceEnumerationComplete() or
- * \ref EVENT_USB_Host_DeviceEnumerationFailed() events.
- *
- * If in device mode (only), the control endpoint can instead be managed via interrupts entirely by the library
- * by defining the INTERRUPT_CONTROL_ENDPOINT token and passing it to the compiler via the -D switch.
- *
- * \see \ref Group_Events for more information on the USB events.
- *
- * \ingroup Group_USBManagement
- */
- void USB_USBTask(void);
-
- /* Private Interface - For use in library only: */
- #if !defined(__DOXYGEN__)
- /* Function Prototypes: */
- #if defined(__INCLUDE_FROM_USBTASK_C)
- #if defined(USB_CAN_BE_HOST)
- static void USB_HostTask(void);
- #endif
-
- #if defined(USB_CAN_BE_DEVICE)
- static void USB_DeviceTask(void);
- #endif
- #endif
-
- /* Macros: */
- #define HOST_TASK_NONBLOCK_WAIT(Duration, NextState) MACROS{ USB_HostState = HOST_STATE_WaitForDevice; \
- WaitMSRemaining = (Duration); \
- PostWaitState = (NextState); }MACROE
- #endif
-
- /* Disable C linkage for C++ Compilers: */
- #if defined(__cplusplus)
- }
- #endif
-
-#endif
-