*\r
* Main source file for the DFU class bootloader. This file contains the complete bootloader logic.\r
*/\r
- \r
-/** Configuration define. Define this token to true to case the bootloader to reject all memory commands\r
- * until a memory erase has been performed. When used in conjunction with the lockbits of the AVR, this\r
- * can protect the AVR's firmware from being dumped from a secured AVR. When false, memory operations are\r
- * allowed at any time.\r
- */\r
-#define SECURE_MODE false\r
\r
#define INCLUDE_FROM_BOOTLOADER_C\r
#include "BootloaderDFU.h"\r
\r
/** Flag to indicate if the bootloader is waiting to exit. When the host requests the bootloader to exit and\r
* jump to the application address it specifies, it sends two sequential commands which must be properly\r
- * acknowedged. Upon reception of the first the RunBootloader flag is cleared and the WaitForExit flag is set,\r
+ * acknowledged. Upon reception of the first the RunBootloader flag is cleared and the WaitForExit flag is set,\r
* causing the bootloader to wait for the final exit command before shutting down.\r
*/\r
bool WaitForExit = false;\r
MCUSR &= ~(1 << WDRF);\r
wdt_disable();\r
\r
- /* Disable Clock Division */\r
- SetSystemClockPrescaler(0);\r
+ /* Disable clock division */\r
+ clock_prescale_set(clock_div_1);\r
\r
/* Relocate the interrupt vector table to the bootloader section */\r
MCUCR = (1 << IVCE);\r
\r
Endpoint_ClearSetupOUT();\r
\r
- /* Send ZLP to the host to acknowedge the request */\r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsSetupINReady()));\r
Endpoint_ClearSetupIN();\r
\r
break;\r
\r
Endpoint_ClearSetupIN();\r
\r
- /* Send ZLP to the host to acknowedge the request */\r
+ /* Acknowledge status stage */\r
while (!(Endpoint_IsSetupOUTReceived()));\r
Endpoint_ClearSetupOUT();\r
\r
\r
Endpoint_ClearSetupIN();\r
\r
+ /* Acknowledge status stage */\r
while (!(Endpoint_IsSetupOUTReceived()));\r
Endpoint_ClearSetupOUT();\r
\r
\r
/* Reset the status value variable to the default OK status */\r
DFU_Status = OK;\r
- \r
- Endpoint_ClearSetupIN();\r
\r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsSetupINReady()));\r
+ Endpoint_ClearSetupIN();\r
+ \r
break;\r
case DFU_GETSTATE:\r
Endpoint_ClearSetupReceived();\r
\r
Endpoint_ClearSetupIN();\r
\r
+ /* Acknowledge status stage */\r
while (!(Endpoint_IsSetupOUTReceived()));\r
Endpoint_ClearSetupOUT();\r
\r
/* Reset the current state variable to the default idle state */\r
DFU_State = dfuIDLE;\r
\r
+ /* Acknowledge status stage */\r
+ while (!(Endpoint_IsSetupINReady()));\r
Endpoint_ClearSetupIN();\r
\r
break;\r
static void ProcessReadCommand(void)\r
{\r
const uint8_t BootloaderInfo[3] = {BOOTLOADER_VERSION, BOOTLOADER_ID_BYTE1, BOOTLOADER_ID_BYTE2};\r
- const uint8_t SignatureInfo[3] = {SIGNATURE_BYTE_1, SIGNATURE_BYTE_2, SIGNATURE_BYTE_3};\r
+ const uint8_t SignatureInfo[3] = {SIGNATURE_0, SIGNATURE_1, SIGNATURE_2};\r
\r
uint8_t DataIndexToRead = SentCommand.Data[1];\r
\r