introduce new feature: BOOTLOADER_HIDDENEXITCOMMAND
authorStephan Baerwolf <stephan.baerwolf@tu-ilmenau.de>
Tue, 10 Sep 2013 18:55:21 +0000 (20:55 +0200)
committerStephan Baerwolf <stephan.baerwolf@tu-ilmenau.de>
Tue, 10 Sep 2013 19:51:13 +0000 (19:51 +0000)
With this "BOOTLOADER_HIDDENEXITCOMMAND" feature, sending the RAW-ISP
command "11111111 xxxxxxxx xxxxxxxx xxxxxxxx" will cause the bootloader
to start the firmware as soon as the programming software disconnects.

Signed-off-by: Stephan Baerwolf <stephan.baerwolf@tu-ilmenau.de>
firmware/bootloaderconfig.h
firmware/main.c

index b4a47e4..7d173d5 100644 (file)
@@ -322,6 +322,18 @@ these macros are defined, the boot loader usees them.
  * user intervention
  */
 
+#ifdef CONFIG_NO__BOOTLOADER_HIDDENEXITCOMMAND
+#      define HAVE_BOOTLOADER_HIDDENEXITCOMMAND 0
+#else
+#      define HAVE_BOOTLOADER_HIDDENEXITCOMMAND 0xff
+#endif
+/* 
+ * When enabling "BOOTLOADER_HIDDENEXITCOMMAND", then
+ * sending the RAW-ISP command "0xff 0xXX 0xXX 0xXX"
+ * will cause the bootloader to start the firmware
+ * as soon as the programming software disconnects.
+ */
+
 //#define SIGNATURE_BYTES             0x1e, 0x93, 0x07, 0     /* ATMega8 */
 /* This macro defines the signature bytes returned by the emulated USBasp to
  * the programmer software. They should match the actual device at least in
index fe7d049..8114dda 100644 (file)
@@ -407,6 +407,23 @@ defined (__AVR_ATmega2561__)
 #   endif
       }
 #endif
+#if (HAVE_BOOTLOADER_HIDDENEXITCOMMAND)
+#      if ((HAVE_BOOTLOADER_HIDDENEXITCOMMAND != 0xac) && \
+           (HAVE_BOOTLOADER_HIDDENEXITCOMMAND != 0x20) && (HAVE_BOOTLOADER_HIDDENEXITCOMMAND != 0x28) && \
+           (HAVE_BOOTLOADER_HIDDENEXITCOMMAND != 0x40) && (HAVE_BOOTLOADER_HIDDENEXITCOMMAND != 0x48) && \
+           (HAVE_BOOTLOADER_HIDDENEXITCOMMAND != 0x4c) && \
+           (HAVE_BOOTLOADER_HIDDENEXITCOMMAND != 0xa0) && \
+           (HAVE_BOOTLOADER_HIDDENEXITCOMMAND != 0xc0) && \
+           (HAVE_BOOTLOADER_HIDDENEXITCOMMAND != 0x58) && \
+           (HAVE_BOOTLOADER_HIDDENEXITCOMMAND != 0x5c) && \
+           (HAVE_BOOTLOADER_HIDDENEXITCOMMAND != 0x30) && \
+           (HAVE_BOOTLOADER_HIDDENEXITCOMMAND != 0xac) && \
+           (HAVE_BOOTLOADER_HIDDENEXITCOMMAND != 0x50) && (HAVE_BOOTLOADER_HIDDENEXITCOMMAND != 0x58) && \
+           (HAVE_BOOTLOADER_HIDDENEXITCOMMAND != 0x38))
+  }else if(rq->wValue.bytes[0] == (HAVE_BOOTLOADER_HIDDENEXITCOMMAND)){  /* cause a bootLoaderExit at disconnect */
+      stayinloader = 0xf1;  /* we need to be connected - so assume it */
+#      endif
+#endif
   }else{
       /* ignore all others, return default value == 0 */
   }