X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/05437fb4cdb907816a4fc3ffafa2617fcf33266a..b30c4e8f1aef96f6fdc93da9f125545f5f74d06e:/avr/con-utils.c?ds=sidebyside diff --git a/avr/con-utils.c b/avr/con-utils.c index b8017ed..4a96771 100644 --- a/avr/con-utils.c +++ b/avr/con-utils.c @@ -1,7 +1,14 @@ +/* + * (C) Copyright 2014 Leo C. + * + * SPDX-License-Identifier: GPL-2.0+ + */ -#include #include "common.h" +#include +#include +#include "config.h" #include "serial.h" #include "background.h" #include "con-utils.h" @@ -15,12 +22,37 @@ uint_fast8_t tstc(void) int my_getchar(uint_fast8_t waitforchar) { int c; - + do { bg_shed(); c = serial_getc(); } while ((c < 0) && waitforchar); +#ifdef CONFIG_SYS_FBOOTSIG + if (c < 0) + return c; + + static const FLASH unsigned char bootsig[] = {CONFIG_SYS_FBOOTSIG}; + static uint8_t pb; + unsigned char uc = c; + + + if (bootsig[pb] == 0) { + if (uc == 0xff) { + wdt_enable(WDTO_15MS); + for(;;) + ; + } else + pb = 0; + + } else { + if (bootsig[pb] == uc) + pb++; + else + pb = 0; + } +#endif + return c; } @@ -32,6 +64,7 @@ static uint_fast8_t ctrlc_was_pressed; uint_fast8_t ctrlc(void) { + bg_shed(); if (!ctrlc_disabled) { switch (serial_getc()) { case 0x03: /* ^C - Control C */ @@ -92,4 +125,3 @@ void clear_ctrlc(void) { ctrlc_was_pressed = 0; } -