-\r
- while (RunBootloader)\r
- {\r
- USB_USBTask();\r
- CDC_Task();\r
- }\r
- \r
- Endpoint_SelectEndpoint(CDC_TX_EPNUM);\r
-\r
- /* Wait until any pending transmissions have completed before shutting down */\r
- while (!(Endpoint_IsINReady()));\r
- \r
- /* Shut down the USB subsystem */\r
- USB_ShutDown();\r
- \r
- /* Relocate the interrupt vector table back to the application section */\r
- MCUCR = (1 << IVCE);\r
- MCUCR = 0;\r
-\r
- /* Reset any used hardware ports back to their defaults */\r
- PORTD = 0;\r
- DDRD = 0;\r
- \r
- #if defined(PORTE)\r
- PORTE = 0;\r
- DDRE = 0;\r
- #endif\r
- \r
- /* Re-enable RWW section */\r
- boot_rww_enable();\r
-\r
- /* Start the user application */\r
- AppPtr_t AppStartPtr = (AppPtr_t)0x0000;\r
- AppStartPtr(); \r
-}\r
-\r
-/** Event handler for the USB_Disconnect event. This indicates that the bootloader should exit and the user\r
- * application started.\r
- */\r
-EVENT_HANDLER(USB_Disconnect)\r
-{\r
- /* Upon disconnection, run user application */\r
- RunBootloader = false;\r