]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - avr/con-utils.c
cli.c bugfix: Comment only lines are not an error.
[z180-stamp.git] / avr / con-utils.c
index b8017ed4f7f70a1528ef2e747f1d5d645efb5925..4a96771040c536123388f92657a0d1e6fe54c982 100644 (file)
@@ -1,7 +1,14 @@
+/*
+ * (C) Copyright 2014 Leo C. <erbl259-lmu@yahoo.de>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
 
-#include <string.h>
 #include "common.h"
+#include <string.h>
+#include <avr/wdt.h>
 
+#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;
 }
-