Fixed software application start command broken in the DFU class bootloader when...
[pub/USBasp.git] / Bootloaders / DFU / BootloaderDFU.c
index 752c320..7136b97 100644 (file)
@@ -634,26 +634,30 @@ static void ProcessWriteCommand(void)
                /* Indicate that the bootloader is terminating */
                WaitForExit = true;
 
-               /* Check if empty request data array - an empty request after a filled request retains the
-                  previous valid request data, but initializes the reset */
-               if (!(SentCommand.DataSize))
+               /* Check if data supplied for the Start Program command - no data executes the program */
+               if (SentCommand.DataSize)
                {
-                       if (SentCommand.Data[1] == 0x00)                                   // Start via watchdog
-                       {
-                               /* Start the watchdog to reset the AVR once the communications are finalized */
-                               wdt_enable(WDTO_250MS);
-                       }
-                       else                                                               // Start via jump
+                       if (SentCommand.Data[1] == 0x01)                                   // Start via jump
                        {
-                               /* Load in the jump address into the application start address pointer */
                                union
                                {
                                        uint8_t  Bytes[2];
                                        AppPtr_t FuncPtr;
                                } Address = {.Bytes = {SentCommand.Data[4], SentCommand.Data[3]}};
 
+                               /* Load in the jump address into the application start address pointer */
                                AppStartPtr = Address.FuncPtr;
-                               
+                       }
+               }
+               else
+               {
+                       if (SentCommand.Data[1] == 0x00)                                   // Start via watchdog
+                       {
+                               /* Start the watchdog to reset the AVR once the communications are finalized */
+                               wdt_enable(WDTO_250MS);
+                       }
+                       else                                                               // Start via jump
+                       {
                                /* Set the flag to terminate the bootloader at next opportunity */
                                RunBootloader = false;
                        }