diff --git a/Bootloaders/CDC/BootloaderAPI.c b/Bootloaders/CDC/BootloaderAPI.c new file mode 100644 index 0000000000..0c98509aac --- /dev/null +++ b/Bootloaders/CDC/BootloaderAPI.c @@ -0,0 +1,74 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 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 + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Bootloader user application API functions. + */ + +#include "BootloaderAPI.h" + +void BootloaderAPI_ErasePage(uint32_t Address) +{ + boot_page_erase_safe(Address); + boot_rww_enable(); +} + +void BootloaderAPI_WritePage(uint32_t Address) +{ + boot_page_write_safe(Address); + boot_rww_enable(); +} + +void BootloaderAPI_FillWord(uint32_t Address, uint16_t Word) +{ + boot_page_fill_safe(Address, Word); +} + +uint8_t BootloaderAPI_ReadSignature(uint16_t Address) +{ + return boot_signature_byte_get(Address); +} + +uint8_t BootloaderAPI_ReadFuse(uint16_t Address) +{ + return boot_lock_fuse_bits_get(Address); +} + +uint8_t BootloaderAPI_ReadLock(void) +{ + return boot_lock_fuse_bits_get(GET_LOCK_BITS); +} + +void BootloaderAPI_WriteLock(uint8_t LockBits) +{ + boot_lock_bits_set_safe(LockBits); +} + diff --git a/Bootloaders/CDC/BootloaderAPI.h b/Bootloaders/CDC/BootloaderAPI.h new file mode 100644 index 0000000000..7ab175dad8 --- /dev/null +++ b/Bootloaders/CDC/BootloaderAPI.h @@ -0,0 +1,59 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 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 + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Header file for BootloaderAPI.c. + */ + +#ifndef _BOOTLOADER_API_H_ +#define _BOOTLOADER_API_H_ + + /* Includes: */ + #include + #include + #include + + #include + + /* External Variables: */ + extern uint8_t* BootloaderAPI_JumpTable; + + /* Function Prototypes: */ + void BootloaderAPI_ErasePage(uint32_t Address); + void BootloaderAPI_WritePage(uint32_t Address); + void BootloaderAPI_FillWord(uint32_t Address, uint16_t Word); + uint8_t BootloaderAPI_ReadSignature(uint16_t Address); + uint8_t BootloaderAPI_ReadFuse(uint16_t Address); + uint8_t BootloaderAPI_ReadLock(void); + void BootloaderAPI_WriteLock(uint8_t LockBits); + +#endif + diff --git a/Bootloaders/CDC/BootloaderAPITable.S b/Bootloaders/CDC/BootloaderAPITable.S new file mode 100644 index 0000000000..c5669617d4 --- /dev/null +++ b/Bootloaders/CDC/BootloaderAPITable.S @@ -0,0 +1,43 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 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 + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +; Bootloader API Jump Table +.section .apitable, "ax" +.org 0 + +.global BootloaderAPI_JumpTable +BootloaderAPI_JumpTable: + jmp BootloaderAPI_ErasePage + jmp BootloaderAPI_WritePage + jmp BootloaderAPI_FillWord + jmp BootloaderAPI_ReadSignature + jmp BootloaderAPI_ReadFuse + jmp BootloaderAPI_ReadLock + jmp BootloaderAPI_WriteLock diff --git a/Bootloaders/CDC/BootloaderCDC.c b/Bootloaders/CDC/BootloaderCDC.c index 7695e33d81..f336a13687 100644 --- a/Bootloaders/CDC/BootloaderCDC.c +++ b/Bootloaders/CDC/BootloaderCDC.c @@ -63,6 +63,10 @@ static bool RunBootloader = true; */ int main(void) { + /* Force a reference to the API jump table to prevent the linker from discarding it */ + uint8_t* volatile Dummy = BootloaderAPI_JumpTable; + (void)Dummy; + /* Setup hardware required for the bootloader */ SetupHardware(); diff --git a/Bootloaders/CDC/BootloaderCDC.h b/Bootloaders/CDC/BootloaderCDC.h index 72bc1e7737..41280fe8f7 100644 --- a/Bootloaders/CDC/BootloaderCDC.h +++ b/Bootloaders/CDC/BootloaderCDC.h @@ -46,6 +46,7 @@ #include #include "Descriptors.h" + #include "BootloaderAPI.h" #include #include diff --git a/Bootloaders/CDC/BootloaderCDC.txt b/Bootloaders/CDC/BootloaderCDC.txt index 4e5b3c5657..ab45ad1b82 100644 --- a/Bootloaders/CDC/BootloaderCDC.txt +++ b/Bootloaders/CDC/BootloaderCDC.txt @@ -86,6 +86,25 @@ * * Refer to the AVRDude project documentation for additional usage instructions. * + * \section Sec_API User Application API + * + * Several user application functions for FLASH and other special memory area manipulations are exposed by the bootloader, + * allowing the user application to call into the bootloader at runtime to read and write FLASH data. + * + * By default, the bootloader API jump table is located 32 bytes from the end of the device's FLASH memory, and follows the + * following layout: + * + * \code + * #define BOOTLOADER_API_START(Index) (void*)(((FLASHEND - 32) + (2 * Index)) / 2) + * void (*BootloaderAPI_ErasePage)(uint32_t Address) = BOOTLOADER_API_START(0); + * void (*BootloaderAPI_WritePage)(uint32_t Address) = BOOTLOADER_API_START(1); + * void (*BootloaderAPI_FillWord)(uint32_t Address, uint16_t Word) = BOOTLOADER_API_START(2); + * uint8_t (*BootloaderAPI_ReadSignature)(uint16_t Address) = BOOTLOADER_API_START(3); + * uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address) = BOOTLOADER_API_START(4); + * uint8_t (*BootloaderAPI_ReadLock)(void) = BOOTLOADER_API_START(5); + * void (*BootloaderAPI_WriteLock)(uint8_t LockBits) = BOOTLOADER_API_START(6); + * \endcode + * * \section Sec_Options Project Options * * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. diff --git a/Bootloaders/CDC/makefile b/Bootloaders/CDC/makefile index aab9288afe..65982263e4 100644 --- a/Bootloaders/CDC/makefile +++ b/Bootloaders/CDC/makefile @@ -97,6 +97,7 @@ F_USB = $(F_CPU) FLASH_SIZE_KB = 128 BOOT_SECTION_SIZE_KB = 4 BOOT_START = 0x$(shell echo "obase=16; ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024" | bc) +BOOT_API_TABLESTART = 0x$(shell echo "obase=16; (($(FLASH_SIZE_KB) * 1024) - 32)" | bc) # Output format. (can be srec, ihex, binary) @@ -142,6 +143,7 @@ include $(LUFA_PATH)/LUFA/makefile # List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).c \ + BootloaderAPI.c \ Descriptors.c \ $(LUFA_SRC_USB) \ @@ -157,7 +159,7 @@ CPPSRC = # Even though the DOS/Win* filesystem matches both .s and .S the same, # it will preserve the spelling of the filenames, and gcc itself does # care about how the name is spelled on its command-line. -ASRC = +ASRC = BootloaderAPITable.S # Optimization level, can be [0, 1, 2, 3, s]. @@ -338,7 +340,7 @@ EXTMEMOPTS = # -Map: create map file # --cref: add cross reference to map file LDFLAGS = -Wl,-Map=$(TARGET).map,--cref -LDFLAGS += -Wl,--section-start=.text=$(BOOT_START) +LDFLAGS += -Wl,--section-start=.text=$(BOOT_START) -Wl,--section-start=.apitable=$(BOOT_API_TABLESTART) LDFLAGS += -Wl,--relax LDFLAGS += -Wl,--gc-sections LDFLAGS += $(EXTMEMOPTS) diff --git a/Bootloaders/DFU/BootloaderAPI.c b/Bootloaders/DFU/BootloaderAPI.c new file mode 100644 index 0000000000..0c98509aac --- /dev/null +++ b/Bootloaders/DFU/BootloaderAPI.c @@ -0,0 +1,74 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 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 + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Bootloader user application API functions. + */ + +#include "BootloaderAPI.h" + +void BootloaderAPI_ErasePage(uint32_t Address) +{ + boot_page_erase_safe(Address); + boot_rww_enable(); +} + +void BootloaderAPI_WritePage(uint32_t Address) +{ + boot_page_write_safe(Address); + boot_rww_enable(); +} + +void BootloaderAPI_FillWord(uint32_t Address, uint16_t Word) +{ + boot_page_fill_safe(Address, Word); +} + +uint8_t BootloaderAPI_ReadSignature(uint16_t Address) +{ + return boot_signature_byte_get(Address); +} + +uint8_t BootloaderAPI_ReadFuse(uint16_t Address) +{ + return boot_lock_fuse_bits_get(Address); +} + +uint8_t BootloaderAPI_ReadLock(void) +{ + return boot_lock_fuse_bits_get(GET_LOCK_BITS); +} + +void BootloaderAPI_WriteLock(uint8_t LockBits) +{ + boot_lock_bits_set_safe(LockBits); +} + diff --git a/Bootloaders/DFU/BootloaderAPI.h b/Bootloaders/DFU/BootloaderAPI.h new file mode 100644 index 0000000000..7ab175dad8 --- /dev/null +++ b/Bootloaders/DFU/BootloaderAPI.h @@ -0,0 +1,59 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 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 + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Header file for BootloaderAPI.c. + */ + +#ifndef _BOOTLOADER_API_H_ +#define _BOOTLOADER_API_H_ + + /* Includes: */ + #include + #include + #include + + #include + + /* External Variables: */ + extern uint8_t* BootloaderAPI_JumpTable; + + /* Function Prototypes: */ + void BootloaderAPI_ErasePage(uint32_t Address); + void BootloaderAPI_WritePage(uint32_t Address); + void BootloaderAPI_FillWord(uint32_t Address, uint16_t Word); + uint8_t BootloaderAPI_ReadSignature(uint16_t Address); + uint8_t BootloaderAPI_ReadFuse(uint16_t Address); + uint8_t BootloaderAPI_ReadLock(void); + void BootloaderAPI_WriteLock(uint8_t LockBits); + +#endif + diff --git a/Bootloaders/DFU/BootloaderAPITable.S b/Bootloaders/DFU/BootloaderAPITable.S new file mode 100644 index 0000000000..c5669617d4 --- /dev/null +++ b/Bootloaders/DFU/BootloaderAPITable.S @@ -0,0 +1,43 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2011. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2011 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 + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +; Bootloader API Jump Table +.section .apitable, "ax" +.org 0 + +.global BootloaderAPI_JumpTable +BootloaderAPI_JumpTable: + jmp BootloaderAPI_ErasePage + jmp BootloaderAPI_WritePage + jmp BootloaderAPI_FillWord + jmp BootloaderAPI_ReadSignature + jmp BootloaderAPI_ReadFuse + jmp BootloaderAPI_ReadLock + jmp BootloaderAPI_WriteLock diff --git a/Bootloaders/DFU/BootloaderDFU.c b/Bootloaders/DFU/BootloaderDFU.c index 1dae162d2f..078d59debb 100644 --- a/Bootloaders/DFU/BootloaderDFU.c +++ b/Bootloaders/DFU/BootloaderDFU.c @@ -99,6 +99,10 @@ static uint16_t EndAddr = 0x0000; */ int main(void) { + /* Force a reference to the API jump table to prevent the linker from discarding it */ + uint8_t* volatile Dummy = BootloaderAPI_JumpTable; + (void)Dummy; + /* Configure hardware required by the bootloader */ SetupHardware(); @@ -742,4 +746,3 @@ static void ProcessReadCommand(void) else if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01)) // Read signature byte ResponseByte = SignatureInfo[DataIndexToRead - 0x30]; } - diff --git a/Bootloaders/DFU/BootloaderDFU.h b/Bootloaders/DFU/BootloaderDFU.h index 8fbf64c7e0..0c34c2c8c8 100644 --- a/Bootloaders/DFU/BootloaderDFU.h +++ b/Bootloaders/DFU/BootloaderDFU.h @@ -48,6 +48,7 @@ #include #include "Descriptors.h" + #include "BootloaderAPI.h" #include #include diff --git a/Bootloaders/DFU/BootloaderDFU.txt b/Bootloaders/DFU/BootloaderDFU.txt index 858549f008..94657f355b 100644 --- a/Bootloaders/DFU/BootloaderDFU.txt +++ b/Bootloaders/DFU/BootloaderDFU.txt @@ -89,6 +89,27 @@ * dfu-programmer at90usb1287 erase flash Mouse.hex * \endcode * + * \section Sec_API User Application API + * + * Several user application functions for FLASH and other special memory area manipulations are exposed by the bootloader, + * allowing the user application to call into the bootloader at runtime to read and write FLASH data. + * + * \note The APIs exposed by the DFU class bootloader are \b NOT compatible with the API exposed by the official Atmel DFU bootloader. + * + * By default, the bootloader API jump table is located 32 bytes from the end of the device's FLASH memory, and follows the + * following layout: + * + * \code + * #define BOOTLOADER_API_START(Index) (void*)(((FLASHEND - 32) + (2 * Index)) / 2) + * void (*BootloaderAPI_ErasePage)(uint32_t Address) = BOOTLOADER_API_START(0); + * void (*BootloaderAPI_WritePage)(uint32_t Address) = BOOTLOADER_API_START(1); + * void (*BootloaderAPI_FillWord)(uint32_t Address, uint16_t Word) = BOOTLOADER_API_START(2); + * uint8_t (*BootloaderAPI_ReadSignature)(uint16_t Address) = BOOTLOADER_API_START(3); + * uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address) = BOOTLOADER_API_START(4); + * uint8_t (*BootloaderAPI_ReadLock)(void) = BOOTLOADER_API_START(5); + * void (*BootloaderAPI_WriteLock)(uint8_t LockBits) = BOOTLOADER_API_START(6); + * \endcode + * * \section Sec_Options Project Options * * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. diff --git a/Bootloaders/DFU/makefile b/Bootloaders/DFU/makefile index 32157106b3..bd7120d8f6 100644 --- a/Bootloaders/DFU/makefile +++ b/Bootloaders/DFU/makefile @@ -97,6 +97,7 @@ F_USB = $(F_CPU) FLASH_SIZE_KB = 128 BOOT_SECTION_SIZE_KB = 4 BOOT_START = 0x$(shell echo "obase=16; ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024" | bc) +BOOT_API_TABLESTART = 0x$(shell echo "obase=16; (($(FLASH_SIZE_KB) * 1024) - 32)" | bc) # Output format. (can be srec, ihex, binary) @@ -137,6 +138,7 @@ include $(LUFA_PATH)/LUFA/makefile # List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).c \ + BootloaderAPI.c \ Descriptors.c \ $(LUFA_SRC_USB) \ @@ -152,7 +154,7 @@ CPPSRC = # Even though the DOS/Win* filesystem matches both .s and .S the same, # it will preserve the spelling of the filenames, and gcc itself does # care about how the name is spelled on its command-line. -ASRC = +ASRC = BootloaderAPITable.S # Optimization level, can be [0, 1, 2, 3, s]. @@ -333,7 +335,7 @@ EXTMEMOPTS = # -Map: create map file # --cref: add cross reference to map file LDFLAGS = -Wl,-Map=$(TARGET).map,--cref -LDFLAGS += -Wl,--section-start=.text=$(BOOT_START) +LDFLAGS += -Wl,--section-start=.text=$(BOOT_START) -Wl,--section-start=.apitable=$(BOOT_API_TABLESTART) LDFLAGS += -Wl,--relax LDFLAGS += -Wl,--gc-sections LDFLAGS += $(EXTMEMOPTS) diff --git a/LUFA.pnproj b/LUFA.pnproj index d6d01ac332..7d7af8147d 100644 --- a/LUFA.pnproj +++ b/LUFA.pnproj @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt index 6b1fc877fd..55e12414c6 100644 --- a/LUFA/ManPages/ChangeLog.txt +++ b/LUFA/ManPages/ChangeLog.txt @@ -5,6 +5,25 @@ */ /** \page Page_ChangeLog Project Changelog + * + * \section Sec_ChangeLogXXXXXX Version XXXXXX + * New: + * - Core: + * - None + * - Library Applications: + * - Added User Application APIs to the CDC and DFU class bootloaders + * + * Changed: + * - Core: + * - None + * - Library Applications: + * - None + * + * Fixed: + * - Core: + * - None + * - Library Applications: + * - None * * \section Sec_ChangeLog111009 Version 111009 * New: diff --git a/LUFA/ManPages/ConfiguringApps.txt b/LUFA/ManPages/ConfiguringApps.txt index c4a1ce2241..6caf185c19 100644 --- a/LUFA/ManPages/ConfiguringApps.txt +++ b/LUFA/ManPages/ConfiguringApps.txt @@ -52,7 +52,7 @@ * * If you are not using any board-specific drivers in the LUFA library, or you are using a custom board layout, change this to read * "USER" (no quotes) instead of a standard board name. If the USER board type is selected and the application makes use of one or more - * board-specific hardware drivers inside the LUFA library, then the appropriate stub drives files should be copied from the /BoardStubs/ + * board-specific hardware drivers inside the LUFA library, then the appropriate stub drives files should be copied from the \c /CodeTemplates/DriverStubs/ * directory into a /Board/ folder inside the application directory, and the stub driver completed with the appropriate code to drive the * custom board's hardware. * diff --git a/LUFA/ManPages/MigrationInformation.txt b/LUFA/ManPages/MigrationInformation.txt index 7190d65c01..14ac86bb4b 100644 --- a/LUFA/ManPages/MigrationInformation.txt +++ b/LUFA/ManPages/MigrationInformation.txt @@ -10,6 +10,9 @@ * to the next version released. It does not indicate all new additions to the library in each version change, only * areas relevant to making older projects compatible with the API changes of each new release. * + * \section Sec_MigrationXXXXXX Migrating from 111009 to XXXXXX + * None + * * \section Sec_Migration111009 Migrating from 110528 to 111009 * Non-USB Library Components * - The \c JTAG_DEBUG_ASSERT() macro has been renamed \ref JTAG_ASSERT() to be consistent with \ref STDOUT_ASSERT(). diff --git a/LUFA/Version.h b/LUFA/Version.h index 38dd33fe29..d8d7402807 100644 --- a/LUFA/Version.h +++ b/LUFA/Version.h @@ -43,10 +43,10 @@ /* Public Interface - May be used in end-application: */ /* Macros: */ /** Indicates the version number of the library, as an integer. */ - #define LUFA_VERSION_INTEGER 0x111009 + #define LUFA_VERSION_INTEGER 0x000000 /** Indicates the version number of the library, as a string. */ - #define LUFA_VERSION_STRING "111009" + #define LUFA_VERSION_STRING "000000" #endif