From fe3b178d3c2dffcba9109f89a714215da64a657f Mon Sep 17 00:00:00 2001 From: Merlijn Wajer Date: Mon, 10 Feb 2020 13:32:02 +0100 Subject: [PATCH] HACK: add console_init_fd --- include/console.h | 2 ++ source/platform/usart.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/include/console.h b/include/console.h index 3b0230b..1c5f573 100644 --- a/include/console.h +++ b/include/console.h @@ -9,10 +9,12 @@ #endif struct console { + FILE *read_fp; FILE *fp; }; struct console *console_init(unsigned dev_id); +struct console *console_init_fd(unsigned dev_id, FILE* rfd, FILE* wfd); int console_peek(char *c, struct console *console, int block); int console_getc(char *c, struct console *console); int console_getline(struct console *console, char *buf, size_t n); diff --git a/source/platform/usart.c b/source/platform/usart.c index 629ce28..03b8c33 100644 --- a/source/platform/usart.c +++ b/source/platform/usart.c @@ -94,6 +94,14 @@ int console_peek(char *c, struct console *console_, int block) int console_getc(char *c, struct console *console_) { + *c = fgetc(console_->read_fp); + if (*c == EOF) { + return -1; + } + fprintf(stderr, "fgetc on %d gives %x\n", fileno(console_->read_fp), *c); + return 0; + +#if 0 struct usart_console *console = container_of(console_, struct usart_console, console); @@ -106,6 +114,7 @@ int console_getc(char *c, struct console *console_) } return 0; +#endif } int console_getline(struct console *console_, char *buf, size_t n) @@ -159,6 +168,8 @@ int console_getline(struct console *console_, char *buf, size_t n) ssize_t console_read(struct console *console, char *buf, size_t n) { + return fread(buf, n, 1, console->read_fp); +#if 0 char *p = buf; char c; @@ -178,6 +189,7 @@ ssize_t console_read(struct console *console, char *buf, size_t n) } return p - buf; +#endif } static ssize_t usart_write(void *cookie, const char *buf, size_t n) @@ -236,14 +248,28 @@ static int usart_init(struct usart_console *console) return 0; } +struct console *console_init_fd(unsigned dev_id, FILE* rfd, FILE* wfd) { + struct usart_console *console; + + console = usart + dev_id; + console->console.read_fp = rfd; + console->console.fp = wfd; + + setvbuf(console->console.fp, NULL, _IONBF, 0); + + return &console->console; +} + struct console *console_init(unsigned dev_id) { +#if 0 cookie_io_functions_t fops = { .read = NULL, .write = usart_write, .seek = NULL, .close = NULL, }; +#endif struct usart_console *console; console = usart + dev_id; @@ -261,8 +287,10 @@ struct console *console_init(unsigned dev_id) usart_init(console); +#if 0 console->console.fp = fopencookie(console, "w", fops); setvbuf(console->console.fp, NULL, _IONBF, 0); +#endif return &console->console; }