summaryrefslogtreecommitdiffstats
path: root/lib/lufa/Bootloaders
diff options
context:
space:
mode:
Diffstat (limited to 'lib/lufa/Bootloaders')
-rw-r--r--lib/lufa/Bootloaders/CDC/BootloaderAPI.c75
-rw-r--r--lib/lufa/Bootloaders/CDC/BootloaderAPI.h58
-rw-r--r--lib/lufa/Bootloaders/CDC/BootloaderAPITable.S91
-rw-r--r--lib/lufa/Bootloaders/CDC/BootloaderCDC.c673
-rw-r--r--lib/lufa/Bootloaders/CDC/BootloaderCDC.h144
-rw-r--r--lib/lufa/Bootloaders/CDC/BootloaderCDC.txt242
-rw-r--r--lib/lufa/Bootloaders/CDC/Config/AppConfig.h50
-rw-r--r--lib/lufa/Bootloaders/CDC/Config/LUFAConfig.h93
-rw-r--r--lib/lufa/Bootloaders/CDC/Descriptors.c244
-rw-r--r--lib/lufa/Bootloaders/CDC/Descriptors.h158
-rw-r--r--lib/lufa/Bootloaders/CDC/LUFA CDC Bootloader.inf66
-rw-r--r--lib/lufa/Bootloaders/CDC/asf.xml161
-rw-r--r--lib/lufa/Bootloaders/CDC/doxyfile2396
-rw-r--r--lib/lufa/Bootloaders/CDC/makefile62
-rw-r--r--lib/lufa/Bootloaders/DFU/BootloaderAPI.c76
-rw-r--r--lib/lufa/Bootloaders/DFU/BootloaderAPI.h58
-rw-r--r--lib/lufa/Bootloaders/DFU/BootloaderAPITable.S91
-rw-r--r--lib/lufa/Bootloaders/DFU/BootloaderDFU.c891
-rw-r--r--lib/lufa/Bootloaders/DFU/BootloaderDFU.h216
-rw-r--r--lib/lufa/Bootloaders/DFU/BootloaderDFU.txt235
-rw-r--r--lib/lufa/Bootloaders/DFU/Config/AppConfig.h48
-rw-r--r--lib/lufa/Bootloaders/DFU/Config/LUFAConfig.h93
-rw-r--r--lib/lufa/Bootloaders/DFU/Descriptors.c185
-rw-r--r--lib/lufa/Bootloaders/DFU/Descriptors.h194
-rw-r--r--lib/lufa/Bootloaders/DFU/asf.xml156
-rw-r--r--lib/lufa/Bootloaders/DFU/doxyfile2396
-rw-r--r--lib/lufa/Bootloaders/DFU/makefile62
-rw-r--r--lib/lufa/Bootloaders/HID/BootloaderHID.c198
-rw-r--r--lib/lufa/Bootloaders/HID/BootloaderHID.h71
-rw-r--r--lib/lufa/Bootloaders/HID/BootloaderHID.txt105
-rw-r--r--lib/lufa/Bootloaders/HID/Config/LUFAConfig.h93
-rw-r--r--lib/lufa/Bootloaders/HID/Descriptors.c187
-rw-r--r--lib/lufa/Bootloaders/HID/Descriptors.h80
-rw-r--r--lib/lufa/Bootloaders/HID/HostLoaderApp/.gitignore1
-rw-r--r--lib/lufa/Bootloaders/HID/HostLoaderApp/Makefile40
-rw-r--r--lib/lufa/Bootloaders/HID/HostLoaderApp/Makefile.bsd21
-rw-r--r--lib/lufa/Bootloaders/HID/HostLoaderApp/gpl3.txt674
-rw-r--r--lib/lufa/Bootloaders/HID/HostLoaderApp/hid_bootloader_cli.c1013
-rw-r--r--lib/lufa/Bootloaders/HID/HostLoaderApp_Python/hid_bootloader_loader.py120
-rw-r--r--lib/lufa/Bootloaders/HID/asf.xml123
-rw-r--r--lib/lufa/Bootloaders/HID/doxyfile2398
-rw-r--r--lib/lufa/Bootloaders/HID/makefile55
-rw-r--r--lib/lufa/Bootloaders/MassStorage/BootloaderAPI.c76
-rw-r--r--lib/lufa/Bootloaders/MassStorage/BootloaderAPI.h63
-rw-r--r--lib/lufa/Bootloaders/MassStorage/BootloaderAPITable.S102
-rw-r--r--lib/lufa/Bootloaders/MassStorage/BootloaderMassStorage.c263
-rw-r--r--lib/lufa/Bootloaders/MassStorage/BootloaderMassStorage.h99
-rw-r--r--lib/lufa/Bootloaders/MassStorage/BootloaderMassStorage.txt240
-rw-r--r--lib/lufa/Bootloaders/MassStorage/Config/AppConfig.h47
-rw-r--r--lib/lufa/Bootloaders/MassStorage/Config/LUFAConfig.h93
-rw-r--r--lib/lufa/Bootloaders/MassStorage/Descriptors.c157
-rw-r--r--lib/lufa/Bootloaders/MassStorage/Descriptors.h88
-rw-r--r--lib/lufa/Bootloaders/MassStorage/Lib/SCSI.c294
-rw-r--r--lib/lufa/Bootloaders/MassStorage/Lib/SCSI.h84
-rw-r--r--lib/lufa/Bootloaders/MassStorage/Lib/VirtualFAT.c482
-rw-r--r--lib/lufa/Bootloaders/MassStorage/Lib/VirtualFAT.h302
-rw-r--r--lib/lufa/Bootloaders/MassStorage/asf.xml156
-rw-r--r--lib/lufa/Bootloaders/MassStorage/doxyfile2396
-rw-r--r--lib/lufa/Bootloaders/MassStorage/makefile75
-rw-r--r--lib/lufa/Bootloaders/Printer/BootloaderAPI.c75
-rw-r--r--lib/lufa/Bootloaders/Printer/BootloaderAPI.h56
-rw-r--r--lib/lufa/Bootloaders/Printer/BootloaderAPITable.S91
-rw-r--r--lib/lufa/Bootloaders/Printer/BootloaderPrinter.c487
-rw-r--r--lib/lufa/Bootloaders/Printer/BootloaderPrinter.h108
-rw-r--r--lib/lufa/Bootloaders/Printer/BootloaderPrinter.txt202
-rw-r--r--lib/lufa/Bootloaders/Printer/Config/LUFAConfig.h93
-rw-r--r--lib/lufa/Bootloaders/Printer/Descriptors.c194
-rw-r--r--lib/lufa/Bootloaders/Printer/Descriptors.h96
-rw-r--r--lib/lufa/Bootloaders/Printer/asf.xml159
-rw-r--r--lib/lufa/Bootloaders/Printer/doxyfile2396
-rw-r--r--lib/lufa/Bootloaders/Printer/makefile62
-rw-r--r--lib/lufa/Bootloaders/makefile46
72 files changed, 23475 insertions, 0 deletions
diff --git a/lib/lufa/Bootloaders/CDC/BootloaderAPI.c b/lib/lufa/Bootloaders/CDC/BootloaderAPI.c
new file mode 100644
index 0000000000..2be1568082
--- /dev/null
+++ b/lib/lufa/Bootloaders/CDC/BootloaderAPI.c
@@ -0,0 +1,75 @@
+/*
+ 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.
+*/
+
+/** \file
+ *
+ * Bootloader user application API functions.
+ */
+
+#include "BootloaderAPI.h"
+
+void BootloaderAPI_ErasePage(const uint32_t Address)
+{
+ boot_page_erase_safe(Address);
+ boot_spm_busy_wait();
+ boot_rww_enable();
+}
+
+void BootloaderAPI_WritePage(const uint32_t Address)
+{
+ boot_page_write_safe(Address);
+ boot_spm_busy_wait();
+ boot_rww_enable();
+}
+
+void BootloaderAPI_FillWord(const uint32_t Address, const uint16_t Word)
+{
+ boot_page_fill_safe(Address, Word);
+}
+
+uint8_t BootloaderAPI_ReadSignature(const uint16_t Address)
+{
+ return boot_signature_byte_get(Address);
+}
+
+uint8_t BootloaderAPI_ReadFuse(const 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(const uint8_t LockBits)
+{
+ boot_lock_bits_set_safe(LockBits);
+}
diff --git a/lib/lufa/Bootloaders/CDC/BootloaderAPI.h b/lib/lufa/Bootloaders/CDC/BootloaderAPI.h
new file mode 100644
index 0000000000..5169bbc3c4
--- /dev/null
+++ b/lib/lufa/Bootloaders/CDC/BootloaderAPI.h
@@ -0,0 +1,58 @@
+/*
+ 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.
+*/
+
+/** \file
+ *
+ * Header file for BootloaderAPI.c.
+ */
+
+#ifndef _BOOTLOADER_API_H_
+#define _BOOTLOADER_API_H_
+
+ /* Includes: */
+ #include <avr/io.h>
+ #include <avr/boot.h>
+ #include <stdbool.h>
+
+ #include <LUFA/Common/Common.h>
+
+ #include "Config/AppConfig.h"
+
+ /* Function Prototypes: */
+ void BootloaderAPI_ErasePage(const uint32_t Address);
+ void BootloaderAPI_WritePage(const uint32_t Address);
+ void BootloaderAPI_FillWord(const uint32_t Address, const uint16_t Word);
+ uint8_t BootloaderAPI_ReadSignature(const uint16_t Address);
+ uint8_t BootloaderAPI_ReadFuse(const uint16_t Address);
+ uint8_t BootloaderAPI_ReadLock(void);
+ void BootloaderAPI_WriteLock(const uint8_t LockBits);
+
+#endif
+
diff --git a/lib/lufa/Bootloaders/CDC/BootloaderAPITable.S b/lib/lufa/Bootloaders/CDC/BootloaderAPITable.S
new file mode 100644
index 0000000000..2c60f84e8d
--- /dev/null
+++ b/lib/lufa/Bootloaders/CDC/BootloaderAPITable.S
@@ -0,0 +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 0xDF00 ; Signature for the CDC class bootloader
+ .word 0xDCFB ; Signature for a LUFA class bootloader
diff --git a/lib/lufa/Bootloaders/CDC/BootloaderCDC.c b/lib/lufa/Bootloaders/CDC/BootloaderCDC.c
new file mode 100644
index 0000000000..aa17bc15bd
--- /dev/null
+++ b/lib/lufa/Bootloaders/CDC/BootloaderCDC.c
@@ -0,0 +1,673 @@
+/*
+ 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.
+*/
+
+/** \file
+ *
+ * Main source file for the CDC class bootloader. This file contains the complete bootloader logic.
+ */
+
+#define INCLUDE_FROM_BOOTLOADERCDC_C
+#include "BootloaderCDC.h"
+
+/** Contains the current baud rate and other settings of the first virtual serial port. This must be retained as some
+ * operating systems will not open the port unless the settings can be set successfully.
+ */
+static CDC_LineEncoding_t LineEncoding = { .BaudRateBPS = 0,
+ .CharFormat = CDC_LINEENCODING_OneStopBit,
+ .ParityType = CDC_PARITY_None,
+ .DataBits = 8 };
+
+/** Current address counter. This stores the current address of the FLASH or EEPROM as set by the host,
+ * and is used when reading or writing to the AVRs memory (either FLASH or EEPROM depending on the issued
+ * command.)
+ */
+static uint32_t CurrAddress;
+
+/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run
+ * via a watchdog reset. When cleared the bootloader will exit, starting the watchdog and entering an infinite
+ * loop until the AVR restarts and the application runs.
+ */
+static bool RunBootloader = true;
+
+/** Magic lock for forced application start. If the HWBE fuse is programmed and BOOTRST is unprogrammed, the bootloader
+ * will start if the /HWB line of the AVR is held low and the system is reset. However, if the /HWB line is still held
+ * low when the application attempts to start via a watchdog reset, the bootloader will re-start. If set to the value
+ * \ref MAGIC_BOOT_KEY the special init function \ref Application_Jump_Check() will force the application to start.
+ */
+uint16_t MagicBootKey ATTR_NO_INIT;
+
+
+/** Special startup routine to check if the bootloader was started via a watchdog reset, and if the magic application
+ * start key has been loaded into \ref MagicBootKey. If the bootloader started via the watchdog and the key is valid,
+ * this will force the user application to start via a software jump.
+ */
+void Application_Jump_Check(void)
+{
+ bool JumpToApplication = false;
+
+ #if (BOARD == BOARD_LEONARDO)
+ /* Enable pull-up on the IO13 pin so we can use it to select the mode */
+ PORTC |= (1 << 7);
+ Delay_MS(10);
+
+ /* If IO13 is not jumpered to ground, start the user application instead */
+ JumpToApplication = ((PINC & (1 << 7)) != 0);
+
+ /* Disable pull-up after the check has completed */
+ PORTC &= ~(1 << 7);
+ #elif ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1))
+ /* Disable JTAG debugging */
+ JTAG_DISABLE();
+
+ /* Enable pull-up on the JTAG TCK pin so we can use it to select the mode */
+ PORTF |= (1 << 4);
+ Delay_MS(10);
+
+ /* If the TCK pin is not jumpered to ground, start the user application instead */
+ JumpToApplication = ((PINF & (1 << 4)) != 0);
+
+ /* Re-enable JTAG debugging */
+ JTAG_ENABLE();
+ #else
+ /* Check if the device's BOOTRST fuse is set */
+ if (boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS) & FUSE_BOOTRST)
+ {
+ /* If the reset source was not an external reset or the key is correct, clear it and jump to the application */
+ if (!(MCUSR & (1 << EXTRF)) || (MagicBootKey == MAGIC_BOOT_KEY))
+ JumpToApplication = true;
+
+ /* Clear reset source */
+ MCUSR &= ~(1 << EXTRF);
+ }
+ else
+ {
+ /* If the reset source was the bootloader and the key is correct, clear it and jump to the application;
+ * this can happen in the HWBE fuse is set, and the HBE pin is low during the watchdog reset */
+ if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY))
+ JumpToApplication = true;
+
+ /* Clear reset source */
+ MCUSR &= ~(1 << WDRF);
+ }
+ #endif
+
+ /* Don't run the user application if the reset vector is blank (no app loaded) */
+ bool ApplicationValid = (pgm_read_word_near(0) != 0xFFFF);
+
+ /* If a request has been made to jump to the user application, honor it */
+ if (JumpToApplication && ApplicationValid)
+ {
+ /* Turn off the watchdog */
+ MCUSR &= ~(1 << WDRF);
+ wdt_disable();
+
+ /* Clear the boot key and jump to the user application */
+ MagicBootKey = 0;
+
+ // cppcheck-suppress constStatement
+ ((void (*)(void))0x0000)();
+ }
+}
+
+/** Main program entry point. This routine configures the hardware required by the bootloader, then continuously
+ * runs the bootloader processing routine until instructed to soft-exit, or hard-reset via the watchdog to start
+ * the loaded application code.
+ */
+int main(void)
+{
+ /* Setup hardware required for the bootloader */
+ SetupHardware();
+
+ /* Turn on first LED on the board to indicate that the bootloader has started */
+ LEDs_SetAllLEDs(LEDS_LED1);
+
+ /* Enable global interrupts so that the USB stack can function */
+ GlobalInterruptEnable();
+
+ while (RunBootloader)
+ {
+ CDC_Task();
+ USB_USBTask();
+ }
+
+ /* Wait a short time to end all USB transactions and then disconnect */
+ _delay_us(1000);
+
+ /* Disconnect from the host - USB interface will be reset later along with the AVR */
+ USB_Detach();
+
+ /* Unlock the forced application start mode of the bootloader if it is restarted */
+ MagicBootKey = MAGIC_BOOT_KEY;
+
+ /* Enable the watchdog and force a timeout to reset the AVR */
+ wdt_enable(WDTO_250MS);
+
+ for (;;);
+}
+