Add short delays before detaching from the USB bus in the bootloaders (thanks to...
[pub/lufa.git] / Bootloaders / CDC / BootloaderCDC.h
index 832cc8b..3c19bdf 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2012.
+     Copyright (C) Dean Camera, 2018.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2018  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
@@ -43,6 +43,7 @@
                #include <avr/eeprom.h>
                #include <avr/power.h>
                #include <avr/interrupt.h>
+               #include <util/delay.h>
                #include <stdbool.h>
 
                #include "Descriptors.h"
 
                #include <LUFA/Drivers/USB/USB.h>
                #include <LUFA/Drivers/Board/LEDs.h>
+               #include <LUFA/Platform/Platform.h>
+
+       /* Preprocessor Checks: */
+               #if !defined(__OPTIMIZE_SIZE__)
+                       #error This bootloader requires that it be optimized for size, not speed, to fit into the target device. Change optimization settings and try again.
+               #endif
 
        /* Macros: */
                /** Version major of the CDC bootloader. */
@@ -70,7 +77,7 @@
 
                /** Magic bootloader key to unlock forced application start mode. */
                #define MAGIC_BOOT_KEY               0xDC42
-       
+
        /* Enums: */
                /** Possible memory types that can be addressed via the bootloader. */
                enum AVR109_Memories
@@ -78,7 +85,7 @@
                        MEMORY_TYPE_FLASH  = 'F',
                        MEMORY_TYPE_EEPROM = 'E',
                };
-               
+
                /** Possible commands that can be issued to the bootloader. */
                enum AVR109_Commands
                {
                        AVR109_COMMAND_WriteLockbits            = 'l',
                        AVR109_COMMAND_EraseFLASH               = 'e',
                        AVR109_COMMAND_ReadSignature            = 's',
-                       AVR109_COMMAND_ReadBootloaderVersion    = 'V',
+                       AVR109_COMMAND_ReadBootloaderSWVersion  = 'V',
+                       AVR109_COMMAND_ReadBootloaderHWVersion  = 'v',
                        AVR109_COMMAND_ReadBootloaderIdentifier = 'S',
                        AVR109_COMMAND_ReadBootloaderInterface  = 'p',
                        AVR109_COMMAND_SetCurrentAddress        = 'A',
                        AVR109_COMMAND_ClearLED                 = 'y',
                        AVR109_COMMAND_ExitBootloader           = 'E',
                };
-               
+
        /* Type Defines: */
                /** Type define for a non-returning pointer to the start of the loaded application in flash memory. */
                typedef void (*AppPtr_t)(void) ATTR_NO_RETURN;