switch (USB_ControlRequest.bRequest)
{
- case DFU_DNLOAD:
+ case REQ_DFU_DNLOAD:
Endpoint_ClearSETUP();
/* Check if bootloader is waiting to terminate */
Endpoint_ClearStatusStage();
break;
- case DFU_UPLOAD:
+ case REQ_DFU_UPLOAD:
Endpoint_ClearSETUP();
while (!(Endpoint_IsINReady()))
Endpoint_ClearStatusStage();
break;
- case DFU_GETSTATUS:
+ case REQ_DFU_GETSTATUS:
Endpoint_ClearSETUP();
/* Write 8-bit status value */
Endpoint_ClearStatusStage();
break;
- case DFU_CLRSTATUS:
+ case REQ_DFU_CLRSTATUS:
Endpoint_ClearSETUP();
/* Reset the status value variable to the default OK status */
Endpoint_ClearStatusStage();
break;
- case DFU_GETSTATE:
+ case REQ_DFU_GETSTATE:
Endpoint_ClearSETUP();
/* Write the current device state to the endpoint */
Endpoint_ClearStatusStage();
break;
- case DFU_ABORT:
+ case REQ_DFU_ABORT:
Endpoint_ClearSETUP();
/* Reset the current state variable to the default idle state */
/* 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;
}