diff --git a/Bootloaders/CDC/makefile b/Bootloaders/CDC/makefile index 2df18289e942eaf682b08560cfb27011dbd5b5ea..346912c64a3c532e234591df9e4e667b71f3a2a9 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 752c32009a5bfc1356ed87b251e7ab7adf4dd03d..7136b972b72fc5c0eeb467cd3ac32bd4a3ab8365 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 2cfff0fbe46116dde5b49c17612a737c4287f9c4..deb53125fc94f21ee218c970695e3e192ffcc51b 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 5a21f514022fc633bd2987e83081f048a6046f99..02d4200d776b20be6c0f4f267df35530f35a64aa 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>