Restrict HID bootloader programming region (thanks to NicoHood).
authorDean Camera <dean@fourwalledcubicle.com>
Sun, 29 Jan 2017 04:36:02 +0000 (15:36 +1100)
committerDean Camera <dean@fourwalledcubicle.com>
Sun, 29 Jan 2017 04:36:02 +0000 (15:36 +1100)
Bootloaders/HID/BootloaderHID.c
Bootloaders/HID/BootloaderHID.h
Bootloaders/HID/Descriptors.c
Bootloaders/HID/Descriptors.h
Bootloaders/HID/makefile

index 04fd0df..ec094b1 100644 (file)
@@ -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);
index 74cb267..0eaba46 100644 (file)
@@ -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
-
index 4c475db..70dc9d0 100644 (file)
@@ -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,
index 08d87e6..179fa31 100644 (file)
@@ -60,7 +60,7 @@
                 */
                enum InterfaceDescriptors_t
                {
-                       INTERFACE_ID_Printer = 0, /**< Printer interface descriptor ID */
+                       INTERFACE_ID_GenericHID = 0, /**< GenericHID interface descriptor ID */
                };
 
        /* Macros: */
index a76faf0..3176a5a 100644 (file)
@@ -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