MIDI device demo no longer blocks if a note change event is sent while the endpoint is not ready.
*/\r
void EVENT_USB_ConfigurationChanged(void)\r
{\r
- /* Setup audio stream endpoint */\r
- Endpoint_ConfigureEndpoint(AUDIO_STREAM_EPNUM, EP_TYPE_ISOCHRONOUS,\r
- ENDPOINT_DIR_IN, AUDIO_STREAM_EPSIZE,\r
- ENDPOINT_BANK_DOUBLE);\r
-\r
/* Indicate USB connected and ready */\r
LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ /* Setup audio stream endpoint */\r
+ if (!(Endpoint_ConfigureEndpoint(AUDIO_STREAM_EPNUM, EP_TYPE_ISOCHRONOUS,\r
+ ENDPOINT_DIR_IN, AUDIO_STREAM_EPSIZE,\r
+ ENDPOINT_BANK_DOUBLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
*/\r
void EVENT_USB_ConfigurationChanged(void)\r
{\r
- /* Setup audio stream endpoint */\r
- Endpoint_ConfigureEndpoint(AUDIO_STREAM_EPNUM, EP_TYPE_ISOCHRONOUS,\r
- ENDPOINT_DIR_OUT, AUDIO_STREAM_EPSIZE,\r
- ENDPOINT_BANK_DOUBLE);\r
-\r
/* Indicate USB connected and ready */\r
LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ /* Setup audio stream endpoint */\r
+ if (!(Endpoint_ConfigureEndpoint(AUDIO_STREAM_EPNUM, EP_TYPE_ISOCHRONOUS,\r
+ ENDPOINT_DIR_OUT, AUDIO_STREAM_EPSIZE,\r
+ ENDPOINT_BANK_DOUBLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
*/\r
void EVENT_USB_ConfigurationChanged(void)\r
{\r
- /* Setup CDC Notification, Rx and Tx Endpoints */\r
- Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
- ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
- Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK,\r
- ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
- Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK,\r
- ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
/* Indicate USB connected and ready */\r
LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ /* Setup CDC Notification, Rx and Tx Endpoints */\r
+ if (!(Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
+ \r
+ if (!(Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
+ \r
+ if (!(Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
* of the USB device after enumeration - the device endpoints are configured and the CDC management tasks are started.\r
*/\r
void EVENT_USB_ConfigurationChanged(void)\r
-{\r
- /* Setup CDC Notification, Rx and Tx Endpoints for the first CDC */\r
- Endpoint_ConfigureEndpoint(CDC1_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
- ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
- Endpoint_ConfigureEndpoint(CDC1_TX_EPNUM, EP_TYPE_BULK,\r
- ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
- Endpoint_ConfigureEndpoint(CDC1_RX_EPNUM, EP_TYPE_BULK,\r
- ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
- /* Setup CDC Notification, Rx and Tx Endpoints for the second CDC */\r
- Endpoint_ConfigureEndpoint(CDC2_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
- ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
- Endpoint_ConfigureEndpoint(CDC2_TX_EPNUM, EP_TYPE_BULK,\r
- ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
- Endpoint_ConfigureEndpoint(CDC2_RX_EPNUM, EP_TYPE_BULK,\r
- ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
- \r
+{ \r
/* Indicate USB connected and ready */\r
LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ /* Setup CDC Notification, Rx and Tx Endpoints for the first CDC */\r
+ if (!(Endpoint_ConfigureEndpoint(CDC1_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
+ \r
+ if (!(Endpoint_ConfigureEndpoint(CDC1_TX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
+ \r
+ if (!(Endpoint_ConfigureEndpoint(CDC1_RX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
+ \r
+ /* Setup CDC Notification, Rx and Tx Endpoints for the second CDC */\r
+ if (!(Endpoint_ConfigureEndpoint(CDC2_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
+ \r
+ if (!(Endpoint_ConfigureEndpoint(CDC2_TX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
+ \r
+ if (!(Endpoint_ConfigureEndpoint(CDC2_RX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
*/\r
void EVENT_USB_ConfigurationChanged(void)\r
{\r
- /* Setup Generic IN Report Endpoint */\r
- Endpoint_ConfigureEndpoint(GENERIC_IN_EPNUM, EP_TYPE_INTERRUPT,\r
- ENDPOINT_DIR_IN, GENERIC_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
- /* Setup Generic OUT Report Endpoint */\r
- Endpoint_ConfigureEndpoint(GENERIC_OUT_EPNUM, EP_TYPE_INTERRUPT,\r
- ENDPOINT_DIR_OUT, GENERIC_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
/* Indicate USB connected and ready */\r
LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ /* Setup Generic IN Report Endpoint */\r
+ if (!(Endpoint_ConfigureEndpoint(GENERIC_IN_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, GENERIC_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
+ \r
+ /* Setup Generic OUT Report Endpoint */\r
+ if (!(Endpoint_ConfigureEndpoint(GENERIC_OUT_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_OUT, GENERIC_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
*/ \r
void EVENT_USB_ConfigurationChanged(void)\r
{\r
- /* Setup Joystick Report Endpoint */\r
- Endpoint_ConfigureEndpoint(JOYSTICK_EPNUM, EP_TYPE_INTERRUPT,\r
- ENDPOINT_DIR_IN, JOYSTICK_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
/* Indicate USB connected and ready */\r
LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ /* Setup Joystick Report Endpoint */\r
+ if (!(Endpoint_ConfigureEndpoint(JOYSTICK_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, JOYSTICK_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
* of the USB device after enumeration, and configures the keyboard device endpoints.\r
*/\r
void EVENT_USB_ConfigurationChanged(void)\r
-{\r
- /* Setup Keyboard Keycode Report Endpoint */\r
- Endpoint_ConfigureEndpoint(KEYBOARD_EPNUM, EP_TYPE_INTERRUPT,\r
- ENDPOINT_DIR_IN, KEYBOARD_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
- /* Setup Keyboard LED Report Endpoint */\r
- Endpoint_ConfigureEndpoint(KEYBOARD_LEDS_EPNUM, EP_TYPE_INTERRUPT,\r
- ENDPOINT_DIR_OUT, KEYBOARD_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
+{ \r
/* Indicate USB connected and ready */\r
LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ /* Setup Keyboard Keycode Report Endpoint */\r
+ if (!(Endpoint_ConfigureEndpoint(KEYBOARD_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, KEYBOARD_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
+ \r
+ /* Setup Keyboard LED Report Endpoint */\r
+ if (!(Endpoint_ConfigureEndpoint(KEYBOARD_LEDS_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_OUT, KEYBOARD_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
*/\r
void EVENT_USB_ConfigurationChanged(void)\r
{\r
- /* Setup Keyboard Report Endpoint */\r
- Endpoint_ConfigureEndpoint(KEYBOARD_IN_EPNUM, EP_TYPE_INTERRUPT,\r
- ENDPOINT_DIR_IN, HID_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
+ /* Indicate USB connected and ready */\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
\r
+ /* Setup Keyboard Report Endpoint */\r
+ if (!(Endpoint_ConfigureEndpoint(KEYBOARD_IN_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, HID_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
+ \r
/* Setup Keyboard LED Report Endpoint */\r
- Endpoint_ConfigureEndpoint(KEYBOARD_OUT_EPNUM, EP_TYPE_INTERRUPT,\r
- ENDPOINT_DIR_OUT, HID_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
+ if (!(Endpoint_ConfigureEndpoint(KEYBOARD_OUT_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_OUT, HID_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
\r
/* Setup Mouse Report Endpoint */\r
- Endpoint_ConfigureEndpoint(MOUSE_IN_EPNUM, EP_TYPE_INTERRUPT,\r
- ENDPOINT_DIR_IN, HID_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
- /* Indicate USB connected and ready */\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+ if (!(Endpoint_ConfigureEndpoint(MOUSE_IN_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, HID_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
*/\r
void EVENT_USB_ConfigurationChanged(void)\r
{\r
- /* Setup MIDI stream endpoints */\r
- Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPNUM, EP_TYPE_BULK,\r
- ENDPOINT_DIR_OUT, MIDI_STREAM_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
- Endpoint_ConfigureEndpoint(MIDI_STREAM_IN_EPNUM, EP_TYPE_BULK,\r
- ENDPOINT_DIR_IN, MIDI_STREAM_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
/* Indicate USB connected and ready */\r
LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ /* Setup MIDI stream endpoints */\r
+ if (!(Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_OUT, MIDI_STREAM_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ } \r
+ \r
+ if (!(Endpoint_ConfigureEndpoint(MIDI_STREAM_IN_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_IN, MIDI_STREAM_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\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
*/\r
void SendMIDINoteChange(const uint8_t Pitch, const bool OnOff, const uint8_t CableID, const uint8_t Channel)\r
{\r
- /* Wait until endpoint ready for more data */\r
- while (!(Endpoint_IsReadWriteAllowed()));\r
+ /* If endpoint ready for more data, abort */\r
+ if (!(Endpoint_IsReadWriteAllowed()))\r
+ return;\r
\r
/* Check if the message should be a Note On or Note Off command */\r
uint8_t Command = ((OnOff)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
*/\r
void EVENT_USB_ConfigurationChanged(void)\r
{\r
+ /* Indicate USB connected and ready */\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
/* Setup Mass Storage In and Out Endpoints */\r
- Endpoint_ConfigureEndpoint(MASS_STORAGE_IN_EPNUM, EP_TYPE_BULK,\r
+ if (!(Endpoint_ConfigureEndpoint(MASS_STORAGE_IN_EPNUM, EP_TYPE_BULK,\r
ENDPOINT_DIR_IN, MASS_STORAGE_IO_EPSIZE,\r
- ENDPOINT_BANK_DOUBLE);\r
-\r
- Endpoint_ConfigureEndpoint(MASS_STORAGE_OUT_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_BANK_DOUBLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
+ \r
+ if (!(Endpoint_ConfigureEndpoint(MASS_STORAGE_OUT_EPNUM, EP_TYPE_BULK,\r
ENDPOINT_DIR_OUT, MASS_STORAGE_IO_EPSIZE,\r
- ENDPOINT_BANK_DOUBLE);\r
-\r
- /* Indicate USB connected and ready */\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+ ENDPOINT_BANK_DOUBLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ } \r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
*/ \r
void EVENT_USB_ConfigurationChanged(void)\r
{\r
- /* Setup Mouse Report Endpoint */\r
- Endpoint_ConfigureEndpoint(MOUSE_EPNUM, EP_TYPE_INTERRUPT,\r
- ENDPOINT_DIR_IN, MOUSE_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
/* Indicate USB connected and ready */\r
LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+ \r
+ /* Setup Mouse Report Endpoint */\r
+ if (!(Endpoint_ConfigureEndpoint(MOUSE_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, MOUSE_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
*/\r
void EVENT_USB_ConfigurationChanged(void)\r
{\r
- /* Setup CDC Notification, Rx and Tx Endpoints */\r
- Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK,\r
- ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
+ /* Indicate USB connected and ready */\r
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
\r
- Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK,\r
- ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
+ /* Setup CDC Notification, Rx and Tx Endpoints */\r
+ if (!(Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ } \r
\r
- Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
- ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
+ if (!(Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
\r
- /* Indicate USB connected and ready */\r
- LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+ if (!(Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
*/\r
void EVENT_USB_ConfigurationChanged(void)\r
{\r
- /* Setup CDC Notification, Rx and Tx Endpoints */\r
- Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
- ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
- Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK,\r
- ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
- Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK,\r
- ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
- ENDPOINT_BANK_SINGLE);\r
-\r
/* Indicate USB connected and ready */\r
LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+ /* Setup CDC Notification, Rx and Tx Endpoints */\r
+ if (!(Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
+ ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
+ \r
+ if (!(Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ } \r
+\r
+ if (!(Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK,\r
+ ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
+ ENDPOINT_BANK_SINGLE)))\r
+ {\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+ }\r
}\r
\r
/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
- Convert Host mode demos to class drivers\r
- Convert Host mode demos to schedulerless\r
- Add standardized descriptor names to class driver structures, controlled by USE_NONSTANDARD_DESCRIPTOR_NAMES\r
- - Device demos error if endpoint config fail\r
============================\r
\r
/** \page Page_ChangeLog Project Changelog\r
* - Added new class drivers and matching demos to the library for rapid application development\r
* - Added incomplete device and host mode demos for later enhancement\r
* - Changed bootloaders to use FLASHEND rather than the existence of RAMPZ to determine if far FLASH pointers are needed\r
+ * - Error status LEDs shown when device endpoint configuration fails to complete\r
+ * - MIDI device demo no longer blocks if a note change event is sent while the endpoint is not ready\r
*\r
*\r
* \section Sec_ChangeLog090605 Version 090605\r