Removed support for endpoint/pipe non-control interrupts; these did not act in the way users expected, and had many subtle issues.
{ .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
#endif\r
\r
- #if !defined(INTERRUPT_DATA_ENDPOINT)\r
{ .Task = USB_HID_Report , .TaskStatus = TASK_STOP },\r
- #endif\r
};\r
\r
/** Static buffer to hold the last received report from the host, so that it can be echoed back in the next sent report */\r
EVENT_HANDLER(USB_Disconnect)\r
{\r
/* Stop running HID reporting and USB management tasks */\r
- #if !defined(INTERRUPT_DATA_ENDPOINT)\r
Scheduler_SetTaskMode(USB_HID_Report, TASK_STOP);\r
- #endif\r
\r
#if !defined(INTERRUPT_CONTROL_ENDPOINT)\r
Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
ENDPOINT_DIR_IN, GENERIC_EPSIZE,\r
ENDPOINT_BANK_SINGLE);\r
\r
- #if defined(INTERRUPT_DATA_ENDPOINT)\r
- /* Enable the endpoint IN interrupt ISR for the report endpoint */\r
- USB_INT_Enable(ENDPOINT_INT_IN);\r
- #endif\r
-\r
/* Setup Generic OUT Report Endpoint */\r
Endpoint_ConfigureEndpoint(GENERIC_OUT_EPNUM, EP_TYPE_INTERRUPT,\r
ENDPOINT_DIR_OUT, GENERIC_EPSIZE,\r
ENDPOINT_BANK_SINGLE);\r
\r
- #if defined(INTERRUPT_DATA_ENDPOINT)\r
- /* Enable the endpoint OUT interrupt ISR for the report endpoint */\r
- USB_INT_Enable(ENDPOINT_INT_OUT);\r
- #endif\r
-\r
/* Indicate USB connected and ready */\r
UpdateStatus(Status_USBReady);\r
}\r
DataArray[i] = LastReceived[i];\r
}\r
\r
-#if !defined(INTERRUPT_DATA_ENDPOINT)\r
TASK(USB_HID_Report)\r
{\r
/* Check if the USB system is connected to a host */\r
}\r
}\r
}\r
-#endif\r
\r
+#if defined(INTERRUPT_CONTROL_ENDPOINT)\r
/** ISR for the general Pipe/Endpoint interrupt vector. This ISR fires when an endpoint's status changes (such as\r
* a packet has been received) on an endpoint with its corresponding ISR enabling bits set. This is used to send\r
* HID packets to the host each time the HID interrupt endpoints polling period elapses, as managed by the USB\r
/* Save previously selected endpoint before selecting a new endpoint */\r
uint8_t PrevSelectedEndpoint = Endpoint_GetCurrentEndpoint();\r
\r
- #if defined(INTERRUPT_CONTROL_ENDPOINT)\r
/* Check if the control endpoint has received a request */\r
if (Endpoint_HasEndpointInterrupted(ENDPOINT_CONTROLEP))\r
{\r
/* Handshake the endpoint setup interrupt - must be after the call to USB_USBTask() */\r
USB_INT_Clear(ENDPOINT_INT_SETUP);\r
}\r
- #endif\r
-\r
- #if defined(INTERRUPT_DATA_ENDPOINT)\r
- /* Check if Generic IN endpoint has interrupted */\r
- if (Endpoint_HasEndpointInterrupted(GENERIC_IN_EPNUM))\r
- {\r
- /* Select the Generic IN Report Endpoint */\r
- Endpoint_SelectEndpoint(GENERIC_IN_EPNUM);\r
-\r
- /* Clear the endpoint IN interrupt flag */\r
- USB_INT_Clear(ENDPOINT_INT_IN);\r
-\r
- /* Clear the Generic IN Report endpoint interrupt and select the endpoint */\r
- Endpoint_ClearEndpointInterrupt(GENERIC_IN_EPNUM);\r
-\r
- /* Create a temporary buffer to hold the report to send to the host */\r
- uint8_t GenericData[GENERIC_REPORT_SIZE];\r
- \r
- /* Create Generic Report Data */\r
- CreateGenericHIDReport(GenericData);\r
-\r
- /* Write Generic Report Data */\r
- Endpoint_Write_Stream_LE(&GenericData, sizeof(GenericData));\r
-\r
- /* Finalize the stream transfer to send the last packet */\r
- Endpoint_ClearIN();\r
- }\r
-\r
- /* Check if Generic OUT endpoint has interrupted */\r
- if (Endpoint_HasEndpointInterrupted(GENERIC_OUT_EPNUM))\r
- {\r
- /* Select the Generic OUT Report Endpoint */\r
- Endpoint_SelectEndpoint(GENERIC_OUT_EPNUM);\r
-\r
- /* Clear the endpoint OUT Interrupt flag */\r
- USB_INT_Clear(ENDPOINT_INT_OUT);\r
-\r
- /* Clear the Generic OUT Report endpoint interrupt and select the endpoint */\r
- Endpoint_ClearEndpointInterrupt(GENERIC_OUT_EPNUM);\r
-\r
- /* Create a temporary buffer to hold the read in report from the host */\r
- uint8_t GenericData[GENERIC_REPORT_SIZE];\r
- \r
- /* Read Generic Report Data */\r
- Endpoint_Read_Stream_LE(&GenericData, sizeof(GenericData));\r
- \r
- /* Process Generic Report Data */\r
- ProcessGenericHIDReport(GenericData);\r
-\r
- /* Finalize the stream transfer to send the last packet */\r
- Endpoint_ClearOUT();\r
- }\r
- #endif\r
\r
/* Restore previously selected endpoint */\r
Endpoint_SelectEndpoint(PrevSelectedEndpoint);\r
}\r
+#endif\r
* which services control requests from the host. If not defined, the control endpoint\r
* is serviced via polling using the task scheduler.</td>\r
* </tr>\r
- * <tr>\r
- * <td>INTERRUPT_DATA_ENDPOINT</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, this causes the demo to enable interrupts for the data endpoints,\r
- * which services incoming LED reports and outgoing key status reports to and from the host.\r
- * If not defined, the data endpoints are serviced via polling using the task scheduler.</td>\r
- * </tr>\r
* </table>\r
*/\r
bool UsingReportProtocol = true;\r
\r
/** Current Idle period. This is set by the host via a Set Idle HID class request to silence the device's reports\r
- * for either the entire idle duration, or until the report status changes (e.g. the user moves the mouse).\r
+ * for either the entire idle duration, or until the report status changes (e.g. the user presses a key).\r
*/\r
-uint8_t IdleCount = 0;\r
+uint16_t IdleCount = 500;\r
\r
/** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle\r
* milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request \r
EVENT_HANDLER(USB_Disconnect)\r
{\r
/* Stop running keyboard reporting and USB management tasks */\r
- #if !defined(INTERRUPT_DATA_ENDPOINT)\r
Scheduler_SetTaskMode(USB_Keyboard_Report, TASK_STOP);\r
- #endif\r
\r
#if !defined(INTERRUPT_CONTROL_ENDPOINT)\r
Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
ENDPOINT_DIR_IN, KEYBOARD_EPSIZE,\r
ENDPOINT_BANK_SINGLE);\r
\r
- #if defined(INTERRUPT_DATA_ENDPOINT)\r
- /* Enable the endpoint IN interrupt ISR for the report endpoint */\r
- USB_INT_Enable(ENDPOINT_INT_IN);\r
- #endif\r
-\r
/* Setup Keyboard LED Report Endpoint */\r
Endpoint_ConfigureEndpoint(KEYBOARD_LEDS_EPNUM, EP_TYPE_INTERRUPT,\r
ENDPOINT_DIR_OUT, KEYBOARD_EPSIZE,\r
ENDPOINT_BANK_SINGLE);\r
\r
- #if defined(INTERRUPT_DATA_ENDPOINT)\r
- /* Enable the endpoint OUT interrupt ISR for the LED report endpoint */\r
- USB_INT_Enable(ENDPOINT_INT_OUT);\r
- #endif\r
-\r
/* Indicate USB connected and ready */\r
UpdateStatus(Status_USBReady);\r
\r
- #if !defined(INTERRUPT_DATA_ENDPOINT)\r
/* Start running keyboard reporting task */\r
Scheduler_SetTaskMode(USB_Keyboard_Report, TASK_RUN);\r
- #endif\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
}\r
\r
/** Sends the next HID report to the host, via the keyboard data endpoint. */\r
-static inline void SendNextReport(void)\r
+void SendNextReport(void)\r
{\r
static USB_KeyboardReport_Data_t PrevKeyboardReportData;\r
USB_KeyboardReport_Data_t KeyboardReportData;\r
/* Create the next keyboard report for transmission to the host */\r
CreateKeyboardReport(&KeyboardReportData);\r
\r
- /* Check if the idle period is set */\r
- if (IdleCount)\r
- {\r
- /* Check if idle period has elapsed */\r
- if (!(IdleMSRemaining))\r
- {\r
- /* Reset the idle time remaining counter, must multiply by 4 to get the duration in milliseconds */\r
- IdleMSRemaining = (IdleCount << 2);\r
- }\r
- else\r
- {\r
- /* Idle period not elapsed, indicate that a report must not be sent unless the report has changed */\r
- SendReport = (memcmp(&PrevKeyboardReportData, &KeyboardReportData, sizeof(USB_KeyboardReport_Data_t)) != 0);\r
- }\r
- }\r
+ /* Check to see if the report data has changed - if so a report MUST be sent */\r
+ SendReport = (memcmp(&PrevKeyboardReportData, &KeyboardReportData, sizeof(USB_KeyboardReport_Data_t)) != 0);\r
\r
/* Save the current report data for later comparison to check for changes */\r
PrevKeyboardReportData = KeyboardReportData;\r
-\r
+ \r
+ /* Check if the idle period is set and has elapsed */\r
+ if ((IdleCount != HID_IDLE_CHANGESONLY) && (!(IdleMSRemaining)))\r
+ {\r
+ /* Reset the idle time remaining counter, must multiply by 4 to get the duration in milliseconds */\r
+ IdleMSRemaining = (IdleCount << 2);\r
+ \r
+ /* Idle period is set and has elapsed, must send a report to the host */\r
+ SendReport = true;\r
+ }\r
+ \r
/* Select the Keyboard Report Endpoint */\r
Endpoint_SelectEndpoint(KEYBOARD_EPNUM);\r
\r
- /* Check if Keyboard Endpoint Ready for Read/Write, and if we should send a report */\r
+ /* Check if Keyboard Endpoint Ready for Read/Write and if we should send a new report */\r
if (Endpoint_IsReadWriteAllowed() && SendReport)\r
{\r
/* Write Keyboard Report Data */\r
Endpoint_Write_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData));\r
-\r
+ \r
/* Finalize the stream transfer to send the last packet */\r
Endpoint_ClearIN();\r
}\r
}\r
\r
/** Reads the next LED status report from the host from the LED data endpoint, if one has been sent. */\r
-static inline void ReceiveNextReport(void)\r
+void ReceiveNextReport(void)\r
{\r
/* Select the Keyboard LED Report Endpoint */\r
Endpoint_SelectEndpoint(KEYBOARD_LEDS_EPNUM);\r
LEDs_SetAllLEDs(LEDMask);\r
}\r
\r
-#if !defined(INTERRUPT_DATA_ENDPOINT)\r
/** Function to manage HID report generation and transmission to the host, when in report mode. */\r
TASK(USB_Keyboard_Report)\r
{\r
ReceiveNextReport();\r
}\r
}\r
-#endif\r
\r
+#if defined(INTERRUPT_CONTROL_ENDPOINT)\r
/** ISR for the general Pipe/Endpoint interrupt vector. This ISR fires when an endpoint's status changes (such as\r
* a packet has been received) on an endpoint with its corresponding ISR enabling bits set. This is used to send\r
* HID packets to the host each time the HID interrupt endpoints polling period elapses, as managed by the USB\r
*/\r
ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)\r
{\r
- #if defined(INTERRUPT_CONTROL_ENDPOINT)\r
+ /* Save previously selected endpoint before selecting a new endpoint */\r
+ uint8_t PrevSelectedEndpoint = Endpoint_GetCurrentEndpoint();\r
+\r
/* Check if the control endpoint has received a request */\r
if (Endpoint_HasEndpointInterrupted(ENDPOINT_CONTROLEP))\r
{\r
- /* Clear the endpoint interrupt */\r
- Endpoint_ClearEndpointInterrupt(ENDPOINT_CONTROLEP);\r
-\r
/* Process the control request */\r
USB_USBTask();\r
\r
/* Handshake the endpoint setup interrupt - must be after the call to USB_USBTask() */\r
USB_INT_Clear(ENDPOINT_INT_SETUP);\r
}\r
- #endif\r
-\r
- #if defined(INTERRUPT_DATA_ENDPOINT)\r
- /* Check if keyboard endpoint has interrupted */\r
- if (Endpoint_HasEndpointInterrupted(KEYBOARD_EPNUM))\r
- {\r
- /* Select the Keyboard Report Endpoint */\r
- Endpoint_SelectEndpoint(KEYBOARD_EPNUM);\r
-\r
- /* Clear the endpoint IN interrupt flag */\r
- USB_INT_Clear(ENDPOINT_INT_IN);\r
-\r
- /* Clear the Keyboard Report endpoint interrupt */\r
- Endpoint_ClearEndpointInterrupt(KEYBOARD_EPNUM);\r
-\r
- /* Send the next keypress report to the host */\r
- SendNextReport();\r
- }\r
-\r
- /* Check if Keyboard LED status Endpoint has interrupted */\r
- if (Endpoint_HasEndpointInterrupted(KEYBOARD_LEDS_EPNUM))\r
- {\r
- /* Select the Keyboard LED Report Endpoint */\r
- Endpoint_SelectEndpoint(KEYBOARD_LEDS_EPNUM);\r
-\r
- /* Clear the endpoint OUT interrupt flag */\r
- USB_INT_Clear(ENDPOINT_INT_OUT);\r
-\r
- /* Clear the Keyboard LED Report endpoint interrupt */\r
- Endpoint_ClearEndpointInterrupt(KEYBOARD_LEDS_EPNUM);\r
-\r
- /* Process the LED report sent from the host */\r
- ReceiveNextReport();\r
- }\r
- #endif\r
+ \r
+ /* Restore previously selected endpoint */\r
+ Endpoint_SelectEndpoint(PrevSelectedEndpoint); \r
}\r
+#endif\r
#include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
\r
/* Macros: */\r
+ /** Idle period indicating that reports should be sent only when the inputs have changed */\r
+ #define HID_IDLE_CHANGESONLY 0\r
+\r
/** HID Class specific request to get the next HID report from the device. */\r
#define REQ_GetReport 0x01\r
\r
/* Function Prototypes: */\r
void CreateKeyboardReport(USB_KeyboardReport_Data_t* ReportData);\r
void ProcessLEDReport(uint8_t LEDReport);\r
- static inline void SendNextReport(void);\r
- static inline void ReceiveNextReport(void);\r
+ void SendNextReport(void);\r
+ void ReceiveNextReport(void);\r
void UpdateStatus(uint8_t CurrentStatus);\r
\r
#endif\r
* which services control requests from the host. If not defined, the control endpoint\r
* is serviced via polling using the task scheduler.</td>\r
* </tr>\r
- * <tr>\r
- * <td>INTERRUPT_DATA_ENDPOINT</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, this causes the demo to enable interrupts for the data endpoints,\r
- * which services incoming LED reports and outgoing key status reports to and from the host.\r
- * If not defined, the data endpoints are serviced via polling using the task scheduler.</td>\r
- * </tr>\r
* </table>\r
*/\r
/* Check if the control endpoint has received a request */\r
if (Endpoint_HasEndpointInterrupted(ENDPOINT_CONTROLEP))\r
{\r
- /* Clear the endpoint interrupt */\r
- Endpoint_ClearEndpointInterrupt(ENDPOINT_CONTROLEP);\r
-\r
/* Process the control request */\r
USB_USBTask();\r
\r
{ .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
#endif\r
\r
- #if !defined(INTERRUPT_DATA_ENDPOINT)\r
{ .Task = USB_Mouse_Report , .TaskStatus = TASK_STOP },\r
- #endif\r
};\r
\r
/* Global Variables */\r
/** Current Idle period. This is set by the host via a Set Idle HID class request to silence the device's reports\r
* for either the entire idle duration, or until the report status changes (e.g. the user moves the mouse).\r
*/\r
-uint8_t IdleCount = 0;\r
+uint16_t IdleCount = HID_IDLE_CHANGESONLY;\r
\r
/** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle\r
* milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request \r
EVENT_HANDLER(USB_Disconnect)\r
{\r
/* Stop running mouse reporting and USB management tasks */\r
- #if !defined(INTERRUPT_DATA_ENDPOINT)\r
Scheduler_SetTaskMode(USB_Mouse_Report, TASK_STOP);\r
- #endif\r
\r
#if !defined(INTERRUPT_CONTROL_ENDPOINT)\r
Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
ENDPOINT_DIR_IN, MOUSE_EPSIZE,\r
ENDPOINT_BANK_SINGLE);\r
\r
- #if defined(INTERRUPT_DATA_ENDPOINT)\r
- /* Enable the endpoint IN interrupt ISR for the report endpoint */\r
- USB_INT_Enable(ENDPOINT_INT_IN);\r
- #endif\r
-\r
/* Indicate USB connected and ready */\r
UpdateStatus(Status_USBReady);\r
\r
- #if !defined(INTERRUPT_DATA_ENDPOINT)\r
/* Start running mouse reporting task */\r
Scheduler_SetTaskMode(USB_Mouse_Report, TASK_RUN);\r
- #endif\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
}\r
\r
/** Sends the next HID report to the host, via the keyboard data endpoint. */\r
-static inline void SendNextReport(void)\r
+void SendNextReport(void)\r
{\r
static USB_MouseReport_Data_t PrevMouseReportData;\r
USB_MouseReport_Data_t MouseReportData;\r
- bool SendReport = true;\r
+ bool SendReport;\r
\r
/* Create the next mouse report for transmission to the host */\r
CreateMouseReport(&MouseReportData);\r
\r
- /* Check if the idle period is set*/\r
- if (IdleCount)\r
- {\r
- /* Determine if the idle period has elapsed */\r
- if (!(IdleMSRemaining))\r
- {\r
- /* Reset the idle time remaining counter, must multiply by 4 to get the duration in milliseconds */\r
- IdleMSRemaining = (IdleCount << 2); \r
- }\r
- else\r
- {\r
- /* Idle period not elapsed, indicate that a report must not be sent unless the report has changed */\r
- SendReport = (memcmp(&PrevMouseReportData, &MouseReportData, sizeof(USB_MouseReport_Data_t)) != 0);\r
- }\r
- }\r
-\r
+ /* Check to see if the report data has changed - if so a report MUST be sent */\r
+ SendReport = (memcmp(&PrevMouseReportData, &MouseReportData, sizeof(USB_MouseReport_Data_t)) != 0);\r
+ \r
+ /* Override the check if the Y or X values are non-zero - we want continuous movement while the joystick\r
+ * is being held down (via continuous reports), otherwise the cursor will only move once per joystick toggle */\r
+ if ((MouseReportData.Y != 0) || (MouseReportData.X != 0))\r
+ SendReport = true;\r
+ \r
/* Save the current report data for later comparison to check for changes */\r
PrevMouseReportData = MouseReportData;\r
\r
+ /* Check if the idle period is set and has elapsed */\r
+ if ((IdleCount != HID_IDLE_CHANGESONLY) && (!(IdleMSRemaining)))\r
+ {\r
+ /* Reset the idle time remaining counter, must multiply by 4 to get the duration in milliseconds */\r
+ IdleMSRemaining = (IdleCount << 2);\r
+ \r
+ /* Idle period is set and has elapsed, must send a report to the host */\r
+ SendReport = true;\r
+ }\r
+ \r
/* Select the Mouse Report Endpoint */\r
Endpoint_SelectEndpoint(MOUSE_EPNUM);\r
\r
LEDs_SetAllLEDs(LEDMask);\r
}\r
\r
-#if !defined(INTERRUPT_DATA_ENDPOINT)\r
/** Task to manage HID report generation and transmission to the host, when in report mode. */\r
TASK(USB_Mouse_Report)\r
{\r
SendNextReport();\r
}\r
}\r
-#endif\r
\r
+#if defined(INTERRUPT_CONTROL_ENDPOINT)\r
/** ISR for the general Pipe/Endpoint interrupt vector. This ISR fires when an endpoint's status changes (such as\r
* a packet has been received) on an endpoint with its corresponding ISR enabling bits set. This is used to send\r
* HID packets to the host each time the HID interrupt endpoints polling period elapses, as managed by the USB\r
*/\r
ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)\r
{\r
- #if defined(INTERRUPT_CONTROL_ENDPOINT)\r
+ /* Save previously selected endpoint before selecting a new endpoint */\r
+ uint8_t PrevSelectedEndpoint = Endpoint_GetCurrentEndpoint();\r
+\r
/* Check if the control endpoint has received a request */\r
if (Endpoint_HasEndpointInterrupted(ENDPOINT_CONTROLEP))\r
{\r
- /* Clear the endpoint interrupt */\r
- Endpoint_ClearEndpointInterrupt(ENDPOINT_CONTROLEP);\r
-\r
/* Process the control request */\r
USB_USBTask();\r
\r
/* Handshake the endpoint setup interrupt - must be after the call to USB_USBTask() */\r
USB_INT_Clear(ENDPOINT_INT_SETUP);\r
}\r
- #endif\r
- \r
- #if defined(INTERRUPT_DATA_ENDPOINT)\r
- /* Check if mouse endpoint has interrupted */\r
- if (Endpoint_HasEndpointInterrupted(MOUSE_EPNUM))\r
- {\r
- /* Select the Mouse Report Endpoint */\r
- Endpoint_SelectEndpoint(MOUSE_EPNUM);\r
\r
- /* Clear the endpoint IN interrupt flag */\r
- USB_INT_Clear(ENDPOINT_INT_IN);\r
-\r
- /* Clear the Mouse Report endpoint interrupt and select the endpoint */\r
- Endpoint_ClearEndpointInterrupt(MOUSE_EPNUM);\r
-\r
- /* Send the next mouse report to the host */\r
- SendNextReport();\r
- }\r
- #endif\r
+ /* Restore previously selected endpoint */\r
+ Endpoint_SelectEndpoint(PrevSelectedEndpoint);\r
}\r
+#endif\r
TASK(USB_Mouse_Report);\r
\r
/* Macros: */\r
+ /** Idle period indicating that reports should be sent only when the inputs have changed */\r
+ #define HID_IDLE_CHANGESONLY 0\r
+ \r
/** HID Class specific request to get the next HID report from the device. */\r
- #define REQ_GetReport 0x01\r
+ #define REQ_GetReport 0x01\r
\r
/** HID Class specific request to get the idle timeout period of the device. */\r
- #define REQ_GetIdle 0x02\r
+ #define REQ_GetIdle 0x02\r
\r
/** HID Class specific request to send the next HID report to the device. */\r
- #define REQ_SetReport 0x09\r
+ #define REQ_SetReport 0x09\r
\r
/** HID Class specific request to set the idle timeout period of the device. */\r
- #define REQ_SetIdle 0x0A\r
+ #define REQ_SetIdle 0x0A\r
\r
/** HID Class specific request to get the current HID protocol in use, either report or boot. */\r
- #define REQ_GetProtocol 0x03\r
+ #define REQ_GetProtocol 0x03\r
\r
/** HID Class specific request to set the current HID protocol in use, either report or boot. */\r
- #define REQ_SetProtocol 0x0B\r
+ #define REQ_SetProtocol 0x0B\r
\r
/* Type Defines: */\r
/** Type define for the mouse HID report structure, for creating and sending HID reports to the host PC.\r
* which services control requests from the host. If not defined, the control endpoint\r
* is serviced via polling using the task scheduler.</td>\r
* </tr>\r
- * <tr>\r
- * <td>INTERRUPT_DATA_ENDPOINT</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, this causes the demo to enable interrupts for the data endpoint,\r
- * which services outgoing mouse button and movement reports to the host. If not defined,\r
- * the data endpoint is serviced via polling using the task scheduler.</td>\r
- * </tr>\r
* </table>\r
*/\r
#define OID_802_3_XMIT_ONE_COLLISION 0x01020102UL\r
#define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103UL\r
\r
-#endif
\ No newline at end of file
+#endif\r
/* Check to see if a packet has been received */\r
if (!(Pipe_IsINReceived()))\r
{\r
- #if !defined(INTERRUPT_DATA_PIPE)\r
/* Refreeze HID data IN pipe */\r
Pipe_Freeze();\r
- #endif\r
\r
return;\r
}\r
/* Clear the IN endpoint, ready for next data packet */\r
Pipe_ClearIN();\r
\r
- #if !defined(INTERRUPT_DATA_PIPE)\r
/* Refreeze HID data IN pipe */\r
Pipe_Freeze();\r
- #endif\r
}\r
\r
/** Writes a report to the attached device.\r
\r
USB_HostState = HOST_STATE_Ready;\r
break;\r
- #if !defined(INTERRUPT_DATA_PIPE)\r
case HOST_STATE_Ready:\r
ReadNextReport();\r
\r
break;\r
- #endif\r
}\r
}\r
-\r
-#if defined(INTERRUPT_DATA_PIPE)\r
-/** Interrupt handler for the Endpoint/Pipe interrupt vector. This interrupt fires each time an enabled\r
- * pipe interrupt occurs on a pipe which has had that interrupt enabled.\r
- */\r
-ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)\r
-{\r
- /* Save previously selected pipe before selecting a new pipe */\r
- uint8_t PrevSelectedPipe = Pipe_GetCurrentPipe();\r
-\r
- /* Check to see if the HID data IN pipe has caused the interrupt */\r
- if (Pipe_HasPipeInterrupted(HID_DATA_IN_PIPE))\r
- {\r
- /* Clear the pipe interrupt, and select the data IN pipe */\r
- Pipe_ClearPipeInterrupt(HID_DATA_IN_PIPE);\r
- Pipe_SelectPipe(HID_DATA_IN_PIPE); \r
-\r
- /* Check to see if the pipe IN interrupt has fired */\r
- if (USB_INT_HasOccurred(PIPE_INT_IN) && USB_INT_IsEnabled(PIPE_INT_IN))\r
- {\r
- /* Clear interrupt flag */\r
- USB_INT_Clear(PIPE_INT_IN); \r
-\r
- /* Read and process the next report from the device */\r
- ReadNextReport();\r
- }\r
- }\r
-\r
- /* Restore previously selected pipe */\r
- Pipe_SelectPipe(PrevSelectedPipe);\r
-}\r
-#endif\r
*\r
* <table>\r
* <tr>\r
- * <td><b>Define Name:</b></td>\r
- * <td><b>Location:</b></td>\r
- * <td><b>Description:</b></td>\r
- * </tr>\r
- * <tr>\r
- * <td>INTERRUPT_DATA_ENDPOINT</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, this causes the demo to enable interrupts for the data IN pipe,\r
- * which services reports from the device. If not defined, the data pipe is\r
- * serviced via polling using the task scheduler.</td>\r
+ * <td>\r
+ * None\r
+ * </td>\r
* </tr>\r
* </table>\r
*/\r
/* Select keyboard data pipe */\r
Pipe_SelectPipe(KEYBOARD_DATAPIPE); \r
\r
- #if !defined(INTERRUPT_DATA_PIPE)\r
/* Unfreeze keyboard data pipe */\r
Pipe_Unfreeze();\r
- #endif\r
\r
/* Check to see if a packet has been received */\r
if (!(Pipe_IsINReceived()))\r
{\r
- #if !defined(INTERRUPT_DATA_PIPE)\r
/* Refreeze HID data IN pipe */\r
Pipe_Freeze();\r
- #endif\r
\r
return;\r
}\r
putchar(PressedKey);\r
}\r
}\r
- \r
- \r
+ \r
/* Clear the IN endpoint, ready for next data packet */\r
Pipe_ClearIN();\r
\r
- #if !defined(INTERRUPT_DATA_PIPE)\r
/* Refreeze keyboard data pipe */\r
Pipe_Freeze();\r
- #endif\r
}\r
\r
/** Task to set the configuration of the attached device after it has been enumerated, and to read and process\r
break;\r
}\r
\r
- #if defined(INTERRUPT_DATA_PIPE) \r
- /* Select and unfreeze keyboard data pipe */\r
- Pipe_SelectPipe(KEYBOARD_DATAPIPE); \r
- Pipe_Unfreeze();\r
- #endif\r
-\r
puts_P(PSTR("Keyboard Enumerated.\r\n"));\r
\r
USB_HostState = HOST_STATE_Ready;\r
break;\r
- #if !defined(INTERRUPT_DATA_PIPE)\r
case HOST_STATE_Ready:\r
/* If a report has been received, read and process it */\r
ReadNextReport();\r
\r
break;\r
- #endif\r
}\r
}\r
-\r
-#if defined(INTERRUPT_DATA_PIPE)\r
-/** Interrupt handler for the Endpoint/Pipe interrupt vector. This interrupt fires each time an enabled\r
- * pipe interrupt occurs on a pipe which has had that interrupt enabled.\r
- */\r
-ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)\r
-{\r
- /* Save previously selected pipe before selecting a new pipe */\r
- uint8_t PrevSelectedPipe = Pipe_GetCurrentPipe();\r
-\r
- /* Check to see if the keyboard data pipe has caused the interrupt */\r
- if (Pipe_HasPipeInterrupted(KEYBOARD_DATAPIPE))\r
- {\r
- /* Clear the pipe interrupt, and select the keyboard pipe */\r
- Pipe_ClearPipeInterrupt(KEYBOARD_DATAPIPE);\r
- Pipe_SelectPipe(KEYBOARD_DATAPIPE); \r
-\r
- /* Check to see if the pipe IN interrupt has fired */\r
- if (USB_INT_HasOccurred(PIPE_INT_IN) && USB_INT_IsEnabled(PIPE_INT_IN))\r
- {\r
- /* Clear interrupt flag */\r
- USB_INT_Clear(PIPE_INT_IN); \r
-\r
- /* Read and process the next report from the device */\r
- ReadNextReport();\r
- }\r
- \r
- /* Restore previously selected pipe */\r
- Pipe_SelectPipe(PrevSelectedPipe);\r
-}\r
-#endif\r
*\r
* <table>\r
* <tr>\r
- * <td><b>Define Name:</b></td>\r
- * <td><b>Location:</b></td>\r
- * <td><b>Description:</b></td>\r
- * </tr>\r
- * <tr>\r
- * <td>INTERRUPT_DATA_ENDPOINT</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, this causes the demo to enable interrupts for the data pipe,\r
- * which services reports from the device. If not defined, the data pipe is\r
- * serviced via polling using the task scheduler.</td>\r
+ * <td>\r
+ * None\r
+ * </td>\r
* </tr>\r
* </table>\r
*/\r
/* Select mouse data pipe */\r
Pipe_SelectPipe(MOUSE_DATAPIPE); \r
\r
- #if !defined(INTERRUPT_DATA_PIPE)\r
/* Unfreeze keyboard data pipe */\r
Pipe_Unfreeze();\r
- #endif\r
\r
/* Check to see if a packet has been received */\r
if (!(Pipe_IsINReceived()))\r
{\r
- #if !defined(INTERRUPT_DATA_PIPE)\r
/* Refreeze HID data IN pipe */\r
Pipe_Freeze();\r
- #endif\r
\r
return;\r
}\r
/* Clear the IN endpoint, ready for next data packet */\r
Pipe_ClearIN();\r
\r
- #if !defined(INTERRUPT_DATA_PIPE)\r
/* Refreeze mouse data pipe */\r
Pipe_Freeze();\r
- #endif\r
}\r
\r
/** Task to set the configuration of the attached device after it has been enumerated, and to read and process\r
break;\r
}\r
\r
- #if defined(INTERRUPT_DATA_PIPE) \r
- /* Select and unfreeze mouse data pipe */\r
- Pipe_SelectPipe(MOUSE_DATAPIPE); \r
- Pipe_Unfreeze();\r
- #endif\r
-\r
puts_P(PSTR("Mouse Enumerated.\r\n"));\r
\r
USB_HostState = HOST_STATE_Ready;\r
break;\r
- #if !defined(INTERRUPT_DATA_PIPE)\r
case HOST_STATE_Ready:\r
/* If a report has been received, read and process it */\r
ReadNextReport();\r
\r
break;\r
- #endif\r
- }\r
-}\r
-\r
-#if defined(INTERRUPT_DATA_PIPE)\r
-/** Interrupt handler for the Endpoint/Pipe interrupt vector. This interrupt fires each time an enabled\r
- * pipe interrupt occurs on a pipe which has had that interrupt enabled.\r
- */\r
-ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)\r
-{\r
- /* Save previously selected pipe before selecting a new pipe */\r
- uint8_t PrevSelectedPipe = Pipe_GetCurrentPipe();\r
-\r
- /* Check to see if the mouse data pipe has caused the interrupt */\r
- if (Pipe_HasPipeInterrupted(MOUSE_DATAPIPE))\r
- {\r
- /* Clear the pipe interrupt, and select the mouse pipe */\r
- Pipe_ClearPipeInterrupt(MOUSE_DATAPIPE);\r
- Pipe_SelectPipe(MOUSE_DATAPIPE); \r
-\r
- /* Check to see if the pipe IN interrupt has fired */\r
- if (USB_INT_HasOccurred(PIPE_INT_IN) && USB_INT_IsEnabled(PIPE_INT_IN))\r
- {\r
- /* Clear interrupt flag */\r
- USB_INT_Clear(PIPE_INT_IN); \r
-\r
- /* Read and process the next report from the device */\r
- ReadNextReport();\r
- }\r
}\r
-\r
- /* Restore previously selected pipe */\r
- Pipe_SelectPipe(PrevSelectedPipe);\r
}\r
-#endif\r
*\r
* <table>\r
* <tr>\r
- * <td><b>Define Name:</b></td>\r
- * <td><b>Location:</b></td>\r
- * <td><b>Description:</b></td>\r
- * </tr>\r
- * <tr>\r
- * <td>INTERRUPT_DATA_ENDPOINT</td>\r
- * <td>Makefile CDEFS</td>\r
- * <td>When defined, this causes the demo to enable interrupts for the data pipe,\r
- * which services reports from the device. If not defined, the data pipe is\r
- * serviced via polling using the task scheduler.</td>\r
+ * <td>\r
+ * None\r
+ * </td>\r
* </tr>\r
* </table>\r
*/\r
{\r
puts_P(PSTR(ESC_BG_RED "Dev Enum Error\r\n"));\r
printf_P(PSTR(" -- Error Code %d\r\n"), ErrorCode);\r
+ printf_P(PSTR(" -- Sub Error Code %d\r\n"), SubErrorCode);\r
+ printf_P(PSTR(" -- In State %d\r\n"), USB_HostState);\r
}\r
\r
/**\r
-<Project name="LUFA"><Folder name="Demos"><Folder name="Device"><Folder name="AudioInput"><File path="Demos\Device\AudioInput\AudioInput.c"></File><File path="Demos\Device\AudioInput\AudioInput.h"></File><File path="Demos\Device\AudioInput\AudioInput.txt"></File><File path="Demos\Device\AudioInput\Descriptors.c"></File><File path="Demos\Device\AudioInput\Descriptors.h"></File><File path="Demos\Device\AudioInput\Doxygen.conf"></File><File path="Demos\Device\AudioInput\makefile"></File></Folder><Folder name="AudioOutput"><File path="Demos\Device\AudioOutput\AudioOutput.c"></File><File path="Demos\Device\AudioOutput\AudioOutput.h"></File><File path="Demos\Device\AudioOutput\AudioOutput.txt"></File><File path="Demos\Device\AudioOutput\Descriptors.c"></File><File path="Demos\Device\AudioOutput\Descriptors.h"></File><File path="Demos\Device\AudioOutput\Doxygen.conf"></File><File path="Demos\Device\AudioOutput\makefile"></File></Folder><Folder name="CDC"><File path="Demos\Device\CDC\CDC.c"></File><File path="Demos\Device\CDC\CDC.h"></File><File path="Demos\Device\CDC\CDC.txt"></File><File path="Demos\Device\CDC\Descriptors.c"></File><File path="Demos\Device\CDC\Descriptors.h"></File><File path="Demos\Device\CDC\Doxygen.conf"></File><File path="Demos\Device\CDC\LUFA CDC.inf"></File><File path="Demos\Device\CDC\makefile"></File></Folder><Folder name="DualCDC"><File path="Demos\Device\DualCDC\Descriptors.c"></File><File path="Demos\Device\DualCDC\Descriptors.h"></File><File path="Demos\Device\DualCDC\Doxygen.conf"></File><File path="Demos\Device\DualCDC\DualCDC.c"></File><File path="Demos\Device\DualCDC\DualCDC.h"></File><File path="Demos\Device\DualCDC\DualCDC.txt"></File><File path="Demos\Device\DualCDC\LUFA DualCDC.inf"></File><File path="Demos\Device\DualCDC\makefile"></File></Folder><Folder name="GenericHID"><File path="Demos\Device\GenericHID\Descriptors.c"></File><File path="Demos\Device\GenericHID\Descriptors.h"></File><File path="Demos\Device\GenericHID\GenericHID.c"></File><File path="Demos\Device\GenericHID\GenericHID.h"></File><File path="Demos\Device\GenericHID\makefile"></File><File path="Demos\Device\GenericHID\GenericHID.txt"></File><File path="Demos\Device\GenericHID\Doxygen.conf"></File></Folder><Folder name="Joystick"><File path="Demos\Device\Joystick\Descriptors.c"></File><File path="Demos\Device\Joystick\Descriptors.h"></File><File path="Demos\Device\Joystick\Doxygen.conf"></File><File path="Demos\Device\Joystick\Joystick.c"></File><File path="Demos\Device\Joystick\Joystick.h"></File><File path="Demos\Device\Joystick\Joystick.txt"></File><File path="Demos\Device\Joystick\makefile"></File></Folder><Folder name="Keyboard"><File path="Demos\Device\Keyboard\Descriptors.c"></File><File path="Demos\Device\Keyboard\Descriptors.h"></File><File path="Demos\Device\Keyboard\Doxygen.conf"></File><File path="Demos\Device\Keyboard\Keyboard.c"></File><File path="Demos\Device\Keyboard\Keyboard.h"></File><File path="Demos\Device\Keyboard\Keyboard.txt"></File><File path="Demos\Device\Keyboard\makefile"></File></Folder><Folder name="KeyboardMouse"><File path="Demos\Device\KeyboardMouse\Descriptors.c"></File><File path="Demos\Device\KeyboardMouse\Descriptors.h"></File><File path="Demos\Device\KeyboardMouse\Doxygen.conf"></File><File path="Demos\Device\KeyboardMouse\KeyboardMouse.c"></File><File path="Demos\Device\KeyboardMouse\KeyboardMouse.h"></File><File path="Demos\Device\KeyboardMouse\KeyboardMouse.txt"></File><File path="Demos\Device\KeyboardMouse\makefile"></File></Folder><Folder name="MassStorage"><File path="Demos\Device\MassStorage\DataflashManager.c"></File><File path="Demos\Device\MassStorage\DataflashManager.h"></File><File path="Demos\Device\MassStorage\Descriptors.c"></File><File path="Demos\Device\MassStorage\Descriptors.h"></File><File path="Demos\Device\MassStorage\Doxygen.conf"></File><File path="Demos\Device\MassStorage\makefile"></File><File path="Demos\Device\MassStorage\MassStorage.c"></File><File path="Demos\Device\MassStorage\MassStorage.h"></File><File path="Demos\Device\MassStorage\MassStorage.txt"></File><File path="Demos\Device\MassStorage\SCSI.c"></File><File path="Demos\Device\MassStorage\SCSI.h"></File><File path="Demos\Device\MassStorage\SCSI_Codes.h"></File></Folder><Folder name="MIDI"><File path="Demos\Device\MIDI\Descriptors.c"></File><File path="Demos\Device\MIDI\Descriptors.h"></File><File path="Demos\Device\MIDI\Doxygen.conf"></File><File path="Demos\Device\MIDI\makefile"></File><File path="Demos\Device\MIDI\MIDI.c"></File><File path="Demos\Device\MIDI\MIDI.h"></File><File path="Demos\Device\MIDI\MIDI.txt"></File></Folder><Folder name="Mouse"><File path="Demos\Device\Mouse\Descriptors.c"></File><File path="Demos\Device\Mouse\Descriptors.h"></File><File path="Demos\Device\Mouse\Doxygen.conf"></File><File path="Demos\Device\Mouse\makefile"></File><File path="Demos\Device\Mouse\Mouse.c"></File><File path="Demos\Device\Mouse\Mouse.h"></File><File path="Demos\Device\Mouse\Mouse.txt"></File></Folder><Folder name="RNDISEthernet"><File path="Demos\Device\RNDISEthernet\ARP.c"></File><File path="Demos\Device\RNDISEthernet\ARP.h"></File><File path="Demos\Device\RNDISEthernet\Descriptors.c"></File><File path="Demos\Device\RNDISEthernet\Descriptors.h"></File><File path="Demos\Device\RNDISEthernet\DHCP.c"></File><File path="Demos\Device\RNDISEthernet\DHCP.h"></File><File path="Demos\Device\RNDISEthernet\Doxygen.conf"></File><File path="Demos\Device\RNDISEthernet\Ethernet.c"></File><File path="Demos\Device\RNDISEthernet\Ethernet.h"></File><File path="Demos\Device\RNDISEthernet\EthernetProtocols.h"></File><File path="Demos\Device\RNDISEthernet\ICMP.c"></File><File path="Demos\Device\RNDISEthernet\ICMP.h"></File><File path="Demos\Device\RNDISEthernet\IP.c"></File><File path="Demos\Device\RNDISEthernet\IP.h"></File><File path="Demos\Device\RNDISEthernet\LUFA RNDIS.inf"></File><File path="Demos\Device\RNDISEthernet\makefile"></File><File path="Demos\Device\RNDISEthernet\ProtocolDecoders.c"></File><File path="Demos\Device\RNDISEthernet\ProtocolDecoders.h"></File><File path="Demos\Device\RNDISEthernet\RNDIS.c"></File><File path="Demos\Device\RNDISEthernet\RNDIS.h"></File><File path="Demos\Device\RNDISEthernet\RNDISConstants.h"></File><File path="Demos\Device\RNDISEthernet\RNDISEthernet.c"></File><File path="Demos\Device\RNDISEthernet\RNDISEthernet.h"></File><File path="Demos\Device\RNDISEthernet\RNDISEthernet.txt"></File><File path="Demos\Device\RNDISEthernet\TCP.c"></File><File path="Demos\Device\RNDISEthernet\TCP.h"></File><File path="Demos\Device\RNDISEthernet\UDP.c"></File><File path="Demos\Device\RNDISEthernet\UDP.h"></File><File path="Demos\Device\RNDISEthernet\Webserver.c"></File><File path="Demos\Device\RNDISEthernet\Webserver.h"></File></Folder><Folder name="USBtoSerial"><File path="Demos\Device\USBtoSerial\Descriptors.c"></File><File path="Demos\Device\USBtoSerial\Descriptors.h"></File><File path="Demos\Device\USBtoSerial\Doxygen.conf"></File><File path="Demos\Device\USBtoSerial\LUFA USBtoSerial.inf"></File><File path="Demos\Device\USBtoSerial\makefile"></File><File path="Demos\Device\USBtoSerial\RingBuff.c"></File><File path="Demos\Device\USBtoSerial\RingBuff.h"></File><File path="Demos\Device\USBtoSerial\USBtoSerial.c"></File><File path="Demos\Device\USBtoSerial\USBtoSerial.h"></File><File path="Demos\Device\USBtoSerial\USBtoSerial.txt"></File></Folder><File path="Demos\Device\makefile"></File></Folder><Folder name="Host"><Folder name="CDCHost"><File path="Demos\Host\CDCHost\CDCHost.c"></File><File path="Demos\Host\CDCHost\CDCHost.h"></File><File path="Demos\Host\CDCHost\CDCHost.txt"></File><File path="Demos\Host\CDCHost\ConfigDescriptor.c"></File><File path="Demos\Host\CDCHost\ConfigDescriptor.h"></File><File path="Demos\Host\CDCHost\Doxygen.conf"></File><File path="Demos\Host\CDCHost\makefile"></File></Folder><Folder name="GenericHIDHost"><File path="Demos\Host\GenericHIDHost\ConfigDescriptor.c"></File><File path="Demos\Host\GenericHIDHost\ConfigDescriptor.h"></File><File path="Demos\Host\GenericHIDHost\GenericHIDHost.c"></File><File path="Demos\Host\GenericHIDHost\GenericHIDHost.h"></File><File path="Demos\Host\GenericHIDHost\makefile"></File><File path="Demos\Host\GenericHIDHost\Doxygen.conf"></File></Folder><Folder name="KeyboardHost"><File path="Demos\Host\KeyboardHost\ConfigDescriptor.c"></File><File path="Demos\Host\KeyboardHost\ConfigDescriptor.h"></File><File path="Demos\Host\KeyboardHost\Doxygen.conf"></File><File path="Demos\Host\KeyboardHost\KeyboardHost.c"></File><File path="Demos\Host\KeyboardHost\KeyboardHost.h"></File><File path="Demos\Host\KeyboardHost\KeyboardHost.txt"></File><File path="Demos\Host\KeyboardHost\makefile"></File></Folder><Folder name="KeyboardHostWithParser"><File path="Demos\Host\KeyboardHostWithParser\ConfigDescriptor.c"></File><File path="Demos\Host\KeyboardHostWithParser\ConfigDescriptor.h"></File><File path="Demos\Host\KeyboardHostWithParser\Doxygen.conf"></File><File path="Demos\Host\KeyboardHostWithParser\HIDReport.c"></File><File path="Demos\Host\KeyboardHostWithParser\HIDReport.h"></File><File path="Demos\Host\KeyboardHostWithParser\KeyboardHostWithParser.c"></File><File path="Demos\Host\KeyboardHostWithParser\KeyboardHostWithParser.h"></File><File path="Demos\Host\KeyboardHostWithParser\KeyboardHostWithParser.txt"></File><File path="Demos\Host\KeyboardHostWithParser\makefile"></File></Folder><Folder name="MassStorageHost"><File path="Demos\Host\MassStorageHost\ConfigDescriptor.c"></File><File path="Demos\Host\MassStorageHost\ConfigDescriptor.h"></File><File path="Demos\Host\MassStorageHost\Doxygen.conf"></File><File path="Demos\Host\MassStorageHost\makefile"></File><File path="Demos\Host\MassStorageHost\MassStorageHost.c"></File><File path="Demos\Host\MassStorageHost\MassStorageHost.h"></File><File path="Demos\Host\MassStorageHost\MassStorageHost.txt"></File><File path="Demos\Host\MassStorageHost\MassStoreCommands.c"></File><File path="Demos\Host\MassStorageHost\MassStoreCommands.h"></File><File path="Demos\Host\MassStorageHost\SCSI_Codes.h"></File></Folder><Folder name="MouseHost"><File path="Demos\Host\MouseHost\ConfigDescriptor.c"></File><File path="Demos\Host\MouseHost\ConfigDescriptor.h"></File><File path="Demos\Host\MouseHost\Doxygen.conf"></File><File path="Demos\Host\MouseHost\makefile"></File><File path="Demos\Host\MouseHost\MouseHost.c"></File><File path="Demos\Host\MouseHost\MouseHost.h"></File><File path="Demos\Host\MouseHost\MouseHost.txt"></File></Folder><Folder name="MouseHostWithParser"><File path="Demos\Host\MouseHostWithParser\ConfigDescriptor.c"></File><File path="Demos\Host\MouseHostWithParser\ConfigDescriptor.h"></File><File path="Demos\Host\MouseHostWithParser\Doxygen.conf"></File><File path="Demos\Host\MouseHostWithParser\HIDReport.c"></File><File path="Demos\Host\MouseHostWithParser\HIDReport.h"></File><File path="Demos\Host\MouseHostWithParser\makefile"></File><File path="Demos\Host\MouseHostWithParser\MouseHostWithParser.c"></File><File path="Demos\Host\MouseHostWithParser\MouseHostWithParser.h"></File><File path="Demos\Host\MouseHostWithParser\MouseHostWithParser.txt"></File></Folder><Folder name="StillImageHost"><File path="Demos\Host\StillImageHost\ConfigDescriptor.c"></File><File path="Demos\Host\StillImageHost\ConfigDescriptor.h"></File><File path="Demos\Host\StillImageHost\Doxygen.conf"></File><File path="Demos\Host\StillImageHost\makefile"></File><File path="Demos\Host\StillImageHost\PIMACodes.h"></File><File path="Demos\Host\StillImageHost\StillImageCommands.c"></File><File path="Demos\Host\StillImageHost\StillImageCommands.h"></File><File path="Demos\Host\StillImageHost\StillImageHost.c"></File><File path="Demos\Host\StillImageHost\StillImageHost.h"></File><File path="Demos\Host\StillImageHost\StillImageHost.txt"></File></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.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></Folder><Folder name="Class"><File path="LUFA\Drivers\USB\Class\HIDParser.c"></File><File path="LUFA\Drivers\USB\Class\HIDParser.h"></File><File path="LUFA\Drivers\USB\Class\HIDReportData.h"></File><File path="LUFA\Drivers\USB\Class\ConfigDescriptor.c"></File><File path="LUFA\Drivers\USB\Class\ConfigDescriptor.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="Scheduler"><File path="LUFA\Scheduler\Scheduler.h"></File><File path="LUFA\Scheduler\Scheduler.c"></File></Folder><Folder name="MemoryAllocator"><File path="LUFA\MemoryAllocator\DynAlloc.h"></File><File path="LUFA\MemoryAllocator\DynAlloc.c"></File></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\GettingStarted.txt"></File><File path="LUFA\MainPage.txt"></File><File path="LUFA\SchedulerOverview.txt"></File><File path="LUFA\VIDAndPIDValues.txt"></File><File path="LUFA\ChangeLog.txt"></File><File path="LUFA\CompileTimeTokens.txt"></File><File path="LUFA\MigrationInformation.txt"></File><File path="LUFA\DirectorySummaries.txt"></File><File path="LUFA\Doxygen.conf"></File><File path="LUFA\WritingBoardDrivers.txt"></File><File path="LUFA\LUFAPoweredProjects.txt"></File><File path="LUFA\Groups.txt"></File></Folder><Folder name="Projects"><Folder name="MagStripe"><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\MagstripeHW.h"></File><File path="Projects\Magstripe\makefile"></File><File path="Projects\Magstripe\Magstripe.txt"></File><File path="Projects\Magstripe\Doxygen.conf"></File><File path="Projects\Magstripe\CircularBitBuffer.c"></File><File path="Projects\Magstripe\CircularBitBuffer.h"></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></Project>
\ No newline at end of file
+<Project name="LUFA"><Folder name="Demos"><Folder name="Device"><Folder name="AudioInput"><File path="Demos\Device\AudioInput\AudioInput.c"></File><File path="Demos\Device\AudioInput\AudioInput.h"></File><File path="Demos\Device\AudioInput\AudioInput.txt"></File><File path="Demos\Device\AudioInput\Descriptors.c"></File><File path="Demos\Device\AudioInput\Descriptors.h"></File><File path="Demos\Device\AudioInput\Doxygen.conf"></File><File path="Demos\Device\AudioInput\makefile"></File></Folder><Folder name="AudioOutput"><File path="Demos\Device\AudioOutput\AudioOutput.c"></File><File path="Demos\Device\AudioOutput\AudioOutput.h"></File><File path="Demos\Device\AudioOutput\AudioOutput.txt"></File><File path="Demos\Device\AudioOutput\Descriptors.c"></File><File path="Demos\Device\AudioOutput\Descriptors.h"></File><File path="Demos\Device\AudioOutput\Doxygen.conf"></File><File path="Demos\Device\AudioOutput\makefile"></File></Folder><Folder name="CDC"><File path="Demos\Device\CDC\CDC.c"></File><File path="Demos\Device\CDC\CDC.h"></File><File path="Demos\Device\CDC\CDC.txt"></File><File path="Demos\Device\CDC\Descriptors.c"></File><File path="Demos\Device\CDC\Descriptors.h"></File><File path="Demos\Device\CDC\Doxygen.conf"></File><File path="Demos\Device\CDC\LUFA CDC.inf"></File><File path="Demos\Device\CDC\makefile"></File></Folder><Folder name="DualCDC"><File path="Demos\Device\DualCDC\Descriptors.c"></File><File path="Demos\Device\DualCDC\Descriptors.h"></File><File path="Demos\Device\DualCDC\Doxygen.conf"></File><File path="Demos\Device\DualCDC\DualCDC.c"></File><File path="Demos\Device\DualCDC\DualCDC.h"></File><File path="Demos\Device\DualCDC\DualCDC.txt"></File><File path="Demos\Device\DualCDC\LUFA DualCDC.inf"></File><File path="Demos\Device\DualCDC\makefile"></File></Folder><Folder name="GenericHID"><File path="Demos\Device\GenericHID\Descriptors.c"></File><File path="Demos\Device\GenericHID\Descriptors.h"></File><File path="Demos\Device\GenericHID\GenericHID.c"></File><File path="Demos\Device\GenericHID\GenericHID.h"></File><File path="Demos\Device\GenericHID\makefile"></File><File path="Demos\Device\GenericHID\GenericHID.txt"></File><File path="Demos\Device\GenericHID\Doxygen.conf"></File></Folder><Folder name="Joystick"><File path="Demos\Device\Joystick\Descriptors.c"></File><File path="Demos\Device\Joystick\Descriptors.h"></File><File path="Demos\Device\Joystick\Doxygen.conf"></File><File path="Demos\Device\Joystick\Joystick.c"></File><File path="Demos\Device\Joystick\Joystick.h"></File><File path="Demos\Device\Joystick\Joystick.txt"></File><File path="Demos\Device\Joystick\makefile"></File></Folder><Folder name="Keyboard"><File path="Demos\Device\Keyboard\Descriptors.c"></File><File path="Demos\Device\Keyboard\Descriptors.h"></File><File path="Demos\Device\Keyboard\Doxygen.conf"></File><File path="Demos\Device\Keyboard\Keyboard.c"></File><File path="Demos\Device\Keyboard\Keyboard.h"></File><File path="Demos\Device\Keyboard\Keyboard.txt"></File><File path="Demos\Device\Keyboard\makefile"></File></Folder><Folder name="KeyboardMouse"><File path="Demos\Device\KeyboardMouse\Descriptors.c"></File><File path="Demos\Device\KeyboardMouse\Descriptors.h"></File><File path="Demos\Device\KeyboardMouse\Doxygen.conf"></File><File path="Demos\Device\KeyboardMouse\KeyboardMouse.c"></File><File path="Demos\Device\KeyboardMouse\KeyboardMouse.h"></File><File path="Demos\Device\KeyboardMouse\KeyboardMouse.txt"></File><File path="Demos\Device\KeyboardMouse\makefile"></File></Folder><Folder name="MassStorage"><File path="Demos\Device\MassStorage\DataflashManager.c"></File><File path="Demos\Device\MassStorage\DataflashManager.h"></File><File path="Demos\Device\MassStorage\Descriptors.c"></File><File path="Demos\Device\MassStorage\Descriptors.h"></File><File path="Demos\Device\MassStorage\Doxygen.conf"></File><File path="Demos\Device\MassStorage\makefile"></File><File path="Demos\Device\MassStorage\MassStorage.c"></File><File path="Demos\Device\MassStorage\MassStorage.h"></File><File path="Demos\Device\MassStorage\MassStorage.txt"></File><File path="Demos\Device\MassStorage\SCSI.c"></File><File path="Demos\Device\MassStorage\SCSI.h"></File><File path="Demos\Device\MassStorage\SCSI_Codes.h"></File></Folder><Folder name="MIDI"><File path="Demos\Device\MIDI\Descriptors.c"></File><File path="Demos\Device\MIDI\Descriptors.h"></File><File path="Demos\Device\MIDI\Doxygen.conf"></File><File path="Demos\Device\MIDI\makefile"></File><File path="Demos\Device\MIDI\MIDI.c"></File><File path="Demos\Device\MIDI\MIDI.h"></File><File path="Demos\Device\MIDI\MIDI.txt"></File></Folder><Folder name="Mouse"><File path="Demos\Device\Mouse\Descriptors.c"></File><File path="Demos\Device\Mouse\Descriptors.h"></File><File path="Demos\Device\Mouse\Doxygen.conf"></File><File path="Demos\Device\Mouse\makefile"></File><File path="Demos\Device\Mouse\Mouse.c"></File><File path="Demos\Device\Mouse\Mouse.h"></File><File path="Demos\Device\Mouse\Mouse.txt"></File></Folder><Folder name="RNDISEthernet"><File path="Demos\Device\RNDISEthernet\ARP.c"></File><File path="Demos\Device\RNDISEthernet\ARP.h"></File><File path="Demos\Device\RNDISEthernet\Descriptors.c"></File><File path="Demos\Device\RNDISEthernet\Descriptors.h"></File><File path="Demos\Device\RNDISEthernet\DHCP.c"></File><File path="Demos\Device\RNDISEthernet\DHCP.h"></File><File path="Demos\Device\RNDISEthernet\Doxygen.conf"></File><File path="Demos\Device\RNDISEthernet\Ethernet.c"></File><File path="Demos\Device\RNDISEthernet\Ethernet.h"></File><File path="Demos\Device\RNDISEthernet\EthernetProtocols.h"></File><File path="Demos\Device\RNDISEthernet\ICMP.c"></File><File path="Demos\Device\RNDISEthernet\ICMP.h"></File><File path="Demos\Device\RNDISEthernet\IP.c"></File><File path="Demos\Device\RNDISEthernet\IP.h"></File><File path="Demos\Device\RNDISEthernet\LUFA RNDIS.inf"></File><File path="Demos\Device\RNDISEthernet\makefile"></File><File path="Demos\Device\RNDISEthernet\ProtocolDecoders.c"></File><File path="Demos\Device\RNDISEthernet\ProtocolDecoders.h"></File><File path="Demos\Device\RNDISEthernet\RNDIS.c"></File><File path="Demos\Device\RNDISEthernet\RNDIS.h"></File><File path="Demos\Device\RNDISEthernet\RNDISConstants.h"></File><File path="Demos\Device\RNDISEthernet\RNDISEthernet.c"></File><File path="Demos\Device\RNDISEthernet\RNDISEthernet.h"></File><File path="Demos\Device\RNDISEthernet\RNDISEthernet.txt"></File><File path="Demos\Device\RNDISEthernet\TCP.c"></File><File path="Demos\Device\RNDISEthernet\TCP.h"></File><File path="Demos\Device\RNDISEthernet\UDP.c"></File><File path="Demos\Device\RNDISEthernet\UDP.h"></File><File path="Demos\Device\RNDISEthernet\Webserver.c"></File><File path="Demos\Device\RNDISEthernet\Webserver.h"></File></Folder><Folder name="USBtoSerial"><File path="Demos\Device\USBtoSerial\Descriptors.c"></File><File path="Demos\Device\USBtoSerial\Descriptors.h"></File><File path="Demos\Device\USBtoSerial\Doxygen.conf"></File><File path="Demos\Device\USBtoSerial\LUFA USBtoSerial.inf"></File><File path="Demos\Device\USBtoSerial\makefile"></File><File path="Demos\Device\USBtoSerial\RingBuff.c"></File><File path="Demos\Device\USBtoSerial\RingBuff.h"></File><File path="Demos\Device\USBtoSerial\USBtoSerial.c"></File><File path="Demos\Device\USBtoSerial\USBtoSerial.h"></File><File path="Demos\Device\USBtoSerial\USBtoSerial.txt"></File></Folder><File path="Demos\Device\makefile"></File></Folder><Folder name="Host"><Folder name="CDCHost"><File path="Demos\Host\CDCHost\CDCHost.c"></File><File path="Demos\Host\CDCHost\CDCHost.h"></File><File path="Demos\Host\CDCHost\CDCHost.txt"></File><File path="Demos\Host\CDCHost\ConfigDescriptor.c"></File><File path="Demos\Host\CDCHost\ConfigDescriptor.h"></File><File path="Demos\Host\CDCHost\Doxygen.conf"></File><File path="Demos\Host\CDCHost\makefile"></File></Folder><Folder name="GenericHIDHost"><File path="Demos\Host\GenericHIDHost\ConfigDescriptor.c"></File><File path="Demos\Host\GenericHIDHost\ConfigDescriptor.h"></File><File path="Demos\Host\GenericHIDHost\GenericHIDHost.c"></File><File path="Demos\Host\GenericHIDHost\GenericHIDHost.h"></File><File path="Demos\Host\GenericHIDHost\makefile"></File><File path="Demos\Host\GenericHIDHost\Doxygen.conf"></File><File path="Demos\Host\GenericHIDHost\GenericHIDHost.txt"></File></Folder><Folder name="KeyboardHost"><File path="Demos\Host\KeyboardHost\ConfigDescriptor.c"></File><File path="Demos\Host\KeyboardHost\ConfigDescriptor.h"></File><File path="Demos\Host\KeyboardHost\Doxygen.conf"></File><File path="Demos\Host\KeyboardHost\KeyboardHost.c"></File><File path="Demos\Host\KeyboardHost\KeyboardHost.h"></File><File path="Demos\Host\KeyboardHost\KeyboardHost.txt"></File><File path="Demos\Host\KeyboardHost\makefile"></File></Folder><Folder name="KeyboardHostWithParser"><File path="Demos\Host\KeyboardHostWithParser\ConfigDescriptor.c"></File><File path="Demos\Host\KeyboardHostWithParser\ConfigDescriptor.h"></File><File path="Demos\Host\KeyboardHostWithParser\Doxygen.conf"></File><File path="Demos\Host\KeyboardHostWithParser\HIDReport.c"></File><File path="Demos\Host\KeyboardHostWithParser\HIDReport.h"></File><File path="Demos\Host\KeyboardHostWithParser\KeyboardHostWithParser.c"></File><File path="Demos\Host\KeyboardHostWithParser\KeyboardHostWithParser.h"></File><File path="Demos\Host\KeyboardHostWithParser\KeyboardHostWithParser.txt"></File><File path="Demos\Host\KeyboardHostWithParser\makefile"></File></Folder><Folder name="MassStorageHost"><File path="Demos\Host\MassStorageHost\ConfigDescriptor.c"></File><File path="Demos\Host\MassStorageHost\ConfigDescriptor.h"></File><File path="Demos\Host\MassStorageHost\Doxygen.conf"></File><File path="Demos\Host\MassStorageHost\makefile"></File><File path="Demos\Host\MassStorageHost\MassStorageHost.c"></File><File path="Demos\Host\MassStorageHost\MassStorageHost.h"></File><File path="Demos\Host\MassStorageHost\MassStorageHost.txt"></File><File path="Demos\Host\MassStorageHost\MassStoreCommands.c"></File><File path="Demos\Host\MassStorageHost\MassStoreCommands.h"></File><File path="Demos\Host\MassStorageHost\SCSI_Codes.h"></File></Folder><Folder name="MouseHost"><File path="Demos\Host\MouseHost\ConfigDescriptor.c"></File><File path="Demos\Host\MouseHost\ConfigDescriptor.h"></File><File path="Demos\Host\MouseHost\Doxygen.conf"></File><File path="Demos\Host\MouseHost\makefile"></File><File path="Demos\Host\MouseHost\MouseHost.c"></File><File path="Demos\Host\MouseHost\MouseHost.h"></File><File path="Demos\Host\MouseHost\MouseHost.txt"></File></Folder><Folder name="MouseHostWithParser"><File path="Demos\Host\MouseHostWithParser\ConfigDescriptor.c"></File><File path="Demos\Host\MouseHostWithParser\ConfigDescriptor.h"></File><File path="Demos\Host\MouseHostWithParser\Doxygen.conf"></File><File path="Demos\Host\MouseHostWithParser\HIDReport.c"></File><File path="Demos\Host\MouseHostWithParser\HIDReport.h"></File><File path="Demos\Host\MouseHostWithParser\makefile"></File><File path="Demos\Host\MouseHostWithParser\MouseHostWithParser.c"></File><File path="Demos\Host\MouseHostWithParser\MouseHostWithParser.h"></File><File path="Demos\Host\MouseHostWithParser\MouseHostWithParser.txt"></File></Folder><Folder name="StillImageHost"><File path="Demos\Host\StillImageHost\ConfigDescriptor.c"></File><File path="Demos\Host\StillImageHost\ConfigDescriptor.h"></File><File path="Demos\Host\StillImageHost\Doxygen.conf"></File><File path="Demos\Host\StillImageHost\makefile"></File><File path="Demos\Host\StillImageHost\PIMACodes.h"></File><File path="Demos\Host\StillImageHost\StillImageCommands.c"></File><File path="Demos\Host\StillImageHost\StillImageCommands.h"></File><File path="Demos\Host\StillImageHost\StillImageHost.c"></File><File path="Demos\Host\StillImageHost\StillImageHost.h"></File><File path="Demos\Host\StillImageHost\StillImageHost.txt"></File></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.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></Folder><Folder name="Class"><File path="LUFA\Drivers\USB\Class\HIDParser.c"></File><File path="LUFA\Drivers\USB\Class\HIDParser.h"></File><File path="LUFA\Drivers\USB\Class\HIDReportData.h"></File><File path="LUFA\Drivers\USB\Class\ConfigDescriptor.c"></File><File path="LUFA\Drivers\USB\Class\ConfigDescriptor.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="Scheduler"><File path="LUFA\Scheduler\Scheduler.h"></File><File path="LUFA\Scheduler\Scheduler.c"></File></Folder><Folder name="MemoryAllocator"><File path="LUFA\MemoryAllocator\DynAlloc.h"></File><File path="LUFA\MemoryAllocator\DynAlloc.c"></File></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\GettingStarted.txt"></File><File path="LUFA\MainPage.txt"></File><File path="LUFA\SchedulerOverview.txt"></File><File path="LUFA\VIDAndPIDValues.txt"></File><File path="LUFA\ChangeLog.txt"></File><File path="LUFA\CompileTimeTokens.txt"></File><File path="LUFA\MigrationInformation.txt"></File><File path="LUFA\DirectorySummaries.txt"></File><File path="LUFA\Doxygen.conf"></File><File path="LUFA\WritingBoardDrivers.txt"></File><File path="LUFA\LUFAPoweredProjects.txt"></File><File path="LUFA\Groups.txt"></File></Folder><Folder name="Projects"><Folder name="MagStripe"><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\MagstripeHW.h"></File><File path="Projects\Magstripe\makefile"></File><File path="Projects\Magstripe\Magstripe.txt"></File><File path="Projects\Magstripe\Doxygen.conf"></File><File path="Projects\Magstripe\CircularBitBuffer.c"></File><File path="Projects\Magstripe\CircularBitBuffer.h"></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></Project>
\ No newline at end of file
* - Fixed bug in RNDISEthernet and DualCDC demos not using the correct USB_ControlRequest structure for control request data\r
* - Fixed documentation showing incorrect USB mode support on the supported AVRs list\r
* - Fixed RNDISEthernet not working under Linux due to Linux requiring an "optional" request which was unhandled\r
+ * - Fixed Mouse and Keyboard device demos not acting in accordance with the HID specification for idle periods (thanks to Brian Dickman)\r
+ * - Removed support for endpoint/pipe non-control interrupts; these did not act in the way users expected, and had many subtle issues\r
*\r
*\r
* \section Sec_ChangeLog090510 Version 090510\r
* \see \ref ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.\r
*/\r
#define ENDPOINT_INT_SETUP UEIENX, (1 << RXSTPE), UEINTX, (1 << RXSTPI)\r
-\r
- /** Interrupt definition for the endpoint IN interrupt (for INTERRUPT type endpoints). Should be\r
- * used with the USB_INT_* macros located in USBInterrupt.h.\r
- *\r
- * This interrupt will fire if enabled on an INTERRUPT type endpoint if a the endpoint interrupt\r
- * period has elapsed and the endpoint is ready for a new packet to be written to its FIFO buffer\r
- * (if required).\r
- *\r
- * \note This interrupt must be enabled and cleared on *each* endpoint which requires it (after the\r
- * endpoint is selected), and will fire the common endpoint interrupt vector.\r
- *\r
- * \see \ref ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.\r
- */\r
- #define ENDPOINT_INT_IN UEIENX, (1 << TXINE) , UEINTX, (1 << TXINI)\r
-\r
- /** Interrupt definition for the endpoint OUT interrupt (for INTERRUPT type endpoints). Should be\r
- * used with the USB_INT_* macros located in USBInterrupt.h.\r
- *\r
- * This interrupt will fire if enabled on an INTERRUPT type endpoint if a the endpoint interrupt\r
- * period has elapsed and the endpoint is ready for a packet from the host to be read from its\r
- * FIFO buffer (if received).\r
- *\r
- * \note This interrupt must be enabled and cleared on *each* endpoint which requires it (after the\r
- * endpoint is selected), and will fire the common endpoint interrupt vector.\r
- *\r
- * \see \ref ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.\r
- */\r
- #define ENDPOINT_INT_OUT UEIENX, (1 << RXOUTE), UEINTX, (1 << RXOUTI)\r
\r
/* Pseudo-Function Macros: */\r
#if defined(__DOXYGEN__)\r
*/\r
static inline uint8_t Endpoint_GetEndpointInterrupts(void);\r
\r
- /** Clears the endpoint interrupt flag. This clears the specified endpoint number's interrupt\r
- * mask in the endpoint interrupt flag register.\r
- *\r
- * \param EndpointNumber Index of the endpoint whose interrupt flag should be cleared\r
- */\r
- static inline void Endpoint_ClearEndpointInterrupt(uint8_t EndpointNumber);\r
- \r
/** Determines if the specified endpoint number has interrupted (valid only for INTERRUPT type\r
* endpoints).\r
*\r
\r
#define Endpoint_GetEndpointInterrupts() UEINT\r
\r
- #define Endpoint_ClearEndpointInterrupt(n) MACROS{ UEINT &= ~(1 << n); }MACROE\r
-\r
#define Endpoint_HasEndpointInterrupted(n) ((UEINT & (1 << n)) ? true : false)\r
\r
#define Endpoint_IsINReady() ((UEINTX & (1 << TXINI)) ? true : false)\r
{\r
uint16_t TimeoutCounter = USB_HOST_TIMEOUT_MS;\r
\r
- while (!(((WaitType == USB_HOST_WAITFOR_SetupSent) && Pipe_IsSETUPSent()) ||\r
+ while (!(((WaitType == USB_HOST_WAITFOR_SetupSent) && Pipe_IsSETUPSent()) ||\r
((WaitType == USB_HOST_WAITFOR_InReceived) && Pipe_IsINReceived()) ||\r
((WaitType == USB_HOST_WAITFOR_OutReady) && Pipe_IsOUTReady())))\r
{\r
*/\r
#define PIPE_EPSIZE_MASK 0x7FF\r
\r
- /** Interrupt definition for the pipe IN interrupt (for INTERRUPT type pipes). Should be used with\r
- * the USB_INT_* macros located in USBInterrupt.h.\r
- *\r
- * This interrupt will fire if enabled on an INTERRUPT type pipe if the pipe interrupt period has\r
- * elapsed and the pipe is ready for the next packet from the attached device to be read out from its\r
- * FIFO buffer (if received).\r
- *\r
- * \note This interrupt must be enabled and cleared on *each* pipe which requires it (after the pipe\r
- * is selected), and will fire the common pipe interrupt vector.\r
- *\r
- * \see \ref ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.\r
- */\r
- #define PIPE_INT_IN UPIENX, (1 << RXINE) , UPINTX, (1 << RXINI)\r
-\r
- /** Interrupt definition for the pipe OUT interrupt (for INTERRUPT type pipes). Should be used with\r
- * the USB_INT_* macros located in USBInterrupt.h.\r
- *\r
- * This interrupt will fire if enabled on an INTERRUPT type endpoint if a the pipe interrupt period\r
- * has elapsed and the pipe is ready for a packet to be written to the pipe's FIFO buffer and sent\r
- * to the attached device (if required).\r
- * \r
- * \note This interrupt must be enabled and cleared on *each* pipe which requires it (after the pipe\r
- * is selected), and will fire the common pipe interrupt vector.\r
- *\r
- * \see \ref ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.\r
- */\r
- #define PIPE_INT_OUT UPIENX, (1 << TXOUTE), UPINTX, (1 << TXOUTI)\r
-\r
/** Interrupt definition for the pipe SETUP bank ready interrupt (for CONTROL type pipes). Should be\r
* used with the USB_INT_* macros located in USBInterrupt.h.\r
*\r
*/\r
static inline uint8_t Pipe_GetPipeInterrupts(void);\r
\r
- /** Clears the interrupt flag for the specified pipe number.\r
- *\r
- * \param PipeNumber Index of the pipe whose interrupt flag is to be cleared\r
- */\r
- static inline void Pipe_ClearPipeInterrupt(uint8_t PipeNumber);\r
- \r
/** Determines if the specified pipe number has interrupted (valid only for INTERRUPT type\r
* pipes).\r
*\r
\r
#define Pipe_GetPipeInterrupts() UPINT\r
\r
- #define Pipe_ClearPipeInterrupt(n) MACROS{ UPINT &= ~(1 << n); }MACROE\r
-\r
#define Pipe_HasPipeInterrupted(n) ((UPINT & (1 << n)) ? true : false)\r
\r
#define Pipe_Unfreeze() MACROS{ UPCONX &= ~(1 << PFREEZE); }MACROE\r
*\r
* \section Sec_MigrationXXXXXX Migrating from 090510 to XXXXXX\r
*\r
+ * <b>Device Mode</b>\r
+ * - Support for non-control data endpoint interrupts has been dropped due to many issues in the implementation. All existing\r
+ * projects using interrupts on non-control endpoints should switch to polling.\r
+ * - The Endpoint_ClearEndpointInterrupt() macro has been deleted and references to it should be removed.\r
+ *\r
+ * <b>Device Mode</b>\r
+ * - Support for non-control data pipe interrupts has been dropped due to many issues in the implementation. All existing\r
+ * projects using interrupts on non-control pipes should switch to polling.\r
+ * - The Pipe_ClearPipeInterrupt() macro has been deleted and references to it should be removed.\r
+ *\r
*\r
* \section Sec_Migration090510 Migrating from 090401 to 090510\r
*\r