aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2010-08-05 09:31:51 +0000
committerDean Camera <dean@fourwalledcubicle.com>2010-08-05 09:31:51 +0000
commit3c72896e84f54dab6d604518a355b37ea318df21 (patch)
tree05c51b8de8efddb623d5c611f8e32db515a34242
parent98947e3750e07054f9da46af82225e9ef89ed656 (diff)
downloadlufa-3c72896e84f54dab6d604518a355b37ea318df21.tar.gz
lufa-3c72896e84f54dab6d604518a355b37ea318df21.tar.bz2
lufa-3c72896e84f54dab6d604518a355b37ea318df21.zip
Fixed software application start command broken in the DFU class bootloader when dfu-programmer is used due to application start address corruption.
-rw-r--r--Bootloaders/CDC/makefile1
-rw-r--r--Bootloaders/DFU/BootloaderDFU.c26
-rw-r--r--Bootloaders/DFU/makefile1
-rw-r--r--LUFA/ManPages/ChangeLog.txt2
4 files changed, 19 insertions, 11 deletions
diff --git a/Bootloaders/CDC/makefile b/Bootloaders/CDC/makefile
index 2df18289e..346912c64 100644
--- a/Bootloaders/CDC/makefile
+++ b/Bootloaders/CDC/makefile
@@ -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_STREAM_CALLBACKS
# Create the LUFA source path variables by including the LUFA root makefile
diff --git a/Bootloaders/DFU/BootloaderDFU.c b/Bootloaders/DFU/BootloaderDFU.c
index 752c32009..7136b972b 100644
--- a/Bootloaders/DFU/BootloaderDFU.c
+++ b/Bootloaders/DFU/BootloaderDFU.c
@@ -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;
}
diff --git a/Bootloaders/DFU/makefile b/Bootloaders/DFU/makefile
index 2cfff0fbe..deb53125f 100644
--- a/Bootloaders/DFU/makefile
+++ b/Bootloaders/DFU/makefile
@@ -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_STREAM_CALLBACKS
# Create the LUFA source path variables by including the LUFA root makefile
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index 5a21f5140..02d4200d7 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -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)
+ * - 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>