+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Configuration Descriptor processing routines, to determine the correct pipe configurations\r
- * needed to communication with an attached USB device. Descriptors are special computer-readable structures\r
- * which the host requests upon device enumeration, to determine the device's capabilities and functions.\r
- */\r
- \r
-#include "ConfigDescriptor.h"\r
-\r
-/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This\r
- * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate\r
- * with compatible devices.\r
- *\r
- * This routine searches for a CDC interface descriptor containing bulk data IN and OUT endpoints, and an interrupt event endpoint.\r
- *\r
- * \return An error code from the CDCHost_GetConfigDescriptorDataCodes_t enum.\r
- */\r
-uint8_t ProcessConfigurationDescriptor(void)\r
-{\r
- uint8_t* ConfigDescriptorData;\r
- uint16_t ConfigDescriptorSize;\r
- uint8_t FoundEndpoints = 0;\r
- \r
- /* Get Configuration Descriptor size from the device */\r
- if (USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, NULL) != HOST_SENDCONTROL_Successful)\r
- return ControlError;\r
- \r
- /* Ensure that the Configuration Descriptor isn't too large */\r
- if (ConfigDescriptorSize > MAX_CONFIG_DESCRIPTOR_SIZE)\r
- return DescriptorTooLarge;\r
- \r
- /* Allocate enough memory for the entire config descriptor */\r
- ConfigDescriptorData = alloca(ConfigDescriptorSize);\r
-\r
- /* Retrieve the entire configuration descriptor into the allocated buffer */\r
- USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, ConfigDescriptorData);\r
- \r
- /* Validate returned data - ensure first entry is a configuration header descriptor */\r
- if (DESCRIPTOR_TYPE(ConfigDescriptorData) != DTYPE_Configuration)\r
- return InvalidConfigDataReturned;\r
- \r
- /* Get the CDC control interface from the configuration descriptor */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextCDCControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoCDCInterfaceFound;\r
- }\r
-\r
- /* Get the IN and OUT data endpoints for the CDC interface */\r
- while (FoundEndpoints != ((1 << CDC_NOTIFICATIONPIPE) | (1 << CDC_DATAPIPE_IN) | (1 << CDC_DATAPIPE_OUT)))\r
- {\r
- /* Fetch the next bulk or interrupt endpoint from the current CDC interface */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextInterfaceCDCDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Check to see if the control interface's notification pipe has been found, if so search for the data interface */\r
- if (FoundEndpoints & (1 << CDC_NOTIFICATIONPIPE))\r
- {\r
- /* Get the next CDC data interface from the configuration descriptor (CDC class has two CDC interfaces) */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, \r
- DComp_NextCDCDataInterface) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoCDCInterfaceFound;\r
- }\r
- }\r
- else\r
- {\r
- /* Clear the found endpoints mask, since any already processed endpoints aren't in the CDC interface we need */\r
- FoundEndpoints = 0;\r
-\r
- /* Disable any already configured pipes from the invalid CDC interfaces */\r
- Pipe_SelectPipe(CDC_NOTIFICATIONPIPE);\r
- Pipe_DisablePipe();\r
- Pipe_SelectPipe(CDC_DATAPIPE_IN);\r
- Pipe_DisablePipe();\r
- Pipe_SelectPipe(CDC_DATAPIPE_OUT);\r
- Pipe_DisablePipe();\r
- \r
- /* Get the next CDC control interface from the configuration descriptor (CDC class has two CDC interfaces) */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextCDCControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoCDCInterfaceFound;\r
- }\r
- }\r
-\r
- /* Fetch the next bulk or interrupt endpoint from the current CDC interface */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextInterfaceCDCDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoEndpointFound;\r
- }\r
- }\r
- \r
- USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(ConfigDescriptorData, USB_Descriptor_Endpoint_t);\r
-\r
- /* Check if the found endpoint is a interrupt or bulk type descriptor */\r
- if ((EndpointData->Attributes & EP_TYPE_MASK) == EP_TYPE_INTERRUPT)\r
- {\r
- /* If the endpoint is a IN type interrupt endpoint */\r
- if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)\r
- { \r
- /* Configure the notification pipe */\r
- Pipe_ConfigurePipe(CDC_NOTIFICATIONPIPE, EP_TYPE_INTERRUPT, PIPE_TOKEN_IN,\r
- EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);\r
-\r
- Pipe_SetInfiniteINRequests();\r
- Pipe_SetInterruptPeriod(EndpointData->PollingIntervalMS);\r
- \r
- /* Set the flag indicating that the notification pipe has been found */\r
- FoundEndpoints |= (1 << CDC_NOTIFICATIONPIPE);\r
- }\r
- }\r
- else\r
- {\r
- /* Check if the endpoint is a bulk IN or bulk OUT endpoint */\r
- if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)\r
- {\r
- /* Configure the data IN pipe */\r
- Pipe_ConfigurePipe(CDC_DATAPIPE_IN, EP_TYPE_BULK, PIPE_TOKEN_IN,\r
- EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);\r
-\r
- Pipe_SetInfiniteINRequests();\r
- Pipe_Unfreeze();\r
- \r
- /* Set the flag indicating that the data IN pipe has been found */\r
- FoundEndpoints |= (1 << CDC_DATAPIPE_IN);\r
- }\r
- else\r
- {\r
- /* Configure the data OUT pipe */\r
- Pipe_ConfigurePipe(CDC_DATAPIPE_OUT, EP_TYPE_BULK, PIPE_TOKEN_OUT,\r
- EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);\r
- \r
- Pipe_Unfreeze();\r
- \r
- /* Set the flag indicating that the data OUT pipe has been found */\r
- FoundEndpoints |= (1 << CDC_DATAPIPE_OUT);\r
- }\r
- }\r
- }\r
-\r
- /* Valid data found, return success */\r
- return SuccessfulConfigRead;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next Interface descriptor of the correct CDC control Class, Subclass and Protocol values.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextCDCControlInterface(void* CurrentDescriptor)\r
-{\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- /* Check the CDC descriptor class, subclass and protocol, break out if correct control interface found */\r
- if ((DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Class == CDC_CONTROL_CLASS) &&\r
- (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).SubClass == CDC_CONTROL_SUBCLASS) &&\r
- (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Protocol == CDC_CONTROL_PROTOCOL))\r
- {\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- }\r
- \r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next Interface descriptor of the correct CDC data Class, Subclass and Protocol values.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextCDCDataInterface(void* CurrentDescriptor)\r
-{\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- /* Check the CDC descriptor class, subclass and protocol, break out if correct data interface found */\r
- if ((DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Class == CDC_DATA_CLASS) &&\r
- (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).SubClass == CDC_DATA_SUBCLASS) &&\r
- (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Protocol == CDC_DATA_PROTOCOL))\r
- {\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- }\r
- \r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next bulk IN or OUT endpoint, or interrupt IN endpoint within the current interface,\r
- * aborting the search if another interface descriptor is found before the required endpoint (so that it may be compared\r
- * using a different comparator to determine if it is another CDC class interface).\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextInterfaceCDCDataEndpoint(void* CurrentDescriptor)\r
-{\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)\r
- {\r
- uint8_t EndpointType = (DESCRIPTOR_CAST(CurrentDescriptor,\r
- USB_Descriptor_Endpoint_t).Attributes & EP_TYPE_MASK);\r
- \r
- if ((EndpointType == EP_TYPE_BULK) || (EndpointType == EP_TYPE_INTERRUPT))\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- else if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- return DESCRIPTOR_SEARCH_Fail;\r
- }\r
-\r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for ConfigDescriptor.c.\r
- */\r
-\r
-#ifndef _CONFIGDESCRIPTOR_H_\r
-#define _CONFIGDESCRIPTOR_H_\r
-\r
- /* Includes: */\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- \r
- #include "CDCHost.h"\r
- \r
- /* Macros: */\r
- /** Interface Class value for the CDC class */\r
- #define CDC_CONTROL_CLASS 0x02\r
-\r
- /** Interface Class value for the CDC Communication Interface subclass */\r
- #define CDC_CONTROL_SUBCLASS 0x02\r
-\r
- /** Interface Class value for the CDC protocol */\r
- #define CDC_CONTROL_PROTOCOL 0x01\r
- \r
- /** Interface Class value for the CDC data class */\r
- #define CDC_DATA_CLASS 0x0A\r
-\r
- /** Interface Class value for the CDC data subclass (unused) */\r
- #define CDC_DATA_SUBCLASS 0x00\r
-\r
- /** Interface Class value for the CDC data protocol */\r
- #define CDC_DATA_PROTOCOL 0x00\r
-\r
- /** Maximum size of a device configuration descriptor which can be processed by the host, in bytes */\r
- #define MAX_CONFIG_DESCRIPTOR_SIZE 512\r
- \r
- /* Enums: */\r
- /** Enum for the possible return codes of the ProcessConfigurationDescriptor() function. */\r
- enum CDCHost_GetConfigDescriptorDataCodes_t\r
- {\r
- SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */\r
- ControlError = 1, /**< A control request to the device failed to complete successfully */\r
- DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */\r
- InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */\r
- NoCDCInterfaceFound = 4, /**< A compatible CDC interface was not found in the device's Configuration Descriptor */\r
- NoEndpointFound = 5, /**< Compatible CDC endpoints were not found in the device's CDC interface */\r
- };\r
-\r
- /* Function Prototypes: */\r
- uint8_t ProcessConfigurationDescriptor(void); \r
- \r
- uint8_t DComp_NextCDCControlInterface(void* CurrentDescriptor);\r
- uint8_t DComp_NextCDCDataInterface(void* CurrentDescriptor);\r
- uint8_t DComp_NextInterfaceCDCDataEndpoint(void* CurrentDescriptor);\r
- \r
-#endif\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Configuration Descriptor processing routines, to determine the correct pipe configurations\r
- * needed to communication with an attached USB device. Descriptors are special computer-readable structures\r
- * which the host requests upon device enumeration, to determine the device's capabilities and functions.\r
- */\r
-\r
-#include "ConfigDescriptor.h"\r
-\r
-/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This\r
- * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate\r
- * with compatible devices.\r
- *\r
- * This routine searches for a HID interface descriptor containing at least one Interrupt type IN endpoint.\r
- *\r
- * \return An error code from the GenericHIDHost_GetConfigDescriptorDataCodes_t enum.\r
- */\r
-uint8_t ProcessConfigurationDescriptor(void)\r
-{\r
- uint8_t* ConfigDescriptorData;\r
- uint16_t ConfigDescriptorSize;\r
- \r
- uint8_t FoundEndpoints = 0;\r
- \r
- /* Get Configuration Descriptor size from the device */\r
- if (USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, NULL) != HOST_SENDCONTROL_Successful)\r
- return ControlError;\r
- \r
- /* Ensure that the Configuration Descriptor isn't too large */\r
- if (ConfigDescriptorSize > MAX_CONFIG_DESCRIPTOR_SIZE)\r
- return DescriptorTooLarge;\r
- \r
- /* Allocate enough memory for the entire config descriptor */\r
- ConfigDescriptorData = alloca(ConfigDescriptorSize);\r
-\r
- /* Retrieve the entire configuration descriptor into the allocated buffer */\r
- USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, ConfigDescriptorData);\r
- \r
- /* Validate returned data - ensure first entry is a configuration header descriptor */\r
- if (DESCRIPTOR_TYPE(ConfigDescriptorData) != DTYPE_Configuration)\r
- return InvalidConfigDataReturned;\r
- \r
- /* Get the HID interface from the configuration descriptor */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextHIDInterface) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoHIDInterfaceFound;\r
- }\r
-\r
- while (FoundEndpoints != ((1 << HID_DATA_IN_PIPE) | (1 << HID_DATA_OUT_PIPE)))\r
- {\r
- /* Get the next HID interface's data endpoint descriptor */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextInterfaceHIDDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Not all HID devices have an OUT endpoint - if we've reached the end of the HID descriptor\r
- * but only found the mandatory IN endpoint, it's safe to continue with the device enumeration */\r
- if (FoundEndpoints == (1 << HID_DATA_IN_PIPE))\r
- break;\r
- \r
- /* Descriptor not found, error out */\r
- return NoEndpointFound;\r
- }\r
- \r
- /* Retrieve the endpoint address from the endpoint descriptor */\r
- USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(ConfigDescriptorData, USB_Descriptor_Endpoint_t);\r
-\r
- /* If the endpoint is a IN type endpoint */\r
- if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)\r
- {\r
- /* Configure the HID data IN pipe */\r
- Pipe_ConfigurePipe(HID_DATA_IN_PIPE, EP_TYPE_INTERRUPT, PIPE_TOKEN_IN,\r
- EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);\r
-\r
- Pipe_SetInfiniteINRequests();\r
- \r
- FoundEndpoints |= (1 << HID_DATA_IN_PIPE);\r
- }\r
- else\r
- {\r
- /* Configure the HID data OUT pipe */\r
- Pipe_ConfigurePipe(HID_DATA_OUT_PIPE, EP_TYPE_INTERRUPT, PIPE_TOKEN_OUT,\r
- EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);\r
- \r
- FoundEndpoints |= (1 << HID_DATA_OUT_PIPE); \r
- }\r
- }\r
- \r
- /* Valid data found, return success */\r
- return SuccessfulConfigRead;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next Interface descriptor of the correct HID Class value.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextHIDInterface(void* CurrentDescriptor)\r
-{\r
- /* Determine if the current descriptor is an interface descriptor */\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- /* Check the HID descriptor class and protocol, break out if correct class/protocol interface found */\r
- if (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Class == HID_CLASS)\r
- {\r
- /* Indicate that the descriptor being searched for has been found */\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- }\r
- \r
- /* Current descriptor does not match what this comparator is looking for */\r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next Endpoint descriptor inside the current interface descriptor,\r
- * aborting the search if another interface descriptor is found before the required endpoint.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextInterfaceHIDDataEndpoint(void* CurrentDescriptor)\r
-{\r
- /* Determine the type of the current descriptor */\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)\r
- {\r
- /* Indicate that the descriptor being searched for has been found */\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- else if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- /* Indicate that the search has failed prematurely and should be aborted */\r
- return DESCRIPTOR_SEARCH_Fail;\r
- }\r
-\r
- /* Current descriptor does not match what this comparator is looking for */\r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for ConfigDescriptor.c.\r
- */\r
-\r
-#ifndef _CONFIGDESCRIPTOR_H_\r
-#define _CONFIGDESCRIPTOR_H_\r
-\r
- /* Includes: */\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- \r
- #include "GenericHIDHost.h"\r
- \r
- /* Macros: */\r
- /** Interface Class value for the Human Interface Device class */\r
- #define HID_CLASS 0x03\r
-\r
- /** Maximum size of a device configuration descriptor which can be processed by the host, in bytes */\r
- #define MAX_CONFIG_DESCRIPTOR_SIZE 512\r
- \r
- /* Enums: */\r
- /** Enum for the possible return codes of the ProcessConfigurationDescriptor() function. */\r
- enum GenericHIDHost_GetConfigDescriptorDataCodes_t\r
- {\r
- SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */\r
- ControlError = 1, /**< A control request to the device failed to complete successfully */\r
- DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */\r
- InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */\r
- NoHIDInterfaceFound = 4, /**< A compatible HID interface was not found in the device's Configuration Descriptor */\r
- NoEndpointFound = 5, /**< A compatible HID IN endpoint was not found in the device's HID interface */\r
- }; \r
-\r
- /* Function Prototypes: */\r
- uint8_t ProcessConfigurationDescriptor(void);\r
-\r
- uint8_t DComp_NextHIDInterface(void* CurrentDescriptor);\r
- uint8_t DComp_NextInterfaceHIDDataEndpoint(void* CurrentDescriptor);\r
-\r
-#endif\r
\r
#include <LUFA/Version.h>\r
#include <LUFA/Drivers/Misc/TerminalCodes.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
#include <LUFA/Drivers/Peripheral/SerialStream.h>\r
#include <LUFA/Drivers/Board/LEDs.h>\r
- \r
- #include "ConfigDescriptor.h"\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/HID.h>\r
\r
/* Macros: */\r
/** Pipe number for the HID data IN pipe */\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
- ConfigDescriptor.c \\r
$(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \\r
$(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Configuration Descriptor processing routines, to determine the correct pipe configurations\r
- * needed to communication with an attached USB device. Descriptors are special computer-readable structures\r
- * which the host requests upon device enumeration, to determine the device's capabilities and functions.\r
- */\r
-\r
-#include "ConfigDescriptor.h"\r
-\r
-/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This\r
- * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate\r
- * with compatible devices.\r
- *\r
- * This routine searches for a HID interface descriptor containing at least one Interrupt type IN endpoint.\r
- *\r
- * \return An error code from the KeyboardHost_GetConfigDescriptorDataCodes_t enum.\r
- */\r
-uint8_t ProcessConfigurationDescriptor(void)\r
-{\r
- uint8_t* ConfigDescriptorData;\r
- uint16_t ConfigDescriptorSize;\r
- \r
- /* Get Configuration Descriptor size from the device */\r
- if (USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, NULL) != HOST_SENDCONTROL_Successful)\r
- return ControlError;\r
- \r
- /* Ensure that the Configuration Descriptor isn't too large */\r
- if (ConfigDescriptorSize > MAX_CONFIG_DESCRIPTOR_SIZE)\r
- return DescriptorTooLarge;\r
- \r
- /* Allocate enough memory for the entire config descriptor */\r
- ConfigDescriptorData = alloca(ConfigDescriptorSize);\r
-\r
- /* Retrieve the entire configuration descriptor into the allocated buffer */\r
- USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, ConfigDescriptorData);\r
- \r
- /* Validate returned data - ensure first entry is a configuration header descriptor */\r
- if (DESCRIPTOR_TYPE(ConfigDescriptorData) != DTYPE_Configuration)\r
- return InvalidConfigDataReturned;\r
- \r
- /* Get the keyboard interface from the configuration descriptor */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextKeyboardInterface) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoHIDInterfaceFound;\r
- }\r
-\r
- /* Get the keyboard interface's data endpoint descriptor */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextInterfaceKeyboardDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoEndpointFound;\r
- }\r
- \r
- /* Retrieve the endpoint address from the endpoint descriptor */\r
- USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(ConfigDescriptorData, USB_Descriptor_Endpoint_t);\r
-\r
- /* Configure the keyboard data pipe */\r
- Pipe_ConfigurePipe(KEYBOARD_DATAPIPE, EP_TYPE_INTERRUPT, PIPE_TOKEN_IN,\r
- EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);\r
-\r
- Pipe_SetInfiniteINRequests();\r
- \r
- /* Valid data found, return success */\r
- return SuccessfulConfigRead;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next Interface descriptor of the correct Keyboard HID Class and Protocol values.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor)\r
-{\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- /* Check the HID descriptor class and protocol, break out if correct class/protocol interface found */\r
- if ((DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Class == KEYBOARD_CLASS) &&\r
- (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Protocol == KEYBOARD_PROTOCOL))\r
- {\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- }\r
- \r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next IN Endpoint descriptor inside the current interface descriptor,\r
- * aborting the search if another interface descriptor is found before the required endpoint.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextInterfaceKeyboardDataEndpoint(void* CurrentDescriptor)\r
-{\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)\r
- {\r
- if (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Endpoint_t).EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- else if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- return DESCRIPTOR_SEARCH_Fail;\r
- }\r
-\r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for ConfigDescriptor.c.\r
- */\r
-\r
-#ifndef _CONFIGDESCRIPTOR_H_\r
-#define _CONFIGDESCRIPTOR_H_\r
-\r
- /* Includes: */\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- \r
- #include "KeyboardHost.h"\r
- \r
- /* Macros: */\r
- /** Interface Class value for the Human Interface Device class */\r
- #define KEYBOARD_CLASS 0x03\r
-\r
- /** Interface Protocol value for a Boot Protocol Keyboard compliant device */\r
- #define KEYBOARD_PROTOCOL 0x01\r
- \r
- /** Maximum size of a device configuration descriptor which can be processed by the host, in bytes */\r
- #define MAX_CONFIG_DESCRIPTOR_SIZE 512\r
- \r
- /* Enums: */\r
- /** Enum for the possible return codes of the ProcessConfigurationDescriptor() function. */\r
- enum KeyboardHost_GetConfigDescriptorDataCodes_t\r
- {\r
- SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */\r
- ControlError = 1, /**< A control request to the device failed to complete successfully */\r
- DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */\r
- InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */\r
- NoHIDInterfaceFound = 4, /**< A compatible HID interface was not found in the device's Configuration Descriptor */\r
- NoEndpointFound = 5, /**< A compatible HID IN endpoint was not found in the device's HID interface */\r
- };\r
-\r
- /* Function Prototypes: */\r
- uint8_t ProcessConfigurationDescriptor(void);\r
- \r
- uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor);\r
- uint8_t DComp_NextInterfaceKeyboardDataEndpoint(void* CurrentDescriptor);\r
-\r
-#endif\r
\r
#include <LUFA/Version.h>\r
#include <LUFA/Drivers/Misc/TerminalCodes.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
#include <LUFA/Drivers/Peripheral/SerialStream.h>\r
#include <LUFA/Drivers/Board/LEDs.h>\r
- \r
- #include "ConfigDescriptor.h"\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/HID.h> \r
\r
/* Macros: */\r
/** Pipe number for the keyboard data IN pipe */\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
- ConfigDescriptor.c \\r
$(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \\r
$(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Configuration Descriptor processing routines, to determine the correct pipe configurations\r
- * needed to communication with an attached USB device. Descriptors are special computer-readable structures\r
- * which the host requests upon device enumeration, to determine the device's capabilities and functions.\r
- */\r
-\r
-#include "ConfigDescriptor.h"\r
-\r
-/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This\r
- * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate\r
- * with compatible devices.\r
- *\r
- * This routine searches for a HID interface descriptor containing at least one Interrupt type IN endpoint and HID descriptor.\r
- *\r
- * \return An error code from the KeyboardHostWithParser_GetConfigDescriptorDataCodes_t enum.\r
- */\r
-uint8_t ProcessConfigurationDescriptor(void)\r
-{\r
- uint8_t* ConfigDescriptorData;\r
- uint16_t ConfigDescriptorSize;\r
- \r
- /* Get Configuration Descriptor size from the device */\r
- if (USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, NULL) != HOST_SENDCONTROL_Successful)\r
- return ControlError;\r
- \r
- /* Ensure that the Configuration Descriptor isn't too large */\r
- if (ConfigDescriptorSize > MAX_CONFIG_DESCRIPTOR_SIZE)\r
- return DescriptorTooLarge;\r
- \r
- /* Allocate enough memory for the entire config descriptor */\r
- ConfigDescriptorData = alloca(ConfigDescriptorSize);\r
-\r
- /* Retrieve the entire configuration descriptor into the allocated buffer */\r
- USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, ConfigDescriptorData);\r
- \r
- /* Validate returned data - ensure first entry is a configuration header descriptor */\r
- if (DESCRIPTOR_TYPE(ConfigDescriptorData) != DTYPE_Configuration)\r
- return InvalidConfigDataReturned;\r
- \r
- /* Get the keyboard interface from the configuration descriptor */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextKeyboardInterface) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoHIDInterfaceFound;\r
- }\r
- \r
- /* Get the keyboard interface's HID descriptor */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextHID) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoHIDDescriptorFound;\r
- }\r
-\r
- /* Save the HID report size for later use */\r
- HIDReportSize = DESCRIPTOR_CAST(ConfigDescriptorData, USB_Descriptor_HID_t).HIDReportLength;\r
-\r
- /* Get the keyboard interface's data endpoint descriptor */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextInterfaceKeyboardDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoEndpointFound;\r
- }\r
- \r
- /* Retrieve the endpoint address from the endpoint descriptor */\r
- USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(ConfigDescriptorData, USB_Descriptor_Endpoint_t);\r
-\r
- /* Configure the keyboard data pipe */\r
- Pipe_ConfigurePipe(KEYBOARD_DATAPIPE, EP_TYPE_INTERRUPT, PIPE_TOKEN_IN,\r
- EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);\r
-\r
- Pipe_SetInfiniteINRequests();\r
- \r
- /* Valid data found, return success */\r
- return SuccessfulConfigRead;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next Interface descriptor of the correct Keyboard HID Class and Protocol values.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor)\r
-{\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- /* Check the HID descriptor class and protocol, break out if correct class/protocol interface found */\r
- if ((DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Class == KEYBOARD_CLASS) &&\r
- (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Protocol == KEYBOARD_PROTOCOL))\r
- {\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- }\r
- \r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next IN Endpoint descriptor inside the current interface descriptor,\r
- * aborting the search if another interface descriptor is found before the required endpoint.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextInterfaceKeyboardDataEndpoint(void* CurrentDescriptor)\r
-{\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)\r
- {\r
- if (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Endpoint_t).EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- else if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- return DESCRIPTOR_SEARCH_Fail;\r
- }\r
-\r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next HID descriptor within the current HID interface descriptor.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextHID(void* CurrentDescriptor)\r
-{\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_HID)\r
- return DESCRIPTOR_SEARCH_Found;\r
- else\r
- return DESCRIPTOR_SEARCH_NotFound; \r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for ConfigDescriptor.c.\r
- */\r
-\r
-#ifndef _CONFIGDESCRIPTOR_H_\r
-#define _CONFIGDESCRIPTOR_H_\r
-\r
- /* Includes: */\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- \r
- #include "HIDReport.h"\r
- \r
- /* Macros: */\r
- /** Interface Class value for the Human Interface Device class */\r
- #define KEYBOARD_CLASS 0x03\r
-\r
- /** Interface Protocol value for a Boot Protocol Keyboard compliant device */\r
- #define KEYBOARD_PROTOCOL 0x01\r
- \r
- /** Maximum size of a device configuration descriptor which can be processed by the host, in bytes */\r
- #define MAX_CONFIG_DESCRIPTOR_SIZE 512\r
-\r
- /** Descriptor header type constant for a HID descriptor */\r
- #define DTYPE_HID 0x21\r
-\r
- /** Descriptor header type constant for a HID report descriptor */\r
- #define DTYPE_Report 0x22\r
- \r
- /* Enums: */\r
- enum KeyboardHostWithParser_GetConfigDescriptorDataCodes_t\r
- {\r
- SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */\r
- ControlError = 1, /**< A control request to the device failed to complete successfully */\r
- DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */\r
- InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */\r
- NoHIDInterfaceFound = 4, /**< A compatible HID interface was not found in the device's Configuration Descriptor */\r
- NoHIDDescriptorFound = 5, /**< A compatible HID descriptor was not found in the device's HID interface */\r
- NoEndpointFound = 5, /**< A compatible HID IN endpoint was not found in the device's HID interface */\r
- };\r
-\r
- /* Function Prototypes: */\r
- uint8_t ProcessConfigurationDescriptor(void);\r
-\r
- uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor);\r
- uint8_t DComp_NextInterfaceKeyboardDataEndpoint(void* CurrentDescriptor);\r
- uint8_t DComp_NextHID(void* CurrentDescriptor);\r
- \r
-#endif\r
\r
/* Includes: */\r
#include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Host/HIDParser.h>\r
+ #include <LUFA/Drivers/USB/Class/HID.h>\r
\r
#include "KeyboardHostWithParser.h"\r
\r
\r
#include <LUFA/Version.h>\r
#include <LUFA/Drivers/Misc/TerminalCodes.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
#include <LUFA/Drivers/Peripheral/SerialStream.h>\r
#include <LUFA/Drivers/Board/LEDs.h>
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/HID.h> \r
\r
- #include "ConfigDescriptor.h"\r
#include "HIDReport.h"\r
\r
/* Macros: */\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
- ConfigDescriptor.c \\r
HIDReport.c \\r
$(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \\r
$(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c \\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Configuration Descriptor processing routines, to determine the correct pipe configurations\r
- * needed to communication with an attached USB device. Descriptors are special computer-readable structures\r
- * which the host requests upon device enumeration, to determine the device's capabilities and functions.\r
- */\r
- \r
-#include "ConfigDescriptor.h"\r
-\r
-/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This\r
- * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate\r
- * with compatible devices.\r
- *\r
- * This routine searches for a MSD interface descriptor containing bulk IN and OUT data endpoints.\r
- *\r
- * \return An error code from the MassStorageHost_GetConfigDescriptorDataCodes_t enum.\r
- */\r
-uint8_t ProcessConfigurationDescriptor(void)\r
-{\r
- uint8_t* ConfigDescriptorData;\r
- uint16_t ConfigDescriptorSize;\r
- uint8_t FoundEndpoints = 0;\r
- \r
- /* Get Configuration Descriptor size from the device */\r
- if (USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, NULL) != HOST_SENDCONTROL_Successful)\r
- return ControlError;\r
- \r
- /* Ensure that the Configuration Descriptor isn't too large */\r
- if (ConfigDescriptorSize > MAX_CONFIG_DESCRIPTOR_SIZE)\r
- return DescriptorTooLarge;\r
- \r
- /* Allocate enough memory for the entire config descriptor */\r
- ConfigDescriptorData = alloca(ConfigDescriptorSize);\r
-\r
- /* Retrieve the entire configuration descriptor into the allocated buffer */\r
- USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, ConfigDescriptorData);\r
- \r
- /* Validate returned data - ensure first entry is a configuration header descriptor */\r
- if (DESCRIPTOR_TYPE(ConfigDescriptorData) != DTYPE_Configuration)\r
- return InvalidConfigDataReturned;\r
- \r
- /* Get the mass storage interface from the configuration descriptor */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextMassStorageInterface) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoInterfaceFound;\r
- }\r
-\r
- /* Get the IN and OUT data endpoints for the mass storage interface */\r
- while (FoundEndpoints != ((1 << MASS_STORE_DATA_IN_PIPE) | (1 << MASS_STORE_DATA_OUT_PIPE)))\r
- {\r
- /* Fetch the next bulk endpoint from the current mass storage interface */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextInterfaceBulkDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoEndpointFound;\r
- }\r
- \r
- USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(ConfigDescriptorData, USB_Descriptor_Endpoint_t);\r
-\r
- /* Check if the endpoint is a bulk IN or bulk OUT endpoint, set appropriate globals */\r
- if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)\r
- {\r
- /* Configure the data IN pipe */\r
- Pipe_ConfigurePipe(MASS_STORE_DATA_IN_PIPE, EP_TYPE_BULK, PIPE_TOKEN_IN,\r
- EndpointData->EndpointAddress, EndpointData->EndpointSize,\r
- PIPE_BANK_DOUBLE);\r
-\r
- Pipe_SetInfiniteINRequests();\r
-\r
- /* Set the flag indicating that the data IN pipe has been found */\r
- FoundEndpoints |= (1 << MASS_STORE_DATA_IN_PIPE);\r
- }\r
- else\r
- {\r
- /* Configure the data OUT pipe */\r
- Pipe_ConfigurePipe(MASS_STORE_DATA_OUT_PIPE, EP_TYPE_BULK, PIPE_TOKEN_OUT,\r
- EndpointData->EndpointAddress, EndpointData->EndpointSize,\r
- PIPE_BANK_DOUBLE);\r
-\r
- /* Set the flag indicating that the data OUT pipe has been found */\r
- FoundEndpoints |= (1 << MASS_STORE_DATA_OUT_PIPE);\r
- } \r
- }\r
-\r
- /* Valid data found, return success */\r
- return SuccessfulConfigRead;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next Interface descriptor of the correct Mass Storage Class, Subclass and Protocol values.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextMassStorageInterface(void* CurrentDescriptor)\r
-{\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- /* Check the descriptor class and protocol, break out if correct class/protocol interface found */\r
- if ((DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Class == MASS_STORE_CLASS) &&\r
- (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).SubClass == MASS_STORE_SUBCLASS) &&\r
- (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Protocol == MASS_STORE_PROTOCOL))\r
- {\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- }\r
- \r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next Bulk Endpoint descriptor of the correct MSD interface, aborting the search if\r
- * another interface descriptor is found before the next endpoint.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextInterfaceBulkDataEndpoint(void* CurrentDescriptor)\r
-{\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)\r
- {\r
- uint8_t EndpointType = (DESCRIPTOR_CAST(CurrentDescriptor,\r
- USB_Descriptor_Endpoint_t).Attributes & EP_TYPE_MASK);\r
-\r
- /* Check the endpoint type, break out if correct BULK type endpoint found */\r
- if (EndpointType == EP_TYPE_BULK)\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- else if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- return DESCRIPTOR_SEARCH_Fail;\r
- }\r
-\r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for ConfigDescriptor.c.\r
- */\r
-\r
-#ifndef _CONFIGDESCRIPTOR_H_\r
-#define _CONFIGDESCRIPTOR_H_\r
-\r
- /* Includes: */\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- \r
- #include "MassStorageHost.h"\r
- \r
- /* Macros: */\r
- /** Interface Class value for the Mass Storage Device class */\r
- #define MASS_STORE_CLASS 0x08\r
-\r
- /** Interface Class value for the Mass Storage Device subclass */\r
- #define MASS_STORE_SUBCLASS 0x06\r
-\r
- /** Interface Protocol value for the Bulk Only transport protocol */\r
- #define MASS_STORE_PROTOCOL 0x50\r
- \r
- /** Maximum size of a device configuration descriptor which can be processed by the host, in bytes */\r
- #define MAX_CONFIG_DESCRIPTOR_SIZE 512\r
-\r
- /* Enums: */\r
- /** Enum for the possible return codes of the ProcessConfigurationDescriptor() function. */\r
- enum MassStorageHost_GetConfigDescriptorDataCodes_t\r
- {\r
- SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */\r
- ControlError = 1, /**< A control request to the device failed to complete successfully */\r
- DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */\r
- InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */\r
- NoInterfaceFound = 4, /**< A compatible MSD interface was not found in the device's Configuration Descriptor */\r
- NoEndpointFound = 5, /**< The correct MSD endpoint descriptors were not found in the device's MSD interface */\r
- };\r
- \r
- /* Function Prototypes: */\r
- uint8_t ProcessConfigurationDescriptor(void); \r
-\r
- uint8_t DComp_NextMassStorageInterface(void* CurrentDescriptor);\r
- uint8_t DComp_NextInterfaceBulkDataEndpoint(void* CurrentDescriptor);\r
- \r
-#endif\r
#include <stdio.h>\r
#include <ctype.h>\r
\r
- #include "ConfigDescriptor.h"\r
-\r
#include "Lib/MassStoreCommands.h"\r
\r
- #include <LUFA/Version.h> // Library Version Information\r
- #include <LUFA/Drivers/Misc/TerminalCodes.h> // ANSI Terminal Escape Codes\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- #include <LUFA/Drivers/Peripheral/SerialStream.h> // Serial stream driver\r
- #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
- #include <LUFA/Drivers/Board/Buttons.h> // Board Buttons driver\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/Misc/TerminalCodes.h>\r
+ #include <LUFA/Drivers/Peripheral/SerialStream.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Buttons.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/MassStorage.h> \r
\r
/* Macros: */\r
/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
- ConfigDescriptor.c \\r
Lib/MassStoreCommands.c \\r
$(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \\r
$(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c \\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Configuration Descriptor processing routines, to determine the correct pipe configurations\r
- * needed to communication with an attached USB device. Descriptors are special computer-readable structures\r
- * which the host requests upon device enumeration, to determine the device's capabilities and functions.\r
- */\r
-\r
-#include "ConfigDescriptor.h"\r
-\r
-/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This\r
- * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate\r
- * with compatible devices.\r
- *\r
- * This routine searches for a HID interface descriptor containing at least one Interrupt type IN endpoint.\r
- *\r
- * \return An error code from the MouseHost_GetConfigDescriptorDataCodes_t enum.\r
- */\r
-uint8_t ProcessConfigurationDescriptor(void)\r
-{\r
- uint8_t* ConfigDescriptorData;\r
- uint16_t ConfigDescriptorSize;\r
- \r
- /* Get Configuration Descriptor size from the device */\r
- if (USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, NULL) != HOST_SENDCONTROL_Successful)\r
- return ControlError;\r
- \r
- /* Ensure that the Configuration Descriptor isn't too large */\r
- if (ConfigDescriptorSize > MAX_CONFIG_DESCRIPTOR_SIZE)\r
- return DescriptorTooLarge;\r
- \r
- /* Allocate enough memory for the entire config descriptor */\r
- ConfigDescriptorData = alloca(ConfigDescriptorSize);\r
-\r
- /* Retrieve the entire configuration descriptor into the allocated buffer */\r
- USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, ConfigDescriptorData);\r
- \r
- /* Validate returned data - ensure first entry is a configuration header descriptor */\r
- if (DESCRIPTOR_TYPE(ConfigDescriptorData) != DTYPE_Configuration)\r
- return InvalidConfigDataReturned;\r
- \r
- /* Get the mouse interface from the configuration descriptor */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextMouseInterface) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoHIDInterfaceFound;\r
- }\r
-\r
- /* Get the mouse interface's data endpoint descriptor */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextInterfaceMouseDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoEndpointFound;\r
- }\r
- \r
- /* Retrieve the endpoint address from the endpoint descriptor */\r
- USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(ConfigDescriptorData, USB_Descriptor_Endpoint_t);\r
-\r
- /* Configure the mouse data pipe */\r
- Pipe_ConfigurePipe(MOUSE_DATAPIPE, EP_TYPE_INTERRUPT, PIPE_TOKEN_IN,\r
- EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);\r
-\r
- Pipe_SetInfiniteINRequests();\r
- \r
- /* Valid data found, return success */\r
- return SuccessfulConfigRead;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next Interface descriptor of the correct Mouse HID Class and Protocol values.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextMouseInterface(void* CurrentDescriptor)\r
-{\r
- /* Determine if the current descriptor is an interface descriptor */\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- /* Check the HID descriptor class and protocol, break out if correct class/protocol interface found */\r
- if ((DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Class == MOUSE_CLASS) &&\r
- (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Protocol == MOUSE_PROTOCOL))\r
- {\r
- /* Indicate that the descriptor being searched for has been found */\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- }\r
- \r
- /* Current descriptor does not match what this comparator is looking for */\r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next IN Endpoint descriptor inside the current interface descriptor,\r
- * aborting the search if another interface descriptor is found before the required endpoint.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextInterfaceMouseDataEndpoint(void* CurrentDescriptor)\r
-{\r
- /* Determine the type of the current descriptor */\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)\r
- {\r
- /* Check if the current Endpoint descriptor is of type IN */\r
- if (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Endpoint_t).EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)\r
- {\r
- /* Indicate that the descriptor being searched for has been found */\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- }\r
- else if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- /* Indicate that the search has failed prematurely and should be aborted */\r
- return DESCRIPTOR_SEARCH_Fail;\r
- }\r
-\r
- /* Current descriptor does not match what this comparator is looking for */\r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for ConfigDescriptor.c.\r
- */\r
-\r
-#ifndef _CONFIGDESCRIPTOR_H_\r
-#define _CONFIGDESCRIPTOR_H_\r
-\r
- /* Includes: */\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- \r
- #include "MouseHost.h"\r
- \r
- /* Macros: */\r
- /** Interface Class value for the Human Interface Device class */\r
- #define MOUSE_CLASS 0x03\r
-\r
- /** Interface Protocol value for a Boot Protocol Mouse compliant device */\r
- #define MOUSE_PROTOCOL 0x02\r
-\r
- /** Maximum size of a device configuration descriptor which can be processed by the host, in bytes */\r
- #define MAX_CONFIG_DESCRIPTOR_SIZE 512\r
- \r
- /* Enums: */\r
- /** Enum for the possible return codes of the ProcessConfigurationDescriptor() function. */\r
- enum MouseHost_GetConfigDescriptorDataCodes_t\r
- {\r
- SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */\r
- ControlError = 1, /**< A control request to the device failed to complete successfully */\r
- DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */\r
- InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */\r
- NoHIDInterfaceFound = 4, /**< A compatible HID interface was not found in the device's Configuration Descriptor */\r
- NoEndpointFound = 5, /**< A compatible HID IN endpoint was not found in the device's HID interface */\r
- };\r
-\r
- /* Function Prototypes: */\r
- uint8_t ProcessConfigurationDescriptor(void);\r
-\r
- uint8_t DComp_NextMouseInterface(void* CurrentDescriptor);\r
- uint8_t DComp_NextInterfaceMouseDataEndpoint(void* CurrentDescriptor);\r
-\r
-#endif\r
\r
#include <LUFA/Version.h>\r
#include <LUFA/Drivers/Misc/TerminalCodes.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
#include <LUFA/Drivers/Peripheral/SerialStream.h>\r
#include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/HID.h> \r
\r
#include "ConfigDescriptor.h"\r
\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
- ConfigDescriptor.c \\r
$(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \\r
$(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Configuration Descriptor processing routines, to determine the correct pipe configurations\r
- * needed to communication with an attached USB device. Descriptors are special computer-readable structures\r
- * which the host requests upon device enumeration, to determine the device's capabilities and functions.\r
- */\r
-\r
-#include "ConfigDescriptor.h"\r
-\r
-/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This\r
- * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate\r
- * with compatible devices.\r
- *\r
- * This routine searches for a HID interface descriptor containing at least one Interrupt type IN endpoint and HID descriptor.\r
- *\r
- * \return An error code from the MouseHostWithParser_GetConfigDescriptorDataCodes_t enum.\r
- */\r
-uint8_t ProcessConfigurationDescriptor(void)\r
-{\r
- uint8_t* ConfigDescriptorData;\r
- uint16_t ConfigDescriptorSize;\r
- \r
- /* Get Configuration Descriptor size from the device */\r
- if (USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, NULL) != HOST_SENDCONTROL_Successful)\r
- return ControlError;\r
- \r
- /* Ensure that the Configuration Descriptor isn't too large */\r
- if (ConfigDescriptorSize > MAX_CONFIG_DESCRIPTOR_SIZE)\r
- return DescriptorTooLarge;\r
- \r
- /* Allocate enough memory for the entire config descriptor */\r
- ConfigDescriptorData = alloca(ConfigDescriptorSize);\r
-\r
- /* Retrieve the entire configuration descriptor into the allocated buffer */\r
- USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, ConfigDescriptorData);\r
- \r
- /* Validate returned data - ensure first entry is a configuration header descriptor */\r
- if (DESCRIPTOR_TYPE(ConfigDescriptorData) != DTYPE_Configuration)\r
- return InvalidConfigDataReturned;\r
- \r
- /* Get the mouse interface from the configuration descriptor */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextMouseInterface) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoHIDInterfaceFound;\r
- }\r
- \r
- /* Get the mouse interface's HID descriptor */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextHID) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoHIDDescriptorFound;\r
- }\r
-\r
- /* Save the HID report size for later use */\r
- HIDReportSize = DESCRIPTOR_CAST(ConfigDescriptorData, USB_Descriptor_HID_t).HIDReportLength;\r
-\r
- /* Get the mouse interface's data endpoint descriptor */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextInterfaceMouseDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoEndpointFound;\r
- }\r
- \r
- /* Retrieve the endpoint address from the endpoint descriptor */\r
- USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(ConfigDescriptorData, USB_Descriptor_Endpoint_t);\r
-\r
- /* Configure the mouse data pipe */\r
- Pipe_ConfigurePipe(MOUSE_DATAPIPE, EP_TYPE_INTERRUPT, PIPE_TOKEN_IN,\r
- EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);\r
-\r
- Pipe_SetInfiniteINRequests();\r
- \r
- /* Valid data found, return success */\r
- return SuccessfulConfigRead;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next Interface descriptor of the correct Mouse HID Class and Protocol values.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextMouseInterface(void* CurrentDescriptor)\r
-{\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- /* Check the HID descriptor class and protocol, break out if correct class/protocol interface found */\r
- if ((DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Class == MOUSE_CLASS) &&\r
- (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Protocol == MOUSE_PROTOCOL))\r
- {\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- }\r
- \r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next IN Endpoint descriptor inside the current interface descriptor,\r
- * aborting the search if another interface descriptor is found before the required endpoint.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextInterfaceMouseDataEndpoint(void* CurrentDescriptor)\r
-{\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)\r
- {\r
- if (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Endpoint_t).EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- else if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- return DESCRIPTOR_SEARCH_Fail;\r
- }\r
-\r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next HID descriptor within the current HID interface descriptor.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextHID(void* CurrentDescriptor)\r
-{\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_HID)\r
- return DESCRIPTOR_SEARCH_Found;\r
- else\r
- return DESCRIPTOR_SEARCH_NotFound; \r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for ConfigDescriptor.c.\r
- */\r
-\r
-#ifndef _CONFIGDESCRIPTOR_H_\r
-#define _CONFIGDESCRIPTOR_H_\r
-\r
- /* Includes: */\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- \r
- #include "HIDReport.h"\r
- \r
- /* Macros: */\r
- /** Interface Class value for the Human Interface Device class */\r
- #define MOUSE_CLASS 0x03\r
-\r
- /** Interface Protocol value for a Boot Protocol Mouse compliant device */\r
- #define MOUSE_PROTOCOL 0x02\r
-\r
- /** Maximum size of a device configuration descriptor which can be processed by the host, in bytes */\r
- #define MAX_CONFIG_DESCRIPTOR_SIZE 512\r
-\r
- /** Descriptor header type constant for a HID descriptor */\r
- #define DTYPE_HID 0x21\r
-\r
- /** Descriptor header type constant for a HID report descriptor */\r
- #define DTYPE_Report 0x22\r
- \r
- /* Enums: */\r
- /** Enum for the possible return codes of the ProcessConfigurationDescriptor() function. */\r
- enum CDCHost_GetConfigDescriptorDataCodes_t\r
- {\r
- SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */\r
- ControlError = 1, /**< A control request to the device failed to complete successfully */\r
- DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */\r
- InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */\r
- NoHIDInterfaceFound = 4, /**< A compatible HID interface was not found in the device's Configuration Descriptor */\r
- NoHIDDescriptorFound = 5, /**< A compatible HID descriptor was not found in the device's HID interface */\r
- NoEndpointFound = 5, /**< A compatible HID IN endpoint was not found in the device's HID interface */\r
- };\r
-\r
- /* Function Prototypes: */\r
- uint8_t ProcessConfigurationDescriptor(void);\r
-\r
- uint8_t DComp_NextMouseInterface(void* CurrentDescriptor);\r
- uint8_t DComp_NextInterfaceMouseDataEndpoint(void* CurrentDescriptor);\r
- uint8_t DComp_NextHID(void* CurrentDescriptor);\r
-\r
-#endif\r
\r
/* Includes: */\r
#include <LUFA/Drivers/USB/USB.h>\r
- #include <LUFA/Drivers/USB/Class/Host/HIDParser.h>\r
+ #include <LUFA/Drivers/USB/Class/Host/HID.h>\r
\r
#include "MouseHostWithParser.h"\r
\r
\r
#include <LUFA/Version.h>\r
#include <LUFA/Drivers/Misc/TerminalCodes.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
#include <LUFA/Drivers/Peripheral/SerialStream.h>\r
#include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/HID.h> \r
\r
- #include "ConfigDescriptor.h"\r
#include "HIDReport.h"\r
\r
/* Macros: */\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
- ConfigDescriptor.c \\r
HIDReport.c \\r
$(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \\r
$(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c \\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * USB Device Configuration Descriptor processing routines, to determine the correct pipe configurations\r
- * needed to communication with an attached USB device. Descriptors are special computer-readable structures\r
- * which the host requests upon device enumeration, to determine the device's capabilities and functions.\r
- */\r
-\r
-#include "ConfigDescriptor.h"\r
-\r
-/** Reads and processes an attached device's descriptors, to determine compatibility and pipe configurations. This\r
- * routine will read in the entire configuration descriptor, and configure the hosts pipes to correctly communicate\r
- * with compatible devices.\r
- *\r
- * This routine searches for a SI interface descriptor containing bulk IN and OUT data endpoints.\r
- *\r
- * \return An error code from the StillImageHost_GetConfigDescriptorDataCodes_t enum.\r
- */\r
-uint8_t ProcessConfigurationDescriptor(void)\r
-{\r
- uint8_t* ConfigDescriptorData;\r
- uint16_t ConfigDescriptorSize;\r
- uint8_t FoundEndpoints = 0;\r
- \r
- /* Get Configuration Descriptor size from the device */\r
- if (USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, NULL) != HOST_SENDCONTROL_Successful)\r
- return ControlError;\r
- \r
- /* Ensure that the Configuration Descriptor isn't too large */\r
- if (ConfigDescriptorSize > MAX_CONFIG_DESCRIPTOR_SIZE)\r
- return DescriptorTooLarge;\r
- \r
- /* Allocate enough memory for the entire config descriptor */\r
- ConfigDescriptorData = alloca(ConfigDescriptorSize);\r
-\r
- /* Retrieve the entire configuration descriptor into the allocated buffer */\r
- USB_GetDeviceConfigDescriptor(&ConfigDescriptorSize, ConfigDescriptorData);\r
- \r
- /* Validate returned data - ensure first entry is a configuration header descriptor */\r
- if (DESCRIPTOR_TYPE(ConfigDescriptorData) != DTYPE_Configuration)\r
- return InvalidConfigDataReturned;\r
- \r
- /* Get the Still Image interface from the configuration descriptor */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextStillImageInterface) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoInterfaceFound;\r
- }\r
-\r
- /* Get the IN and OUT data and event endpoints for the Still Image interface */\r
- while (FoundEndpoints != ((1 << SIMAGE_EVENTS_PIPE) | (1 << SIMAGE_DATA_IN_PIPE) | (1 << SIMAGE_DATA_OUT_PIPE)))\r
- {\r
- /* Fetch the next endpoint from the current Still Image interface */\r
- if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,\r
- DComp_NextSImageInterfaceDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)\r
- {\r
- /* Descriptor not found, error out */\r
- return NoEndpointFound;\r
- }\r
- \r
- USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(ConfigDescriptorData, USB_Descriptor_Endpoint_t);\r
-\r
- /* Check if the found endpoint is a interrupt or bulk type descriptor */\r
- if ((EndpointData->Attributes & EP_TYPE_MASK) == EP_TYPE_INTERRUPT)\r
- {\r
- /* If the endpoint is a IN type interrupt endpoint */\r
- if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)\r
- {\r
- /* Configure the events pipe */\r
- Pipe_ConfigurePipe(SIMAGE_EVENTS_PIPE, EP_TYPE_INTERRUPT, PIPE_TOKEN_IN,\r
- EndpointData->EndpointAddress, EndpointData->EndpointSize,\r
- PIPE_BANK_DOUBLE); \r
-\r
- Pipe_SetInfiniteINRequests();\r
- Pipe_SetInterruptPeriod(EndpointData->PollingIntervalMS);\r
- \r
- /* Set the flag indicating that the events pipe has been found */\r
- FoundEndpoints |= (1 << SIMAGE_EVENTS_PIPE);\r
- }\r
- }\r
- else\r
- {\r
- /* Check if the endpoint is a bulk IN or bulk OUT endpoint */\r
- if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)\r
- {\r
- /* Configure the data IN pipe */\r
- Pipe_ConfigurePipe(SIMAGE_DATA_IN_PIPE, EP_TYPE_BULK, PIPE_TOKEN_IN,\r
- EndpointData->EndpointAddress, EndpointData->EndpointSize,\r
- PIPE_BANK_DOUBLE);\r
-\r
- Pipe_SetInfiniteINRequests();\r
-\r
- /* Set the flag indicating that the data IN pipe has been found */\r
- FoundEndpoints |= (1 << SIMAGE_DATA_IN_PIPE);\r
- }\r
- else\r
- {\r
- /* Configure the data OUT pipe */\r
- Pipe_ConfigurePipe(SIMAGE_DATA_OUT_PIPE, EP_TYPE_BULK, PIPE_TOKEN_OUT,\r
- EndpointData->EndpointAddress, EndpointData->EndpointSize,\r
- PIPE_BANK_DOUBLE);\r
-\r
- /* Set the flag indicating that the data OUT pipe has been found */\r
- FoundEndpoints |= (1 << SIMAGE_DATA_OUT_PIPE);\r
- }\r
- }\r
- }\r
-\r
- /* Valid data found, return success */\r
- return SuccessfulConfigRead;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next Interface descriptor of the correct Still Image Class, Subclass and Protocol values.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextStillImageInterface(void* CurrentDescriptor)\r
-{\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- /* Check the descriptor class and protocol, break out if correct class/protocol interface found */\r
- if ((DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Class == SIMAGE_CLASS) &&\r
- (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).SubClass == SIMAGE_SUBCLASS) &&\r
- (DESCRIPTOR_CAST(CurrentDescriptor, USB_Descriptor_Interface_t).Protocol == SIMAGE_PROTOCOL))\r
- {\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- }\r
- \r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
-\r
-/** Descriptor comparator function. This comparator function is can be called while processing an attached USB device's\r
- * configuration descriptor, to search for a specific sub descriptor. It can also be used to abort the configuration\r
- * descriptor processing if an incompatible descriptor configuration is found.\r
- *\r
- * This comparator searches for the next Interrupt or Bulk Endpoint descriptor of the current SI interface, aborting the\r
- * search if another interface descriptor is found before the next endpoint.\r
- *\r
- * \return A value from the DSEARCH_Return_ErrorCodes_t enum\r
- */\r
-uint8_t DComp_NextSImageInterfaceDataEndpoint(void* CurrentDescriptor)\r
-{\r
- if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)\r
- {\r
- uint8_t EndpointType = (DESCRIPTOR_CAST(CurrentDescriptor,\r
- USB_Descriptor_Endpoint_t).Attributes & EP_TYPE_MASK);\r
- \r
- if ((EndpointType == EP_TYPE_BULK) || (EndpointType == EP_TYPE_INTERRUPT))\r
- return DESCRIPTOR_SEARCH_Found;\r
- }\r
- else if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Interface)\r
- {\r
- return DESCRIPTOR_SEARCH_Fail;\r
- }\r
-\r
- return DESCRIPTOR_SEARCH_NotFound;\r
-}\r
+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * Header file for ConfigDescriptor.c.\r
- */\r
-\r
-#ifndef _CONFIGDESCRIPTOR_H_\r
-#define _CONFIGDESCRIPTOR_H_\r
-\r
- /* Includes: */\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- \r
- #include "StillImageHost.h"\r
- \r
- /* Macros: */\r
- /** Interface Class value for the Still Image Device class */\r
- #define SIMAGE_CLASS 0x06\r
-\r
- /** Interface Class value for the Still Image Device subclass */\r
- #define SIMAGE_SUBCLASS 0x01\r
-\r
- /** Interface Class value for the Still Image Device protocol */\r
- #define SIMAGE_PROTOCOL 0x01\r
-\r
- /** Maximum size of a device configuration descriptor which can be processed by the host, in bytes */\r
- #define MAX_CONFIG_DESCRIPTOR_SIZE 512\r
- \r
- /* Enums: */\r
- /** Enum for the possible return codes of the ProcessConfigurationDescriptor() function. */\r
- enum MassStorageHost_GetConfigDescriptorDataCodes_t\r
- {\r
- SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */\r
- ControlError = 1, /**< A control request to the device failed to complete successfully */\r
- DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */\r
- InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */\r
- NoInterfaceFound = 4, /**< A compatible SI interface was not found in the device's Configuration Descriptor */\r
- NoEndpointFound = 5, /**< The correct SI endpoint descriptors were not found in the device's SI interface */\r
- };\r
- \r
- /* Function Prototypes: */\r
- uint8_t ProcessConfigurationDescriptor(void);\r
-\r
- uint8_t DComp_NextStillImageInterface(void* CurrentDescriptor);\r
- uint8_t DComp_NextSImageInterfaceDataEndpoint(void* CurrentDescriptor);\r
-\r
-#endif\r
#include "Lib/StillImageCommands.h"\r
\r
#include <LUFA/Drivers/Misc/TerminalCodes.h>\r
- #include <LUFA/Drivers/USB/USB.h>\r
#include <LUFA/Drivers/Peripheral/SerialStream.h>\r
#include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/USB/Class/StillImage.h> \r
\r
/* Macros: */\r
/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
- ConfigDescriptor.c \\r
Lib/StillImageCommands.c \\r
$(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c \\r
$(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c \\r
-<Project name="LUFA"><Folder name="Demos"><Folder name="Device"><Folder name="ClassDriver"><Folder name="AudioInput"><File path="Demos\Device\ClassDriver\AudioInput\AudioInput.c"></File><File path="Demos\Device\ClassDriver\AudioInput\AudioInput.h"></File><File path="Demos\Device\ClassDriver\AudioInput\AudioInput.txt"></File><File path="Demos\Device\ClassDriver\AudioInput\Descriptors.c"></File><File path="Demos\Device\ClassDriver\AudioInput\Descriptors.h"></File><File path="Demos\Device\ClassDriver\AudioInput\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\AudioInput\makefile"></File></Folder><Folder name="AudioOutput"><File path="Demos\Device\ClassDriver\AudioOutput\AudioOutput.c"></File><File path="Demos\Device\ClassDriver\AudioOutput\AudioOutput.h"></File><File path="Demos\Device\ClassDriver\AudioOutput\AudioOutput.txt"></File><File path="Demos\Device\ClassDriver\AudioOutput\Descriptors.c"></File><File path="Demos\Device\ClassDriver\AudioOutput\Descriptors.h"></File><File path="Demos\Device\ClassDriver\AudioOutput\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\AudioOutput\makefile"></File></Folder><Folder name="CDC"><File path="Demos\Device\ClassDriver\CDC\CDC.c"></File><File path="Demos\Device\ClassDriver\CDC\CDC.h"></File><File path="Demos\Device\ClassDriver\CDC\CDC.txt"></File><File path="Demos\Device\ClassDriver\CDC\Descriptors.c"></File><File path="Demos\Device\ClassDriver\CDC\Descriptors.h"></File><File path="Demos\Device\ClassDriver\CDC\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\CDC\LUFA CDC.inf"></File><File path="Demos\Device\ClassDriver\CDC\makefile"></File></Folder><Folder name="DualCDC"><File path="Demos\Device\ClassDriver\DualCDC\Descriptors.c"></File><File path="Demos\Device\ClassDriver\DualCDC\Descriptors.h"></File><File path="Demos\Device\ClassDriver\DualCDC\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\DualCDC\DualCDC.c"></File><File path="Demos\Device\ClassDriver\DualCDC\DualCDC.h"></File><File path="Demos\Device\ClassDriver\DualCDC\DualCDC.txt"></File><File path="Demos\Device\ClassDriver\DualCDC\LUFA DualCDC.inf"></File><File path="Demos\Device\ClassDriver\DualCDC\makefile"></File></Folder><Folder name="GenericHID"><File path="Demos\Device\ClassDriver\GenericHID\Descriptors.c"></File><File path="Demos\Device\ClassDriver\GenericHID\Descriptors.h"></File><File path="Demos\Device\ClassDriver\GenericHID\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\GenericHID\GenericHID.c"></File><File path="Demos\Device\ClassDriver\GenericHID\GenericHID.h"></File><File path="Demos\Device\ClassDriver\GenericHID\GenericHID.txt"></File><File path="Demos\Device\ClassDriver\GenericHID\makefile"></File></Folder><Folder name="Joystick"><File path="Demos\Device\ClassDriver\Joystick\Descriptors.c"></File><File path="Demos\Device\ClassDriver\Joystick\Descriptors.h"></File><File path="Demos\Device\ClassDriver\Joystick\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\Joystick\Joystick.c"></File><File path="Demos\Device\ClassDriver\Joystick\Joystick.h"></File><File path="Demos\Device\ClassDriver\Joystick\Joystick.txt"></File><File path="Demos\Device\ClassDriver\Joystick\makefile"></File></Folder><Folder name="Keyboard"><File path="Demos\Device\ClassDriver\Keyboard\Descriptors.c"></File><File path="Demos\Device\ClassDriver\Keyboard\Descriptors.h"></File><File path="Demos\Device\ClassDriver\Keyboard\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\Keyboard\Keyboard.c"></File><File path="Demos\Device\ClassDriver\Keyboard\Keyboard.h"></File><File path="Demos\Device\ClassDriver\Keyboard\Keyboard.txt"></File><File path="Demos\Device\ClassDriver\Keyboard\makefile"></File></Folder><Folder name="KeyboardMouse"><File path="Demos\Device\ClassDriver\KeyboardMouse\Descriptors.c"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\Descriptors.h"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\KeyboardMouse.c"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\KeyboardMouse.h"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\KeyboardMouse.txt"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\makefile"></File></Folder><Folder name="MassStorage"><Folder name="Lib"><File path="Demos\Device\ClassDriver\MassStorage\Lib\DataflashManager.c"></File><File path="Demos\Device\ClassDriver\MassStorage\Lib\DataflashManager.h"></File><File path="Demos\Device\ClassDriver\MassStorage\Lib\SCSI.c"></File><File path="Demos\Device\ClassDriver\MassStorage\Lib\SCSI.h"></File><File path="Demos\Device\ClassDriver\MassStorage\Lib\SCSI_Codes.h"></File></Folder><File path="Demos\Device\ClassDriver\MassStorage\Descriptors.c"></File><File path="Demos\Device\ClassDriver\MassStorage\Descriptors.h"></File><File path="Demos\Device\ClassDriver\MassStorage\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\MassStorage\makefile"></File><File path="Demos\Device\ClassDriver\MassStorage\MassStorage.c"></File><File path="Demos\Device\ClassDriver\MassStorage\MassStorage.h"></File><File path="Demos\Device\ClassDriver\MassStorage\MassStorage.txt"></File></Folder><Folder name="MIDI"><File path="Demos\Device\ClassDriver\MIDI\Descriptors.c"></File><File path="Demos\Device\ClassDriver\MIDI\Descriptors.h"></File><File path="Demos\Device\ClassDriver\MIDI\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\MIDI\makefile"></File><File path="Demos\Device\ClassDriver\MIDI\MIDI.c"></File><File path="Demos\Device\ClassDriver\MIDI\MIDI.h"></File><File path="Demos\Device\ClassDriver\MIDI\MIDI.txt"></File></Folder><Folder name="Mouse"><File path="Demos\Device\ClassDriver\Mouse\Descriptors.c"></File><File path="Demos\Device\ClassDriver\Mouse\Descriptors.h"></File><File path="Demos\Device\ClassDriver\Mouse\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\Mouse\makefile"></File><File path="Demos\Device\ClassDriver\Mouse\Mouse.c"></File><File path="Demos\Device\ClassDriver\Mouse\Mouse.h"></File><File path="Demos\Device\ClassDriver\Mouse\Mouse.txt"></File></Folder><Folder name="RNDISEthernet"><Folder name="Lib"><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\Webserver.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ARP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ARP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\DHCP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\DHCP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\Ethernet.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\Ethernet.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\EthernetProtocols.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ICMP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ICMP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\IP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\IP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ProtocolDecoders.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ProtocolDecoders.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\TCP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\TCP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\UDP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\UDP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\Webserver.c"></File></Folder><File path="Demos\Device\ClassDriver\RNDISEthernet\Descriptors.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Descriptors.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\LUFA RNDIS.inf"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\makefile"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\RNDISEthernet.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\RNDISEthernet.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\RNDISEthernet.txt"></File></Folder><Folder name="USBtoSerial"><Folder name="Lib"><File path="Demos\Device\ClassDriver\USBtoSerial\Lib\RingBuff.c"></File><File path="Demos\Device\ClassDriver\USBtoSerial\Lib\RingBuff.h"></File></Folder><File path="Demos\Device\ClassDriver\USBtoSerial\Descriptors.c"></File><File path="Demos\Device\ClassDriver\USBtoSerial\Descriptors.h"></File><File path="Demos\Device\ClassDriver\USBtoSerial\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\USBtoSerial\LUFA USBtoSerial.inf"></File><File path="Demos\Device\ClassDriver\USBtoSerial\makefile"></File><File path="Demos\Device\ClassDriver\USBtoSerial\USBtoSerial.c"></File><File path="Demos\Device\ClassDriver\USBtoSerial\USBtoSerial.h"></File><File path="Demos\Device\ClassDriver\USBtoSerial\USBtoSerial.txt"></File></Folder><File path="Demos\Device\ClassDriver\makefile"></File></Folder><Folder name="LowLevel"><Folder name="AudioInput"><File path="Demos\Device\LowLevel\AudioInput\AudioInput.c"></File><File path="Demos\Device\LowLevel\AudioInput\AudioInput.h"></File><File path="Demos\Device\LowLevel\AudioInput\AudioInput.txt"></File><File path="Demos\Device\LowLevel\AudioInput\Descriptors.c"></File><File path="Demos\Device\LowLevel\AudioInput\Descriptors.h"></File><File path="Demos\Device\LowLevel\AudioInput\Doxygen.conf"></File><File path="Demos\Device\LowLevel\AudioInput\makefile"></File></Folder><Folder name="AudioOutput"><File path="Demos\Device\LowLevel\AudioOutput\AudioOutput.c"></File><File path="Demos\Device\LowLevel\AudioOutput\AudioOutput.h"></File><File path="Demos\Device\LowLevel\AudioOutput\AudioOutput.txt"></File><File path="Demos\Device\LowLevel\AudioOutput\Descriptors.c"></File><File path="Demos\Device\LowLevel\AudioOutput\Descriptors.h"></File><File path="Demos\Device\LowLevel\AudioOutput\Doxygen.conf"></File><File path="Demos\Device\LowLevel\AudioOutput\makefile"></File></Folder><Folder name="CDC"><File path="Demos\Device\LowLevel\CDC\CDC.c"></File><File path="Demos\Device\LowLevel\CDC\CDC.h"></File><File path="Demos\Device\LowLevel\CDC\CDC.txt"></File><File path="Demos\Device\LowLevel\CDC\Descriptors.c"></File><File path="Demos\Device\LowLevel\CDC\Descriptors.h"></File><File path="Demos\Device\LowLevel\CDC\Doxygen.conf"></File><File path="Demos\Device\LowLevel\CDC\LUFA CDC.inf"></File><File path="Demos\Device\LowLevel\CDC\makefile"></File></Folder><Folder name="DualCDC"><File path="Demos\Device\LowLevel\DualCDC\Descriptors.c"></File><File path="Demos\Device\LowLevel\DualCDC\Descriptors.h"></File><File path="Demos\Device\LowLevel\DualCDC\Doxygen.conf"></File><File path="Demos\Device\LowLevel\DualCDC\DualCDC.c"></File><File path="Demos\Device\LowLevel\DualCDC\DualCDC.h"></File><File path="Demos\Device\LowLevel\DualCDC\DualCDC.txt"></File><File path="Demos\Device\LowLevel\DualCDC\LUFA DualCDC.inf"></File><File path="Demos\Device\LowLevel\DualCDC\makefile"></File></Folder><Folder name="GenericHID"><File path="Demos\Device\LowLevel\GenericHID\Descriptors.c"></File><File path="Demos\Device\LowLevel\GenericHID\Descriptors.h"></File><File path="Demos\Device\LowLevel\GenericHID\Doxygen.conf"></File><File path="Demos\Device\LowLevel\GenericHID\GenericHID.c"></File><File path="Demos\Device\LowLevel\GenericHID\GenericHID.h"></File><File path="Demos\Device\LowLevel\GenericHID\GenericHID.txt"></File><File path="Demos\Device\LowLevel\GenericHID\makefile"></File></Folder><Folder name="Joystick"><File path="Demos\Device\LowLevel\Joystick\Descriptors.c"></File><File path="Demos\Device\LowLevel\Joystick\Descriptors.h"></File><File path="Demos\Device\LowLevel\Joystick\Doxygen.conf"></File><File path="Demos\Device\LowLevel\Joystick\Joystick.c"></File><File path="Demos\Device\LowLevel\Joystick\Joystick.h"></File><File path="Demos\Device\LowLevel\Joystick\Joystick.txt"></File><File path="Demos\Device\LowLevel\Joystick\makefile"></File></Folder><Folder name="Keyboard"><File path="Demos\Device\LowLevel\Keyboard\Descriptors.c"></File><File path="Demos\Device\LowLevel\Keyboard\Descriptors.h"></File><File path="Demos\Device\LowLevel\Keyboard\Doxygen.conf"></File><File path="Demos\Device\LowLevel\Keyboard\Keyboard.c"></File><File path="Demos\Device\LowLevel\Keyboard\Keyboard.h"></File><File path="Demos\Device\LowLevel\Keyboard\Keyboard.txt"></File><File path="Demos\Device\LowLevel\Keyboard\makefile"></File></Folder><Folder name="KeyboardMouse"><File path="Demos\Device\LowLevel\KeyboardMouse\Descriptors.c"></File><File path="Demos\Device\LowLevel\KeyboardMouse\Descriptors.h"></File><File path="Demos\Device\LowLevel\KeyboardMouse\Doxygen.conf"></File><File path="Demos\Device\LowLevel\KeyboardMouse\KeyboardMouse.c"></File><File path="Demos\Device\LowLevel\KeyboardMouse\KeyboardMouse.h"></File><File path="Demos\Device\LowLevel\KeyboardMouse\KeyboardMouse.txt"></File><File path="Demos\Device\LowLevel\KeyboardMouse\makefile"></File></Folder><Folder name="MassStorage"><Folder name="Lib"><File path="Demos\Device\LowLevel\MassStorage\Lib\DataflashManager.c"></File><File path="Demos\Device\LowLevel\MassStorage\Lib\DataflashManager.h"></File><File path="Demos\Device\LowLevel\MassStorage\Lib\SCSI.c"></File><File path="Demos\Device\LowLevel\MassStorage\Lib\SCSI.h"></File><File path="Demos\Device\LowLevel\MassStorage\Lib\SCSI_Codes.h"></File></Folder><File path="Demos\Device\LowLevel\MassStorage\Descriptors.c"></File><File path="Demos\Device\LowLevel\MassStorage\Descriptors.h"></File><File path="Demos\Device\LowLevel\MassStorage\Doxygen.conf"></File><File path="Demos\Device\LowLevel\MassStorage\makefile"></File><File path="Demos\Device\LowLevel\MassStorage\MassStorage.c"></File><File path="Demos\Device\LowLevel\MassStorage\MassStorage.h"></File><File path="Demos\Device\LowLevel\MassStorage\MassStorage.txt"></File></Folder><Folder name="MIDI"><File path="Demos\Device\LowLevel\MIDI\Descriptors.c"></File><File path="Demos\Device\LowLevel\MIDI\Descriptors.h"></File><File path="Demos\Device\LowLevel\MIDI\Doxygen.conf"></File><File path="Demos\Device\LowLevel\MIDI\makefile"></File><File path="Demos\Device\LowLevel\MIDI\MIDI.c"></File><File path="Demos\Device\LowLevel\MIDI\MIDI.h"></File><File path="Demos\Device\LowLevel\MIDI\MIDI.txt"></File></Folder><Folder name="Mouse"><File path="Demos\Device\LowLevel\Mouse\Descriptors.c"></File><File path="Demos\Device\LowLevel\Mouse\Descriptors.h"></File><File path="Demos\Device\LowLevel\Mouse\Doxygen.conf"></File><File path="Demos\Device\LowLevel\Mouse\makefile"></File><File path="Demos\Device\LowLevel\Mouse\Mouse.c"></File><File path="Demos\Device\LowLevel\Mouse\Mouse.h"></File><File path="Demos\Device\LowLevel\Mouse\Mouse.txt"></File></Folder><Folder name="RNDISEthernet"><Folder name="Lib"><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\Webserver.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ARP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ARP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\DHCP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\DHCP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\Ethernet.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\Ethernet.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\EthernetProtocols.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ICMP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ICMP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\IP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\IP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ProtocolDecoders.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ProtocolDecoders.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\RNDIS.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\RNDIS.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\RNDISConstants.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\TCP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\TCP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\UDP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\UDP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\Webserver.c"></File></Folder><File path="Demos\Device\LowLevel\RNDISEthernet\Descriptors.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Descriptors.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Doxygen.conf"></File><File path="Demos\Device\LowLevel\RNDISEthernet\LUFA RNDIS.inf"></File><File path="Demos\Device\LowLevel\RNDISEthernet\makefile"></File><File path="Demos\Device\LowLevel\RNDISEthernet\RNDISEthernet.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\RNDISEthernet.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\RNDISEthernet.txt"></File></Folder><Folder name="USBtoSerial"><Folder name="Lib"><File path="Demos\Device\LowLevel\USBtoSerial\Lib\RingBuff.c"></File><File path="Demos\Device\LowLevel\USBtoSerial\Lib\RingBuff.h"></File></Folder><File path="Demos\Device\LowLevel\USBtoSerial\Descriptors.c"></File><File path="Demos\Device\LowLevel\USBtoSerial\Descriptors.h"></File><File path="Demos\Device\LowLevel\USBtoSerial\Doxygen.conf"></File><File path="Demos\Device\LowLevel\USBtoSerial\LUFA USBtoSerial.inf"></File><File path="Demos\Device\LowLevel\USBtoSerial\makefile"></File><File path="Demos\Device\LowLevel\USBtoSerial\USBtoSerial.c"></File><File path="Demos\Device\LowLevel\USBtoSerial\USBtoSerial.h"></File><File path="Demos\Device\LowLevel\USBtoSerial\USBtoSerial.txt"></File></Folder><File path="Demos\Device\LowLevel\makefile"></File></Folder><Folder name="Incomplete"><Folder name="SideShow"><File path="Demos\Device\Incomplete\Sideshow\SideshowContent.h"></File><File path="Demos\Device\Incomplete\Sideshow\Descriptors.c"></File><File path="Demos\Device\Incomplete\Sideshow\Descriptors.h"></File><File path="Demos\Device\Incomplete\Sideshow\makefile"></File><File path="Demos\Device\Incomplete\Sideshow\Sideshow.c"></File><File path="Demos\Device\Incomplete\Sideshow\Sideshow.h"></File><File path="Demos\Device\Incomplete\Sideshow\SideshowApplications.c"></File><File path="Demos\Device\Incomplete\Sideshow\SideshowApplications.h"></File><File path="Demos\Device\Incomplete\Sideshow\SideshowCommands.c"></File><File path="Demos\Device\Incomplete\Sideshow\SideshowCommands.h"></File><File path="Demos\Device\Incomplete\Sideshow\SideshowCommon.c"></File><File path="Demos\Device\Incomplete\Sideshow\SideshowCommon.h"></File><File path="Demos\Device\Incomplete\Sideshow\SideshowContent.c"></File></Folder></Folder><File path="Demos\Device\makefile"></File></Folder><Folder name="Host"><Folder name="ClassDriver"><Folder name="CDCHost"><File path="Demos\Host\ClassDriver\CDCHost\CDCHost.c"></File><File path="Demos\Host\ClassDriver\CDCHost\CDCHost.h"></File><File path="Demos\Host\ClassDriver\CDCHost\CDCHost.txt"></File><File path="Demos\Host\ClassDriver\CDCHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\CDCHost\makefile"></File></Folder><Folder name="GenericHIDHost"><File path="Demos\Host\ClassDriver\GenericHIDHost\ConfigDescriptor.c"></File><File path="Demos\Host\ClassDriver\GenericHIDHost\ConfigDescriptor.h"></File><File path="Demos\Host\ClassDriver\GenericHIDHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\GenericHIDHost\GenericHIDHost.c"></File><File path="Demos\Host\ClassDriver\GenericHIDHost\GenericHIDHost.h"></File><File path="Demos\Host\ClassDriver\GenericHIDHost\GenericHIDHost.txt"></File><File path="Demos\Host\ClassDriver\GenericHIDHost\makefile"></File></Folder><Folder name="KeyboardHost"><File path="Demos\Host\ClassDriver\KeyboardHost\ConfigDescriptor.c"></File><File path="Demos\Host\ClassDriver\KeyboardHost\ConfigDescriptor.h"></File><File path="Demos\Host\ClassDriver\KeyboardHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\KeyboardHost\KeyboardHost.c"></File><File path="Demos\Host\ClassDriver\KeyboardHost\KeyboardHost.h"></File><File path="Demos\Host\ClassDriver\KeyboardHost\KeyboardHost.txt"></File><File path="Demos\Host\ClassDriver\KeyboardHost\makefile"></File></Folder><Folder name="KeyboardHostWithParser"><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\makefile"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\ConfigDescriptor.c"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\ConfigDescriptor.h"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\HIDReport.c"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\HIDReport.h"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\KeyboardHostWithParser.c"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\KeyboardHostWithParser.h"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\KeyboardHostWithParser.txt"></File></Folder><Folder name="MassStorageHost"><Folder name="Lib"><File path="Demos\Host\ClassDriver\MassStorageHost\Lib\MassStoreCommands.c"></File><File path="Demos\Host\ClassDriver\MassStorageHost\Lib\MassStoreCommands.h"></File><File path="Demos\Host\ClassDriver\MassStorageHost\Lib\SCSI_Codes.h"></File></Folder><File path="Demos\Host\ClassDriver\MassStorageHost\ConfigDescriptor.c"></File><File path="Demos\Host\ClassDriver\MassStorageHost\ConfigDescriptor.h"></File><File path="Demos\Host\ClassDriver\MassStorageHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\MassStorageHost\makefile"></File><File path="Demos\Host\ClassDriver\MassStorageHost\MassStorageHost.c"></File><File path="Demos\Host\ClassDriver\MassStorageHost\MassStorageHost.h"></File><File path="Demos\Host\ClassDriver\MassStorageHost\MassStorageHost.txt"></File></Folder><Folder name="MouseHost"><File path="Demos\Host\ClassDriver\MouseHost\ConfigDescriptor.c"></File><File path="Demos\Host\ClassDriver\MouseHost\ConfigDescriptor.h"></File><File path="Demos\Host\ClassDriver\MouseHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\MouseHost\makefile"></File><File path="Demos\Host\ClassDriver\MouseHost\MouseHost.c"></File><File path="Demos\Host\ClassDriver\MouseHost\MouseHost.h"></File><File path="Demos\Host\ClassDriver\MouseHost\MouseHost.txt"></File></Folder><Folder name="MouseHostWithParser"><File path="Demos\Host\ClassDriver\MouseHostWithParser\MouseHostWithParser.txt"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\ConfigDescriptor.c"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\ConfigDescriptor.h"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\HIDReport.c"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\HIDReport.h"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\makefile"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\MouseHostWithParser.c"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\MouseHostWithParser.h"></File></Folder><Folder name="StillImageHost"><Folder name="Lib"><File path="Demos\Host\ClassDriver\StillImageHost\Lib\PIMACodes.h"></File><File path="Demos\Host\ClassDriver\StillImageHost\Lib\StillImageCommands.c"></File><File path="Demos\Host\ClassDriver\StillImageHost\Lib\StillImageCommands.h"></File></Folder><File path="Demos\Host\ClassDriver\StillImageHost\ConfigDescriptor.c"></File><File path="Demos\Host\ClassDriver\StillImageHost\ConfigDescriptor.h"></File><File path="Demos\Host\ClassDriver\StillImageHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\StillImageHost\makefile"></File><File path="Demos\Host\ClassDriver\StillImageHost\StillImageHost.c"></File><File path="Demos\Host\ClassDriver\StillImageHost\StillImageHost.h"></File><File path="Demos\Host\ClassDriver\StillImageHost\StillImageHost.txt"></File></Folder><File path="Demos\Host\ClassDriver\makefile"></File></Folder><Folder name="LowLevel"><Folder name="CDCHost"><File path="Demos\Host\LowLevel\CDCHost\CDCHost.c"></File><File path="Demos\Host\LowLevel\CDCHost\CDCHost.h"></File><File path="Demos\Host\LowLevel\CDCHost\CDCHost.txt"></File><File path="Demos\Host\LowLevel\CDCHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\CDCHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\CDCHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\CDCHost\makefile"></File></Folder><Folder name="GenericHIDHost"><File path="Demos\Host\LowLevel\GenericHIDHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\GenericHIDHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\GenericHIDHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\GenericHIDHost\GenericHIDHost.c"></File><File path="Demos\Host\LowLevel\GenericHIDHost\GenericHIDHost.h"></File><File path="Demos\Host\LowLevel\GenericHIDHost\GenericHIDHost.txt"></File><File path="Demos\Host\LowLevel\GenericHIDHost\makefile"></File></Folder><Folder name="KeyboardHost"><File path="Demos\Host\LowLevel\KeyboardHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\KeyboardHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\KeyboardHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\KeyboardHost\KeyboardHost.c"></File><File path="Demos\Host\LowLevel\KeyboardHost\KeyboardHost.h"></File><File path="Demos\Host\LowLevel\KeyboardHost\KeyboardHost.txt"></File><File path="Demos\Host\LowLevel\KeyboardHost\makefile"></File></Folder><Folder name="KeyboardHostWithParser"><File path="Demos\Host\LowLevel\KeyboardHostWithParser\makefile"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\Doxygen.conf"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\HIDReport.c"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\HIDReport.h"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\KeyboardHostWithParser.c"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\KeyboardHostWithParser.h"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\KeyboardHostWithParser.txt"></File></Folder><Folder name="MassStorageHost"><Folder name="Lib"><File path="Demos\Host\LowLevel\MassStorageHost\Lib\MassStoreCommands.c"></File><File path="Demos\Host\LowLevel\MassStorageHost\Lib\MassStoreCommands.h"></File><File path="Demos\Host\LowLevel\MassStorageHost\Lib\SCSI_Codes.h"></File></Folder><File path="Demos\Host\LowLevel\MassStorageHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\MassStorageHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\MassStorageHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\MassStorageHost\makefile"></File><File path="Demos\Host\LowLevel\MassStorageHost\MassStorageHost.c"></File><File path="Demos\Host\LowLevel\MassStorageHost\MassStorageHost.h"></File><File path="Demos\Host\LowLevel\MassStorageHost\MassStorageHost.txt"></File></Folder><Folder name="MouseHost"><File path="Demos\Host\LowLevel\MouseHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\MouseHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\MouseHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\MouseHost\makefile"></File><File path="Demos\Host\LowLevel\MouseHost\MouseHost.c"></File><File path="Demos\Host\LowLevel\MouseHost\MouseHost.h"></File><File path="Demos\Host\LowLevel\MouseHost\MouseHost.txt"></File></Folder><Folder name="MouseHostWithParser"><File path="Demos\Host\LowLevel\MouseHostWithParser\MouseHostWithParser.txt"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\Doxygen.conf"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\HIDReport.c"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\HIDReport.h"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\makefile"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\MouseHostWithParser.c"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\MouseHostWithParser.h"></File></Folder><Folder name="StillImageHost"><Folder name="Lib"><File path="Demos\Host\LowLevel\StillImageHost\Lib\PIMACodes.h"></File><File path="Demos\Host\LowLevel\StillImageHost\Lib\StillImageCommands.c"></File><File path="Demos\Host\LowLevel\StillImageHost\Lib\StillImageCommands.h"></File></Folder><File path="Demos\Host\LowLevel\StillImageHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\StillImageHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\StillImageHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\StillImageHost\makefile"></File><File path="Demos\Host\LowLevel\StillImageHost\StillImageHost.c"></File><File path="Demos\Host\LowLevel\StillImageHost\StillImageHost.h"></File><File path="Demos\Host\LowLevel\StillImageHost\StillImageHost.txt"></File></Folder><File path="Demos\Host\LowLevel\makefile"></File></Folder><Folder name="Incomplete"><Folder name="BluetoothHost"><File path="Demos\Host\Incomplete\BluetoothHost\makefile"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothACLPackets.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothACLPackets.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothClassCodes.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothHCICommands.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothHCICommands.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothHost.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothHost.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothStack.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothStack.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\ConfigDescriptor.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\ConfigDescriptor.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\DeviceDescriptor.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\DeviceDescriptor.h"></File></Folder></Folder><File path="Demos\Host\makefile"></File></Folder><Folder name="OTG"><Folder name="TestApp"><File path="Demos\OTG\TestApp\Descriptors.c"></File><File path="Demos\OTG\TestApp\Descriptors.h"></File><File path="Demos\OTG\TestApp\Doxygen.conf"></File><File path="Demos\OTG\TestApp\makefile"></File><File path="Demos\OTG\TestApp\TestApp.c"></File><File path="Demos\OTG\TestApp\TestApp.h"></File><File path="Demos\OTG\TestApp\TestApp.txt"></File><File path="Demos\OTG\TestApp\TestEvents.c"></File><File path="Demos\OTG\TestApp\TestEvents.h"></File></Folder><File path="Demos\OTG\makefile"></File></Folder><File path="Demos\makefile"></File></Folder><Folder name="LUFA"><Folder name="Common"><File path="LUFA\Common\Common.h"></File><File path="LUFA\Common\FunctionAttributes.h"></File><File path="LUFA\Common\BoardTypes.h"></File></Folder><Folder name="Drivers"><Folder name="USB"><Folder name="LowLevel"><File path="LUFA\Drivers\USB\LowLevel\HostChapter9.h"></File><File path="LUFA\Drivers\USB\LowLevel\LowLevel.c"></File><File path="LUFA\Drivers\USB\LowLevel\LowLevel.h"></File><File path="LUFA\Drivers\USB\LowLevel\Pipe.c"></File><File path="LUFA\Drivers\USB\LowLevel\Pipe.h"></File><File path="LUFA\Drivers\USB\LowLevel\DevChapter9.c"></File><File path="LUFA\Drivers\USB\LowLevel\DevChapter9.h"></File><File path="LUFA\Drivers\USB\LowLevel\Device.h"></File><File path="LUFA\Drivers\USB\LowLevel\Endpoint.c"></File><File path="LUFA\Drivers\USB\LowLevel\Endpoint.h"></File><File path="LUFA\Drivers\USB\LowLevel\Host.c"></File><File path="LUFA\Drivers\USB\LowLevel\Host.h"></File><File path="LUFA\Drivers\USB\LowLevel\HostChapter9.c"></File><File path="LUFA\Drivers\USB\LowLevel\OTG.h"></File></Folder><Folder name="HighLevel"><File path="LUFA\Drivers\USB\HighLevel\USBTask.h"></File><File path="LUFA\Drivers\USB\HighLevel\Events.c"></File><File path="LUFA\Drivers\USB\HighLevel\Events.h"></File><File path="LUFA\Drivers\USB\HighLevel\USBInterrupt.c"></File><File path="LUFA\Drivers\USB\HighLevel\USBInterrupt.h"></File><File path="LUFA\Drivers\USB\HighLevel\USBTask.c"></File><File path="LUFA\Drivers\USB\HighLevel\StdDescriptors.h"></File><File path="LUFA\Drivers\USB\HighLevel\StdRequestType.h"></File><File path="LUFA\Drivers\USB\HighLevel\StreamCallbacks.h"></File><File path="LUFA\Drivers\USB\HighLevel\USBMode.h"></File><File path="LUFA\Drivers\USB\HighLevel\ConfigDescriptor.c"></File><File path="LUFA\Drivers\USB\HighLevel\ConfigDescriptor.h"></File></Folder><Folder name="Class"><Folder name="Device"><File path="LUFA\Drivers\USB\Class\Device\HID.c"></File><File path="LUFA\Drivers\USB\Class\Device\HID.h"></File><File path="LUFA\Drivers\USB\Class\Device\CDC.c"></File><File path="LUFA\Drivers\USB\Class\Device\CDC.h"></File><File path="LUFA\Drivers\USB\Class\Device\RNDIS.c"></File><File path="LUFA\Drivers\USB\Class\Device\RNDIS.h"></File><File path="LUFA\Drivers\USB\Class\Device\RNDISConstants.h"></File><File path="LUFA\Drivers\USB\Class\Device\MassStorage.c"></File><File path="LUFA\Drivers\USB\Class\Device\MassStorage.h"></File><File path="LUFA\Drivers\USB\Class\Device\Audio.c"></File><File path="LUFA\Drivers\USB\Class\Device\Audio.h"></File><File path="LUFA\Drivers\USB\Class\Device\MIDI.c"></File><File path="LUFA\Drivers\USB\Class\Device\MIDI.h"></File></Folder><Folder name="Host"><File path="LUFA\Drivers\USB\Class\Host\HIDParser.c"></File><File path="LUFA\Drivers\USB\Class\Host\HIDParser.h"></File><File path="LUFA\Drivers\USB\Class\Host\HIDReportData.h"></File><File path="LUFA\Drivers\USB\Class\Host\CDC.c"></File><File path="LUFA\Drivers\USB\Class\Host\CDC.h"></File><File path="LUFA\Drivers\USB\Class\Host\HID.c"></File><File path="LUFA\Drivers\USB\Class\Host\HID.h"></File><File path="LUFA\Drivers\USB\Class\Host\Audio.c"></File><File path="LUFA\Drivers\USB\Class\Host\Audio.h"></File><File path="LUFA\Drivers\USB\Class\Host\MIDI.c"></File><File path="LUFA\Drivers\USB\Class\Host\MIDI.h"></File><File path="LUFA\Drivers\USB\Class\Host\MassStorage.c"></File><File path="LUFA\Drivers\USB\Class\Host\MassStorage.h"></File><File path="LUFA\Drivers\USB\Class\Host\StillImage.c"></File><File path="LUFA\Drivers\USB\Class\Host\StillImage.h"></File></Folder><Folder name="Common"><File path="LUFA\Drivers\USB\Class\Common\Audio.h"></File><File path="LUFA\Drivers\USB\Class\Common\CDC.h"></File><File path="LUFA\Drivers\USB\Class\Common\HID.h"></File><File path="LUFA\Drivers\USB\Class\Common\MassStorage.h"></File><File path="LUFA\Drivers\USB\Class\Common\MIDI.h"></File><File path="LUFA\Drivers\USB\Class\Common\RNDIS.h"></File></Folder><File path="LUFA\Drivers\USB\Class\Audio.h"></File><File path="LUFA\Drivers\USB\Class\CDC.h"></File><File path="LUFA\Drivers\USB\Class\HID.h"></File><File path="LUFA\Drivers\USB\Class\MassStorage.h"></File><File path="LUFA\Drivers\USB\Class\MIDI.h"></File><File path="LUFA\Drivers\USB\Class\RNDIS.h"></File><File path="LUFA\Drivers\USB\Class\StillImage.h"></File></Folder><File path="LUFA\Drivers\USB\USB.h"></File></Folder><Folder name="Misc"><File path="LUFA\Drivers\Misc\TerminalCodes.h"></File></Folder><Folder name="Board"><Folder name="USBKEY"><File path="LUFA\Drivers\Board\USBKEY\Dataflash.h"></File><File path="LUFA\Drivers\Board\USBKEY\Joystick.h"></File><File path="LUFA\Drivers\Board\USBKEY\AT45DB642D.h"></File><File path="LUFA\Drivers\Board\USBKEY\LEDs.h"></File><File path="LUFA\Drivers\Board\USBKEY\Buttons.h"></File></Folder><Folder name="STK526"><File path="LUFA\Drivers\Board\STK526\Dataflash.h"></File><File path="LUFA\Drivers\Board\STK526\Joystick.h"></File><File path="LUFA\Drivers\Board\STK526\AT45DB642D.h"></File><File path="LUFA\Drivers\Board\STK526\LEDs.h"></File><File path="LUFA\Drivers\Board\STK526\Buttons.h"></File></Folder><Folder name="STK525"><File path="LUFA\Drivers\Board\STK525\Dataflash.h"></File><File path="LUFA\Drivers\Board\STK525\Joystick.h"></File><File path="LUFA\Drivers\Board\STK525\AT45DB321C.h"></File><File path="LUFA\Drivers\Board\STK525\LEDs.h"></File><File path="LUFA\Drivers\Board\STK525\Buttons.h"></File></Folder><Folder name="RZUSBSTICK"><File path="LUFA\Drivers\Board\RZUSBSTICK\LEDs.h"></File></Folder><Folder name="ATAVRUSBRF01"><File path="LUFA\Drivers\Board\ATAVRUSBRF01\LEDs.h"></File><File path="LUFA\Drivers\Board\ATAVRUSBRF01\Buttons.h"></File></Folder><File path="LUFA\Drivers\Board\Temperature.h"></File><File path="LUFA\Drivers\Board\Dataflash.h"></File><File path="LUFA\Drivers\Board\Joystick.h"></File><File path="LUFA\Drivers\Board\Temperature.c"></File><File path="LUFA\Drivers\Board\LEDs.h"></File><File path="LUFA\Drivers\Board\Buttons.h"></File></Folder><Folder name="Peripheral"><Folder name="AT90USBXXX67"><File path="LUFA\Drivers\Peripheral\AT90USBXXX67\ADC.h"></File></Folder><File path="LUFA\Drivers\Peripheral\ADC.h"></File><File path="LUFA\Drivers\Peripheral\Serial.c"></File><File path="LUFA\Drivers\Peripheral\Serial.h"></File><File path="LUFA\Drivers\Peripheral\SPI.h"></File><File path="LUFA\Drivers\Peripheral\SerialStream.c"></File><File path="LUFA\Drivers\Peripheral\SerialStream.h"></File></Folder></Folder><Folder name="DriverStubs"><File path="LUFA\DriverStubs\Dataflash.h"></File><File path="LUFA\DriverStubs\Joystick.h"></File><File path="LUFA\DriverStubs\LEDs.h"></File><File path="LUFA\DriverStubs\Buttons.h"></File></Folder><File path="LUFA\makefile"></File><File path="LUFA\Version.h"></File><File path="LUFA\BuildingLinkableLibraries.txt"></File><File path="LUFA\ChangeLog.txt"></File><File path="LUFA\CompileTimeTokens.txt"></File><File path="LUFA\DirectorySummaries.txt"></File><File path="LUFA\Doxygen.conf"></File><File path="LUFA\GettingStarted.txt"></File><File path="LUFA\Groups.txt"></File><File path="LUFA\LUFAPoweredProjects.txt"></File><File path="LUFA\MainPage.txt"></File><File path="LUFA\MigrationInformation.txt"></File><File path="LUFA\VIDAndPIDValues.txt"></File><File path="LUFA\WritingBoardDrivers.txt"></File><File path="LUFA\FutureChanges.txt"></File><File path="LUFA\LibraryResources.txt"></File><File path="LUFA\DeviceSupport.txt"></File><File path="LUFA\License.txt"></File><File path="LUFA\AboutLUFA.txt"></File><File path="LUFA\DevelopingWithLUFA.txt"></File><File path="LUFA\Donating.txt"></File><File path="LUFA\Author.jpg"></File></Folder><Folder name="Projects"><Folder name="MagStripe"><Folder name="Lib"><File path="Projects\Magstripe\Lib\CircularBitBuffer.c"></File><File path="Projects\Magstripe\Lib\CircularBitBuffer.h"></File><File path="Projects\Magstripe\Lib\MagstripeHW.h"></File></Folder><File path="Projects\Magstripe\Descriptors.c"></File><File path="Projects\Magstripe\Descriptors.h"></File><File path="Projects\Magstripe\Magstripe.c"></File><File path="Projects\Magstripe\Magstripe.h"></File><File path="Projects\Magstripe\makefile"></File><File path="Projects\Magstripe\Magstripe.txt"></File><File path="Projects\Magstripe\Doxygen.conf"></File></Folder><File path="Projects\makefile"></File></Folder><Folder name="Bootloaders"><Folder name="DFU"><File path="Bootloaders\DFU\BootloaderDFU.c"></File><File path="Bootloaders\DFU\BootloaderDFU.h"></File><File path="Bootloaders\DFU\Descriptors.c"></File><File path="Bootloaders\DFU\Descriptors.h"></File><File path="Bootloaders\DFU\makefile"></File><File path="Bootloaders\DFU\BootloaderDFU.txt"></File><File path="Bootloaders\DFU\Doxygen.conf"></File></Folder><Folder name="CDC"><File path="Bootloaders\CDC\BootloaderCDC.c"></File><File path="Bootloaders\CDC\BootloaderCDC.h"></File><File path="Bootloaders\CDC\Descriptors.c"></File><File path="Bootloaders\CDC\Descriptors.h"></File><File path="Bootloaders\CDC\makefile"></File><File path="Bootloaders\CDC\LUFA CDC Bootloader.inf"></File><File path="Bootloaders\CDC\Doxygen.conf"></File><File path="Bootloaders\CDC\BootloaderCDC.txt"></File></Folder><Folder name="TeensyHID"><File path="Bootloaders\TeensyHID\Descriptors.c"></File><File path="Bootloaders\TeensyHID\Descriptors.h"></File><File path="Bootloaders\TeensyHID\makefile"></File><File path="Bootloaders\TeensyHID\TeensyHID.c"></File><File path="Bootloaders\TeensyHID\TeensyHID.h"></File><File path="Bootloaders\TeensyHID\TeensyHID.txt"></File></Folder><File path="Bootloaders\makefile"></File></Folder><File path="makefile"></File><File path="README.txt"></File></Project>
\ No newline at end of file
+<Project name="LUFA"><Folder name="Demos"><Folder name="Device"><Folder name="ClassDriver"><Folder name="AudioInput"><File path="Demos\Device\ClassDriver\AudioInput\AudioInput.c"></File><File path="Demos\Device\ClassDriver\AudioInput\AudioInput.h"></File><File path="Demos\Device\ClassDriver\AudioInput\AudioInput.txt"></File><File path="Demos\Device\ClassDriver\AudioInput\Descriptors.c"></File><File path="Demos\Device\ClassDriver\AudioInput\Descriptors.h"></File><File path="Demos\Device\ClassDriver\AudioInput\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\AudioInput\makefile"></File></Folder><Folder name="AudioOutput"><File path="Demos\Device\ClassDriver\AudioOutput\AudioOutput.c"></File><File path="Demos\Device\ClassDriver\AudioOutput\AudioOutput.h"></File><File path="Demos\Device\ClassDriver\AudioOutput\AudioOutput.txt"></File><File path="Demos\Device\ClassDriver\AudioOutput\Descriptors.c"></File><File path="Demos\Device\ClassDriver\AudioOutput\Descriptors.h"></File><File path="Demos\Device\ClassDriver\AudioOutput\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\AudioOutput\makefile"></File></Folder><Folder name="CDC"><File path="Demos\Device\ClassDriver\CDC\CDC.c"></File><File path="Demos\Device\ClassDriver\CDC\CDC.h"></File><File path="Demos\Device\ClassDriver\CDC\CDC.txt"></File><File path="Demos\Device\ClassDriver\CDC\Descriptors.c"></File><File path="Demos\Device\ClassDriver\CDC\Descriptors.h"></File><File path="Demos\Device\ClassDriver\CDC\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\CDC\LUFA CDC.inf"></File><File path="Demos\Device\ClassDriver\CDC\makefile"></File></Folder><Folder name="DualCDC"><File path="Demos\Device\ClassDriver\DualCDC\Descriptors.c"></File><File path="Demos\Device\ClassDriver\DualCDC\Descriptors.h"></File><File path="Demos\Device\ClassDriver\DualCDC\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\DualCDC\DualCDC.c"></File><File path="Demos\Device\ClassDriver\DualCDC\DualCDC.h"></File><File path="Demos\Device\ClassDriver\DualCDC\DualCDC.txt"></File><File path="Demos\Device\ClassDriver\DualCDC\LUFA DualCDC.inf"></File><File path="Demos\Device\ClassDriver\DualCDC\makefile"></File></Folder><Folder name="GenericHID"><File path="Demos\Device\ClassDriver\GenericHID\Descriptors.c"></File><File path="Demos\Device\ClassDriver\GenericHID\Descriptors.h"></File><File path="Demos\Device\ClassDriver\GenericHID\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\GenericHID\GenericHID.c"></File><File path="Demos\Device\ClassDriver\GenericHID\GenericHID.h"></File><File path="Demos\Device\ClassDriver\GenericHID\GenericHID.txt"></File><File path="Demos\Device\ClassDriver\GenericHID\makefile"></File></Folder><Folder name="Joystick"><File path="Demos\Device\ClassDriver\Joystick\Descriptors.c"></File><File path="Demos\Device\ClassDriver\Joystick\Descriptors.h"></File><File path="Demos\Device\ClassDriver\Joystick\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\Joystick\Joystick.c"></File><File path="Demos\Device\ClassDriver\Joystick\Joystick.h"></File><File path="Demos\Device\ClassDriver\Joystick\Joystick.txt"></File><File path="Demos\Device\ClassDriver\Joystick\makefile"></File></Folder><Folder name="Keyboard"><File path="Demos\Device\ClassDriver\Keyboard\Descriptors.c"></File><File path="Demos\Device\ClassDriver\Keyboard\Descriptors.h"></File><File path="Demos\Device\ClassDriver\Keyboard\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\Keyboard\Keyboard.c"></File><File path="Demos\Device\ClassDriver\Keyboard\Keyboard.h"></File><File path="Demos\Device\ClassDriver\Keyboard\Keyboard.txt"></File><File path="Demos\Device\ClassDriver\Keyboard\makefile"></File></Folder><Folder name="KeyboardMouse"><File path="Demos\Device\ClassDriver\KeyboardMouse\Descriptors.c"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\Descriptors.h"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\KeyboardMouse.c"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\KeyboardMouse.h"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\KeyboardMouse.txt"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\makefile"></File></Folder><Folder name="MassStorage"><Folder name="Lib"><File path="Demos\Device\ClassDriver\MassStorage\Lib\DataflashManager.c"></File><File path="Demos\Device\ClassDriver\MassStorage\Lib\DataflashManager.h"></File><File path="Demos\Device\ClassDriver\MassStorage\Lib\SCSI.c"></File><File path="Demos\Device\ClassDriver\MassStorage\Lib\SCSI.h"></File><File path="Demos\Device\ClassDriver\MassStorage\Lib\SCSI_Codes.h"></File></Folder><File path="Demos\Device\ClassDriver\MassStorage\Descriptors.c"></File><File path="Demos\Device\ClassDriver\MassStorage\Descriptors.h"></File><File path="Demos\Device\ClassDriver\MassStorage\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\MassStorage\makefile"></File><File path="Demos\Device\ClassDriver\MassStorage\MassStorage.c"></File><File path="Demos\Device\ClassDriver\MassStorage\MassStorage.h"></File><File path="Demos\Device\ClassDriver\MassStorage\MassStorage.txt"></File></Folder><Folder name="MIDI"><File path="Demos\Device\ClassDriver\MIDI\Descriptors.c"></File><File path="Demos\Device\ClassDriver\MIDI\Descriptors.h"></File><File path="Demos\Device\ClassDriver\MIDI\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\MIDI\makefile"></File><File path="Demos\Device\ClassDriver\MIDI\MIDI.c"></File><File path="Demos\Device\ClassDriver\MIDI\MIDI.h"></File><File path="Demos\Device\ClassDriver\MIDI\MIDI.txt"></File></Folder><Folder name="Mouse"><File path="Demos\Device\ClassDriver\Mouse\Descriptors.c"></File><File path="Demos\Device\ClassDriver\Mouse\Descriptors.h"></File><File path="Demos\Device\ClassDriver\Mouse\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\Mouse\makefile"></File><File path="Demos\Device\ClassDriver\Mouse\Mouse.c"></File><File path="Demos\Device\ClassDriver\Mouse\Mouse.h"></File><File path="Demos\Device\ClassDriver\Mouse\Mouse.txt"></File></Folder><Folder name="RNDISEthernet"><Folder name="Lib"><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\Webserver.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ARP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ARP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\DHCP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\DHCP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\Ethernet.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\Ethernet.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\EthernetProtocols.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ICMP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ICMP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\IP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\IP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ProtocolDecoders.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ProtocolDecoders.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\TCP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\TCP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\UDP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\UDP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\Webserver.c"></File></Folder><File path="Demos\Device\ClassDriver\RNDISEthernet\Descriptors.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Descriptors.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\LUFA RNDIS.inf"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\makefile"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\RNDISEthernet.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\RNDISEthernet.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\RNDISEthernet.txt"></File></Folder><Folder name="USBtoSerial"><Folder name="Lib"><File path="Demos\Device\ClassDriver\USBtoSerial\Lib\RingBuff.c"></File><File path="Demos\Device\ClassDriver\USBtoSerial\Lib\RingBuff.h"></File></Folder><File path="Demos\Device\ClassDriver\USBtoSerial\Descriptors.c"></File><File path="Demos\Device\ClassDriver\USBtoSerial\Descriptors.h"></File><File path="Demos\Device\ClassDriver\USBtoSerial\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\USBtoSerial\LUFA USBtoSerial.inf"></File><File path="Demos\Device\ClassDriver\USBtoSerial\makefile"></File><File path="Demos\Device\ClassDriver\USBtoSerial\USBtoSerial.c"></File><File path="Demos\Device\ClassDriver\USBtoSerial\USBtoSerial.h"></File><File path="Demos\Device\ClassDriver\USBtoSerial\USBtoSerial.txt"></File></Folder><File path="Demos\Device\ClassDriver\makefile"></File></Folder><Folder name="LowLevel"><Folder name="AudioInput"><File path="Demos\Device\LowLevel\AudioInput\AudioInput.c"></File><File path="Demos\Device\LowLevel\AudioInput\AudioInput.h"></File><File path="Demos\Device\LowLevel\AudioInput\AudioInput.txt"></File><File path="Demos\Device\LowLevel\AudioInput\Descriptors.c"></File><File path="Demos\Device\LowLevel\AudioInput\Descriptors.h"></File><File path="Demos\Device\LowLevel\AudioInput\Doxygen.conf"></File><File path="Demos\Device\LowLevel\AudioInput\makefile"></File></Folder><Folder name="AudioOutput"><File path="Demos\Device\LowLevel\AudioOutput\AudioOutput.c"></File><File path="Demos\Device\LowLevel\AudioOutput\AudioOutput.h"></File><File path="Demos\Device\LowLevel\AudioOutput\AudioOutput.txt"></File><File path="Demos\Device\LowLevel\AudioOutput\Descriptors.c"></File><File path="Demos\Device\LowLevel\AudioOutput\Descriptors.h"></File><File path="Demos\Device\LowLevel\AudioOutput\Doxygen.conf"></File><File path="Demos\Device\LowLevel\AudioOutput\makefile"></File></Folder><Folder name="CDC"><File path="Demos\Device\LowLevel\CDC\CDC.c"></File><File path="Demos\Device\LowLevel\CDC\CDC.h"></File><File path="Demos\Device\LowLevel\CDC\CDC.txt"></File><File path="Demos\Device\LowLevel\CDC\Descriptors.c"></File><File path="Demos\Device\LowLevel\CDC\Descriptors.h"></File><File path="Demos\Device\LowLevel\CDC\Doxygen.conf"></File><File path="Demos\Device\LowLevel\CDC\LUFA CDC.inf"></File><File path="Demos\Device\LowLevel\CDC\makefile"></File></Folder><Folder name="DualCDC"><File path="Demos\Device\LowLevel\DualCDC\Descriptors.c"></File><File path="Demos\Device\LowLevel\DualCDC\Descriptors.h"></File><File path="Demos\Device\LowLevel\DualCDC\Doxygen.conf"></File><File path="Demos\Device\LowLevel\DualCDC\DualCDC.c"></File><File path="Demos\Device\LowLevel\DualCDC\DualCDC.h"></File><File path="Demos\Device\LowLevel\DualCDC\DualCDC.txt"></File><File path="Demos\Device\LowLevel\DualCDC\LUFA DualCDC.inf"></File><File path="Demos\Device\LowLevel\DualCDC\makefile"></File></Folder><Folder name="GenericHID"><File path="Demos\Device\LowLevel\GenericHID\Descriptors.c"></File><File path="Demos\Device\LowLevel\GenericHID\Descriptors.h"></File><File path="Demos\Device\LowLevel\GenericHID\Doxygen.conf"></File><File path="Demos\Device\LowLevel\GenericHID\GenericHID.c"></File><File path="Demos\Device\LowLevel\GenericHID\GenericHID.h"></File><File path="Demos\Device\LowLevel\GenericHID\GenericHID.txt"></File><File path="Demos\Device\LowLevel\GenericHID\makefile"></File></Folder><Folder name="Joystick"><File path="Demos\Device\LowLevel\Joystick\Descriptors.c"></File><File path="Demos\Device\LowLevel\Joystick\Descriptors.h"></File><File path="Demos\Device\LowLevel\Joystick\Doxygen.conf"></File><File path="Demos\Device\LowLevel\Joystick\Joystick.c"></File><File path="Demos\Device\LowLevel\Joystick\Joystick.h"></File><File path="Demos\Device\LowLevel\Joystick\Joystick.txt"></File><File path="Demos\Device\LowLevel\Joystick\makefile"></File></Folder><Folder name="Keyboard"><File path="Demos\Device\LowLevel\Keyboard\Descriptors.c"></File><File path="Demos\Device\LowLevel\Keyboard\Descriptors.h"></File><File path="Demos\Device\LowLevel\Keyboard\Doxygen.conf"></File><File path="Demos\Device\LowLevel\Keyboard\Keyboard.c"></File><File path="Demos\Device\LowLevel\Keyboard\Keyboard.h"></File><File path="Demos\Device\LowLevel\Keyboard\Keyboard.txt"></File><File path="Demos\Device\LowLevel\Keyboard\makefile"></File></Folder><Folder name="KeyboardMouse"><File path="Demos\Device\LowLevel\KeyboardMouse\Descriptors.c"></File><File path="Demos\Device\LowLevel\KeyboardMouse\Descriptors.h"></File><File path="Demos\Device\LowLevel\KeyboardMouse\Doxygen.conf"></File><File path="Demos\Device\LowLevel\KeyboardMouse\KeyboardMouse.c"></File><File path="Demos\Device\LowLevel\KeyboardMouse\KeyboardMouse.h"></File><File path="Demos\Device\LowLevel\KeyboardMouse\KeyboardMouse.txt"></File><File path="Demos\Device\LowLevel\KeyboardMouse\makefile"></File></Folder><Folder name="MassStorage"><Folder name="Lib"><File path="Demos\Device\LowLevel\MassStorage\Lib\DataflashManager.c"></File><File path="Demos\Device\LowLevel\MassStorage\Lib\DataflashManager.h"></File><File path="Demos\Device\LowLevel\MassStorage\Lib\SCSI.c"></File><File path="Demos\Device\LowLevel\MassStorage\Lib\SCSI.h"></File><File path="Demos\Device\LowLevel\MassStorage\Lib\SCSI_Codes.h"></File></Folder><File path="Demos\Device\LowLevel\MassStorage\Descriptors.c"></File><File path="Demos\Device\LowLevel\MassStorage\Descriptors.h"></File><File path="Demos\Device\LowLevel\MassStorage\Doxygen.conf"></File><File path="Demos\Device\LowLevel\MassStorage\makefile"></File><File path="Demos\Device\LowLevel\MassStorage\MassStorage.c"></File><File path="Demos\Device\LowLevel\MassStorage\MassStorage.h"></File><File path="Demos\Device\LowLevel\MassStorage\MassStorage.txt"></File></Folder><Folder name="MIDI"><File path="Demos\Device\LowLevel\MIDI\Descriptors.c"></File><File path="Demos\Device\LowLevel\MIDI\Descriptors.h"></File><File path="Demos\Device\LowLevel\MIDI\Doxygen.conf"></File><File path="Demos\Device\LowLevel\MIDI\makefile"></File><File path="Demos\Device\LowLevel\MIDI\MIDI.c"></File><File path="Demos\Device\LowLevel\MIDI\MIDI.h"></File><File path="Demos\Device\LowLevel\MIDI\MIDI.txt"></File></Folder><Folder name="Mouse"><File path="Demos\Device\LowLevel\Mouse\Descriptors.c"></File><File path="Demos\Device\LowLevel\Mouse\Descriptors.h"></File><File path="Demos\Device\LowLevel\Mouse\Doxygen.conf"></File><File path="Demos\Device\LowLevel\Mouse\makefile"></File><File path="Demos\Device\LowLevel\Mouse\Mouse.c"></File><File path="Demos\Device\LowLevel\Mouse\Mouse.h"></File><File path="Demos\Device\LowLevel\Mouse\Mouse.txt"></File></Folder><Folder name="RNDISEthernet"><Folder name="Lib"><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\Webserver.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ARP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ARP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\DHCP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\DHCP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\Ethernet.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\Ethernet.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\EthernetProtocols.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ICMP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ICMP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\IP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\IP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ProtocolDecoders.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ProtocolDecoders.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\RNDIS.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\RNDIS.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\RNDISConstants.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\TCP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\TCP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\UDP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\UDP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\Webserver.c"></File></Folder><File path="Demos\Device\LowLevel\RNDISEthernet\Descriptors.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Descriptors.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Doxygen.conf"></File><File path="Demos\Device\LowLevel\RNDISEthernet\LUFA RNDIS.inf"></File><File path="Demos\Device\LowLevel\RNDISEthernet\makefile"></File><File path="Demos\Device\LowLevel\RNDISEthernet\RNDISEthernet.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\RNDISEthernet.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\RNDISEthernet.txt"></File></Folder><Folder name="USBtoSerial"><Folder name="Lib"><File path="Demos\Device\LowLevel\USBtoSerial\Lib\RingBuff.c"></File><File path="Demos\Device\LowLevel\USBtoSerial\Lib\RingBuff.h"></File></Folder><File path="Demos\Device\LowLevel\USBtoSerial\Descriptors.c"></File><File path="Demos\Device\LowLevel\USBtoSerial\Descriptors.h"></File><File path="Demos\Device\LowLevel\USBtoSerial\Doxygen.conf"></File><File path="Demos\Device\LowLevel\USBtoSerial\LUFA USBtoSerial.inf"></File><File path="Demos\Device\LowLevel\USBtoSerial\makefile"></File><File path="Demos\Device\LowLevel\USBtoSerial\USBtoSerial.c"></File><File path="Demos\Device\LowLevel\USBtoSerial\USBtoSerial.h"></File><File path="Demos\Device\LowLevel\USBtoSerial\USBtoSerial.txt"></File></Folder><File path="Demos\Device\LowLevel\makefile"></File></Folder><Folder name="Incomplete"><Folder name="SideShow"><File path="Demos\Device\Incomplete\Sideshow\SideshowContent.h"></File><File path="Demos\Device\Incomplete\Sideshow\Descriptors.c"></File><File path="Demos\Device\Incomplete\Sideshow\Descriptors.h"></File><File path="Demos\Device\Incomplete\Sideshow\makefile"></File><File path="Demos\Device\Incomplete\Sideshow\Sideshow.c"></File><File path="Demos\Device\Incomplete\Sideshow\Sideshow.h"></File><File path="Demos\Device\Incomplete\Sideshow\SideshowApplications.c"></File><File path="Demos\Device\Incomplete\Sideshow\SideshowApplications.h"></File><File path="Demos\Device\Incomplete\Sideshow\SideshowCommands.c"></File><File path="Demos\Device\Incomplete\Sideshow\SideshowCommands.h"></File><File path="Demos\Device\Incomplete\Sideshow\SideshowCommon.c"></File><File path="Demos\Device\Incomplete\Sideshow\SideshowCommon.h"></File><File path="Demos\Device\Incomplete\Sideshow\SideshowContent.c"></File></Folder></Folder><File path="Demos\Device\makefile"></File></Folder><Folder name="Host"><Folder name="ClassDriver"><Folder name="CDCHost"><File path="Demos\Host\ClassDriver\CDCHost\CDCHost.c"></File><File path="Demos\Host\ClassDriver\CDCHost\CDCHost.h"></File><File path="Demos\Host\ClassDriver\CDCHost\CDCHost.txt"></File><File path="Demos\Host\ClassDriver\CDCHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\CDCHost\makefile"></File></Folder><Folder name="GenericHIDHost"><File path="Demos\Host\ClassDriver\GenericHIDHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\GenericHIDHost\GenericHIDHost.c"></File><File path="Demos\Host\ClassDriver\GenericHIDHost\GenericHIDHost.h"></File><File path="Demos\Host\ClassDriver\GenericHIDHost\GenericHIDHost.txt"></File><File path="Demos\Host\ClassDriver\GenericHIDHost\makefile"></File></Folder><Folder name="KeyboardHost"><File path="Demos\Host\ClassDriver\KeyboardHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\KeyboardHost\KeyboardHost.c"></File><File path="Demos\Host\ClassDriver\KeyboardHost\KeyboardHost.h"></File><File path="Demos\Host\ClassDriver\KeyboardHost\KeyboardHost.txt"></File><File path="Demos\Host\ClassDriver\KeyboardHost\makefile"></File></Folder><Folder name="KeyboardHostWithParser"><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\makefile"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\HIDReport.c"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\HIDReport.h"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\KeyboardHostWithParser.c"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\KeyboardHostWithParser.h"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\KeyboardHostWithParser.txt"></File></Folder><Folder name="MassStorageHost"><Folder name="Lib"><File path="Demos\Host\ClassDriver\MassStorageHost\Lib\MassStoreCommands.c"></File><File path="Demos\Host\ClassDriver\MassStorageHost\Lib\MassStoreCommands.h"></File><File path="Demos\Host\ClassDriver\MassStorageHost\Lib\SCSI_Codes.h"></File></Folder><File path="Demos\Host\ClassDriver\MassStorageHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\MassStorageHost\makefile"></File><File path="Demos\Host\ClassDriver\MassStorageHost\MassStorageHost.c"></File><File path="Demos\Host\ClassDriver\MassStorageHost\MassStorageHost.h"></File><File path="Demos\Host\ClassDriver\MassStorageHost\MassStorageHost.txt"></File></Folder><Folder name="MouseHost"><File path="Demos\Host\ClassDriver\MouseHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\MouseHost\makefile"></File><File path="Demos\Host\ClassDriver\MouseHost\MouseHost.c"></File><File path="Demos\Host\ClassDriver\MouseHost\MouseHost.h"></File><File path="Demos\Host\ClassDriver\MouseHost\MouseHost.txt"></File></Folder><Folder name="MouseHostWithParser"><File path="Demos\Host\ClassDriver\MouseHostWithParser\MouseHostWithParser.txt"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\HIDReport.c"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\HIDReport.h"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\makefile"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\MouseHostWithParser.c"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\MouseHostWithParser.h"></File></Folder><Folder name="StillImageHost"><Folder name="Lib"><File path="Demos\Host\ClassDriver\StillImageHost\Lib\PIMACodes.h"></File><File path="Demos\Host\ClassDriver\StillImageHost\Lib\StillImageCommands.c"></File><File path="Demos\Host\ClassDriver\StillImageHost\Lib\StillImageCommands.h"></File></Folder><File path="Demos\Host\ClassDriver\StillImageHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\StillImageHost\makefile"></File><File path="Demos\Host\ClassDriver\StillImageHost\StillImageHost.c"></File><File path="Demos\Host\ClassDriver\StillImageHost\StillImageHost.h"></File><File path="Demos\Host\ClassDriver\StillImageHost\StillImageHost.txt"></File></Folder><File path="Demos\Host\ClassDriver\makefile"></File></Folder><Folder name="LowLevel"><Folder name="CDCHost"><File path="Demos\Host\LowLevel\CDCHost\CDCHost.c"></File><File path="Demos\Host\LowLevel\CDCHost\CDCHost.h"></File><File path="Demos\Host\LowLevel\CDCHost\CDCHost.txt"></File><File path="Demos\Host\LowLevel\CDCHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\CDCHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\CDCHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\CDCHost\makefile"></File></Folder><Folder name="GenericHIDHost"><File path="Demos\Host\LowLevel\GenericHIDHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\GenericHIDHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\GenericHIDHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\GenericHIDHost\GenericHIDHost.c"></File><File path="Demos\Host\LowLevel\GenericHIDHost\GenericHIDHost.h"></File><File path="Demos\Host\LowLevel\GenericHIDHost\GenericHIDHost.txt"></File><File path="Demos\Host\LowLevel\GenericHIDHost\makefile"></File></Folder><Folder name="KeyboardHost"><File path="Demos\Host\LowLevel\KeyboardHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\KeyboardHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\KeyboardHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\KeyboardHost\KeyboardHost.c"></File><File path="Demos\Host\LowLevel\KeyboardHost\KeyboardHost.h"></File><File path="Demos\Host\LowLevel\KeyboardHost\KeyboardHost.txt"></File><File path="Demos\Host\LowLevel\KeyboardHost\makefile"></File></Folder><Folder name="KeyboardHostWithParser"><File path="Demos\Host\LowLevel\KeyboardHostWithParser\makefile"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\Doxygen.conf"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\HIDReport.c"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\HIDReport.h"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\KeyboardHostWithParser.c"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\KeyboardHostWithParser.h"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\KeyboardHostWithParser.txt"></File></Folder><Folder name="MassStorageHost"><Folder name="Lib"><File path="Demos\Host\LowLevel\MassStorageHost\Lib\MassStoreCommands.c"></File><File path="Demos\Host\LowLevel\MassStorageHost\Lib\MassStoreCommands.h"></File><File path="Demos\Host\LowLevel\MassStorageHost\Lib\SCSI_Codes.h"></File></Folder><File path="Demos\Host\LowLevel\MassStorageHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\MassStorageHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\MassStorageHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\MassStorageHost\makefile"></File><File path="Demos\Host\LowLevel\MassStorageHost\MassStorageHost.c"></File><File path="Demos\Host\LowLevel\MassStorageHost\MassStorageHost.h"></File><File path="Demos\Host\LowLevel\MassStorageHost\MassStorageHost.txt"></File></Folder><Folder name="MouseHost"><File path="Demos\Host\LowLevel\MouseHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\MouseHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\MouseHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\MouseHost\makefile"></File><File path="Demos\Host\LowLevel\MouseHost\MouseHost.c"></File><File path="Demos\Host\LowLevel\MouseHost\MouseHost.h"></File><File path="Demos\Host\LowLevel\MouseHost\MouseHost.txt"></File></Folder><Folder name="MouseHostWithParser"><File path="Demos\Host\LowLevel\MouseHostWithParser\MouseHostWithParser.txt"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\Doxygen.conf"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\HIDReport.c"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\HIDReport.h"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\makefile"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\MouseHostWithParser.c"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\MouseHostWithParser.h"></File></Folder><Folder name="StillImageHost"><Folder name="Lib"><File path="Demos\Host\LowLevel\StillImageHost\Lib\PIMACodes.h"></File><File path="Demos\Host\LowLevel\StillImageHost\Lib\StillImageCommands.c"></File><File path="Demos\Host\LowLevel\StillImageHost\Lib\StillImageCommands.h"></File></Folder><File path="Demos\Host\LowLevel\StillImageHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\StillImageHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\StillImageHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\StillImageHost\makefile"></File><File path="Demos\Host\LowLevel\StillImageHost\StillImageHost.c"></File><File path="Demos\Host\LowLevel\StillImageHost\StillImageHost.h"></File><File path="Demos\Host\LowLevel\StillImageHost\StillImageHost.txt"></File></Folder><File path="Demos\Host\LowLevel\makefile"></File></Folder><Folder name="Incomplete"><Folder name="BluetoothHost"><File path="Demos\Host\Incomplete\BluetoothHost\makefile"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothACLPackets.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothACLPackets.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothClassCodes.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothHCICommands.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothHCICommands.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothHost.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothHost.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothStack.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothStack.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\ConfigDescriptor.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\ConfigDescriptor.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\DeviceDescriptor.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\DeviceDescriptor.h"></File></Folder></Folder><File path="Demos\Host\makefile"></File></Folder><Folder name="OTG"><Folder name="TestApp"><File path="Demos\OTG\TestApp\Descriptors.c"></File><File path="Demos\OTG\TestApp\Descriptors.h"></File><File path="Demos\OTG\TestApp\Doxygen.conf"></File><File path="Demos\OTG\TestApp\makefile"></File><File path="Demos\OTG\TestApp\TestApp.c"></File><File path="Demos\OTG\TestApp\TestApp.h"></File><File path="Demos\OTG\TestApp\TestApp.txt"></File><File path="Demos\OTG\TestApp\TestEvents.c"></File><File path="Demos\OTG\TestApp\TestEvents.h"></File></Folder><File path="Demos\OTG\makefile"></File></Folder><File path="Demos\makefile"></File></Folder><Folder name="LUFA"><Folder name="Common"><File path="LUFA\Common\Common.h"></File><File path="LUFA\Common\FunctionAttributes.h"></File><File path="LUFA\Common\BoardTypes.h"></File></Folder><Folder name="Drivers"><Folder name="USB"><Folder name="LowLevel"><File path="LUFA\Drivers\USB\LowLevel\HostChapter9.h"></File><File path="LUFA\Drivers\USB\LowLevel\LowLevel.c"></File><File path="LUFA\Drivers\USB\LowLevel\LowLevel.h"></File><File path="LUFA\Drivers\USB\LowLevel\Pipe.c"></File><File path="LUFA\Drivers\USB\LowLevel\Pipe.h"></File><File path="LUFA\Drivers\USB\LowLevel\DevChapter9.c"></File><File path="LUFA\Drivers\USB\LowLevel\DevChapter9.h"></File><File path="LUFA\Drivers\USB\LowLevel\Device.h"></File><File path="LUFA\Drivers\USB\LowLevel\Endpoint.c"></File><File path="LUFA\Drivers\USB\LowLevel\Endpoint.h"></File><File path="LUFA\Drivers\USB\LowLevel\Host.c"></File><File path="LUFA\Drivers\USB\LowLevel\Host.h"></File><File path="LUFA\Drivers\USB\LowLevel\HostChapter9.c"></File><File path="LUFA\Drivers\USB\LowLevel\OTG.h"></File></Folder><Folder name="HighLevel"><File path="LUFA\Drivers\USB\HighLevel\USBTask.h"></File><File path="LUFA\Drivers\USB\HighLevel\Events.c"></File><File path="LUFA\Drivers\USB\HighLevel\Events.h"></File><File path="LUFA\Drivers\USB\HighLevel\USBInterrupt.c"></File><File path="LUFA\Drivers\USB\HighLevel\USBInterrupt.h"></File><File path="LUFA\Drivers\USB\HighLevel\USBTask.c"></File><File path="LUFA\Drivers\USB\HighLevel\StdDescriptors.h"></File><File path="LUFA\Drivers\USB\HighLevel\StdRequestType.h"></File><File path="LUFA\Drivers\USB\HighLevel\StreamCallbacks.h"></File><File path="LUFA\Drivers\USB\HighLevel\USBMode.h"></File><File path="LUFA\Drivers\USB\HighLevel\ConfigDescriptor.c"></File><File path="LUFA\Drivers\USB\HighLevel\ConfigDescriptor.h"></File></Folder><Folder name="Class"><Folder name="Device"><File path="LUFA\Drivers\USB\Class\Device\HID.c"></File><File path="LUFA\Drivers\USB\Class\Device\HID.h"></File><File path="LUFA\Drivers\USB\Class\Device\CDC.c"></File><File path="LUFA\Drivers\USB\Class\Device\CDC.h"></File><File path="LUFA\Drivers\USB\Class\Device\RNDIS.c"></File><File path="LUFA\Drivers\USB\Class\Device\RNDIS.h"></File><File path="LUFA\Drivers\USB\Class\Device\RNDISConstants.h"></File><File path="LUFA\Drivers\USB\Class\Device\MassStorage.c"></File><File path="LUFA\Drivers\USB\Class\Device\MassStorage.h"></File><File path="LUFA\Drivers\USB\Class\Device\Audio.c"></File><File path="LUFA\Drivers\USB\Class\Device\Audio.h"></File><File path="LUFA\Drivers\USB\Class\Device\MIDI.c"></File><File path="LUFA\Drivers\USB\Class\Device\MIDI.h"></File></Folder><Folder name="Host"><File path="LUFA\Drivers\USB\Class\Host\HIDParser.c"></File><File path="LUFA\Drivers\USB\Class\Host\HIDParser.h"></File><File path="LUFA\Drivers\USB\Class\Host\HIDReportData.h"></File><File path="LUFA\Drivers\USB\Class\Host\CDC.c"></File><File path="LUFA\Drivers\USB\Class\Host\CDC.h"></File><File path="LUFA\Drivers\USB\Class\Host\HID.c"></File><File path="LUFA\Drivers\USB\Class\Host\HID.h"></File><File path="LUFA\Drivers\USB\Class\Host\Audio.c"></File><File path="LUFA\Drivers\USB\Class\Host\Audio.h"></File><File path="LUFA\Drivers\USB\Class\Host\MIDI.c"></File><File path="LUFA\Drivers\USB\Class\Host\MIDI.h"></File><File path="LUFA\Drivers\USB\Class\Host\MassStorage.c"></File><File path="LUFA\Drivers\USB\Class\Host\MassStorage.h"></File><File path="LUFA\Drivers\USB\Class\Host\StillImage.c"></File><File path="LUFA\Drivers\USB\Class\Host\StillImage.h"></File></Folder><Folder name="Common"><File path="LUFA\Drivers\USB\Class\Common\Audio.h"></File><File path="LUFA\Drivers\USB\Class\Common\CDC.h"></File><File path="LUFA\Drivers\USB\Class\Common\HID.h"></File><File path="LUFA\Drivers\USB\Class\Common\MassStorage.h"></File><File path="LUFA\Drivers\USB\Class\Common\MIDI.h"></File><File path="LUFA\Drivers\USB\Class\Common\RNDIS.h"></File><File path="LUFA\Drivers\USB\Class\Common\StillImage.h"></File></Folder><File path="LUFA\Drivers\USB\Class\Audio.h"></File><File path="LUFA\Drivers\USB\Class\CDC.h"></File><File path="LUFA\Drivers\USB\Class\HID.h"></File><File path="LUFA\Drivers\USB\Class\MassStorage.h"></File><File path="LUFA\Drivers\USB\Class\MIDI.h"></File><File path="LUFA\Drivers\USB\Class\RNDIS.h"></File><File path="LUFA\Drivers\USB\Class\StillImage.h"></File></Folder><File path="LUFA\Drivers\USB\USB.h"></File></Folder><Folder name="Misc"><File path="LUFA\Drivers\Misc\TerminalCodes.h"></File></Folder><Folder name="Board"><Folder name="USBKEY"><File path="LUFA\Drivers\Board\USBKEY\Dataflash.h"></File><File path="LUFA\Drivers\Board\USBKEY\Joystick.h"></File><File path="LUFA\Drivers\Board\USBKEY\AT45DB642D.h"></File><File path="LUFA\Drivers\Board\USBKEY\LEDs.h"></File><File path="LUFA\Drivers\Board\USBKEY\Buttons.h"></File></Folder><Folder name="STK526"><File path="LUFA\Drivers\Board\STK526\Dataflash.h"></File><File path="LUFA\Drivers\Board\STK526\Joystick.h"></File><File path="LUFA\Drivers\Board\STK526\AT45DB642D.h"></File><File path="LUFA\Drivers\Board\STK526\LEDs.h"></File><File path="LUFA\Drivers\Board\STK526\Buttons.h"></File></Folder><Folder name="STK525"><File path="LUFA\Drivers\Board\STK525\Dataflash.h"></File><File path="LUFA\Drivers\Board\STK525\Joystick.h"></File><File path="LUFA\Drivers\Board\STK525\AT45DB321C.h"></File><File path="LUFA\Drivers\Board\STK525\LEDs.h"></File><File path="LUFA\Drivers\Board\STK525\Buttons.h"></File></Folder><Folder name="RZUSBSTICK"><File path="LUFA\Drivers\Board\RZUSBSTICK\LEDs.h"></File></Folder><Folder name="ATAVRUSBRF01"><File path="LUFA\Drivers\Board\ATAVRUSBRF01\LEDs.h"></File><File path="LUFA\Drivers\Board\ATAVRUSBRF01\Buttons.h"></File></Folder><File path="LUFA\Drivers\Board\Temperature.h"></File><File path="LUFA\Drivers\Board\Dataflash.h"></File><File path="LUFA\Drivers\Board\Joystick.h"></File><File path="LUFA\Drivers\Board\Temperature.c"></File><File path="LUFA\Drivers\Board\LEDs.h"></File><File path="LUFA\Drivers\Board\Buttons.h"></File></Folder><Folder name="Peripheral"><Folder name="AT90USBXXX67"><File path="LUFA\Drivers\Peripheral\AT90USBXXX67\ADC.h"></File></Folder><File path="LUFA\Drivers\Peripheral\ADC.h"></File><File path="LUFA\Drivers\Peripheral\Serial.c"></File><File path="LUFA\Drivers\Peripheral\Serial.h"></File><File path="LUFA\Drivers\Peripheral\SPI.h"></File><File path="LUFA\Drivers\Peripheral\SerialStream.c"></File><File path="LUFA\Drivers\Peripheral\SerialStream.h"></File></Folder></Folder><Folder name="DriverStubs"><File path="LUFA\DriverStubs\Dataflash.h"></File><File path="LUFA\DriverStubs\Joystick.h"></File><File path="LUFA\DriverStubs\LEDs.h"></File><File path="LUFA\DriverStubs\Buttons.h"></File></Folder><File path="LUFA\makefile"></File><File path="LUFA\Version.h"></File><File path="LUFA\BuildingLinkableLibraries.txt"></File><File path="LUFA\ChangeLog.txt"></File><File path="LUFA\CompileTimeTokens.txt"></File><File path="LUFA\DirectorySummaries.txt"></File><File path="LUFA\Doxygen.conf"></File><File path="LUFA\GettingStarted.txt"></File><File path="LUFA\Groups.txt"></File><File path="LUFA\LUFAPoweredProjects.txt"></File><File path="LUFA\MainPage.txt"></File><File path="LUFA\MigrationInformation.txt"></File><File path="LUFA\VIDAndPIDValues.txt"></File><File path="LUFA\WritingBoardDrivers.txt"></File><File path="LUFA\FutureChanges.txt"></File><File path="LUFA\LibraryResources.txt"></File><File path="LUFA\DeviceSupport.txt"></File><File path="LUFA\License.txt"></File><File path="LUFA\AboutLUFA.txt"></File><File path="LUFA\DevelopingWithLUFA.txt"></File><File path="LUFA\Donating.txt"></File></Folder><Folder name="Projects"><Folder name="MagStripe"><Folder name="Lib"><File path="Projects\Magstripe\Lib\CircularBitBuffer.c"></File><File path="Projects\Magstripe\Lib\CircularBitBuffer.h"></File><File path="Projects\Magstripe\Lib\MagstripeHW.h"></File></Folder><File path="Projects\Magstripe\Descriptors.c"></File><File path="Projects\Magstripe\Descriptors.h"></File><File path="Projects\Magstripe\Magstripe.c"></File><File path="Projects\Magstripe\Magstripe.h"></File><File path="Projects\Magstripe\makefile"></File><File path="Projects\Magstripe\Magstripe.txt"></File><File path="Projects\Magstripe\Doxygen.conf"></File></Folder><File path="Projects\makefile"></File></Folder><Folder name="Bootloaders"><Folder name="DFU"><File path="Bootloaders\DFU\BootloaderDFU.c"></File><File path="Bootloaders\DFU\BootloaderDFU.h"></File><File path="Bootloaders\DFU\Descriptors.c"></File><File path="Bootloaders\DFU\Descriptors.h"></File><File path="Bootloaders\DFU\makefile"></File><File path="Bootloaders\DFU\BootloaderDFU.txt"></File><File path="Bootloaders\DFU\Doxygen.conf"></File></Folder><Folder name="CDC"><File path="Bootloaders\CDC\BootloaderCDC.c"></File><File path="Bootloaders\CDC\BootloaderCDC.h"></File><File path="Bootloaders\CDC\Descriptors.c"></File><File path="Bootloaders\CDC\Descriptors.h"></File><File path="Bootloaders\CDC\makefile"></File><File path="Bootloaders\CDC\LUFA CDC Bootloader.inf"></File><File path="Bootloaders\CDC\Doxygen.conf"></File><File path="Bootloaders\CDC\BootloaderCDC.txt"></File></Folder><Folder name="TeensyHID"><File path="Bootloaders\TeensyHID\Descriptors.c"></File><File path="Bootloaders\TeensyHID\Descriptors.h"></File><File path="Bootloaders\TeensyHID\makefile"></File><File path="Bootloaders\TeensyHID\TeensyHID.c"></File><File path="Bootloaders\TeensyHID\TeensyHID.h"></File><File path="Bootloaders\TeensyHID\TeensyHID.txt"></File></Folder><File path="Bootloaders\makefile"></File></Folder><File path="makefile"></File><File path="README.txt"></File></Project>
\ No newline at end of file
--- /dev/null
+/*\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2009.\r
+ \r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+ Permission to use, copy, modify, and distribute this software\r
+ and its documentation for any purpose and without fee is hereby\r
+ granted, provided that the above copyright notice appear in all\r
+ copies and that both that the copyright notice and this\r
+ permission notice and warranty disclaimer appear in supporting\r
+ documentation, and that the name of the author not be used in\r
+ advertising or publicity pertaining to distribution of the\r
+ software without specific, written prior permission.\r
+\r
+ The author disclaim all warranties with regard to this\r
+ software, including all implied warranties of merchantability\r
+ and fitness. In no event shall the author be liable for any\r
+ special, indirect or consequential damages or any damages\r
+ whatsoever resulting from loss of use, data or profits, whether\r
+ in an action of contract, negligence or other tortious action,\r
+ arising out of or in connection with the use or performance of\r
+ this software.\r
+*/\r
+\r
+/** \ingroup Group_USBClassSI\r
+ * @{\r
+ */\r
+\r
+#ifndef _SI_CLASS_COMMON_H_\r
+#define _SI_CLASS_COMMON_H_\r
+\r
+ /* Includes: */\r
+ #include "../../USB.h"\r
+\r
+ #include <string.h>\r
+\r
+ /* Enable C linkage for C++ Compilers: */\r
+ #if defined(__cplusplus)\r
+ extern "C" {\r
+ #endif\r
+\r
+ /* Macros: */\r
+\r
+\r
+ /* Type defines: */\r
+ \r
+ \r
+ /* Enums: */\r
+ \r
+ \r
+ /* Type Defines: */\r
+ \r
+ \r
+ /* Disable C linkage for C++ Compilers: */\r
+ #if defined(__cplusplus)\r
+ }\r
+ #endif\r
+ \r
+#endif\r
+\r
+/** @} */\r
*\r
* \section Sec_MigrationXXXXXX Migrating from 090605 to XXXXXX\r
*\r
+ * <b>All</b>\r
+ * - The "simple scheduler" has been removed, as it was little more than an abtracted loop and caused much confusion. User\r
+ * applications using the scheduler should switch to regular loops instead.\r
+ * - The "Dynamic Memory Block Allocator" has been removed, as it was unused in (and unrelated to) the LUFA library and never\r
+ * used in user applications. The library is available from the author's website for those wishing to still use it in their\r
+ * applications.\r
*\r
* \section Sec_Migration090605 Migrating from 090510 to 090605\r
*\r