diff options
author | Drashna Jaelre <drashna@live.com> | 2019-07-03 07:54:39 -0700 |
---|---|---|
committer | Drashna Jaelre <drashna@live.com> | 2019-07-03 07:54:49 -0700 |
commit | 110622eaa2787cc54818083d4243653b088e5b5a (patch) | |
tree | b1637e4dc8d8aa13e9face4998cf25ae620361e5 /Bootloaders/Printer | |
parent | d0fd80affba97b37eb00c650e87cb5982a4f260e (diff) | |
parent | 5ba628d10b54d58d445896290ba9799bd76a73b3 (diff) | |
download | lufa-110622eaa2787cc54818083d4243653b088e5b5a.tar.gz lufa-110622eaa2787cc54818083d4243653b088e5b5a.tar.bz2 lufa-110622eaa2787cc54818083d4243653b088e5b5a.zip |
Merge remote-tracking branch 'abcminiuser/master'
Diffstat (limited to 'Bootloaders/Printer')
-rw-r--r-- | Bootloaders/Printer/BootloaderAPI.c | 42 | ||||
-rw-r--r-- | Bootloaders/Printer/BootloaderAPI.h | 5 | ||||
-rw-r--r-- | Bootloaders/Printer/BootloaderAPITable.S | 4 | ||||
-rw-r--r-- | Bootloaders/Printer/BootloaderPrinter.c | 25 | ||||
-rw-r--r-- | Bootloaders/Printer/BootloaderPrinter.h | 13 | ||||
-rw-r--r-- | Bootloaders/Printer/Config/LUFAConfig.h | 4 | ||||
-rw-r--r-- | Bootloaders/Printer/Descriptors.c | 6 | ||||
-rw-r--r-- | Bootloaders/Printer/Descriptors.h | 4 | ||||
-rw-r--r-- | Bootloaders/Printer/makefile | 2 |
9 files changed, 70 insertions, 35 deletions
diff --git a/Bootloaders/Printer/BootloaderAPI.c b/Bootloaders/Printer/BootloaderAPI.c index 2be156808..21d13bbe3 100644 --- a/Bootloaders/Printer/BootloaderAPI.c +++ b/Bootloaders/Printer/BootloaderAPI.c @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2017. + Copyright (C) Dean Camera, 2019. dean [at] fourwalledcubicle [dot] com www.lufa-lib.org */ /* - Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2019 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 @@ -35,18 +35,39 @@ #include "BootloaderAPI.h" +static bool IsPageAddressValid(const uint32_t Address) +{ + /* Determine if the given page address is correctly aligned to the + start of a flash page. */ + bool PageAddressIsAligned = !(Address & (SPM_PAGESIZE - 1)); + + return (Address < BOOT_START_ADDR) && PageAddressIsAligned; +} + void BootloaderAPI_ErasePage(const uint32_t Address) { - boot_page_erase_safe(Address); - boot_spm_busy_wait(); - boot_rww_enable(); + if (! IsPageAddressValid(Address)) + return; + + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + 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(); + if (! IsPageAddressValid(Address)) + return; + + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + boot_page_write_safe(Address); + boot_spm_busy_wait(); + boot_rww_enable(); + } } void BootloaderAPI_FillWord(const uint32_t Address, const uint16_t Word) @@ -71,5 +92,8 @@ uint8_t BootloaderAPI_ReadLock(void) void BootloaderAPI_WriteLock(const uint8_t LockBits) { - boot_lock_bits_set_safe(LockBits); + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + boot_lock_bits_set_safe(LockBits); + } } diff --git a/Bootloaders/Printer/BootloaderAPI.h b/Bootloaders/Printer/BootloaderAPI.h index c2d9b4a18..844b59d06 100644 --- a/Bootloaders/Printer/BootloaderAPI.h +++ b/Bootloaders/Printer/BootloaderAPI.h @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2017. + Copyright (C) Dean Camera, 2019. dean [at] fourwalledcubicle [dot] com www.lufa-lib.org */ /* - Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2019 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 @@ -39,6 +39,7 @@ /* Includes: */ #include <avr/io.h> #include <avr/boot.h> + #include <util/atomic.h> #include <stdbool.h> #include <LUFA/Common/Common.h> diff --git a/Bootloaders/Printer/BootloaderAPITable.S b/Bootloaders/Printer/BootloaderAPITable.S index d8358c31c..58c1d51ff 100644 --- a/Bootloaders/Printer/BootloaderAPITable.S +++ b/Bootloaders/Printer/BootloaderAPITable.S @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2017. + Copyright (C) Dean Camera, 2019. dean [at] fourwalledcubicle [dot] com www.lufa-lib.org */ /* - Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2019 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 diff --git a/Bootloaders/Printer/BootloaderPrinter.c b/Bootloaders/Printer/BootloaderPrinter.c index 9021f998f..deb3b96a8 100644 --- a/Bootloaders/Printer/BootloaderPrinter.c +++ b/Bootloaders/Printer/BootloaderPrinter.c @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2017. + Copyright (C) Dean Camera, 2019. dean [at] fourwalledcubicle [dot] com www.lufa-lib.org */ /* - Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2019 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 @@ -67,7 +67,7 @@ USB_ClassInfo_PRNT_Device_t TextOnly_Printer_Interface = /** Intel HEX parser state machine state information, to track the contents of * a HEX file streamed in as a sequence of arbitrary bytes. */ -struct +static struct { /** Current HEX parser state machine state. */ uint8_t ParserState; @@ -87,11 +87,11 @@ struct /** Checksum of the current record received so far. */ uint8_t Checksum; /** Starting address of the last addressed FLASH page. */ - uint32_t PageStartAddress; + flashaddr_t PageStartAddress; /** Current 32-bit byte extended base address in FLASH being targeted. */ - uint32_t CurrBaseAddress; + flashaddr_t CurrBaseAddress; /** Current 32-bit byte address in FLASH being targeted. */ - uint32_t CurrAddress; + flashaddr_t CurrAddress; } HEXParser; /** Indicates if there is data waiting to be written to a physical page of @@ -146,7 +146,7 @@ void Application_Jump_Check(void) 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 (!(BootloaderAPI_ReadFuse(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)) @@ -221,8 +221,7 @@ static void FlushPageIfRequired(void) uint32_t NewPageStartAddress = (HEXParser.CurrAddress & ~(SPM_PAGESIZE - 1)); if (HEXParser.PageStartAddress != NewPageStartAddress) { - boot_page_write(HEXParser.PageStartAddress); - boot_spm_busy_wait(); + BootloaderAPI_WritePage(HEXParser.PageStartAddress); HEXParser.PageStartAddress = NewPageStartAddress; @@ -321,14 +320,13 @@ static void ParseIntelHEXByte(const char ReadCharacter) /* If we are writing to a new page, we need to erase it first */ if (!(PageDirty)) { - boot_page_erase(HEXParser.PageStartAddress); - boot_spm_busy_wait(); + BootloaderAPI_ErasePage(HEXParser.PageStartAddress); PageDirty = true; } /* Fill the FLASH memory buffer with the new word of data */ - boot_page_fill(HEXParser.CurrAddress, NewDataWord); + BootloaderAPI_FillWord(HEXParser.CurrAddress, NewDataWord); HEXParser.CurrAddress += 2; /* Flush the FLASH page to physical memory if we are crossing a page boundary */ @@ -403,6 +401,9 @@ int main(void) 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(); diff --git a/Bootloaders/Printer/BootloaderPrinter.h b/Bootloaders/Printer/BootloaderPrinter.h index 8bc1a6879..356dab7a2 100644 --- a/Bootloaders/Printer/BootloaderPrinter.h +++ b/Bootloaders/Printer/BootloaderPrinter.h @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2017. + Copyright (C) Dean Camera, 2019. dean [at] fourwalledcubicle [dot] com www.lufa-lib.org */ /* - Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2019 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 @@ -41,8 +41,10 @@ #include <avr/wdt.h> #include <avr/power.h> #include <avr/interrupt.h> + #include <util/delay.h> #include "Descriptors.h" + #include "BootloaderAPI.h" #include <LUFA/Drivers/Board/LEDs.h> #include <LUFA/Drivers/USB/USB.h> @@ -72,6 +74,13 @@ /** Magic bootloader key to unlock forced application start mode. */ #define MAGIC_BOOT_KEY 0xDC42 + /* Type Defines: */ + #if (FLASHEND > 0xFFFF) + typedef uint32_t flashaddr_t; + #else + typedef uint16_t flashaddr_t; + #endif + /* Enums: */ /** Intel HEX parser state machine states. */ enum HEX_Parser_States_t diff --git a/Bootloaders/Printer/Config/LUFAConfig.h b/Bootloaders/Printer/Config/LUFAConfig.h index 5aa0e765b..33d50a786 100644 --- a/Bootloaders/Printer/Config/LUFAConfig.h +++ b/Bootloaders/Printer/Config/LUFAConfig.h @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2017. + Copyright (C) Dean Camera, 2019. dean [at] fourwalledcubicle [dot] com www.lufa-lib.org */ /* - Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2019 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 diff --git a/Bootloaders/Printer/Descriptors.c b/Bootloaders/Printer/Descriptors.c index 99625d605..7194e8bd3 100644 --- a/Bootloaders/Printer/Descriptors.c +++ b/Bootloaders/Printer/Descriptors.c @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2017. + Copyright (C) Dean Camera, 2019. dean [at] fourwalledcubicle [dot] com www.lufa-lib.org */ /* - Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2019 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 @@ -134,7 +134,7 @@ const USB_Descriptor_String_t LanguageString = USB_STRING_DESCRIPTOR_ARRAY(LANGU * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device * Descriptor. */ -const USB_Descriptor_String_t ManufacturerString = USB_STRING_DESCRIPTOR(L"Dean Camera"); +const USB_Descriptor_String_t ManufacturerString = USB_STRING_DESCRIPTOR(L"LUFA Library"); /** Product descriptor string. This is a Unicode string containing the product's details in human readable form, * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device diff --git a/Bootloaders/Printer/Descriptors.h b/Bootloaders/Printer/Descriptors.h index adb0dddb6..49b95c1c4 100644 --- a/Bootloaders/Printer/Descriptors.h +++ b/Bootloaders/Printer/Descriptors.h @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2017. + Copyright (C) Dean Camera, 2019. dean [at] fourwalledcubicle [dot] com www.lufa-lib.org */ /* - Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2019 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 diff --git a/Bootloaders/Printer/makefile b/Bootloaders/Printer/makefile index 1de35bba0..9fa9e1d18 100644 --- a/Bootloaders/Printer/makefile +++ b/Bootloaders/Printer/makefile @@ -1,6 +1,6 @@ # # LUFA Library -# Copyright (C) Dean Camera, 2017. +# Copyright (C) Dean Camera, 2019. # # dean [at] fourwalledcubicle [dot] com # www.lufa-lib.org |