Updated bootloaders to use the new main() function layout and remove any references...
[pub/USBasp.git] / Bootloaders / CDC / BootloaderCDC.c
index d797915..d72d128 100644 (file)
@@ -67,6 +67,26 @@ bool RunBootloader = true;
  */\r
 int main(void)\r
 {\r
+       /* Setup hardware required for the bootloader */\r
+       SetupHardware();\r
+\r
+       while (RunBootloader)\r
+       {\r
+               CDC_Task();\r
+               USB_USBTask();\r
+       }\r
+       \r
+       /* Reset all configured hardware to their default states for the user app */\r
+       ResetHardware();\r
+\r
+       /* Start the user application */\r
+       AppPtr_t AppStartPtr = (AppPtr_t)0x0000;\r
+       AppStartPtr();  \r
+}\r
+\r
+/** Configures all hardware required for the bootloader. */\r
+void SetupHardware(void)\r
+{\r
        /* Disable watchdog if enabled by bootloader/fuses */\r
        MCUSR &= ~(1 << WDRF);\r
        wdt_disable();\r
@@ -80,18 +100,11 @@ int main(void)
        \r
        /* Initialize USB Subsystem */\r
        USB_Init();\r
+}\r
 \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
+/** 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
@@ -99,21 +112,8 @@ int main(void)
        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
@@ -364,7 +364,7 @@ static void WriteNextResponseByte(const uint8_t Response)
 /** Task to read in AVR910 commands from the CDC data OUT endpoint, process them, perform the required actions\r
  *  and send the appropriate response back to the host.\r
  */\r
-TASK(CDC_Task)\r
+void CDC_Task(void)\r
 {\r
        /* Select the OUT endpoint */\r
        Endpoint_SelectEndpoint(CDC_RX_EPNUM);\r
@@ -566,6 +566,9 @@ TASK(CDC_Task)
                        while (!(Endpoint_IsINReady()));\r
                        Endpoint_ClearIN();\r
                }\r
+\r
+               /* Wait until the data has been sent to the host */\r
+               while (!(Endpoint_IsINReady()));\r
                \r
                /* Select the OUT endpoint */\r
                Endpoint_SelectEndpoint(CDC_RX_EPNUM);\r