-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2021.\r
-\r
- dean [at] fourwalledcubicle [dot] com\r
- www.lufa-lib.org\r
-*/\r
-\r
-/*\r
- Copyright 2021 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, distribute, and sell this\r
- software and its documentation for any purpose is hereby granted\r
- without fee, provided that the above copyright notice appear in\r
- all copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaims all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-#if AUX_BOOT_SECTION_SIZE > 0\r
-#warning Using a AUX bootloader section in addition to the defined bootloader space (see documentation).\r
-\r
-; Trampoline to jump over the AUX bootloader section to the start of the bootloader,\r
-; on devices where an AUX bootloader section is used.\r
-.section .boot_aux_trampoline, "ax"\r
-.global Boot_AUX_Trampoline\r
-Boot_AUX_Trampoline:\r
- jmp BOOT_START_ADDR\r
-#endif\r
-\r
-; Trampolines to actual API implementations if the target address is outside the\r
-; range of a rjmp instruction (can happen with large bootloader sections)\r
-.section .apitable_trampolines, "ax"\r
-.global BootloaderAPI_Trampolines\r
-BootloaderAPI_Trampolines:\r
-\r
- BootloaderAPI_ErasePage_Trampoline:\r
- jmp BootloaderAPI_ErasePage\r
- BootloaderAPI_WritePage_Trampoline:\r
- jmp BootloaderAPI_WritePage\r
- BootloaderAPI_FillWord_Trampoline:\r
- jmp BootloaderAPI_FillWord\r
- BootloaderAPI_ReadSignature_Trampoline:\r
- jmp BootloaderAPI_ReadSignature\r
- BootloaderAPI_ReadFuse_Trampoline:\r
- jmp BootloaderAPI_ReadFuse\r
- BootloaderAPI_ReadLock_Trampoline:\r
- jmp BootloaderAPI_ReadLock\r
- BootloaderAPI_WriteLock_Trampoline:\r
- jmp BootloaderAPI_WriteLock\r
- BootloaderAPI_UNUSED1:\r
- ret\r
- BootloaderAPI_UNUSED2:\r
- ret\r
- BootloaderAPI_UNUSED3:\r
- ret\r
- BootloaderAPI_UNUSED4:\r
- ret\r
- BootloaderAPI_UNUSED5:\r
- ret\r
-\r
-\r
-\r
-; API function jump table\r
-.section .apitable_jumptable, "ax"\r
-.global BootloaderAPI_JumpTable\r
-BootloaderAPI_JumpTable:\r
-\r
- rjmp BootloaderAPI_ErasePage_Trampoline\r
- rjmp BootloaderAPI_WritePage_Trampoline\r
- rjmp BootloaderAPI_FillWord_Trampoline\r
- rjmp BootloaderAPI_ReadSignature_Trampoline\r
- rjmp BootloaderAPI_ReadFuse_Trampoline\r
- rjmp BootloaderAPI_ReadLock_Trampoline\r
- rjmp BootloaderAPI_WriteLock_Trampoline\r
- rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1\r
- rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2\r
- rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3\r
- rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4\r
- rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5\r
-\r
-\r
-\r
-; Bootloader table signatures and information\r
-.section .apitable_signatures, "ax"\r
-.global BootloaderAPI_Signatures\r
-BootloaderAPI_Signatures:\r
-\r
- .long BOOT_START_ADDR ; Start address of the bootloader\r
- .word 0xDF30 ; Signature for the MS class bootloader, V1\r
- .word 0xDCFB ; Signature for a LUFA class bootloader\r
+/*
+ LUFA Library
+ Copyright (C) Dean Camera, 2021.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+*/
+
+/*
+ Copyright 2021 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 disclaims 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.
+*/
+
+#if AUX_BOOT_SECTION_SIZE > 0
+#warning Using a AUX bootloader section in addition to the defined bootloader space (see documentation).
+
+; Trampoline to jump over the AUX bootloader section to the start of the bootloader,
+; on devices where an AUX bootloader section is used.
+.section .boot_aux_trampoline, "ax"
+.global Boot_AUX_Trampoline
+Boot_AUX_Trampoline:
+ jmp BOOT_START_ADDR
+#endif
+
+; Trampolines to actual API implementations if the target address is outside the
+; range of a rjmp instruction (can happen with large bootloader sections)
+.section .apitable_trampolines, "ax"
+.global BootloaderAPI_Trampolines
+BootloaderAPI_Trampolines:
+
+ BootloaderAPI_ErasePage_Trampoline:
+ jmp BootloaderAPI_ErasePage
+ BootloaderAPI_WritePage_Trampoline:
+ jmp BootloaderAPI_WritePage
+ BootloaderAPI_FillWord_Trampoline:
+ jmp BootloaderAPI_FillWord
+ BootloaderAPI_ReadSignature_Trampoline:
+ jmp BootloaderAPI_ReadSignature
+ BootloaderAPI_ReadFuse_Trampoline:
+ jmp BootloaderAPI_ReadFuse
+ BootloaderAPI_ReadLock_Trampoline:
+ jmp BootloaderAPI_ReadLock
+ BootloaderAPI_WriteLock_Trampoline:
+ jmp BootloaderAPI_WriteLock
+ BootloaderAPI_UNUSED1:
+ ret
+ BootloaderAPI_UNUSED2:
+ ret
+ BootloaderAPI_UNUSED3:
+ ret
+ BootloaderAPI_UNUSED4:
+ ret
+ BootloaderAPI_UNUSED5:
+ ret
+
+
+
+; API function jump table
+.section .apitable_jumptable, "ax"
+.global BootloaderAPI_JumpTable
+BootloaderAPI_JumpTable:
+
+ rjmp BootloaderAPI_ErasePage_Trampoline
+ rjmp BootloaderAPI_WritePage_Trampoline
+ rjmp BootloaderAPI_FillWord_Trampoline
+ rjmp BootloaderAPI_ReadSignature_Trampoline
+ rjmp BootloaderAPI_ReadFuse_Trampoline
+ rjmp BootloaderAPI_ReadLock_Trampoline
+ rjmp BootloaderAPI_WriteLock_Trampoline
+ rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1
+ rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2
+ rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3
+ rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4
+ rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5
+
+
+
+; Bootloader table signatures and information
+.section .apitable_signatures, "ax"
+.global BootloaderAPI_Signatures
+BootloaderAPI_Signatures:
+
+ .long BOOT_START_ADDR ; Start address of the bootloader
+ .word 0xDF30 ; Signature for the MS class bootloader, V1
+ .word 0xDCFB ; Signature for a LUFA class bootloader
-#\r
-# LUFA Library\r
-# Copyright (C) Dean Camera, 2021.\r
-#\r
-# dean [at] fourwalledcubicle [dot] com\r
-# www.lufa-lib.org\r
-#\r
-# --------------------------------------\r
-# LUFA Project Makefile.\r
-# --------------------------------------\r
-\r
-# Run "make help" for target help.\r
-\r
-MCU = at90usb1287\r
-ARCH = AVR8\r
-BOARD = USBKEY\r
-F_CPU = 8000000\r
-F_USB = $(F_CPU)\r
-OPTIMIZATION = s\r
-TARGET = BootloaderMassStorage\r
-SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S Lib/SCSI.c Lib/VirtualFAT.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)\r
-LUFA_PATH = ../../LUFA\r
-CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)\r
-LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)\r
-LTO = Y\r
-\r
-# Flash size and bootloader section sizes of the target, in KB. These must\r
-# match the target's total FLASH size and the bootloader size set in the\r
-# device's fuses.\r
-FLASH_SIZE_KB = 128\r
-BOOT_SECTION_SIZE_KB = 8\r
-\r
-# Bootloader address calculation formulas\r
-# Do not modify these macros, but rather modify the dependent values above.\r
-CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) )\r
-BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )\r
-BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )\r
-\r
-# Bootloader linker section flags for relocating the API table sections to\r
-# known FLASH addresses - these should not normally be user-edited.\r
-BOOT_SECTION_LD_FLAG = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))\r
-BOOT_API_LD_FLAGS = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)\r
-BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable, BootloaderAPI_JumpTable, 32)\r
-BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, BootloaderAPI_Signatures, 8)\r
-\r
-# Check if the bootloader needs an AUX section, located before the real bootloader section to store some of the\r
-# bootloader code. This is required for 32KB and smaller devices, where the actual bootloader is 8KB but the maximum\r
-# bootloader section size is 4KB. The actual usable application space will be reduced by 6KB for these devices.\r
-ifeq ($(BOOT_SECTION_SIZE_KB),8)\r
- CC_FLAGS += -DAUX_BOOT_SECTION_SIZE=0\r
-else\r
- AUX_BOOT_SECTION_SIZE_KB = (8 - $(BOOT_SECTION_SIZE_KB))\r
-\r
- CC_FLAGS += -DAUX_BOOT_SECTION_SIZE='($(AUX_BOOT_SECTION_SIZE_KB) * 1024)'\r
- LD_FLAGS += -Wl,--section-start=.boot_aux=$(call BOOT_SEC_OFFSET, (($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024 - 16))\r
- LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .boot_aux_trampoline, Boot_AUX_Trampoline, ($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024)\r
-endif\r
-\r
-# Default target\r
-all:\r
-\r
-# Include LUFA-specific DMBS extension modules\r
-DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA\r
-include $(DMBS_LUFA_PATH)/lufa-sources.mk\r
-include $(DMBS_LUFA_PATH)/lufa-gcc.mk\r
-\r
-# Include common DMBS build system modules\r
-DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS\r
-include $(DMBS_PATH)/core.mk\r
-include $(DMBS_PATH)/cppcheck.mk\r
-include $(DMBS_PATH)/doxygen.mk\r
-include $(DMBS_PATH)/dfu.mk\r
-include $(DMBS_PATH)/gcc.mk\r
-include $(DMBS_PATH)/hid.mk\r
-include $(DMBS_PATH)/avrdude.mk\r
-include $(DMBS_PATH)/atprogram.mk\r
+#
+# LUFA Library
+# Copyright (C) Dean Camera, 2021.
+#
+# dean [at] fourwalledcubicle [dot] com
+# www.lufa-lib.org
+#
+# --------------------------------------
+# LUFA Project Makefile.
+# --------------------------------------
+
+# Run "make help" for target help.
+
+MCU = at90usb1287
+ARCH = AVR8
+BOARD = USBKEY
+F_CPU = 8000000
+F_USB = $(F_CPU)
+OPTIMIZATION = s
+TARGET = BootloaderMassStorage
+SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S Lib/SCSI.c Lib/VirtualFAT.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
+LUFA_PATH = ../../LUFA
+CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
+LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
+LTO = Y
+
+# Flash size and bootloader section sizes of the target, in KB. These must
+# match the target's total FLASH size and the bootloader size set in the
+# device's fuses.
+FLASH_SIZE_KB = 128
+BOOT_SECTION_SIZE_KB = 8
+
+# Bootloader address calculation formulas
+# Do not modify these macros, but rather modify the dependent values above.
+CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) )
+BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )
+BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )
+
+# Bootloader linker section flags for relocating the API table sections to
+# known FLASH addresses - these should not normally be user-edited.
+BOOT_SECTION_LD_FLAG = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))
+BOOT_API_LD_FLAGS = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)
+BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable, BootloaderAPI_JumpTable, 32)
+BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, BootloaderAPI_Signatures, 8)
+
+# Check if the bootloader needs an AUX section, located before the real bootloader section to store some of the
+# bootloader code. This is required for 32KB and smaller devices, where the actual bootloader is 8KB but the maximum
+# bootloader section size is 4KB. The actual usable application space will be reduced by 6KB for these devices.
+ifeq ($(BOOT_SECTION_SIZE_KB),8)
+ CC_FLAGS += -DAUX_BOOT_SECTION_SIZE=0
+else
+ AUX_BOOT_SECTION_SIZE_KB = (8 - $(BOOT_SECTION_SIZE_KB))
+
+ CC_FLAGS += -DAUX_BOOT_SECTION_SIZE='($(AUX_BOOT_SECTION_SIZE_KB) * 1024)'
+ LD_FLAGS += -Wl,--section-start=.boot_aux=$(call BOOT_SEC_OFFSET, (($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024 - 16))
+ LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .boot_aux_trampoline, Boot_AUX_Trampoline, ($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024)
+endif
+
+# Default target
+all:
+
+# Include LUFA-specific DMBS extension modules
+DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
+include $(DMBS_LUFA_PATH)/lufa-sources.mk
+include $(DMBS_LUFA_PATH)/lufa-gcc.mk
+
+# Include common DMBS build system modules
+DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS
+include $(DMBS_PATH)/core.mk
+include $(DMBS_PATH)/cppcheck.mk
+include $(DMBS_PATH)/doxygen.mk
+include $(DMBS_PATH)/dfu.mk
+include $(DMBS_PATH)/gcc.mk
+include $(DMBS_PATH)/hid.mk
+include $(DMBS_PATH)/avrdude.mk
+include $(DMBS_PATH)/atprogram.mk
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2021.\r
-\r
- dean [at] fourwalledcubicle [dot] com\r
- www.lufa-lib.org\r
-*/\r
-\r
-/*\r
- Copyright 2021 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, distribute, and sell this\r
- software and its documentation for any purpose is hereby granted\r
- without fee, provided that the above copyright notice appear in\r
- all copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaims all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-; Trampolines to actual API implementations if the target address is outside the\r
-; range of a rjmp instruction (can happen with large bootloader sections)\r
-.section .apitable_trampolines, "ax"\r
-.global BootloaderAPI_Trampolines\r
-BootloaderAPI_Trampolines:\r
-\r
- BootloaderAPI_ErasePage_Trampoline:\r
- jmp BootloaderAPI_ErasePage\r
- BootloaderAPI_WritePage_Trampoline:\r
- jmp BootloaderAPI_WritePage\r
- BootloaderAPI_FillWord_Trampoline:\r
- jmp BootloaderAPI_FillWord\r
- BootloaderAPI_ReadSignature_Trampoline:\r
- jmp BootloaderAPI_ReadSignature\r
- BootloaderAPI_ReadFuse_Trampoline:\r
- jmp BootloaderAPI_ReadFuse\r
- BootloaderAPI_ReadLock_Trampoline:\r
- jmp BootloaderAPI_ReadLock\r
- BootloaderAPI_WriteLock_Trampoline:\r
- jmp BootloaderAPI_WriteLock\r
- BootloaderAPI_UNUSED1:\r
- ret\r
- BootloaderAPI_UNUSED2:\r
- ret\r
- BootloaderAPI_UNUSED3:\r
- ret\r
- BootloaderAPI_UNUSED4:\r
- ret\r
- BootloaderAPI_UNUSED5:\r
- ret\r
-\r
-\r
-\r
-; API function jump table\r
-.section .apitable_jumptable, "ax"\r
-.global BootloaderAPI_JumpTable\r
-BootloaderAPI_JumpTable:\r
-\r
- rjmp BootloaderAPI_ErasePage_Trampoline\r
- rjmp BootloaderAPI_WritePage_Trampoline\r
- rjmp BootloaderAPI_FillWord_Trampoline\r
- rjmp BootloaderAPI_ReadSignature_Trampoline\r
- rjmp BootloaderAPI_ReadFuse_Trampoline\r
- rjmp BootloaderAPI_ReadLock_Trampoline\r
- rjmp BootloaderAPI_WriteLock_Trampoline\r
- rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1\r
- rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2\r
- rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3\r
- rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4\r
- rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5\r
-\r
-\r
-\r
-; Bootloader table signatures and information\r
-.section .apitable_signatures, "ax"\r
-.global BootloaderAPI_Signatures\r
-BootloaderAPI_Signatures:\r
-\r
- .long BOOT_START_ADDR ; Start address of the bootloader\r
- .word 0xDF20 ; Signature for the Printer class bootloader\r
- .word 0xDCFB ; Signature for a LUFA class bootloader\r
+/*
+ LUFA Library
+ Copyright (C) Dean Camera, 2021.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+*/
+
+/*
+ Copyright 2021 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 disclaims 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.
+*/
+
+; Trampolines to actual API implementations if the target address is outside the
+; range of a rjmp instruction (can happen with large bootloader sections)
+.section .apitable_trampolines, "ax"
+.global BootloaderAPI_Trampolines
+BootloaderAPI_Trampolines:
+
+ BootloaderAPI_ErasePage_Trampoline:
+ jmp BootloaderAPI_ErasePage
+ BootloaderAPI_WritePage_Trampoline:
+ jmp BootloaderAPI_WritePage
+ BootloaderAPI_FillWord_Trampoline:
+ jmp BootloaderAPI_FillWord
+ BootloaderAPI_ReadSignature_Trampoline:
+ jmp BootloaderAPI_ReadSignature
+ BootloaderAPI_ReadFuse_Trampoline:
+ jmp BootloaderAPI_ReadFuse
+ BootloaderAPI_ReadLock_Trampoline:
+ jmp BootloaderAPI_ReadLock
+ BootloaderAPI_WriteLock_Trampoline:
+ jmp BootloaderAPI_WriteLock
+ BootloaderAPI_UNUSED1:
+ ret
+ BootloaderAPI_UNUSED2:
+ ret
+ BootloaderAPI_UNUSED3:
+ ret
+ BootloaderAPI_UNUSED4:
+ ret
+ BootloaderAPI_UNUSED5:
+ ret
+
+
+
+; API function jump table
+.section .apitable_jumptable, "ax"
+.global BootloaderAPI_JumpTable
+BootloaderAPI_JumpTable:
+
+ rjmp BootloaderAPI_ErasePage_Trampoline
+ rjmp BootloaderAPI_WritePage_Trampoline
+ rjmp BootloaderAPI_FillWord_Trampoline
+ rjmp BootloaderAPI_ReadSignature_Trampoline
+ rjmp BootloaderAPI_ReadFuse_Trampoline
+ rjmp BootloaderAPI_ReadLock_Trampoline
+ rjmp BootloaderAPI_WriteLock_Trampoline
+ rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1
+ rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2
+ rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3
+ rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4
+ rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5
+
+
+
+; Bootloader table signatures and information
+.section .apitable_signatures, "ax"
+.global BootloaderAPI_Signatures
+BootloaderAPI_Signatures:
+
+ .long BOOT_START_ADDR ; Start address of the bootloader
+ .word 0xDF20 ; Signature for the Printer class bootloader
+ .word 0xDCFB ; Signature for a LUFA class bootloader
-#\r
-# LUFA Library\r
-# Copyright (C) Dean Camera, 2021.\r
-#\r
-# dean [at] fourwalledcubicle [dot] com\r
-# www.lufa-lib.org\r
-#\r
-# --------------------------------------\r
-# LUFA Project Makefile.\r
-# --------------------------------------\r
-\r
-# Run "make help" for target help.\r
-\r
-MCU = at90usb1287\r
-ARCH = AVR8\r
-BOARD = USBKEY\r
-F_CPU = 8000000\r
-F_USB = $(F_CPU)\r
-OPTIMIZATION = s\r
-TARGET = BootloaderPrinter\r
-SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)\r
-LUFA_PATH = ../../LUFA\r
-CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)\r
-LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)\r
-LTO = Y\r
-\r
-# Flash size and bootloader section sizes of the target, in KB. These must\r
-# match the target's total FLASH size and the bootloader size set in the\r
-# device's fuses.\r
-FLASH_SIZE_KB = 128\r
-BOOT_SECTION_SIZE_KB = 8\r
-\r
-# Bootloader address calculation formulas\r
-# Do not modify these macros, but rather modify the dependent values above.\r
-CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) )\r
-BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )\r
-BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )\r
-\r
-# Bootloader linker section flags for relocating the API table sections to\r
-# known FLASH addresses - these should not normally be user-edited.\r
-BOOT_SECTION_LD_FLAG = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))\r
-BOOT_API_LD_FLAGS = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)\r
-BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable, BootloaderAPI_JumpTable, 32)\r
-BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, BootloaderAPI_Signatures, 8)\r
-\r
-# Default target\r
-all:\r
-\r
-# Include LUFA-specific DMBS extension modules\r
-DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA\r
-include $(DMBS_LUFA_PATH)/lufa-sources.mk\r
-include $(DMBS_LUFA_PATH)/lufa-gcc.mk\r
-\r
-# Include common DMBS build system modules\r
-DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS\r
-include $(DMBS_PATH)/core.mk\r
-include $(DMBS_PATH)/cppcheck.mk\r
-include $(DMBS_PATH)/doxygen.mk\r
-include $(DMBS_PATH)/dfu.mk\r
-include $(DMBS_PATH)/gcc.mk\r
-include $(DMBS_PATH)/hid.mk\r
-include $(DMBS_PATH)/avrdude.mk\r
-include $(DMBS_PATH)/atprogram.mk\r
+#
+# LUFA Library
+# Copyright (C) Dean Camera, 2021.
+#
+# dean [at] fourwalledcubicle [dot] com
+# www.lufa-lib.org
+#
+# --------------------------------------
+# LUFA Project Makefile.
+# --------------------------------------
+
+# Run "make help" for target help.
+
+MCU = at90usb1287
+ARCH = AVR8
+BOARD = USBKEY
+F_CPU = 8000000
+F_USB = $(F_CPU)
+OPTIMIZATION = s
+TARGET = BootloaderPrinter
+SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
+LUFA_PATH = ../../LUFA
+CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
+LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
+LTO = Y
+
+# Flash size and bootloader section sizes of the target, in KB. These must
+# match the target's total FLASH size and the bootloader size set in the
+# device's fuses.
+FLASH_SIZE_KB = 128
+BOOT_SECTION_SIZE_KB = 8
+
+# Bootloader address calculation formulas
+# Do not modify these macros, but rather modify the dependent values above.
+CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) )
+BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )
+BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )
+
+# Bootloader linker section flags for relocating the API table sections to
+# known FLASH addresses - these should not normally be user-edited.
+BOOT_SECTION_LD_FLAG = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))
+BOOT_API_LD_FLAGS = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)
+BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable, BootloaderAPI_JumpTable, 32)
+BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, BootloaderAPI_Signatures, 8)
+
+# Default target
+all:
+
+# Include LUFA-specific DMBS extension modules
+DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
+include $(DMBS_LUFA_PATH)/lufa-sources.mk
+include $(DMBS_LUFA_PATH)/lufa-gcc.mk
+
+# Include common DMBS build system modules
+DMBS_PATH ?= $(LUFA_PATH)/Build/DMBS/DMBS
+include $(DMBS_PATH)/core.mk
+include $(DMBS_PATH)/cppcheck.mk
+include $(DMBS_PATH)/doxygen.mk
+include $(DMBS_PATH)/dfu.mk
+include $(DMBS_PATH)/gcc.mk
+include $(DMBS_PATH)/hid.mk
+include $(DMBS_PATH)/avrdude.mk
+include $(DMBS_PATH)/atprogram.mk
-/** \file\r
- *\r
- * This file contains special DoxyGen information for the generation of the main page and other special\r
- * documentation pages. It is not a project source file.\r
- */\r
-\r
-/** \page Page_BuildSystem The LUFA Build System\r
- *\r
- * \section Sec_BuildSystem_Overview Overview of the LUFA Build System\r
- * The LUFA build system was originally an attempt at making a set of\r
- * re-usable, modular build make files which could be referenced in a LUFA\r
- * powered project, to minimize the amount of code required in an\r
- * application makefile.\r
- *\r
- * As it turned out to be fairly generic in nature, it was split out into its\r
- * own separate project, called DMBS (<i>Dean's Makefile Build System</i>)\r
- * which is released into the public domain. LUFA-specific portions of the\r
- * LUFA build system extend DMBS, and provide a universal build system for all\r
- * LUFA projects.\r
- *\r
- * The latest DMBS project information and documentation can be found at:\r
- * https://github.com/abcminiuser/dmbs\r
- *\r
- * DMBS is written in GNU Make, and each module is independent of one-another.\r
- *\r
- * LUFA now uses DMBS for its build system, with some LUFA specific extension\r
- * modules.\r
- *\r
- * If you have problems building using LUFA, see \subpage Page_BuildTroubleshooting for resolution steps.\r
- *\r
- * \li \subpage Page_BuildModule_LUFA_SOURCES - The LUFA SOURCES extension module for DMBS\r
- * \li \subpage Page_BuildModule_LUFA_GCC - The LUFA GCC extension module for DMBS\r
- */\r
-\r
-/** \page Page_BuildModule_LUFA_SOURCES LUFA SOURCES extension module for DMBS\r
- *\r
- * The LUFA SOURCES extension more for DMBS provides LUFA specific variables\r
- * listing the various LUFA source files required to be build by a project for\r
- * a given LUFA module. This module gives a way to reference LUFA source files\r
- * symbolically, so that changes to the library structure do not break the\r
- * library makefile.\r
- *\r
- * To use this module in your application makefile, add the following code:\r
- * \code\r
- * include $(LUFA_PATH)/Build/LUFA/lufa-sources.mk\r
- * \endcode\r
- *\r
- * \section SSec_BuildModule_LUFA_SOURCES_Requirements Requirements\r
- * None.\r
- *\r
- * \section SSec_BuildModule_LUFA_SOURCES_Targets Targets\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><i>None</i></td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_BuildModule_LUFA_SOURCES_MandatoryParams Mandatory Parameters\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><tt>LUFA_PATH</tt></td>\r
- * <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>\r
- * </tr>\r
- * <tr>\r
- * <td><tt>ARCH</tt></td>\r
- * <td>Architecture of the target processor (see \ref Page_DeviceSupport).</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_BuildModule_LUFA_SOURCES_OptionalParams Optional Parameters\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><i>None</i></td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_BuildModule_LUFA_SOURCES_ProvidedVariables Module Provided Variables\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><tt>LUFA_SRC_USB</tt></td>\r
- * <td>List of LUFA USB driver source files.</td>\r
- * </tr>\r
- * <tr>\r
- * <td><tt>LUFA_SRC_USBCLASS</tt></td>\r
- * <td>List of LUFA USB Class driver source files.</td>\r
- * </tr>\r
- * <tr>\r
- * <td><tt>LUFA_SRC_TEMPERATURE</tt></td>\r
- * <td>List of LUFA temperature sensor driver source files.</td>\r
- * </tr>\r
- * <tr>\r
- * <td><tt>LUFA_SRC_SERIAL</tt></td>\r
- * <td>List of LUFA Serial U(S)ART driver source files.</td>\r
- * </tr>\r
- * <tr>\r
- * <td><tt>LUFA_SRC_TWI</tt></td>\r
- * <td>List of LUFA TWI driver source files.</td>\r
- * </tr>\r
- * <tr>\r
- * <td><tt>LUFA_SRC_PLATFORM</tt></td>\r
- * <td>List of LUFA architecture specific platform management source files.</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_BuildModule_LUFA_SOURCES_ProvidedMacros Module Provided Macros\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><i>None</i></td>\r
- * </tr>\r
- * </table>\r
- */\r
-\r
-/** \page Page_BuildModule_LUFA_GCC LUFA GCC extension module for DMBS\r
- *\r
- * The LUFA GCC extension module for the standard DMBS GCC module extends the\r
- * latter to support the compilation of LUFA powered projects. It should be\r
- * imported into your LUFA powered project makefiles to ensure that the correct\r
- * build settings are used for the project's configuration.\r
- *\r
- * To use this module in your application makefile, add the following code:\r
- * \code\r
- * include $(LUFA_PATH)/Build/LUFA/lufa-gcc.mk\r
- * \endcode\r
- *\r
- * \section SSec_BuildModule_LUFA_GCC_Requirements Requirements\r
- * This module should be included in your makefile *after* the DMBS GCC module.\r
- *\r
- * \section SSec_BuildModule_LUFA_GCC_Targets Targets\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><i>None</i></td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_BuildModule_LUFA_GCC_MandatoryParams Mandatory Parameters\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><tt>LUFA_PATH</tt></td>\r
- * <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_BuildModule_LUFA_GCC_OptionalParams Optional Parameters\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><tt>BOARD</tt></td>\r
- * <td>LUFA board hardware drivers to use (see \ref Page_DeviceSupport).</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_BuildModule_LUFA_GCC_ProvidedVariables Module Provided Variables\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><i>None</i></td>\r
- * </tr>\r
- * </table>\r
- *\r
- * \section SSec_BuildModule_LUFA_GCC_ProvidedMacros Module Provided Macros\r
- *\r
- * <table>\r
- * <tr>\r
- * <td><i>None</i></td>\r
- * </tr>\r
- * </table>\r
- */\r
-\r
-/** \page Page_BuildTroubleshooting Troubleshooting Information\r
- *\r
- * LUFA uses a lot of advanced features of the AVR-GCC compiler, linker, and\r
- * surrounding binaries. This can sometimes lead to problems compiling\r
- * applications if one of these features is buggy in the version of the tools\r
- * used in a build environment. Missing utilities and incorrectly set makefile\r
- * configuration options can also result in different errors being produced\r
- * when compilation or other operations are attempted. The table below lists a\r
- * set of commonly encountered errors and their resolutions.\r
- *\r
- * <table>\r
- * <tr>\r
- * <th>Problem</th>\r
- * <th>Resolution</th>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>relocation truncated to fit: R_AVR_13_PCREL against symbol <i>{X}</i></tt></b>" shown when compiling.</td>\r
- * <td>Try compiling with the setting <tt>LINKER_RELAXATIONS=N</tt> in your LUFA Build System 2.0 makefile, or remove the line <tt>-Wl,--relax</tt>\r
- * from other makefiles. Alternatively, make sure you have the latest version of the Atmel Toolchain installed for your system.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>error: ld terminated with signal 11 [Segmentation fault]</tt></b>" shown when compiling.</td>\r
- * <td>Try compiling with the setting <tt>DEBUG_LEVEL=2</tt> in your LUFA Build System 2.0 makefile, or make sure you are using <tt>binutils</tt> version 2.22 or later.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>EMERGENCY ABORT: INFINITE RECURSION DETECTED</tt></b>" shown when compiling.</td>\r
- * <td>Make sure you are using an up to date version of GNU Make when compiling. This error is a safety system added to the mid-level makefiles, to prevent an issue with\r
- * GNU make or other variants of Make causing an infinitely recursive build.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>Unsupported architecture "<i>{X}</i>"</tt></b>" shown when compiling.</td>\r
- * <td>Ensure your makefile's <tt>ARCH</tt> setting is set to one of the architecture names (case-sensitive) supported by the version of LUFA you are compiling against.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>Makefile <i>{X}</i> value not set</tt></b>" shown when compiling.</td>\r
- * <td>The specified Makefile value was not configured in your project's makefile or on the command line, and the nominated setting is required by one or more LUFA\r
- * build system modules. Define the value in your project makefile and try again.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>Makefile <i>{X}</i> option cannot be blank</tt></b>" shown when compiling.</td>\r
- * <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to an empty value. For the nominated configuration\r
- * option, an empty value is not allowed. Define the nominated setting to a correct non-blank value and try again.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>Makefile <i>{X}</i> option must be Y or N</tt></b>" shown when compiling.</td>\r
- * <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to a value other than a Y (for "Yes") or "N" (for "No").\r
- * This configuration option is required to be one of the aforementioned boolean values, and other values are invalid. Set this option to either Y or N and try again.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>Unknown input source file formats: <i>{X}</i></tt></b>" shown when compiling.</td>\r
- * <td>The nominated source files, specified in your project's makefile in the <tt>SRC</tt> configuration option, has an extension that the LUFA build system does not\r
- * recognise. The file extensions are case sensitive, and must be one of the supported formats (<tt>*.c</tt>, <tt>*.cpp</tt> or <tt>*.S</tt>).</td>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>Cannot build with OBJDIR parameter set - one or more object file name is not unique</tt></b>" shown when compiling.</td>\r
- * <td>When a project is built with a non-empty <tt>OBJDIR</tt> object directory name set, all input source files must have unique names, excluding extension and path.\r
- * This means that input files that are named identically and differ only by their path or extension are invalid when this mode is used.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>Source file does not exist: <i>{X}</i></tt></b>" shown when compiling.</td>\r
- * <td>The nominated input source file, specified in the user project's <tt>SRC</tt> parameter, could not be found. Ensure the source file exists and the absolute or\r
- * relative path given in the user project makefile is correct and try again.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>Doxygen configuration file <i>{X}</i> does not exist</tt></b>" shown when upgrading a Doxygen configuration file.</td>\r
- * <td>The nominated Doxygen configuration file, specified in the user project's <tt>DOXYGEN_CONF</tt> parameter, could not be found. Ensure the configuration file exists\r
- * and the absolute or relative path given in the user project makefile is correct and try again, or run the appropriate makefile target to generate a new configuration\r
- * file.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>avr-gcc: error: unrecognized option '<i>{X}</i>'</tt></b>" shown when compiling.</td>\r
- * <td>An unrecognised option was supplied to the compiler, usually in the <tt>C_FLAGS</tt>, <tt>CPP_FLAGS</tt>, <tt>ASM_FLAGS</tt> or <tt>CC_FLAGS</tt> configuration\r
- * options. The nominated compiler switch may be invalid, or unsupported by the version of AVR-GCC on the host system. Remove the unrecognised flag if invalid, or\r
- * upgrade to the latest AVR-GCC. If the option is a valid linker option, use the prefix "-Wl," to ensure it is passed to the linker correctly.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>makefile:{X}: {Y}.mk: No such file or directory</tt></b>" shown when make is invoked.</td>\r
- * <td>The path to the nominated makefile module was incorrect. This usually indicates that the makefile <tt>LUFA_PATH</tt> option is not set to a valid relative or\r
- * absolute path to the LUFA library core.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>fatal error: LUFAConfig.h: No such file or directory</tt></b>" shown when compiling.</td>\r
- * <td>The <tt>USE_LUFA_CONFIG_HEADER</tt> compile time option was set in the user project makefile, but the user supplied <tt>LUFAConfig.h</tt> header could not be\r
- * found. Ensure that the directory that contains this configuration file is correctly passed to the compiler via the -I switch in the makefile <tt>CC_FLAGS</tt>\r
- * parameter.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>ld.exe: section .apitable_trampolines loaded at <i>{X}</i> overlaps section .text</tt></b>" shown when compiling a bootloader.</td>\r
- * <td>The bootloader is compiling too large for the given <tt>FLASH_SIZE_KB</tt> and <tt>BOOT_SECTION_SIZE_KB</tt> parameters set in the bootloader makefile. This\r
- * usually indicates that these values are incorrect for the specified device the bootloader is targeting. If these values are correct, a newer version of the\r
- * compiler may need to be used to ensure that the bootloader is built within the section size constraints of the target device.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>unknown MCU '<i>{X}</i>' specified</tt></b>" shown when compiling.</td>\r
- * <td>The specified microcontroller device model name set in the user application's makefile as the <tt>MCU</tt> parameter is incorrect, or unsupported by the\r
- * version of the compiler being used. Make sure the model name is correct, or upgrade to the latest Atmel Toolchain to obtain newer device support.</td>\r
- * </tr>\r
- * <tr>\r
- * <td>Error "<b><tt>undefined reference to `<i>{X}</i>'</tt></b>" shown when compiling.</td>\r
- * <td>This is usually caused by a missing source file in the user application's <tt>SRC</tt> configuration parameter. If the indicated symbol is one from the LUFA\r
- * library, you may be missing a LUFA source makefile module (see \ref Page_BuildModule_LUFA_SOURCES).</td>\r
- * </tr>\r
- * </table>\r
- *\r
- * For troubleshooting other errors you encounter, please see \ref Sec_ProjectHelp.\r
- */\r
+/** \file
+ *
+ * This file contains special DoxyGen information for the generation of the main page and other special
+ * documentation pages. It is not a project source file.
+ */
+
+/** \page Page_BuildSystem The LUFA Build System
+ *
+ * \section Sec_BuildSystem_Overview Overview of the LUFA Build System
+ * The LUFA build system was originally an attempt at making a set of
+ * re-usable, modular build make files which could be referenced in a LUFA
+ * powered project, to minimize the amount of code required in an
+ * application makefile.
+ *
+ * As it turned out to be fairly generic in nature, it was split out into its
+ * own separate project, called DMBS (<i>Dean's Makefile Build System</i>)
+ * which is released into the public domain. LUFA-specific portions of the
+ * LUFA build system extend DMBS, and provide a universal build system for all
+ * LUFA projects.
+ *
+ * The latest DMBS project information and documentation can be found at:
+ * https://github.com/abcminiuser/dmbs
+ *
+ * DMBS is written in GNU Make, and each module is independent of one-another.
+ *
+ * LUFA now uses DMBS for its build system, with some LUFA specific extension
+ * modules.
+ *
+ * If you have problems building using LUFA, see \subpage Page_BuildTroubleshooting for resolution steps.
+ *
+ * \li \subpage Page_BuildModule_LUFA_SOURCES - The LUFA SOURCES extension module for DMBS
+ * \li \subpage Page_BuildModule_LUFA_GCC - The LUFA GCC extension module for DMBS
+ */
+
+/** \page Page_BuildModule_LUFA_SOURCES LUFA SOURCES extension module for DMBS
+ *
+ * The LUFA SOURCES extension more for DMBS provides LUFA specific variables
+ * listing the various LUFA source files required to be build by a project for
+ * a given LUFA module. This module gives a way to reference LUFA source files
+ * symbolically, so that changes to the library structure do not break the
+ * library makefile.
+ *
+ * To use this module in your application makefile, add the following code:
+ * \code
+ * include $(LUFA_PATH)/Build/LUFA/lufa-sources.mk
+ * \endcode
+ *
+ * \section SSec_BuildModule_LUFA_SOURCES_Requirements Requirements
+ * None.
+ *
+ * \section SSec_BuildModule_LUFA_SOURCES_Targets Targets
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_LUFA_SOURCES_MandatoryParams Mandatory Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><tt>LUFA_PATH</tt></td>
+ * <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>ARCH</tt></td>
+ * <td>Architecture of the target processor (see \ref Page_DeviceSupport).</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_LUFA_SOURCES_OptionalParams Optional Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_LUFA_SOURCES_ProvidedVariables Module Provided Variables
+ *
+ * <table>
+ * <tr>
+ * <td><tt>LUFA_SRC_USB</tt></td>
+ * <td>List of LUFA USB driver source files.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>LUFA_SRC_USBCLASS</tt></td>
+ * <td>List of LUFA USB Class driver source files.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>LUFA_SRC_TEMPERATURE</tt></td>
+ * <td>List of LUFA temperature sensor driver source files.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>LUFA_SRC_SERIAL</tt></td>
+ * <td>List of LUFA Serial U(S)ART driver source files.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>LUFA_SRC_TWI</tt></td>
+ * <td>List of LUFA TWI driver source files.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>LUFA_SRC_PLATFORM</tt></td>
+ * <td>List of LUFA architecture specific platform management source files.</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_LUFA_SOURCES_ProvidedMacros Module Provided Macros
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ */
+
+/** \page Page_BuildModule_LUFA_GCC LUFA GCC extension module for DMBS
+ *
+ * The LUFA GCC extension module for the standard DMBS GCC module extends the
+ * latter to support the compilation of LUFA powered projects. It should be
+ * imported into your LUFA powered project makefiles to ensure that the correct
+ * build settings are used for the project's configuration.
+ *
+ * To use this module in your application makefile, add the following code:
+ * \code
+ * include $(LUFA_PATH)/Build/LUFA/lufa-gcc.mk
+ * \endcode
+ *
+ * \section SSec_BuildModule_LUFA_GCC_Requirements Requirements
+ * This module should be included in your makefile *after* the DMBS GCC module.
+ *
+ * \section SSec_BuildModule_LUFA_GCC_Targets Targets
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_LUFA_GCC_MandatoryParams Mandatory Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><tt>LUFA_PATH</tt></td>
+ * <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_LUFA_GCC_OptionalParams Optional Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><tt>BOARD</tt></td>
+ * <td>LUFA board hardware drivers to use (see \ref Page_DeviceSupport).</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_LUFA_GCC_ProvidedVariables Module Provided Variables
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_LUFA_GCC_ProvidedMacros Module Provided Macros
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ */
+
+/** \page Page_BuildTroubleshooting Troubleshooting Information
+ *
+ * LUFA uses a lot of advanced features of the AVR-GCC compiler, linker, and
+ * surrounding binaries. This can sometimes lead to problems compiling
+ * applications if one of these features is buggy in the version of the tools
+ * used in a build environment. Missing utilities and incorrectly set makefile
+ * configuration options can also result in different errors being produced
+ * when compilation or other operations are attempted. The table below lists a
+ * set of commonly encountered errors and their resolutions.
+ *
+ * <table>
+ * <tr>
+ * <th>Problem</th>
+ * <th>Resolution</th>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>relocation truncated to fit: R_AVR_13_PCREL against symbol <i>{X}</i></tt></b>" shown when compiling.</td>
+ * <td>Try compiling with the setting <tt>LINKER_RELAXATIONS=N</tt> in your LUFA Build System 2.0 makefile, or remove the line <tt>-Wl,--relax</tt>
+ * from other makefiles. Alternatively, make sure you have the latest version of the Atmel Toolchain installed for your system.</td>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>error: ld terminated with signal 11 [Segmentation fault]</tt></b>" shown when compiling.</td>
+ * <td>Try compiling with the setting <tt>DEBUG_LEVEL=2</tt> in your LUFA Build System 2.0 makefile, or make sure you are using <tt>binutils</tt> version 2.22 or later.</td>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>EMERGENCY ABORT: INFINITE RECURSION DETECTED</tt></b>" shown when compiling.</td>
+ * <td>Make sure you are using an up to date version of GNU Make when compiling. This error is a safety system added to the mid-level makefiles, to prevent an issue with
+ * GNU make or other variants of Make causing an infinitely recursive build.</td>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>Unsupported architecture "<i>{X}</i>"</tt></b>" shown when compiling.</td>
+ * <td>Ensure your makefile's <tt>ARCH</tt> setting is set to one of the architecture names (case-sensitive) supported by the version of LUFA you are compiling against.</td>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>Makefile <i>{X}</i> value not set</tt></b>" shown when compiling.</td>
+ * <td>The specified Makefile value was not configured in your project's makefile or on the command line, and the nominated setting is required by one or more LUFA
+ * build system modules. Define the value in your project makefile and try again.</td>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>Makefile <i>{X}</i> option cannot be blank</tt></b>" shown when compiling.</td>
+ * <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to an empty value. For the nominated configuration
+ * option, an empty value is not allowed. Define the nominated setting to a correct non-blank value and try again.</td>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>Makefile <i>{X}</i> option must be Y or N</tt></b>" shown when compiling.</td>
+ * <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to a value other than a Y (for "Yes") or "N" (for "No").
+ * This configuration option is required to be one of the aforementioned boolean values, and other values are invalid. Set this option to either Y or N and try again.</td>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>Unknown input source file formats: <i>{X}</i></tt></b>" shown when compiling.</td>
+ * <td>The nominated source files, specified in your project's makefile in the <tt>SRC</tt> configuration option, has an extension that the LUFA build system does not
+ * recognise. The file extensions are case sensitive, and must be one of the supported formats (<tt>*.c</tt>, <tt>*.cpp</tt> or <tt>*.S</tt>).</td>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>Cannot build with OBJDIR parameter set - one or more object file name is not unique</tt></b>" shown when compiling.</td>
+ * <td>When a project is built with a non-empty <tt>OBJDIR</tt> object directory name set, all input source files must have unique names, excluding extension and path.
+ * This means that input files that are named identically and differ only by their path or extension are invalid when this mode is used.</td>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>Source file does not exist: <i>{X}</i></tt></b>" shown when compiling.</td>
+ * <td>The nominated input source file, specified in the user project's <tt>SRC</tt> parameter, could not be found. Ensure the source file exists and the absolute or
+ * relative path given in the user project makefile is correct and try again.</td>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>Doxygen configuration file <i>{X}</i> does not exist</tt></b>" shown when upgrading a Doxygen configuration file.</td>
+ * <td>The nominated Doxygen configuration file, specified in the user project's <tt>DOXYGEN_CONF</tt> parameter, could not be found. Ensure the configuration file exists
+ * and the absolute or relative path given in the user project makefile is correct and try again, or run the appropriate makefile target to generate a new configuration
+ * file.</td>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>avr-gcc: error: unrecognized option '<i>{X}</i>'</tt></b>" shown when compiling.</td>
+ * <td>An unrecognised option was supplied to the compiler, usually in the <tt>C_FLAGS</tt>, <tt>CPP_FLAGS</tt>, <tt>ASM_FLAGS</tt> or <tt>CC_FLAGS</tt> configuration
+ * options. The nominated compiler switch may be invalid, or unsupported by the version of AVR-GCC on the host system. Remove the unrecognised flag if invalid, or
+ * upgrade to the latest AVR-GCC. If the option is a valid linker option, use the prefix "-Wl," to ensure it is passed to the linker correctly.</td>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>makefile:{X}: {Y}.mk: No such file or directory</tt></b>" shown when make is invoked.</td>
+ * <td>The path to the nominated makefile module was incorrect. This usually indicates that the makefile <tt>LUFA_PATH</tt> option is not set to a valid relative or
+ * absolute path to the LUFA library core.</td>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>fatal error: LUFAConfig.h: No such file or directory</tt></b>" shown when compiling.</td>
+ * <td>The <tt>USE_LUFA_CONFIG_HEADER</tt> compile time option was set in the user project makefile, but the user supplied <tt>LUFAConfig.h</tt> header could not be
+ * found. Ensure that the directory that contains this configuration file is correctly passed to the compiler via the -I switch in the makefile <tt>CC_FLAGS</tt>
+ * parameter.</td>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>ld.exe: section .apitable_trampolines loaded at <i>{X}</i> overlaps section .text</tt></b>" shown when compiling a bootloader.</td>
+ * <td>The bootloader is compiling too large for the given <tt>FLASH_SIZE_KB</tt> and <tt>BOOT_SECTION_SIZE_KB</tt> parameters set in the bootloader makefile. This
+ * usually indicates that these values are incorrect for the specified device the bootloader is targeting. If these values are correct, a newer version of the
+ * compiler may need to be used to ensure that the bootloader is built within the section size constraints of the target device.</td>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>unknown MCU '<i>{X}</i>' specified</tt></b>" shown when compiling.</td>
+ * <td>The specified microcontroller device model name set in the user application's makefile as the <tt>MCU</tt> parameter is incorrect, or unsupported by the
+ * version of the compiler being used. Make sure the model name is correct, or upgrade to the latest Atmel Toolchain to obtain newer device support.</td>
+ * </tr>
+ * <tr>
+ * <td>Error "<b><tt>undefined reference to `<i>{X}</i>'</tt></b>" shown when compiling.</td>
+ * <td>This is usually caused by a missing source file in the user application's <tt>SRC</tt> configuration parameter. If the indicated symbol is one from the LUFA
+ * library, you may be missing a LUFA source makefile module (see \ref Page_BuildModule_LUFA_SOURCES).</td>
+ * </tr>
+ * </table>
+ *
+ * For troubleshooting other errors you encounter, please see \ref Sec_ProjectHelp.
+ */