stm32f0: stm32f1: usart: have console_read() only react to Ctrl+D and not echo the user input

master
S.J.R. van Schaik 7 years ago
parent b006de37ad
commit 45d51197b1
  1. 38
      source/platform/usart.c

@ -145,57 +145,27 @@ int console_getline(struct console *console_, char *buf, size_t n)
return -EAGAIN; return -EAGAIN;
} }
ssize_t console_read(struct console *console_, char *buf, size_t n) ssize_t console_read(struct console *console, char *buf, size_t n)
{ {
struct usart_console *console = container_of(console_,
struct usart_console, console);
char *p = buf; char *p = buf;
char c; char c;
*buf = '\0'; *buf = '\0';
while (console_peek(&c, console_, 1) == 0) { while (console_peek(&c, console, 1) == 0) {
switch (c) { switch (c) {
case '\004': case '\004':
if (buf < p) if (buf < p)
goto out; goto out;
console_getc(&c, console_); console_getc(&c, console);
return 0; return 0;
case 10:
case 127:
if (buf < p) {
#if CONFIG_USER_ECHO
usart_send_blocking(console->dev, '\010');
usart_send_blocking(console->dev, ' ');
usart_send_blocking(console->dev, '\010');
#endif
--p;
}
console_getc(&c, console_);
break;
case '\r':
if (((size_t)p - (size_t)buf) >= n)
goto out;
*p++ = '\n';
#if CONFIG_USER_ECHO
usart_send_blocking(console->dev, '\r');
usart_send_blocking(console->dev, '\n');
#endif
console_getc(&c, console_);
goto out;
default: default:
if (((size_t)p - (size_t)buf) >= n) if (((size_t)p - (size_t)buf) >= n)
goto out; goto out;
*p++ = c; *p++ = c;
#if CONFIG_USER_ECHO console_getc(&c, console);
usart_send_blocking(console->dev, c);
#endif
console_getc(&c, console_);
break; break;
} }
} }

Loading…
Cancel
Save