Commit 3c72896e authored by Dean Camera's avatar Dean Camera
Browse files

Fixed software application start command broken in the DFU class bootloader...

Fixed software application start command broken in the DFU class bootloader when dfu-programmer is used due to application start address corruption.
parent 98947e37
...@@ -121,6 +121,7 @@ LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENAB ...@@ -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) ...@@ -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 ...@@ -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 @@ ...@@ -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>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment