aboutsummaryrefslogtreecommitdiffstats
path: root/Bootloaders
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2017-01-29 15:36:02 +1100
committerDean Camera <dean@fourwalledcubicle.com>2017-01-29 15:36:02 +1100
commitf0c5dfe8b8f47211f03454da036223d65e08249c (patch)
treeefa7d457491aa1ad70dc7db96f07f5a51c9582c7 /Bootloaders
parent0b95817130e3c3e0f859c160210d6184fc642fdb (diff)
downloadlufa-f0c5dfe8b8f47211f03454da036223d65e08249c.tar.gz
lufa-f0c5dfe8b8f47211f03454da036223d65e08249c.tar.bz2
lufa-f0c5dfe8b8f47211f03454da036223d65e08249c.zip
Restrict HID bootloader programming region (thanks to NicoHood).
Diffstat (limited to 'Bootloaders')
-rw-r--r--Bootloaders/HID/BootloaderHID.c10
-rw-r--r--Bootloaders/HID/BootloaderHID.h2
-rw-r--r--Bootloaders/HID/Descriptors.c2
-rw-r--r--Bootloaders/HID/Descriptors.h2
-rw-r--r--Bootloaders/HID/makefile2
5 files changed, 12 insertions, 6 deletions
diff --git a/Bootloaders/HID/BootloaderHID.c b/Bootloaders/HID/BootloaderHID.c
index 04fd0df3b..ec094b1d0 100644
--- a/Bootloaders/HID/BootloaderHID.c
+++ b/Bootloaders/HID/BootloaderHID.c
@@ -58,6 +58,11 @@ void Application_Jump_Check(void)
/* If the reset source was the bootloader and the key is correct, clear it and jump to the application */
if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY))
{
+ /* Turn off the watchdog */
+ MCUSR &= ~(1 << WDRF);
+ wdt_disable();
+
+ /* Clear the boot key and jump to the user application */
MagicBootKey = 0;
// cppcheck-suppress constStatement
@@ -98,6 +103,9 @@ static void SetupHardware(void)
MCUSR &= ~(1 << WDRF);
wdt_disable();
+ /* Disable clock division */
+ clock_prescale_set(clock_div_1);
+
/* Relocate the interrupt vector table to the bootloader section */
MCUCR = (1 << IVCE);
MCUCR = (1 << IVSEL);
@@ -153,7 +161,7 @@ void EVENT_USB_Device_ControlRequest(void)
{
RunBootloader = false;
}
- else
+ else if (PageAddress < BOOT_START_ADDR)
{
/* Erase the given FLASH page, ready to be programmed */
boot_page_erase(PageAddress);
diff --git a/Bootloaders/HID/BootloaderHID.h b/Bootloaders/HID/BootloaderHID.h
index 74cb26789..0eaba4655 100644
--- a/Bootloaders/HID/BootloaderHID.h
+++ b/Bootloaders/HID/BootloaderHID.h
@@ -67,7 +67,5 @@
void Application_Jump_Check(void) ATTR_INIT_SECTION(3);
void EVENT_USB_Device_ConfigurationChanged(void);
- void EVENT_USB_Device_UnhandledControlRequest(void);
#endif
-
diff --git a/Bootloaders/HID/Descriptors.c b/Bootloaders/HID/Descriptors.c
index 4c475db51..70dc9d0d3 100644
--- a/Bootloaders/HID/Descriptors.c
+++ b/Bootloaders/HID/Descriptors.c
@@ -110,7 +110,7 @@ const USB_Descriptor_Configuration_t ConfigurationDescriptor =
{
.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
- .InterfaceNumber = INTERFACE_ID_Printer,
+ .InterfaceNumber = INTERFACE_ID_GenericHID,
.AlternateSetting = 0x00,
.TotalEndpoints = 1,
diff --git a/Bootloaders/HID/Descriptors.h b/Bootloaders/HID/Descriptors.h
index 08d87e6f3..179fa31ef 100644
--- a/Bootloaders/HID/Descriptors.h
+++ b/Bootloaders/HID/Descriptors.h
@@ -60,7 +60,7 @@
*/
enum InterfaceDescriptors_t
{
- INTERFACE_ID_Printer = 0, /**< Printer interface descriptor ID */
+ INTERFACE_ID_GenericHID = 0, /**< GenericHID interface descriptor ID */
};
/* Macros: */
diff --git a/Bootloaders/HID/makefile b/Bootloaders/HID/makefile
index a76faf06e..3176a5a57 100644
--- a/Bootloaders/HID/makefile
+++ b/Bootloaders/HID/makefile
@@ -20,7 +20,7 @@ OPTIMIZATION = s
TARGET = BootloaderHID
SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB)
LUFA_PATH = ../../LUFA
-CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/
+CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -DBOOT_START_ADDR=$(BOOT_START_OFFSET) -IConfig/
LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET)
# Flash size and bootloader section sizes of the target, in KB. These must