+/*
+ * (C) Copyright 2014 Leo C. <erbl259-lmu@yahoo.de>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+#include "common.h"
#include <string.h>
-#include <stdio.h>
+#include <avr/wdt.h>
+#include "config.h"
#include "serial.h"
+#include "background.h"
#include "con-utils.h"
-
uint_fast8_t tstc(void)
{
+ bg_shed();
return serial_tstc();
}
-int my_getchar(void)
+int my_getchar(uint_fast8_t waitforchar)
{
int c;
-
- while((c = serial_getc()) < 0)
- ;
+
+ 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;
}
/* test if ctrl-c was pressed */
-static uint_fast8_t ctrlc_disabled = 0; /* see disable_ctrl() */
-static uint_fast8_t ctrlc_was_pressed = 0;
+static uint_fast8_t ctrlc_disabled; /* see disable_ctrl() */
+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 */
/* Reads user's confirmation.
Returns 1 if user's input is "y", "Y", "yes" or "YES"
*/
+uint_fast8_t confirm_yes(void)
+{
+ uint_fast8_t checkch, ch;
+
+ checkch = ch = my_getchar(1);
+ putchar(ch);
+ while (ch != '\r') {
+ ch = my_getchar(1);
+ putchar(ch);
+ }
+ putchar('\n');
+
+ return (checkch == 'y');
+}
+
+#if 0
uint_fast8_t confirm_yesno(void)
{
unsigned int i;
char str_input[5];
/* Flush input */
- while (serial_getc())
+ while (serial_getc() < 0)
;
i = 0;
while (i < sizeof(str_input)) {
- str_input[i] = my_getchar();
+ str_input[i] = my_getchar(1);
putchar(str_input[i]);
if (str_input[i] == '\r')
break;
return 1;
return 0;
}
+#endif
/* pass 1 to disable ctrlc() checking, 0 to enable.
* returns previous state
{
ctrlc_was_pressed = 0;
}
-