From: Stephan Baerwolf Date: Tue, 10 Sep 2013 18:55:21 +0000 (+0200) Subject: introduce new feature: BOOTLOADER_HIDDENEXITCOMMAND X-Git-Tag: testing-head~24 X-Git-Url: http://git.linex4red.de/pub/USBaspLoader.git/commitdiff_plain/46cd9d4a9468b30ee8e456eadee7aed61e6830c1?ds=inline introduce new feature: BOOTLOADER_HIDDENEXITCOMMAND 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 --- diff --git a/firmware/bootloaderconfig.h b/firmware/bootloaderconfig.h index b4a47e4..7d173d5 100644 --- a/firmware/bootloaderconfig.h +++ b/firmware/bootloaderconfig.h @@ -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 diff --git a/firmware/main.c b/firmware/main.c index fe7d049..8114dda 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -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 */ }