Make CDC class bootloader hard-reset the AVR when exited instead of a soft-reset...
[pub/USBasp.git] / Bootloaders / CDC / BootloaderCDC.c
index 83fd0ee..9f78786 100644 (file)
@@ -54,8 +54,8 @@ CDC_Line_Coding_t LineCoding = { .BaudRateBPS = 9600,
 uint32_t CurrAddress;\r
 \r
 /** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run\r
- *  via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application\r
- *  jumped to via an indirect jump to location 0x0000.\r
+ *  via a watchdog reset. When cleared the bootloader will exit, starting the watchdog and entering an infinite\r
+ *  loop until the AVR restarts and the application runs.\r
  */\r
 bool RunBootloader = true;\r
 \r
@@ -78,12 +78,13 @@ int main(void)
                USB_USBTask();\r
        }\r
        \r
-       /* Reset all configured hardware to their default states for the user app */\r
-       ResetHardware();\r
+       /* Disconnect from the host - USB interface will be reset later along with the AVR */\r
+       USB_Detach();\r
 \r
-       /* Start the user application */\r
-       AppPtr_t AppStartPtr = (AppPtr_t)0x0000;\r
-       AppStartPtr();  \r
+       /* Enable the watchdog and force a timeout to reset the AVR */\r
+       wdt_enable(WDTO_250MS);\r
+\r
+       for (;;);\r
 }\r
 \r
 /** Configures all hardware required for the bootloader. */\r
@@ -104,20 +105,6 @@ void SetupHardware(void)
        USB_Init();\r
 }\r
 \r
-/** Resets all configured hardware required for the bootloader back to their original states. */\r
-void ResetHardware(void)\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
-       /* Re-enable RWW section */\r
-       boot_rww_enable();\r
-}\r
-\r
 /** Event handler for the USB_ConfigurationChanged event. This configures the device's endpoints ready\r
  *  to relay data to and from the attached USB host.\r
  */\r