Fixed software application start command broken in the DFU class bootloader when dfu-programmer is used due to application start address corruption.

pull/1469/head
Dean Camera 14 years ago
parent 98947e3750
commit 3c72896e84

@ -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

@ -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;
}

@ -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

@ -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>

Loading…
Cancel
Save