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_INTERNAL_SERIAL
LUFA_OPTS += -D NO_DEVICE_SELF_POWER LUFA_OPTS += -D NO_DEVICE_SELF_POWER
LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP 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

@ -634,26 +634,30 @@ static void ProcessWriteCommand(void)
/* Indicate that the bootloader is terminating */ /* Indicate that the bootloader is terminating */
WaitForExit = true; WaitForExit = true;
/* Check if empty request data array - an empty request after a filled request retains the /* Check if data supplied for the Start Program command - no data executes the program */
previous valid request data, but initializes the reset */ if (SentCommand.DataSize)
if (!(SentCommand.DataSize))
{ {
if (SentCommand.Data[1] == 0x00) // Start via watchdog if (SentCommand.Data[1] == 0x01) // Start via jump
{
/* Start the watchdog to reset the AVR once the communications are finalized */
wdt_enable(WDTO_250MS);
}
else // Start via jump
{ {
/* Load in the jump address into the application start address pointer */
union union
{ {
uint8_t Bytes[2]; uint8_t Bytes[2];
AppPtr_t FuncPtr; AppPtr_t FuncPtr;
} Address = {.Bytes = {SentCommand.Data[4], SentCommand.Data[3]}}; } 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 */ /* Set the flag to terminate the bootloader at next opportunity */
RunBootloader = false; 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_INTERNAL_SERIAL
LUFA_OPTS += -D NO_DEVICE_SELF_POWER LUFA_OPTS += -D NO_DEVICE_SELF_POWER
LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP 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

@ -67,6 +67,8 @@
* 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 * - Fixed Serial peripheral driver not turning off the USART before reconfiguring it, which would cause incorrect operation
* to occur (thanks to Bob Paddock) * 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 * \section Sec_ChangeLog100513 Version 100513
* <b>New:</b> * <b>New:</b>

Loading…
Cancel
Save