diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2010-08-05 09:31:51 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2010-08-05 09:31:51 +0000 |
commit | 3c72896e84f54dab6d604518a355b37ea318df21 (patch) | |
tree | 05c51b8de8efddb623d5c611f8e32db515a34242 /Bootloaders | |
parent | 98947e3750e07054f9da46af82225e9ef89ed656 (diff) | |
download | lufa-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.
Diffstat (limited to 'Bootloaders')
-rw-r--r-- | Bootloaders/CDC/makefile | 1 | ||||
-rw-r--r-- | Bootloaders/DFU/BootloaderDFU.c | 26 | ||||
-rw-r--r-- | Bootloaders/DFU/makefile | 1 |
3 files changed, 17 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 |