\r
#include "AudioInput.h"\r
\r
-/* Scheduler Task List */\r
-TASK_LIST\r
-{\r
- { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
- { .Task = USB_Audio_Task , .TaskStatus = TASK_STOP },\r
-};\r
-\r
+/** Flag to indicate if the streaming audio alternative interface has been selected by the host. */\r
+bool StreamingAudioInterfaceSelected = false;\r
\r
-/** Main program entry point. This routine configures the hardware required by the application, then\r
- * starts the scheduler to run the application tasks.\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ * setup of all components and the main program loop.\r
*/\r
int main(void)\r
{\r
+ SetupHardware();\r
+\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+ \r
+ for (;;)\r
+ {\r
+ USB_Audio_Task();\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
/* Disable watchdog if enabled by bootloader/fuses */\r
MCUSR &= ~(1 << WDRF);\r
wdt_disable();\r
LEDs_Init();\r
ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32);\r
ADC_SetupChannel(MIC_IN_ADC_CHANNEL);\r
+ USB_Init();\r
\r
/* Start the ADC conversion in free running mode */\r
ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | MIC_IN_ADC_CHANNEL);\r
- \r
- /* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
- \r
- /* Initialize Scheduler so that it can be used */\r
- Scheduler_Init();\r
-\r
- /* Initialize USB Subsystem */\r
- USB_Init();\r
-\r
- /* Scheduling - routine never returns, so put this last in the main function */\r
- Scheduler_Start();\r
}\r
\r
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs, and\r
*/\r
void EVENT_USB_Connect(void)\r
{\r
- /* Start USB management task */\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
-\r
/* Indicate USB enumerating */\r
- UpdateStatus(Status_USBEnumerating);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
\r
/* Sample reload timer initialization */\r
OCR0A = (F_CPU / AUDIO_SAMPLE_FREQUENCY) - 1;\r
TCCR0A = (1 << WGM01); // CTC mode\r
- TCCR0B = (1 << CS00); // Fcpu speed\r
+ TCCR0B = (1 << CS00); // Fcpu speed \r
}\r
\r
/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
/* Stop the sample reload timer */\r
TCCR0B = 0;\r
\r
- /* Stop running audio and USB management tasks */\r
- Scheduler_SetTaskMode(USB_Audio_Task, TASK_STOP);\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+ /* Indicate streaming audio interface not selected */\r
+ StreamingAudioInterfaceSelected = false;\r
\r
/* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
}\r
\r
/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
ENDPOINT_BANK_DOUBLE);\r
\r
/* Indicate USB connected and ready */\r
- UpdateStatus(Status_USBReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
Endpoint_ClearSETUP();\r
\r
/* Check if the host is enabling the audio interface (setting AlternateSetting to 1) */\r
- if (USB_ControlRequest.wValue)\r
- {\r
- /* Start audio task */\r
- Scheduler_SetTaskMode(USB_Audio_Task, TASK_RUN);\r
- }\r
- else\r
- {\r
- /* Stop audio task */\r
- Scheduler_SetTaskMode(USB_Audio_Task, TASK_STOP); \r
- }\r
+ StreamingAudioInterfaceSelected = ((USB_ControlRequest.wValue) != 0);\r
\r
/* Acknowledge status stage */\r
while (!(Endpoint_IsINReady()));\r
}\r
}\r
\r
-/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
- * log to a serial port, or anything else that is suitable for status updates.\r
- *\r
- * \param CurrentStatus Current status of the system, from the AudioInput_StatusCodes_t enum\r
- */\r
-void UpdateStatus(uint8_t CurrentStatus)\r
-{\r
- uint8_t LEDMask = LEDS_NO_LEDS;\r
- \r
- /* Set the LED mask to the appropriate LED mask based on the given status code */\r
- switch (CurrentStatus)\r
- {\r
- case Status_USBNotReady:\r
- LEDMask = (LEDS_LED1);\r
- break;\r
- case Status_USBEnumerating:\r
- LEDMask = (LEDS_LED1 | LEDS_LED2);\r
- break;\r
- case Status_USBReady:\r
- LEDMask = (LEDS_LED2 | LEDS_LED4);\r
- break;\r
- }\r
- \r
- /* Set the board LEDs to the new LED mask */\r
- LEDs_SetAllLEDs(LEDMask);\r
-}\r
-\r
/** Task to manage the Audio interface, reading in ADC samples from the microphone, and them to the host. */\r
-TASK(USB_Audio_Task)\r
+void USB_Audio_Task(void)\r
{\r
+ /* Check to see if the streaming interface is selected, if not the host is not receiving audio */\r
+ if (!(StreamingAudioInterfaceSelected))\r
+ return;\r
+\r
/* Select the audio stream endpoint */\r
Endpoint_SelectEndpoint(AUDIO_STREAM_EPNUM);\r
\r
\r
#include "Descriptors.h"\r
\r
- #include <LUFA/Version.h> // Library Version Information\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
- #include <LUFA/Drivers/Peripheral/ADC.h> // ADC driver\r
- #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Peripheral/ADC.h>\r
\r
/* Macros: */\r
/** ADC channel number for the microphone input. */\r
/** Maximum ADC range for the microphone input. */\r
#define ADC_MAX_RANGE 0x3FF\r
\r
- /* Enums: */\r
- /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
- enum AudioInput_StatusCodes_t\r
- {\r
- Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
- Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
- Status_USBReady = 2, /**< USB interface is connected and ready */\r
- };\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
\r
- /* Task Definitions: */\r
- TASK(USB_Audio_Task);\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
\r
/* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void USB_Audio_Task(void);\r
+\r
void EVENT_USB_Connect(void);\r
void EVENT_USB_Disconnect(void);\r
void EVENT_USB_ConfigurationChanged(void);\r
void EVENT_USB_UnhandledControlPacket(void);\r
-\r
- void UpdateStatus(uint8_t CurrentStatus);\r
\r
#endif\r
\r
\r
# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
+LUFA_PATH = ../../../..\r
\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
\r
\r
# List C++ source files here. (C dependencies are automatically generated.)\r
\r
#include "AudioOutput.h"\r
\r
-/* Scheduler Task List */\r
-TASK_LIST\r
-{\r
- { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
- { .Task = USB_Audio_Task , .TaskStatus = TASK_STOP },\r
-};\r
-\r
+/** Flag to indicate if the streaming audio alternative interface has been selected by the host. */\r
+bool StreamingAudioInterfaceSelected = false;\r
\r
-/** Main program entry point. This routine configures the hardware required by the application, then\r
- * starts the scheduler to run the application tasks.\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ * setup of all components and the main program loop.\r
*/\r
int main(void)\r
{\r
+ SetupHardware();\r
+\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+ \r
+ for (;;)\r
+ {\r
+ USB_Audio_Task();\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
/* Disable watchdog if enabled by bootloader/fuses */\r
MCUSR &= ~(1 << WDRF);\r
wdt_disable();\r
\r
/* Disable clock division */\r
clock_prescale_set(clock_div_1);\r
-\r
+ \r
/* Hardware Initialization */\r
LEDs_Init();\r
- \r
- /* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
- \r
- /* Initialize Scheduler so that it can be used */\r
- Scheduler_Init();\r
-\r
- /* Initialize USB Subsystem */\r
USB_Init();\r
-\r
- /* Scheduling - routine never returns, so put this last in the main function */\r
- Scheduler_Start();\r
}\r
\r
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs, and\r
*/\r
void EVENT_USB_Connect(void)\r
{\r
- /* Start USB management task */\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
-\r
/* Indicate USB enumerating */\r
- UpdateStatus(Status_USBEnumerating);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
\r
/* Sample reload timer initialization */\r
OCR0A = (F_CPU / AUDIO_SAMPLE_FREQUENCY) - 1;\r
PORTC = 0x00;\r
#endif\r
\r
- /* Stop running audio and USB management tasks */\r
- Scheduler_SetTaskMode(USB_Audio_Task, TASK_STOP);\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+ /* Indicate streaming audio interface not selected */\r
+ StreamingAudioInterfaceSelected = false;\r
\r
/* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
}\r
\r
/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
ENDPOINT_BANK_DOUBLE);\r
\r
/* Indicate USB connected and ready */\r
- UpdateStatus(Status_USBReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
Endpoint_ClearSETUP();\r
\r
/* Check if the host is enabling the audio interface (setting AlternateSetting to 1) */\r
- if (USB_ControlRequest.wValue)\r
- {\r
- /* Start audio task */\r
- Scheduler_SetTaskMode(USB_Audio_Task, TASK_RUN);\r
- }\r
- else\r
- {\r
- /* Stop audio task */\r
- Scheduler_SetTaskMode(USB_Audio_Task, TASK_STOP); \r
- }\r
+ StreamingAudioInterfaceSelected = ((USB_ControlRequest.wValue) != 0);\r
\r
/* Acknowledge status stage */\r
while (!(Endpoint_IsINReady()));\r
}\r
}\r
\r
-/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
- * log to a serial port, or anything else that is suitable for status updates.\r
- *\r
- * \param CurrentStatus Current status of the system, from the AudioOutput_StatusCodes_t enum\r
- */\r
-void UpdateStatus(uint8_t CurrentStatus)\r
-{\r
- uint8_t LEDMask = LEDS_NO_LEDS;\r
- \r
- /* Set the LED mask to the appropriate LED mask based on the given status code */\r
- switch (CurrentStatus)\r
- {\r
- case Status_USBNotReady:\r
- LEDMask = (LEDS_LED1);\r
- break;\r
- case Status_USBEnumerating:\r
- LEDMask = (LEDS_LED1 | LEDS_LED2);\r
- break;\r
- case Status_USBReady:\r
- LEDMask = (LEDS_LED2 | LEDS_LED4);\r
- break;\r
- }\r
- \r
- /* Set the board LEDs to the new LED mask */\r
- LEDs_SetAllLEDs(LEDMask);\r
-}\r
-\r
/** Task to manage the Audio interface, reading in audio samples from the host, and outputting them to the speakers/LEDs as\r
* desired.\r
*/\r
-TASK(USB_Audio_Task)\r
+void USB_Audio_Task(void)\r
{\r
+ /* Check to see if the streaming interface is selected, if not the host is not receiving audio */\r
+ if (!(StreamingAudioInterfaceSelected))\r
+ return; \r
+\r
/* Select the audio stream endpoint */\r
Endpoint_SelectEndpoint(AUDIO_STREAM_EPNUM);\r
\r
\r
#include "Descriptors.h"\r
\r
- #include <LUFA/Version.h> // Library Version Information\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
- #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>
\r
/* Macros: */\r
#if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)\r
#define CSx0 CS10\r
#endif\r
\r
- /* Enums: */\r
- /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
- enum AudioOutput_StatusCodes_t\r
- {\r
- Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
- Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
- Status_USBReady = 2, /**< USB interface is connected and ready */\r
- };\r
-\r
- /* Task Definitions: */\r
- TASK(USB_Audio_Task);\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
\r
/* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void USB_Audio_Task(void);\r
+\r
void EVENT_USB_Connect(void);\r
void EVENT_USB_Disconnect(void);\r
void EVENT_USB_ConfigurationChanged(void);\r
void EVENT_USB_UnhandledControlPacket(void);\r
- \r
- void UpdateStatus(uint8_t CurrentStatus);\r
\r
#endif\r
\r
\r
# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
+LUFA_PATH = ../../../..\r
\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
\r
\r
# List C++ source files here. (C dependencies are automatically generated.)\r
\r
#include "CDC.h"\r
\r
-/* Scheduler Task List */\r
-TASK_LIST\r
-{\r
- { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
- { .Task = CDC_Task , .TaskStatus = TASK_STOP },\r
-};\r
-\r
/* Globals: */\r
/** Contains the current baud rate and other settings of the virtual serial port. While this demo does not use\r
* the physical USART and thus does not use these settings, they must still be retained and returned to the host\r
.ParityType = Parity_None,\r
.DataBits = 8 };\r
\r
-/** String to print through the virtual serial port when the joystick is pressed upwards. */\r
-char JoystickUpString[] = "Joystick Up\r\n";\r
-\r
-/** String to print through the virtual serial port when the joystick is pressed downward. */\r
-char JoystickDownString[] = "Joystick Down\r\n";\r
-\r
-/** String to print through the virtual serial port when the joystick is pressed left. */\r
-char JoystickLeftString[] = "Joystick Left\r\n";\r
-\r
-/** String to print through the virtual serial port when the joystick is pressed right. */\r
-char JoystickRightString[] = "Joystick Right\r\n";\r
-\r
-/** String to print through the virtual serial port when the joystick is pressed inwards. */\r
-char JoystickPressedString[] = "Joystick Pressed\r\n";\r
-\r
-/** Main program entry point. This routine configures the hardware required by the application, then\r
- * starts the scheduler to run the application tasks.\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ * setup of all components and the main program loop.\r
*/\r
int main(void)\r
{\r
+ SetupHardware();\r
+ \r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+ for (;;)\r
+ {\r
+ CDC_Task();\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
/* Disable watchdog if enabled by bootloader/fuses */\r
MCUSR &= ~(1 << WDRF);\r
wdt_disable();\r
/* Hardware Initialization */\r
Joystick_Init();\r
LEDs_Init();\r
- \r
- /* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
- \r
- /* Initialize Scheduler so that it can be used */\r
- Scheduler_Init();\r
-\r
- /* Initialize USB Subsystem */\r
USB_Init();\r
-\r
- /* Scheduling - routine never returns, so put this last in the main function */\r
- Scheduler_Start();\r
}\r
\r
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
*/\r
void EVENT_USB_Connect(void)\r
{\r
- /* Start USB management task */\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
-\r
/* Indicate USB enumerating */\r
- UpdateStatus(Status_USBEnumerating);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
}\r
\r
/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
*/\r
void EVENT_USB_Disconnect(void)\r
{\r
- /* Stop running CDC and USB management tasks */\r
- Scheduler_SetTaskMode(CDC_Task, TASK_STOP);\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
-\r
/* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
}\r
\r
/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
ENDPOINT_BANK_SINGLE);\r
\r
/* Indicate USB connected and ready */\r
- UpdateStatus(Status_USBReady);\r
- \r
- /* Start CDC task */\r
- Scheduler_SetTaskMode(CDC_Task, TASK_RUN);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
}\r
}\r
\r
-/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
- * log to a serial port, or anything else that is suitable for status updates.\r
- *\r
- * \param CurrentStatus Current status of the system, from the CDC_StatusCodes_t enum\r
- */\r
-void UpdateStatus(uint8_t CurrentStatus)\r
-{\r
- uint8_t LEDMask = LEDS_NO_LEDS;\r
- \r
- /* Set the LED mask to the appropriate LED mask based on the given status code */\r
- switch (CurrentStatus)\r
- {\r
- case Status_USBNotReady:\r
- LEDMask = (LEDS_LED1);\r
- break;\r
- case Status_USBEnumerating:\r
- LEDMask = (LEDS_LED1 | LEDS_LED2);\r
- break;\r
- case Status_USBReady:\r
- LEDMask = (LEDS_LED2 | LEDS_LED4);\r
- break;\r
- }\r
- \r
- /* Set the board LEDs to the new LED mask */\r
- LEDs_SetAllLEDs(LEDMask);\r
-}\r
-\r
/** Function to manage CDC data transmission and reception to and from the host. */\r
-TASK(CDC_Task)\r
+void CDC_Task(void)\r
{\r
char* ReportString = NULL;\r
uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
static bool ActionSent = false;\r
+\r
+ char* JoystickStrings[] =\r
+ {\r
+ "Joystick Up\r\n",\r
+ "Joystick Down\r\n",\r
+ "Joystick Left\r\n",\r
+ "Joystick Right\r\n",\r
+ "Joystick Pressed\r\n",\r
+ };\r
\r
#if 0\r
/* NOTE: Here you can use the notification endpoint to send back line state changes to the host, for the special RS-232\r
\r
/* Determine if a joystick action has occurred */\r
if (JoyStatus_LCL & JOY_UP)\r
- ReportString = JoystickUpString;\r
+ ReportString = JoystickStrings[0];\r
else if (JoyStatus_LCL & JOY_DOWN)\r
- ReportString = JoystickDownString;\r
+ ReportString = JoystickStrings[1];\r
else if (JoyStatus_LCL & JOY_LEFT)\r
- ReportString = JoystickLeftString;\r
+ ReportString = JoystickStrings[2];\r
else if (JoyStatus_LCL & JOY_RIGHT)\r
- ReportString = JoystickRightString;\r
+ ReportString = JoystickStrings[3];\r
else if (JoyStatus_LCL & JOY_PRESS)\r
- ReportString = JoystickPressedString;\r
+ ReportString = JoystickStrings[4];\r
\r
/* Flag management - Only allow one string to be sent per action */\r
if (ReportString == NULL)\r
\r
#include "Descriptors.h"\r
\r
- #include <LUFA/Version.h> // Library Version Information\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- #include <LUFA/Drivers/Board/Joystick.h> // Joystick driver\r
- #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
- #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>
\r
/* Macros: */\r
/** CDC Class specific request to get the current virtual serial port configuration settings. */\r
*/\r
#define CONTROL_LINE_IN_OVERRUNERROR (1 << 6)\r
\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+\r
/* Type Defines: */\r
/** Type define for the virtual serial port line encoding settings, for storing the current USART configuration\r
* as set by the host via a class specific request.\r
Parity_Mark = 3, /**< Mark parity bit mode on each frame */\r
Parity_Space = 4, /**< Space parity bit mode on each frame */\r
};\r
-\r
- /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
- enum CDC_StatusCodes_t\r
- {\r
- Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
- Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
- Status_USBReady = 2, /**< USB interface is connected and ready */\r
- };\r
\r
- /* Tasks: */\r
- TASK(CDC_Task);\r
-\r
/* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void CDC_Task(void);\r
+ \r
void EVENT_USB_Connect(void);\r
void EVENT_USB_Disconnect(void);\r
void EVENT_USB_ConfigurationChanged(void);\r
\r
\r
# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
+LUFA_PATH = ../../../..\r
\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
\r
\r
# List C++ source files here. (C dependencies are automatically generated.)\r
\r
#include "DualCDC.h"\r
\r
-/* Scheduler Task List */\r
-TASK_LIST\r
-{\r
- { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
- { .Task = CDC1_Task , .TaskStatus = TASK_STOP },\r
- { .Task = CDC2_Task , .TaskStatus = TASK_STOP },\r
-};\r
-\r
/* Globals: */\r
/** Contains the current baud rate and other settings of the first virtual serial port. While this demo does not use\r
* the physical USART and thus does not use these settings, they must still be retained and returned to the host\r
.CharFormat = OneStopBit,\r
.ParityType = Parity_None,\r
.DataBits = 8 };\r
- \r
-/** String to print through the first virtual serial port when the joystick is pressed upwards. */\r
-char JoystickUpString[] = "Joystick Up\r\n";\r
-\r
-/** String to print through the first virtual serial port when the joystick is pressed downward. */\r
-char JoystickDownString[] = "Joystick Down\r\n";\r
-\r
-/** String to print through the first virtual serial port when the joystick is pressed left. */\r
-char JoystickLeftString[] = "Joystick Left\r\n";\r
-\r
-/** String to print through the first virtual serial port when the joystick is pressed right. */\r
-char JoystickRightString[] = "Joystick Right\r\n";\r
-\r
-/** String to print through the first virtual serial port when the joystick is pressed inwards. */\r
-char JoystickPressedString[] = "Joystick Pressed\r\n";\r
\r
/** Main program entry point. This routine configures the hardware required by the application, then\r
* starts the scheduler to run the application tasks.\r
*/\r
int main(void)\r
{\r
+ SetupHardware();\r
+\r
+ for (;;)\r
+ {\r
+ CDC1_Task();\r
+ CDC2_Task();\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
/* Disable watchdog if enabled by bootloader/fuses */\r
MCUSR &= ~(1 << WDRF);\r
wdt_disable();\r
/* Hardware Initialization */\r
Joystick_Init();\r
LEDs_Init();\r
- \r
- /* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
- \r
- /* Initialize Scheduler so that it can be used */\r
- Scheduler_Init();\r
-\r
- /* Initialize USB Subsystem */\r
USB_Init();\r
-\r
- /* Scheduling - routine never returns, so put this last in the main function */\r
- Scheduler_Start();\r
}\r
\r
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
*/\r
void EVENT_USB_Connect(void)\r
{\r
- /* Start USB management task */\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
-\r
/* Indicate USB enumerating */\r
- UpdateStatus(Status_USBEnumerating);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
}\r
\r
/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
*/\r
void EVENT_USB_Disconnect(void)\r
{\r
- /* Stop running CDC and USB management tasks */\r
- Scheduler_SetTaskMode(CDC1_Task, TASK_STOP);\r
- Scheduler_SetTaskMode(CDC2_Task, TASK_STOP);\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
-\r
/* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
}\r
\r
/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
ENDPOINT_BANK_SINGLE);\r
\r
/* Indicate USB connected and ready */\r
- UpdateStatus(Status_USBReady);\r
- \r
- /* Start CDC tasks */\r
- Scheduler_SetTaskMode(CDC1_Task, TASK_RUN);\r
- Scheduler_SetTaskMode(CDC2_Task, TASK_RUN);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
}\r
}\r
\r
-/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
- * log to a serial port, or anything else that is suitable for status updates.\r
- *\r
- * \param CurrentStatus Current status of the system, from the DualCDC_StatusCodes_t enum\r
- */\r
-void UpdateStatus(uint8_t CurrentStatus)\r
-{\r
- uint8_t LEDMask = LEDS_NO_LEDS;\r
- \r
- /* Set the LED mask to the appropriate LED mask based on the given status code */\r
- switch (CurrentStatus)\r
- {\r
- case Status_USBNotReady:\r
- LEDMask = (LEDS_LED1);\r
- break;\r
- case Status_USBEnumerating:\r
- LEDMask = (LEDS_LED1 | LEDS_LED2);\r
- break;\r
- case Status_USBReady:\r
- LEDMask = (LEDS_LED2 | LEDS_LED4);\r
- break;\r
- }\r
- \r
- /* Set the board LEDs to the new LED mask */\r
- LEDs_SetAllLEDs(LEDMask);\r
-}\r
-\r
/** Function to manage CDC data transmission and reception to and from the host for the first CDC interface, which sends joystick\r
* movements to the host as ASCII strings.\r
*/\r
-TASK(CDC1_Task)\r
+void CDC1_Task(void)\r
{\r
char* ReportString = NULL;\r
uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
static bool ActionSent = false;\r
\r
+ char* JoystickStrings[] =\r
+ {\r
+ "Joystick Up\r\n",\r
+ "Joystick Down\r\n",\r
+ "Joystick Left\r\n",\r
+ "Joystick Right\r\n",\r
+ "Joystick Pressed\r\n",\r
+ };\r
+\r
/* Determine if a joystick action has occurred */\r
if (JoyStatus_LCL & JOY_UP)\r
- ReportString = JoystickUpString;\r
+ ReportString = JoystickStrings[0];\r
else if (JoyStatus_LCL & JOY_DOWN)\r
- ReportString = JoystickDownString;\r
+ ReportString = JoystickStrings[1];\r
else if (JoyStatus_LCL & JOY_LEFT)\r
- ReportString = JoystickLeftString;\r
+ ReportString = JoystickStrings[2];\r
else if (JoyStatus_LCL & JOY_RIGHT)\r
- ReportString = JoystickRightString;\r
+ ReportString = JoystickStrings[3];\r
else if (JoyStatus_LCL & JOY_PRESS)\r
- ReportString = JoystickPressedString;\r
+ ReportString = JoystickStrings[4];\r
\r
/* Flag management - Only allow one string to be sent per action */\r
if (ReportString == NULL)\r
/** Function to manage CDC data transmission and reception to and from the host for the second CDC interface, which echoes back\r
* all data sent to it from the host.\r
*/\r
-TASK(CDC2_Task)\r
+void CDC2_Task(void)\r
{\r
/* Select the Serial Rx Endpoint */\r
Endpoint_SelectEndpoint(CDC2_RX_EPNUM);\r
\r
#include "Descriptors.h"\r
\r
- #include <LUFA/Version.h> // Library Version Information\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- #include <LUFA/Drivers/Board/Joystick.h> // Joystick driver\r
- #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
- #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
\r
/* Macros: */\r
/** CDC Class specific request to get the current virtual serial port configuration settings. */\r
/** CDC Class specific request to set the current virtual serial port handshake line states. */\r
#define REQ_SetControlLineState 0x22\r
\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+\r
/* Type Defines: */\r
/** Type define for the virtual serial port line encoding settings, for storing the current USART configuration\r
* as set by the host via a class specific request.\r
Parity_Space = 4, /**< Space parity bit mode on each frame */\r
};\r
\r
- /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
- enum DualCDC_StatusCodes_t\r
- {\r
- Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
- Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
- Status_USBReady = 2, /**< USB interface is connected and ready */\r
- };\r
-\r
- /* Tasks: */\r
- TASK(CDC1_Task);\r
- TASK(CDC2_Task);\r
-\r
/* Function Prototypes: */\r
+ void CDC1_Task(void);\r
+ void CDC2_Task(void);\r
+ void SetupHardware(void);\r
+\r
void EVENT_USB_Connect(void);\r
void EVENT_USB_Disconnect(void);\r
void EVENT_USB_ConfigurationChanged(void);\r
void EVENT_USB_UnhandledControlPacket(void);\r
-\r
- void UpdateStatus(uint8_t CurrentStatus);\r
\r
#endif\r
\r
\r
# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
+LUFA_PATH = ../../../..\r
\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
\r
\r
# List C++ source files here. (C dependencies are automatically generated.)\r
\r
#include "GenericHID.h"\r
\r
-/* Scheduler Task List */\r
-TASK_LIST\r
-{\r
- { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
- { .Task = USB_HID_Report , .TaskStatus = TASK_STOP },\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
static uint8_t LastReceived[GENERIC_REPORT_SIZE];\r
\r
*/\r
int main(void)\r
{\r
+ SetupHardware();\r
+ \r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+ for (;;)\r
+ {\r
+ HID_Task();\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
/* Disable watchdog if enabled by bootloader/fuses */\r
MCUSR &= ~(1 << WDRF);\r
wdt_disable();\r
\r
/* Hardware Initialization */\r
LEDs_Init();\r
-\r
- /* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
-\r
- /* Initialize Scheduler so that it can be used */\r
- Scheduler_Init();\r
-\r
- /* Initialize USB Subsystem */\r
USB_Init();\r
- \r
- /* Scheduling - routine never returns, so put this last in the main function */\r
- Scheduler_Start();\r
}\r
\r
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
*/\r
void EVENT_USB_Connect(void)\r
{\r
- /* Start USB management task */\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
-\r
/* Indicate USB enumerating */\r
- UpdateStatus(Status_USBEnumerating);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
}\r
\r
/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
*/\r
void EVENT_USB_Disconnect(void)\r
{\r
- /* Stop running HID reporting and USB management tasks */\r
- Scheduler_SetTaskMode(USB_HID_Report, TASK_STOP);\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
-\r
/* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
}\r
\r
/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration\r
ENDPOINT_BANK_SINGLE);\r
\r
/* Indicate USB connected and ready */\r
- UpdateStatus(Status_USBReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
}\r
}\r
\r
-/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
- * log to a serial port, or anything else that is suitable for status updates.\r
- *\r
- * \param CurrentStatus Current status of the system, from the GenericHID_StatusCodes_t enum\r
- */\r
-void UpdateStatus(uint8_t CurrentStatus)\r
-{\r
- uint8_t LEDMask = LEDS_NO_LEDS;\r
- \r
- /* Set the LED mask to the appropriate LED mask based on the given status code */\r
- switch (CurrentStatus)\r
- {\r
- case Status_USBNotReady:\r
- LEDMask = (LEDS_LED1);\r
- break;\r
- case Status_USBEnumerating:\r
- LEDMask = (LEDS_LED1 | LEDS_LED2);\r
- break;\r
- case Status_USBReady:\r
- LEDMask = (LEDS_LED2 | LEDS_LED4);\r
- break;\r
- }\r
- \r
- /* Set the board LEDs to the new LED mask */\r
- LEDs_SetAllLEDs(LEDMask);\r
-}\r
-\r
/** Function to process the lest received report from the host.\r
*\r
* \param DataArray Pointer to a buffer where the last report data is stored\r
DataArray[i] = LastReceived[i];\r
}\r
\r
-TASK(USB_HID_Report)\r
+void HID_Task(void)\r
{\r
/* Check if the USB system is connected to a host */\r
if (USB_IsConnected)\r
\r
#include "Descriptors.h"\r
\r
- #include <LUFA/Version.h> // Library Version Information\r
- #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
\r
/* Macros: */\r
/** HID Class specific request to get the next HID report from the device. */\r
/** HID Class specific request to send the next HID report to the device. */\r
#define REQ_SetReport 0x09\r
\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+ \r
/* Enums: */\r
/** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
enum GenericHID_StatusCodes_t\r
Status_USBReady = 2, /**< USB interface is connected and ready */\r
};\r
\r
- /* Task Definitions: */\r
- TASK(USB_HID_Report);\r
-\r
/* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void HID_Task(void);\r
+ \r
void EVENT_USB_Connect(void);\r
void EVENT_USB_Disconnect(void);\r
void EVENT_USB_ConfigurationChanged(void);\r
void EVENT_USB_UnhandledControlPacket(void);\r
\r
- void UpdateStatus(uint8_t CurrentStatus);\r
void ProcessGenericHIDReport(uint8_t* DataArray);\r
void CreateGenericHIDReport(uint8_t* DataArray);\r
\r
\r
\r
# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
+LUFA_PATH = ../../../..\r
\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
\r
\r
# List C++ source files here. (C dependencies are automatically generated.)\r
\r
#include "Joystick.h"\r
\r
-/* Scheduler Task List */\r
-TASK_LIST\r
-{\r
- { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
- { .Task = USB_Joystick_Report , .TaskStatus = TASK_STOP },\r
-};\r
-\r
/** Main program entry point. This routine configures the hardware required by the application, then\r
* starts the scheduler to run the application tasks.\r
*/\r
int main(void)\r
{\r
+ SetupHardware();\r
+ \r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+ for (;;)\r
+ {\r
+ HID_Task();\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
/* Disable watchdog if enabled by bootloader/fuses */\r
MCUSR &= ~(1 << WDRF);\r
wdt_disable();\r
Joystick_Init();\r
LEDs_Init();\r
Buttons_Init();\r
- \r
- /* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
- \r
- /* Initialize Scheduler so that it can be used */\r
- Scheduler_Init();\r
-\r
- /* Initialize USB Subsystem */\r
USB_Init();\r
-\r
- /* Scheduling - routine never returns, so put this last in the main function */\r
- Scheduler_Start();\r
}\r
\r
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
*/\r
void EVENT_USB_Connect(void)\r
{\r
- /* Start USB management task */\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
-\r
/* Indicate USB enumerating */\r
- UpdateStatus(Status_USBEnumerating);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
}\r
\r
/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
*/\r
void EVENT_USB_Disconnect(void)\r
{\r
- /* Stop running joystick reporting and USB management tasks */\r
- Scheduler_SetTaskMode(USB_Joystick_Report, TASK_STOP);\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
-\r
/* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
}\r
\r
/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
ENDPOINT_BANK_SINGLE);\r
\r
/* Indicate USB connected and ready */\r
- UpdateStatus(Status_USBReady);\r
-\r
- /* Start joystick reporting task */\r
- Scheduler_SetTaskMode(USB_Joystick_Report, TASK_RUN);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
return InputChanged;\r
}\r
\r
-/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
- * log to a serial port, or anything else that is suitable for status updates.\r
- *\r
- * \param CurrentStatus Current status of the system, from the Joystick_StatusCodes_t enum\r
- */\r
-void UpdateStatus(uint8_t CurrentStatus)\r
-{\r
- uint8_t LEDMask = LEDS_NO_LEDS;\r
- \r
- /* Set the LED mask to the appropriate LED mask based on the given status code */\r
- switch (CurrentStatus)\r
- {\r
- case Status_USBNotReady:\r
- LEDMask = (LEDS_LED1);\r
- break;\r
- case Status_USBEnumerating:\r
- LEDMask = (LEDS_LED1 | LEDS_LED2);\r
- break;\r
- case Status_USBReady:\r
- LEDMask = (LEDS_LED2 | LEDS_LED4);\r
- break;\r
- }\r
- \r
- /* Set the board LEDs to the new LED mask */\r
- LEDs_SetAllLEDs(LEDMask);\r
-}\r
-\r
/** Function to manage HID report generation and transmission to the host. */\r
-TASK(USB_Joystick_Report)\r
+void HID_Task(void)\r
{\r
/* Check if the USB System is connected to a Host */\r
if (USB_IsConnected)\r
\r
#include "Descriptors.h"\r
\r
- #include <LUFA/Version.h> // Library Version Information\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- #include <LUFA/Drivers/Board/Joystick.h> // Joystick driver\r
- #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
- #include <LUFA/Drivers/Board/Buttons.h> // Board Buttons driver\r
- #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
- \r
- /* Task Definitions: */\r
- TASK(USB_Joystick_Report);\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Buttons.h>\r
\r
/* Macros: */\r
/** HID Class specific request to get the next HID report from the device. */\r
#define REQ_GetReport 0x01\r
\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+ \r
/* Type Defines: */\r
/** Type define for the joystick HID report structure, for creating and sending HID reports to the host PC.\r
* This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
int8_t Y; /**< Current absolute joystick Y position, as a signed 8-bit integer */\r
uint8_t Button; /**< Bit mask of the currently pressed joystick buttons */\r
} USB_JoystickReport_Data_t;\r
- \r
- /* Enums: */\r
- /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
- enum Joystick_StatusCodes_t\r
- {\r
- Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
- Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
- Status_USBReady = 2, /**< USB interface is connected and ready */\r
- };\r
\r
/* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void HID_Task(void);\r
+\r
void EVENT_USB_Connect(void);\r
void EVENT_USB_Disconnect(void);\r
void EVENT_USB_ConfigurationChanged(void);\r
void EVENT_USB_UnhandledControlPacket(void);\r
\r
bool GetNextReport(USB_JoystickReport_Data_t* ReportData);\r
- void UpdateStatus(uint8_t CurrentStatus);\r
\r
#endif\r
\r
\r
# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
+LUFA_PATH = ../../../..\r
\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
\r
\r
# List C++ source files here. (C dependencies are automatically generated.)\r
\r
#include "Keyboard.h"\r
\r
-/* Scheduler Task List */\r
-TASK_LIST\r
-{\r
- { .Task = USB_USBTask , .TaskStatus = TASK_STOP }, \r
- { .Task = USB_Keyboard_Report , .TaskStatus = TASK_STOP },\r
-};\r
-\r
/* Global Variables */\r
/** Indicates what report mode the host has requested, true for normal HID reporting mode, false for special boot\r
* protocol reporting mode.\r
*/\r
int main(void)\r
{\r
+ SetupHardware();\r
+ \r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+ for (;;)\r
+ {\r
+ HID_Task();\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
/* Disable watchdog if enabled by bootloader/fuses */\r
MCUSR &= ~(1 << WDRF);\r
wdt_disable();\r
/* Hardware Initialization */\r
Joystick_Init();\r
LEDs_Init();\r
+ USB_Init();\r
\r
/* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
OCR0A = 0x7D;\r
TCCR0A = (1 << WGM01);\r
TCCR0B = ((1 << CS01) | (1 << CS00));\r
TIMSK0 = (1 << OCIE0A);\r
-\r
- /* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
-\r
- /* Initialize Scheduler so that it can be used */\r
- Scheduler_Init();\r
-\r
- /* Initialize USB Subsystem */\r
- USB_Init();\r
- \r
- /* Scheduling - routine never returns, so put this last in the main function */\r
- Scheduler_Start();\r
}\r
\r
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
*/\r
void EVENT_USB_Connect(void)\r
{\r
- /* Start USB management task */\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
-\r
/* Indicate USB enumerating */\r
- UpdateStatus(Status_USBEnumerating);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
\r
/* Default to report protocol on connect */\r
UsingReportProtocol = true;\r
*/\r
void EVENT_USB_Disconnect(void)\r
{\r
- /* Stop running keyboard reporting and USB management tasks */\r
- Scheduler_SetTaskMode(USB_Keyboard_Report, TASK_STOP);\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
- \r
/* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
}\r
\r
/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration\r
ENDPOINT_BANK_SINGLE);\r
\r
/* Indicate USB connected and ready */\r
- UpdateStatus(Status_USBReady);\r
-\r
- /* Start running keyboard reporting task */\r
- Scheduler_SetTaskMode(USB_Keyboard_Report, TASK_RUN);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
}\r
}\r
\r
-/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
- * log to a serial port, or anything else that is suitable for status updates.\r
- *\r
- * \param CurrentStatus Current status of the system, from the Keyboard_StatusCodes_t enum\r
- */\r
-void UpdateStatus(uint8_t CurrentStatus)\r
-{\r
- uint8_t LEDMask = LEDS_NO_LEDS;\r
- \r
- /* Set the LED mask to the appropriate LED mask based on the given status code */\r
- switch (CurrentStatus)\r
- {\r
- case Status_USBNotReady:\r
- LEDMask = (LEDS_LED1);\r
- break;\r
- case Status_USBEnumerating:\r
- LEDMask = (LEDS_LED1 | LEDS_LED2);\r
- break;\r
- case Status_USBReady:\r
- LEDMask = (LEDS_LED2 | LEDS_LED4);\r
- break;\r
- }\r
- \r
- /* Set the board LEDs to the new LED mask */\r
- LEDs_SetAllLEDs(LEDMask);\r
-}\r
-\r
/** Function to manage HID report generation and transmission to the host, when in report mode. */\r
-TASK(USB_Keyboard_Report)\r
+void HID_Task(void)\r
{\r
/* Check if the USB system is connected to a host */\r
if (USB_IsConnected)\r
\r
#include "Descriptors.h"\r
\r
- #include <LUFA/Version.h> // Library Version Information\r
- #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- #include <LUFA/Drivers/Board/Joystick.h> // Joystick driver\r
- #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
\r
/* Macros: */\r
/** Idle period indicating that reports should be sent only when the inputs have changed */\r
\r
/** HID Class specific request to set the current HID protocol in use, either report or boot. */\r
#define REQ_SetProtocol 0x0B\r
- \r
- /* Task Definitions: */\r
- TASK(USB_Keyboard_Report);\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
\r
/* Type Defines: */\r
/** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC.\r
uint8_t Reserved; /**< Reserved, always set as 0x00 */\r
uint8_t KeyCode[6]; /**< Array of up to six simultaneous key codes of pressed keys */\r
} USB_KeyboardReport_Data_t;\r
- \r
- /* Enums: */\r
- /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
- enum Keyboard_StatusCodes_t\r
- {\r
- Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
- Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
- Status_USBReady = 2, /**< USB interface is connected and ready */\r
- };\r
\r
/* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void HID_Task(void);\r
+ \r
void EVENT_USB_Connect(void);\r
void EVENT_USB_Disconnect(void);\r
void EVENT_USB_ConfigurationChanged(void);\r
void ProcessLEDReport(uint8_t LEDReport);\r
void SendNextReport(void);\r
void ReceiveNextReport(void);\r
- void UpdateStatus(uint8_t CurrentStatus);\r
\r
#endif\r
\r
\r
# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
+LUFA_PATH = ../../../..\r
\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
\r
\r
# List C++ source files here. (C dependencies are automatically generated.)\r
\r
#include "KeyboardMouse.h"\r
\r
-/* Scheduler Task List */\r
-TASK_LIST\r
-{\r
- { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
- { .Task = USB_Mouse , .TaskStatus = TASK_RUN },\r
- { .Task = USB_Keyboard , .TaskStatus = TASK_RUN },\r
-};\r
-\r
/* Global Variables */\r
/** Global structure to hold the current keyboard interface HID report, for transmission to the host */\r
USB_KeyboardReport_Data_t KeyboardReportData;\r
*/\r
int main(void)\r
{\r
+ SetupHardware();\r
+ \r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+ for (;;)\r
+ {\r
+ Keyboard_HID_Task();\r
+ Mouse_HID_Task();\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
/* Disable watchdog if enabled by bootloader/fuses */\r
MCUSR &= ~(1 << WDRF);\r
wdt_disable();\r
/* Hardware Initialization */\r
Joystick_Init();\r
LEDs_Init();\r
- \r
- /* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
- \r
- /* Initialize Scheduler so that it can be used */\r
- Scheduler_Init();\r
-\r
- /* Initialize USB Subsystem */\r
USB_Init();\r
- \r
- /* Scheduling - routine never returns, so put this last in the main function */\r
- Scheduler_Start();\r
}\r
\r
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
*/\r
void EVENT_USB_Connect(void)\r
{\r
- /* Start USB management task */\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
-\r
/* Indicate USB enumerating */\r
- UpdateStatus(Status_USBEnumerating);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
}\r
\r
/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
*/\r
void EVENT_USB_Disconnect(void)\r
{\r
- /* Stop running HID reporting and USB management tasks */\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
-\r
/* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
}\r
\r
/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration\r
ENDPOINT_BANK_SINGLE);\r
\r
/* Indicate USB connected and ready */\r
- UpdateStatus(Status_USBReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
}\r
}\r
\r
-/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
- * log to a serial port, or anything else that is suitable for status updates.\r
- *\r
- * \param CurrentStatus Current status of the system, from the KeyboardMouse_StatusCodes_t enum\r
- */\r
-void UpdateStatus(uint8_t CurrentStatus)\r
-{\r
- uint8_t LEDMask = LEDS_NO_LEDS;\r
- \r
- /* Set the LED mask to the appropriate LED mask based on the given status code */\r
- switch (CurrentStatus)\r
- {\r
- case Status_USBNotReady:\r
- LEDMask = (LEDS_LED1);\r
- break;\r
- case Status_USBEnumerating:\r
- LEDMask = (LEDS_LED1 | LEDS_LED2);\r
- break;\r
- case Status_USBReady:\r
- LEDMask = (LEDS_LED2 | LEDS_LED4);\r
- break;\r
- }\r
- \r
- /* Set the board LEDs to the new LED mask */\r
- LEDs_SetAllLEDs(LEDMask);\r
-}\r
-\r
/** Keyboard task. This generates the next keyboard HID report for the host, and transmits it via the\r
* keyboard IN endpoint when the host is ready for more data. Additionally, it processes host LED status\r
* reports sent to the device via the keyboard OUT reporting endpoint.\r
*/\r
-TASK(USB_Keyboard)\r
+void Keyboard_HID_Task(void)\r
{\r
uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
\r
/** Mouse task. This generates the next mouse HID report for the host, and transmits it via the\r
* mouse IN endpoint when the host is ready for more data.\r
*/\r
-TASK(USB_Mouse)\r
+void Mouse_HID_Task(void)\r
{\r
uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
\r
\r
#include "Descriptors.h"\r
\r
- #include <LUFA/Version.h> // Library Version Information\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- #include <LUFA/Drivers/Board/Joystick.h> // Joystick driver\r
- #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
- #include <LUFA/Drivers/Board/Buttons.h> // Board Buttons driver\r
- #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
- \r
- /* Task Definitions: */\r
- TASK(USB_Keyboard);\r
- TASK(USB_Mouse);\r
-\r
- /* Enums: */\r
- /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
- enum KeyboardMouse_StatusCodes_t\r
- {\r
- Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
- Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
- Status_USBReady = 2, /**< USB interface is connected and ready */\r
- };\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Buttons.h>\r
\r
/* Macros: */\r
/** HID Class specific request to get the next HID report from the device. */\r
\r
/** HID Class specific request to set the current HID protocol in use, either report or boot. */\r
#define REQ_SetProtocol 0x0B\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
\r
/* Type Defines: */\r
/** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC.\r
} USB_MouseReport_Data_t;\r
\r
/* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void Keyboard_HID_Task(void);\r
+ void Mouse_HID_Task(void);\r
+ \r
void EVENT_USB_Connect(void);\r
void EVENT_USB_Disconnect(void);\r
void EVENT_USB_ConfigurationChanged(void);\r
void EVENT_USB_UnhandledControlPacket(void);\r
-\r
- void UpdateStatus(uint8_t CurrentStatus);\r
\r
#endif\r
\r
\r
# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
+LUFA_PATH = ../../../..\r
\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
\r
\r
# List C++ source files here. (C dependencies are automatically generated.)\r
\r
#include "MIDI.h"\r
\r
-/* Scheduler Task List */\r
-TASK_LIST\r
-{\r
- { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
- { .Task = USB_MIDI_Task , .TaskStatus = TASK_STOP },\r
-};\r
-\r
/** Main program entry point. This routine configures the hardware required by the application, then\r
* starts the scheduler to run the application tasks.\r
*/\r
int main(void)\r
{\r
+ SetupHardware();\r
+ \r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+ for (;;)\r
+ {\r
+ MIDI_Task();\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
/* Disable watchdog if enabled by bootloader/fuses */\r
MCUSR &= ~(1 << WDRF);\r
wdt_disable();\r
Joystick_Init();\r
LEDs_Init();\r
Buttons_Init();\r
-\r
- /* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
- \r
- /* Initialize Scheduler so that it can be used */\r
- Scheduler_Init();\r
-\r
- /* Initialize USB Subsystem */\r
USB_Init();\r
-\r
- /* Scheduling - routine never returns, so put this last in the main function */\r
- Scheduler_Start();\r
}\r
\r
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */\r
void EVENT_USB_Connect(void)\r
{\r
- /* Start USB management task */\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
-\r
/* Indicate USB enumerating */\r
- UpdateStatus(Status_USBEnumerating);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
}\r
\r
/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
*/\r
void EVENT_USB_Disconnect(void)\r
{\r
- /* Stop running audio and USB management tasks */\r
- Scheduler_SetTaskMode(USB_MIDI_Task, TASK_STOP);\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
-\r
/* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
}\r
\r
/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
ENDPOINT_BANK_SINGLE);\r
\r
/* Indicate USB connected and ready */\r
- UpdateStatus(Status_USBReady);\r
-\r
- /* Start MIDI task */\r
- Scheduler_SetTaskMode(USB_MIDI_Task, TASK_RUN);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
}\r
\r
/** Task to handle the generation of MIDI note change events in response to presses of the board joystick, and send them\r
* to the host.\r
*/\r
-TASK(USB_MIDI_Task)\r
+void MIDI_Task(void)\r
{\r
static uint8_t PrevJoystickStatus;\r
\r
Endpoint_ClearOUT();\r
}\r
\r
-/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
- * log to a serial port, or anything else that is suitable for status updates.\r
- *\r
- * \param CurrentStatus Current status of the system, from the MIDI_StatusCodes_t enum\r
- */\r
-void UpdateStatus(uint8_t CurrentStatus)\r
-{\r
- uint8_t LEDMask = LEDS_NO_LEDS;\r
- \r
- /* Set the LED mask to the appropriate LED mask based on the given status code */\r
- switch (CurrentStatus)\r
- {\r
- case Status_USBNotReady:\r
- LEDMask = (LEDS_LED1);\r
- break;\r
- case Status_USBEnumerating:\r
- LEDMask = (LEDS_LED1 | LEDS_LED2);\r
- break;\r
- case Status_USBReady:\r
- LEDMask = (LEDS_LED2 | LEDS_LED4);\r
- break;\r
- }\r
- \r
- /* Set the board LEDs to the new LED mask */\r
- LEDs_SetAllLEDs(LEDMask);\r
-}\r
-\r
/** Sends a MIDI note change event (note on or off) to the MIDI output jack, on the given virtual cable ID and channel.\r
*\r
* \param Pitch Pitch of the note to turn on or off\r
\r
#include "Descriptors.h"\r
\r
- #include <LUFA/Version.h> // Library Version Information\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- #include <LUFA/Drivers/Board/Joystick.h> // Joystick driver\r
- #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
- #include <LUFA/Drivers/Board/Buttons.h> // Board Buttons driver\r
- #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Buttons.h>\r
\r
/* Macros: */\r
/** MIDI command for a note on (activation) event */\r
*/\r
#define MIDI_CHANNEL(channel) (channel - 1)\r
\r
- /* Enums: */\r
- /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
- enum MIDI_StatusCodes_t\r
- {\r
- Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
- Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
- Status_USBReady = 2, /**< USB interface is connected and ready */\r
- };\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
\r
- /* Task Definitions: */\r
- TASK(USB_MIDI_Task);\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+ \r
/* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void MIDI_Task(void);\r
+ \r
void EVENT_USB_Connect(void);\r
void EVENT_USB_Disconnect(void);\r
void EVENT_USB_ConfigurationChanged(void);\r
\r
\r
# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
+LUFA_PATH = ../../../..\r
\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
\r
\r
# List C++ source files here. (C dependencies are automatically generated.)\r
#define INCLUDE_FROM_MASSSTORAGE_C\r
#include "MassStorage.h"\r
\r
-/* Scheduler Task List */\r
-TASK_LIST\r
-{\r
- { .Task = USB_MassStorage , .TaskStatus = TASK_STOP },\r
-};\r
-\r
/* Global Variables */\r
/** Structure to hold the latest Command Block Wrapper issued by the host, containing a SCSI command to execute. */\r
CommandBlockWrapper_t CommandBlock;\r
*/\r
int main(void)\r
{\r
+ SetupHardware();\r
+ \r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+ for (;;)\r
+ {\r
+ MassStorage_Task();\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
/* Disable watchdog if enabled by bootloader/fuses */\r
MCUSR &= ~(1 << WDRF);\r
wdt_disable();\r
/* Hardware Initialization */\r
LEDs_Init();\r
Dataflash_Init(SPI_SPEED_FCPU_DIV_2);\r
+ USB_Init();\r
\r
/* Clear Dataflash sector protections, if enabled */\r
DataflashManager_ResetDataflashProtections();\r
- \r
- /* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
- \r
- /* Initialize Scheduler so that it can be used */\r
- Scheduler_Init();\r
-\r
- /* Initialize USB Subsystem */\r
- USB_Init();\r
-\r
- /* Scheduling - routine never returns, so put this last in the main function */\r
- Scheduler_Start();\r
}\r
\r
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */\r
void EVENT_USB_Connect(void)\r
{\r
/* Indicate USB enumerating */\r
- UpdateStatus(Status_USBEnumerating);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
\r
/* Reset the MSReset flag upon connection */\r
IsMassStoreReset = false;\r
*/\r
void EVENT_USB_Disconnect(void)\r
{\r
- /* Stop running mass storage task */\r
- Scheduler_SetTaskMode(USB_MassStorage, TASK_STOP);\r
-\r
/* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
}\r
\r
/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
ENDPOINT_BANK_DOUBLE);\r
\r
/* Indicate USB connected and ready */\r
- UpdateStatus(Status_USBReady);\r
- \r
- /* Start mass storage task */\r
- Scheduler_SetTaskMode(USB_MassStorage, TASK_RUN);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
}\r
}\r
\r
-/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
- * log to a serial port, or anything else that is suitable for status updates.\r
- *\r
- * \param CurrentStatus Current status of the system, from the MassStorage_StatusCodes_t enum\r
- */\r
-void UpdateStatus(uint8_t CurrentStatus)\r
-{\r
- uint8_t LEDMask = LEDS_NO_LEDS;\r
- \r
- /* Set the LED mask to the appropriate LED mask based on the given status code */\r
- switch (CurrentStatus)\r
- {\r
- case Status_USBNotReady:\r
- LEDMask = (LEDS_LED1);\r
- break;\r
- case Status_USBEnumerating:\r
- LEDMask = (LEDS_LED1 | LEDS_LED2);\r
- break;\r
- case Status_USBReady:\r
- LEDMask = (LEDS_LED2 | LEDS_LED4);\r
- break;\r
- case Status_CommandBlockError:\r
- LEDMask = (LEDS_LED1);\r
- break;\r
- case Status_ProcessingCommandBlock:\r
- LEDMask = (LEDS_LED1 | LEDS_LED2);\r
- break;\r
- }\r
- \r
- /* Set the board LEDs to the new LED mask */\r
- LEDs_SetAllLEDs(LEDMask);\r
-}\r
-\r
/** Task to manage the Mass Storage interface, reading in Command Block Wrappers from the host, processing the SCSI commands they\r
* contain, and returning Command Status Wrappers back to the host to indicate the success or failure of the last issued command.\r
*/\r
-TASK(USB_MassStorage)\r
+void MassStorage_Task(void)\r
{\r
/* Check if the USB System is connected to a Host */\r
if (USB_IsConnected)\r
\r
/* Check to see if a command from the host has been issued */\r
if (Endpoint_IsReadWriteAllowed())\r
- { \r
+ {\r
/* Indicate busy */\r
- UpdateStatus(Status_ProcessingCommandBlock);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_BUSY);\r
\r
/* Process sent command block from the host */\r
if (ReadInCommandBlock())\r
}\r
\r
/* Indicate ready */\r
- UpdateStatus(Status_USBReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
}\r
else\r
{\r
/* Indicate error reading in the command block from the host */\r
- UpdateStatus(Status_CommandBlockError);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
}\r
}\r
}\r
#include "Lib/SCSI.h"\r
#include "Lib/DataflashManager.h"\r
\r
- #include <LUFA/Version.h> // Library Version Information\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
- #include <LUFA/Drivers/Board/Dataflash.h> // Dataflash chip driver\r
- #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Dataflash.h>\r
\r
/* Macros: */\r
/** Mass Storage Class specific request to reset the Mass Storage interface, ready for the next command. */\r
/** Mask for a Command Block Wrapper's flags attribute to specify a command with data sent from device-to-host. */\r
#define COMMAND_DIRECTION_DATA_IN (1 << 7)\r
\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */\r
+ #define LEDMASK_USB_BUSY (LEDS_LED2)\r
+ \r
/* Type defines: */\r
/** Type define for a Command Block Wrapper, used in the Mass Storage Bulk-Only Transport protocol. */\r
typedef struct\r
Command_Fail = 1, /**< Command failed to complete - host may check the exact error via a SCSI REQUEST SENSE command */\r
Phase_Error = 2 /**< Command failed due to being invalid in the current phase */\r
};\r
-\r
- /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
- enum MassStorage_StatusCodes_t\r
- {\r
- Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
- Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
- Status_USBReady = 2, /**< USB interface is connected and ready */\r
- Status_CommandBlockError = 3, /**< Processing a SCSI command block from the host */\r
- Status_ProcessingCommandBlock = 4, /**< Error during the processing of a SCSI command block from the host */\r
- };\r
\r
/* Global Variables: */\r
extern CommandBlockWrapper_t CommandBlock;\r
extern CommandStatusWrapper_t CommandStatus;\r
extern volatile bool IsMassStoreReset;\r
-\r
- /* Task Definitions: */\r
- TASK(USB_MassStorage);\r
\r
/* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void MassStorage_Task(void);\r
+ \r
void EVENT_USB_Connect(void);\r
void EVENT_USB_Disconnect(void);\r
void EVENT_USB_ConfigurationChanged(void);\r
void EVENT_USB_UnhandledControlPacket(void);\r
\r
- void UpdateStatus(uint8_t CurrentStatus);\r
-\r
#if defined(INCLUDE_FROM_MASSSTORAGE_C)\r
static bool ReadInCommandBlock(void);\r
static void ReturnCommandStatus(void);\r
\r
\r
# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
+LUFA_PATH = ../../../..\r
\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
Descriptors.c \\r
Lib/SCSI.c \\r
Lib/DataflashManager.c \\r
- $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
\r
\r
# List C++ source files here. (C dependencies are automatically generated.)\r
\r
#include "Mouse.h"\r
\r
-/* Scheduler Task List */\r
-TASK_LIST\r
-{\r
- { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
- { .Task = USB_Mouse_Report , .TaskStatus = TASK_STOP },\r
-};\r
-\r
/* Global Variables */\r
/** Indicates what report mode the host has requested, true for normal HID reporting mode, false for special boot\r
* protocol reporting mode.\r
*/\r
int main(void)\r
{\r
+ SetupHardware();\r
+ \r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+ for (;;)\r
+ {\r
+ Mouse_Task();\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
/* Disable watchdog if enabled by bootloader/fuses */\r
MCUSR &= ~(1 << WDRF);\r
wdt_disable();\r
Joystick_Init();\r
LEDs_Init();\r
Buttons_Init();\r
+ USB_Init();\r
\r
/* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
OCR0A = 0x7D;\r
TCCR0A = (1 << WGM01);\r
TCCR0B = ((1 << CS01) | (1 << CS00));\r
TIMSK0 = (1 << OCIE0A);\r
-\r
- /* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
- \r
- /* Initialize Scheduler so that it can be used */\r
- Scheduler_Init();\r
-\r
- /* Initialize USB Subsystem */\r
- USB_Init();\r
-\r
- /* Scheduling - routine never returns, so put this last in the main function */\r
- Scheduler_Start();\r
}\r
\r
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
*/\r
void EVENT_USB_Connect(void)\r
{\r
- /* Start USB management task */\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
- \r
/* Indicate USB enumerating */\r
- UpdateStatus(Status_USBEnumerating);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
\r
/* Default to report protocol on connect */\r
UsingReportProtocol = true;\r
*/\r
void EVENT_USB_Disconnect(void)\r
{\r
- /* Stop running mouse reporting and USB management tasks */\r
- Scheduler_SetTaskMode(USB_Mouse_Report, TASK_STOP);\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
-\r
/* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
}\r
\r
/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration\r
ENDPOINT_BANK_SINGLE);\r
\r
/* Indicate USB connected and ready */\r
- UpdateStatus(Status_USBReady);\r
-\r
- /* Start running mouse reporting task */\r
- Scheduler_SetTaskMode(USB_Mouse_Report, TASK_RUN);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
}\r
}\r
\r
-/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
- * log to a serial port, or anything else that is suitable for status updates.\r
- *\r
- * \param CurrentStatus Current status of the system, from the Mouse_StatusCodes_t enum\r
- */\r
-void UpdateStatus(uint8_t CurrentStatus)\r
-{\r
- uint8_t LEDMask = LEDS_NO_LEDS;\r
- \r
- /* Set the LED mask to the appropriate LED mask based on the given status code */\r
- switch (CurrentStatus)\r
- {\r
- case Status_USBNotReady:\r
- LEDMask = (LEDS_LED1);\r
- break;\r
- case Status_USBEnumerating:\r
- LEDMask = (LEDS_LED1 | LEDS_LED2);\r
- break;\r
- case Status_USBReady:\r
- LEDMask = (LEDS_LED2 | LEDS_LED4);\r
- break;\r
- }\r
- \r
- /* Set the board LEDs to the new LED mask */\r
- LEDs_SetAllLEDs(LEDMask);\r
-}\r
-\r
/** Task to manage HID report generation and transmission to the host, when in report mode. */\r
-TASK(USB_Mouse_Report)\r
+void Mouse_Task(void)\r
{\r
/* Check if the USB system is connected to a host */\r
if (USB_IsConnected)\r
\r
#include "Descriptors.h"\r
\r
- #include <LUFA/Version.h> // Library Version Information\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- #include <LUFA/Drivers/Board/Joystick.h> // Joystick driver\r
- #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
- #include <LUFA/Drivers/Board/Buttons.h> // Board Buttons driver\r
- #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
- \r
- /* Task Definitions: */\r
- TASK(USB_Mouse_Report);\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/Board/Joystick.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>\r
+ #include <LUFA/Drivers/Board/Buttons.h>\r
\r
/* Macros: */\r
/** Idle period indicating that reports should be sent only when the inputs have changed */\r
/** HID Class specific request to set the current HID protocol in use, either report or boot. */\r
#define REQ_SetProtocol 0x0B\r
\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+ \r
/* Type Defines: */\r
/** Type define for the mouse HID report structure, for creating and sending HID reports to the host PC.\r
* This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
int8_t X; /**< Current mouse delta X movement, as a signed 8-bit integer */\r
int8_t Y; /**< Current mouse delta Y movement, as a signed 8-bit integer */\r
} USB_MouseReport_Data_t;\r
- \r
- /* Enums: */\r
- /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
- enum Mouse_StatusCodes_t\r
- {\r
- Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
- Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
- Status_USBReady = 2, /**< USB interface is connected and ready */\r
- };\r
\r
/* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void Mouse_Task(void);\r
+\r
void EVENT_USB_Connect(void);\r
void EVENT_USB_Disconnect(void);\r
void EVENT_USB_ConfigurationChanged(void);\r
\r
\r
# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
+LUFA_PATH = ../../../..\r
\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
Descriptors.c \\r
- $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
\r
# List C++ source files here. (C dependencies are automatically generated.)\r
CPPSRC = \r
\r
/* Includes: */\r
#include <avr/io.h>\r
- #include <string.h>\r
- \r
- #include <LUFA/Scheduler/Scheduler.h>\r
+ #include <string.h>
\r
#include "EthernetProtocols.h"\r
#include "Ethernet.h"\r
* level. If an application produces a response, this task constructs the appropriate Ethernet frame and places it into the Ethernet OUT\r
* buffer for later transmission.\r
*/\r
-TASK(TCP_Task)\r
+void TCP_Task(void)\r
{\r
/* Task to hand off TCP packets to and from the listening applications. */\r
\r
\r
/* Includes: */\r
#include <avr/io.h>\r
- #include <stdbool.h>\r
- \r
- #include <LUFA/Scheduler/Scheduler.h>\r
+ #include <stdbool.h>
\r
#include "EthernetProtocols.h"\r
#include "Ethernet.h"\r
uint16_t UrgentPointer; /**< Urgent data pointer */\r
} TCP_Header_t;\r
\r
- /* Tasks: */\r
- TASK(TCP_Task);\r
- \r
/* External Variables: */\r
TCP_PortState_t PortStateTable[MAX_OPEN_TCP_PORTS];\r
\r
/* Function Prototypes: */\r
void TCP_Init(void);\r
+ void TCP_Task(void);\r
bool TCP_SetPortState(uint16_t Port, uint8_t State, void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*));\r
uint8_t TCP_GetPortState(uint16_t Port);\r
bool TCP_SetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort, uint8_t State);\r
\r
#include "RNDISEthernet.h"\r
\r
-/* Scheduler Task List */\r
-TASK_LIST\r
-{\r
- { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
- { .Task = Ethernet_Task , .TaskStatus = TASK_STOP },\r
- { .Task = TCP_Task , .TaskStatus = TASK_STOP },\r
- { .Task = RNDIS_Task , .TaskStatus = TASK_STOP },\r
-};\r
-\r
/** Main program entry point. This routine configures the hardware required by the application, then\r
* starts the scheduler to run the USB management task.\r
*/\r
int main(void)\r
{\r
+ SetupHardware();\r
+\r
+ /* Webserver Initialization */\r
+ TCP_Init();\r
+ Webserver_Init();\r
+\r
+ printf_P(PSTR("\r\n\r\n****** RNDIS Demo running. ******\r\n"));\r
+\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+ \r
+ for (;;)\r
+ {\r
+ Ethernet_Task();\r
+ TCP_Task();\r
+ RNDIS_Task();\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
/* Disable watchdog if enabled by bootloader/fuses */\r
MCUSR &= ~(1 << WDRF);\r
wdt_disable();\r
/* Hardware Initialization */\r
LEDs_Init();\r
SerialStream_Init(9600, false);\r
- \r
- /* Webserver Initialization */\r
- TCP_Init();\r
- Webserver_Init();\r
-\r
- printf_P(PSTR("\r\n\r\n****** RNDIS Demo running. ******\r\n"));\r
-\r
- /* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
- \r
- /* Initialize Scheduler so that it can be used */\r
- Scheduler_Init();\r
-\r
- /* Initialize USB Subsystem */\r
USB_Init();\r
-\r
- /* Scheduling - routine never returns, so put this last in the main function */\r
- Scheduler_Start();\r
}\r
\r
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
*/\r
void EVENT_USB_Connect(void)\r
{\r
- /* Start USB management task */\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
-\r
/* Indicate USB enumerating */\r
- UpdateStatus(Status_USBEnumerating);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
}\r
\r
/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
*/\r
void EVENT_USB_Disconnect(void)\r
{\r
- /* Stop running TCP/IP and USB management tasks */\r
- Scheduler_SetTaskMode(RNDIS_Task, TASK_STOP);\r
- Scheduler_SetTaskMode(Ethernet_Task, TASK_STOP);\r
- Scheduler_SetTaskMode(TCP_Task, TASK_STOP);\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
-\r
/* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
}\r
\r
/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration\r
ENDPOINT_BANK_SINGLE);\r
\r
/* Indicate USB connected and ready */\r
- UpdateStatus(Status_USBReady);\r
-\r
- /* Start TCP/IP tasks */\r
- Scheduler_SetTaskMode(RNDIS_Task, TASK_RUN);\r
- Scheduler_SetTaskMode(Ethernet_Task, TASK_RUN);\r
- Scheduler_SetTaskMode(TCP_Task, TASK_RUN);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
}\r
}\r
\r
-/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
- * log to a serial port, or anything else that is suitable for status updates.\r
- *\r
- * \param CurrentStatus Current status of the system, from the RNDISEthernet_StatusCodes_t enum\r
- */\r
-void UpdateStatus(uint8_t CurrentStatus)\r
-{\r
- uint8_t LEDMask = LEDS_NO_LEDS;\r
- \r
- /* Set the LED mask to the appropriate LED mask based on the given status code */\r
- switch (CurrentStatus)\r
- {\r
- case Status_USBNotReady:\r
- LEDMask = (LEDS_LED1);\r
- break;\r
- case Status_USBEnumerating:\r
- LEDMask = (LEDS_LED1 | LEDS_LED2);\r
- break;\r
- case Status_USBReady:\r
- LEDMask = (LEDS_LED2 | LEDS_LED4);\r
- break;\r
- case Status_ProcessingEthernetFrame:\r
- LEDMask = (LEDS_LED2 | LEDS_LED3);\r
- break; \r
- }\r
- \r
- /* Set the board LEDs to the new LED mask */\r
- LEDs_SetAllLEDs(LEDMask);\r
-}\r
-\r
/** Task to manage the sending and receiving of encapsulated RNDIS data and notifications. This removes the RNDIS\r
* wrapper from received Ethernet frames and places them in the FrameIN global buffer, or adds the RNDIS wrapper\r
* to a frame in the FrameOUT global before sending the buffer contents to the host.\r
*/\r
-TASK(RNDIS_Task)\r
+void RNDIS_Task(void)\r
{\r
/* Select the notification endpoint */\r
Endpoint_SelectEndpoint(CDC_NOTIFICATION_EPNUM);\r
/** Ethernet frame processing task. This task checks to see if a frame has been received, and if so hands off the processing\r
* of the frame to the Ethernet processing routines.\r
*/\r
-TASK(Ethernet_Task)\r
+void Ethernet_Task(void)\r
{\r
/* Task for Ethernet processing. Incoming ethernet frames are loaded into the FrameIN structure, and\r
outgoing frames should be loaded into the FrameOUT structure. Both structures can only hold a single\r
if (FrameIN.FrameInBuffer)\r
{\r
/* Indicate packet processing started */\r
- UpdateStatus(Status_ProcessingEthernetFrame);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_BUSY);\r
\r
/* Process the ethernet frame - replace this with your own Ethernet handler code as desired */\r
Ethernet_ProcessPacket();\r
\r
/* Indicate packet processing complete */\r
- UpdateStatus(Status_USBReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
}\r
}\r
#include "Lib/ARP.h"\r
#include "Lib/Webserver.h"\r
\r
- #include <LUFA/Version.h> // Library Version Information\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
- #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
- #include <LUFA/Drivers/Peripheral/SerialStream.h> // Serial stream driver\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>
+ #include <LUFA/Drivers/Peripheral/SerialStream.h>\r
\r
/* Macros: */\r
/** Notification value to indicate that a frame is ready to be read by the host. */\r
- #define NOTIF_RESPONSE_AVAILABLE 0x01\r
+ #define NOTIF_RESPONSE_AVAILABLE 0x01\r
\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is busy. */\r
+ #define LEDMASK_USB_BUSY (LEDS_LED2)\r
+ \r
/* Type Defines: */\r
/** Type define for a RNDIS notification message, for transmission to the RNDIS host via the notification\r
* Endpoint.\r
uint16_t wIndex; /**< Two byte notification index parameter */\r
uint16_t wLength; /**< Size of data payload following the notification header */\r
} USB_Notification_t;\r
-\r
- /* Enums: */\r
- /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
- enum RNDISEthernet_StatusCodes_t\r
- {\r
- Status_USBNotReady = 0, /**< USB is not ready (disconnected from a USB host) */\r
- Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
- Status_USBReady = 2, /**< USB interface is connected and ready */\r
- Status_ProcessingEthernetFrame = 3, /**< Currently processing an ethernet frame from the host */\r
- };\r
\r
- /* Tasks: */\r
- TASK(RNDIS_Task);\r
- TASK(Ethernet_Task);\r
-\r
/* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void RNDIS_Task(void);\r
+ void Ethernet_Task(void);\r
+\r
void EVENT_USB_Connect(void);\r
void EVENT_USB_Disconnect(void);\r
void EVENT_USB_ConfigurationChanged(void);\r
void EVENT_USB_UnhandledControlPacket(void);\r
-\r
- void UpdateStatus(uint8_t CurrentStatus);\r
\r
#endif\r
\r
\r
# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
+LUFA_PATH = ../../../..\r
\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
Lib/ARP.c \\r
Lib/IP.c \\r
Lib/Webserver.c \\r
- $(LUFA_PATH)/LUFA/Scheduler/Scheduler.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
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
\r
\r
# List C++ source files here. (C dependencies are automatically generated.)\r
\r
#include "USBtoSerial.h"\r
\r
-/* Scheduler Task List */\r
-TASK_LIST\r
-{\r
- { .Task = USB_USBTask , .TaskStatus = TASK_STOP },\r
- { .Task = CDC_Task , .TaskStatus = TASK_STOP },\r
-};\r
-\r
/* Globals: */\r
/** Contains the current baud rate and other settings of the virtual serial port.\r
*\r
*/\r
int main(void)\r
{\r
+ SetupHardware();\r
+\r
+ /* Ring buffer Initialization */\r
+ Buffer_Initialize(&Rx_Buffer);\r
+ Buffer_Initialize(&Tx_Buffer);\r
+\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+ \r
+ for (;;)\r
+ {\r
+ CDC_Task();\r
+ USB_USBTask();\r
+ }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
/* Disable watchdog if enabled by bootloader/fuses */\r
MCUSR &= ~(1 << WDRF);\r
wdt_disable();\r
/* Hardware Initialization */\r
LEDs_Init();\r
ReconfigureUSART();\r
- \r
- /* Ring buffer Initialization */\r
- Buffer_Initialize(&Rx_Buffer);\r
- Buffer_Initialize(&Tx_Buffer);\r
- \r
- /* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
- \r
- /* Initialize Scheduler so that it can be used */\r
- Scheduler_Init();\r
-\r
- /* Initialize USB Subsystem */\r
- USB_Init();\r
-\r
- /* Scheduling - routine never returns, so put this last in the main function */\r
- Scheduler_Start();\r
+ USB_Init(); \r
}\r
\r
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
*/\r
void EVENT_USB_Connect(void)\r
{\r
- /* Start USB management task */\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
-\r
/* Indicate USB enumerating */\r
- UpdateStatus(Status_USBEnumerating);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
}\r
\r
/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
* the status LEDs and stops the USB management and CDC management tasks.\r
*/\r
void EVENT_USB_Disconnect(void)\r
-{\r
- /* Stop running CDC and USB management tasks */\r
- Scheduler_SetTaskMode(CDC_Task, TASK_STOP);\r
- Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
- \r
+{ \r
/* Reset Tx and Rx buffers, device disconnected */\r
Buffer_Initialize(&Rx_Buffer);\r
Buffer_Initialize(&Tx_Buffer);\r
\r
/* Indicate USB not ready */\r
- UpdateStatus(Status_USBNotReady);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
}\r
\r
/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
ENDPOINT_BANK_SINGLE);\r
\r
/* Indicate USB connected and ready */\r
- UpdateStatus(Status_USBReady);\r
-\r
- /* Start CDC task */\r
- Scheduler_SetTaskMode(CDC_Task, TASK_RUN);\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
}\r
\r
/** Task to manage CDC data transmission and reception to and from the host, from and to the physical USART. */\r
-TASK(CDC_Task)\r
+void CDC_Task(void)\r
{\r
if (USB_IsConnected)\r
{\r
}\r
}\r
\r
-/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
- * log to a serial port, or anything else that is suitable for status updates.\r
- *\r
- * \param CurrentStatus Current status of the system, from the USBtoSerial_StatusCodes_t enum\r
- */\r
-void UpdateStatus(uint8_t CurrentStatus)\r
-{\r
- uint8_t LEDMask = LEDS_NO_LEDS;\r
- \r
- /* Set the LED mask to the appropriate LED mask based on the given status code */\r
- switch (CurrentStatus)\r
- {\r
- case Status_USBNotReady:\r
- LEDMask = (LEDS_LED1);\r
- break;\r
- case Status_USBEnumerating:\r
- LEDMask = (LEDS_LED1 | LEDS_LED2);\r
- break;\r
- case Status_USBReady:\r
- LEDMask = (LEDS_LED2 | LEDS_LED4);\r
- break;\r
- }\r
- \r
- /* Set the board LEDs to the new LED mask */\r
- LEDs_SetAllLEDs(LEDMask);\r
-}\r
-\r
/** Reconfigures the USART to match the current serial port settings issued by the host as closely as possible. */\r
void ReconfigureUSART(void)\r
{\r
\r
#include "Lib/RingBuff.h"\r
\r
- #include <LUFA/Version.h> // Library Version Information\r
- #include <LUFA/Drivers/USB/USB.h> // USB Functionality\r
- #include <LUFA/Drivers/Peripheral/Serial.h> // USART driver\r
- #include <LUFA/Drivers/Board/LEDs.h> // LEDs driver\r
- #include <LUFA/Scheduler/Scheduler.h> // Simple scheduler for task management\r
+ #include <LUFA/Version.h>\r
+ #include <LUFA/Drivers/USB/USB.h>\r
+ #include <LUFA/Drivers/Peripheral/Serial.h>\r
+ #include <LUFA/Drivers/Board/LEDs.h>
\r
/* Macros: */\r
/** CDC Class specific request to get the current virtual serial port configuration settings. */\r
* to indicate that a data overrun error has occurred on the virtual serial port.\r
*/\r
#define CONTROL_LINE_IN_OVERRUNERROR (1 << 6)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+ #define LEDMASK_USB_NOTREADY LEDS_LED1\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)\r
+\r
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)\r
+\r
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)\r
\r
/* Type Defines: */\r
/** Type define for the virtual serial port line encoding settings, for storing the current USART configuration\r
Status_USBReady = 2, /**< USB interface is connected and ready */\r
};\r
\r
- /* Tasks: */\r
- TASK(CDC_Task);\r
-\r
/* Function Prototypes: */\r
+ void SetupHardware(void);\r
+ void CDC_Task(void);\r
+ void ReconfigureUSART(void);\r
+ \r
void EVENT_USB_Connect(void);\r
void EVENT_USB_Disconnect(void);\r
void EVENT_USB_ConfigurationChanged(void);\r
void EVENT_USB_UnhandledControlPacket(void);\r
\r
- void ReconfigureUSART(void);\r
- void UpdateStatus(uint8_t CurrentStatus);\r
-\r
#endif\r
\r
\r
# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
+LUFA_PATH = ../../../..\r
\r
\r
# List C source files here. (C dependencies are automatically generated.)\r
SRC = $(TARGET).c \\r
Descriptors.c \\r
Lib/RingBuff.c \\r
- $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c \\r
$(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c \\r
- $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c \\r
\r
\r
# List C++ source files here. (C dependencies are automatically generated.)\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></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></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><Folder name="LowLevel"></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></Folder></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></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></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></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></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\ConfigDescriptor.c"></File><File path="Demos\Host\ClassDriver\CDCHost\ConfigDescriptor.h"></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></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></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></Folder></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></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></Project>
\ No newline at end of file
*/\r
\r
========== TODO: ===========\r
- - Document new device class drivers (in progress)\r
+ - Fix bootloaders - make compatible with smaller USB AVRS (USB_IsConnected, RAMPZ)\r
+ - Document new device class drivers\r
- Made new host class drivers\r
- Document new host class drivers\r
- Convert Host mode demos to class drivers\r
- - Add in old Host mode demos, convert to schedulerless\r
- - Add in incomplete host mode demos\r
+ - Convert Host mode demos to schedulerless\r
- Add standardized descriptor names to class driver structures, controlled by USE_NONSTANDARD_DESCRIPTOR_NAMES\r
- - Remake AVRStudio projects to reflect file structure changes\r
============================\r
\r
/** \page Page_ChangeLog Project Changelog\r