Fixed software application start command broken in the DFU class bootloader when...
authorDean Camera <dean@fourwalledcubicle.com>
Thu, 5 Aug 2010 09:31:51 +0000 (09:31 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Thu, 5 Aug 2010 09:31:51 +0000 (09:31 +0000)
Bootloaders/CDC/makefile
Bootloaders/DFU/BootloaderDFU.c
Bootloaders/DFU/makefile
LUFA/ManPages/ChangeLog.txt

index 2df1828..346912c 100644 (file)
@@ -121,6 +121,7 @@ LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENAB
 LUFA_OPTS += -D NO_INTERNAL_SERIAL
 LUFA_OPTS += -D NO_DEVICE_SELF_POWER
 LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP
 LUFA_OPTS += -D NO_INTERNAL_SERIAL
 LUFA_OPTS += -D NO_DEVICE_SELF_POWER
 LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP
+LUFA_OPTS += -D NO_STREAM_CALLBACKS
 
 
 # Create the LUFA source path variables by including the LUFA root makefile
 
 
 # Create the LUFA source path variables by including the LUFA root makefile
index 752c320..7136b97 100644 (file)
@@ -634,26 +634,30 @@ static void ProcessWriteCommand(void)
                /* Indicate that the bootloader is terminating */
                WaitForExit = true;
 
                /* 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]}};
 
                                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;
                                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;
                        }
                                /* Set the flag to terminate the bootloader at next opportunity */
                                RunBootloader = false;
                        }
index 2cfff0f..deb5312 100644 (file)
@@ -122,6 +122,7 @@ LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENAB
 LUFA_OPTS += -D NO_INTERNAL_SERIAL
 LUFA_OPTS += -D NO_DEVICE_SELF_POWER
 LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP
 LUFA_OPTS += -D NO_INTERNAL_SERIAL
 LUFA_OPTS += -D NO_DEVICE_SELF_POWER
 LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP
+LUFA_OPTS += -D NO_STREAM_CALLBACKS
 
 
 # Create the LUFA source path variables by including the LUFA root makefile
 
 
 # Create the LUFA source path variables by including the LUFA root makefile
index 5a21f51..02d4200 100644 (file)
@@ -67,6 +67,8 @@
   *    operation to occur (thanks to Bob Paddock)
   *  - Fixed Serial peripheral driver not turning off the USART before reconfiguring it, which would cause incorrect operation
   *    to occur (thanks to Bob Paddock)
   *    operation to occur (thanks to Bob Paddock)
   *  - Fixed Serial peripheral driver not turning off the USART before reconfiguring it, which would cause incorrect operation
   *    to occur (thanks to Bob Paddock)
+  *  - Fixed software application start command broken in the DFU class bootloader when dfu-programmer is used due to application
+  *    start address corruption
   *
   *  \section Sec_ChangeLog100513 Version 100513
   *  <b>New:</b>
   *
   *  \section Sec_ChangeLog100513 Version 100513
   *  <b>New:</b>