@ -1,102 +1,102 @@ | |||||
/* | |||||
LUFA Library | |||||
Copyright (C) Dean Camera, 2017. | |||||
dean [at] fourwalledcubicle [dot] com | |||||
www.lufa-lib.org | |||||
*/ | |||||
/* | |||||
Copyright 2017 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 | |||||
/* | |||||
LUFA Library | |||||
Copyright (C) Dean Camera, 2017. | |||||
dean [at] fourwalledcubicle [dot] com | |||||
www.lufa-lib.org | |||||
*/ | |||||
/* | |||||
Copyright 2017 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 |
@ -1,75 +1,75 @@ | |||||
# | |||||
# LUFA Library | |||||
# Copyright (C) Dean Camera, 2017. | |||||
# | |||||
# 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) | |||||
# 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 6KB 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 = (6 - $(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 | |||||
# | |||||
# LUFA Library | |||||
# Copyright (C) Dean Camera, 2017. | |||||
# | |||||
# 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) | |||||
# 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 6KB 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 = (6 - $(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 |
@ -1,91 +1,91 @@ | |||||
/* | |||||
LUFA Library | |||||
Copyright (C) Dean Camera, 2017. | |||||
dean [at] fourwalledcubicle [dot] com | |||||
www.lufa-lib.org | |||||
*/ | |||||
/* | |||||
Copyright 2017 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 | |||||
/* | |||||
LUFA Library | |||||
Copyright (C) Dean Camera, 2017. | |||||
dean [at] fourwalledcubicle [dot] com | |||||
www.lufa-lib.org | |||||
*/ | |||||
/* | |||||
Copyright 2017 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 |
@ -1,62 +1,62 @@ | |||||
# | |||||
# LUFA Library | |||||
# Copyright (C) Dean Camera, 2017. | |||||
# | |||||
# 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) | |||||
# 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 | |||||
# | |||||
# LUFA Library | |||||
# Copyright (C) Dean Camera, 2017. | |||||
# | |||||
# 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) | |||||
# 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 |
@ -1,45 +1,45 @@ | |||||
<!-- | |||||
LUFA Library | |||||
Copyright (C) Dean Camera, 2017. | |||||
dean [at] fourwalledcubicle [dot] com | |||||
www.lufa-lib.org | |||||
--> | |||||
<!-- Docbook XML to Microsoft Help Viewer 1.0 transform file --> | |||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> | |||||
<xsl:import href="../Docbook/mshelp/docbook.xsl"/> | |||||
<xsl:output method="xml" indent="no"/> | |||||
<xsl:template match="emphasis[@role = 'keyword' or @role = 'keywordtype' or @role = 'keywordflow']"> | |||||
<span class="hl-keyword" style="color: #0079C1"> | |||||
<xsl:apply-templates/> | |||||
</span> | |||||
</xsl:template> | |||||
<xsl:template match="emphasis[@role = 'stringliteral' or @role = 'charliteral']"> | |||||
<span class="hl-string" style="color: #800000"> | |||||
<xsl:apply-templates/> | |||||
</span> | |||||
</xsl:template> | |||||
<xsl:template match="emphasis[@role = 'comment']"> | |||||
<em class="hl-comment" style="color: #008000"> | |||||
<xsl:apply-templates/> | |||||
</em> | |||||
</xsl:template> | |||||
<xsl:template match="emphasis[@role = 'preprocessor']"> | |||||
<span class="hl-preprocessor" style="color: #A000A0"> | |||||
<xsl:apply-templates/> | |||||
</span> | |||||
</xsl:template> | |||||
<xsl:template match="emphasis[@role = 'normal' and ancestor::programlisting]"> | |||||
<xsl:apply-templates /> | |||||
</xsl:template> | |||||
</xsl:stylesheet> | |||||
<!-- | |||||
LUFA Library | |||||
Copyright (C) Dean Camera, 2017. | |||||
dean [at] fourwalledcubicle [dot] com | |||||
www.lufa-lib.org | |||||
--> | |||||
<!-- Docbook XML to Microsoft Help Viewer 1.0 transform file --> | |||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> | |||||
<xsl:import href="../Docbook/mshelp/docbook.xsl"/> | |||||
<xsl:output method="xml" indent="no"/> | |||||
<xsl:template match="emphasis[@role = 'keyword' or @role = 'keywordtype' or @role = 'keywordflow']"> | |||||
<span class="hl-keyword" style="color: #0079C1"> | |||||
<xsl:apply-templates/> | |||||
</span> | |||||
</xsl:template> | |||||
<xsl:template match="emphasis[@role = 'stringliteral' or @role = 'charliteral']"> | |||||
<span class="hl-string" style="color: #800000"> | |||||
<xsl:apply-templates/> | |||||
</span> | |||||
</xsl:template> | |||||
<xsl:template match="emphasis[@role = 'comment']"> | |||||
<em class="hl-comment" style="color: #008000"> | |||||
<xsl:apply-templates/> | |||||
</em> | |||||
</xsl:template> | |||||
<xsl:template match="emphasis[@role = 'preprocessor']"> | |||||
<span class="hl-preprocessor" style="color: #A000A0"> | |||||
<xsl:apply-templates/> | |||||
</span> | |||||
</xsl:template> | |||||
<xsl:template match="emphasis[@role = 'normal' and ancestor::programlisting]"> | |||||
<xsl:apply-templates /> | |||||
</xsl:template> | |||||
</xsl:stylesheet> |
@ -1,32 +1,32 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010"> | |||||
<Identifier Id="FourWalledCubicle.LUFA.0e160d5c-e331-48d9-850b-e0387912171b"> | |||||
<Name>LUFA Library</Name> | |||||
<Author>Dean Camera</Author> | |||||
<Version>0</Version> | |||||
<MoreInfoUrl>http://www.lufa-lib.org</MoreInfoUrl> | |||||
<Description xml:space="preserve">LUFA, the Lightweight USB Framework for AVRs.</Description> | |||||
<License>License.txt</License> | |||||
<Icon>LUFA_thumb.png</Icon> | |||||
<PreviewImage>LUFA.png</PreviewImage> | |||||
<SupportedProducts> | |||||
<IsolatedShell Version="7.0">AtmelStudio</IsolatedShell> | |||||
</SupportedProducts> | |||||
<SupportedFrameworkRuntimeEdition MinVersion="4.0" MaxVersion="4.5"/> | |||||
<Locale>1033</Locale> | |||||
<AllUsers>false</AllUsers> | |||||
</Identifier> | |||||
<References/> | |||||
<Content> | |||||
<VsPackage>LUFA.pkgdef</VsPackage> | |||||
<CustomExtension Type="MSHelp">helpcontentsetup.msha</CustomExtension> | |||||
<CustomExtension Type="asf-manifest">asf-manifest.xml</CustomExtension> | |||||
</Content> | |||||
</Vsix> | |||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010"> | |||||
<Identifier Id="FourWalledCubicle.LUFA.0e160d5c-e331-48d9-850b-e0387912171b"> | |||||
<Name>LUFA Library</Name> | |||||
<Author>Dean Camera</Author> | |||||
<Version>0</Version> | |||||
<MoreInfoUrl>http://www.lufa-lib.org</MoreInfoUrl> | |||||
<Description xml:space="preserve">LUFA, the Lightweight USB Framework for AVRs.</Description> | |||||
<License>License.txt</License> | |||||
<Icon>LUFA_thumb.png</Icon> | |||||
<PreviewImage>LUFA.png</PreviewImage> | |||||
<SupportedProducts> | |||||
<IsolatedShell Version="7.0">AtmelStudio</IsolatedShell> | |||||
</SupportedProducts> | |||||
<SupportedFrameworkRuntimeEdition MinVersion="4.0" MaxVersion="4.5"/> | |||||
<Locale>1033</Locale> | |||||
<AllUsers>false</AllUsers> | |||||
</Identifier> | |||||
<References/> | |||||
<Content> | |||||
<VsPackage>LUFA.pkgdef</VsPackage> | |||||
<CustomExtension Type="MSHelp">helpcontentsetup.msha</CustomExtension> | |||||
<CustomExtension Type="asf-manifest">asf-manifest.xml</CustomExtension> | |||||
</Content> | |||||
</Vsix> |