diff --git a/include/console.h b/include/console.h index 7a589c9..37e1580 100644 --- a/include/console.h +++ b/include/console.h @@ -4,4 +4,6 @@ struct usart_console; -FILE *console_init(void); +typedef void (* process_line_func)(FILE *fp); + +FILE *console_init(process_line_func process_line); diff --git a/source/drivers/usart_console.c b/source/drivers/usart_console.c index ebca992..d97eaa8 100644 --- a/source/drivers/usart_console.c +++ b/source/drivers/usart_console.c @@ -19,7 +19,7 @@ struct usart_console { char recv_buf[RECV_BUF_LEN]; - void (* process_line)(void); + void (* process_line)(FILE *fp); FILE *fp; volatile size_t cur, next; uint32_t dev; @@ -47,7 +47,7 @@ static void usart_isr(struct usart_console *console) scb_reset_system(); if (console->recv_buf[idx] == '\r' && console->process_line) { - console->process_line(); + console->process_line(console->fp); } } } @@ -169,7 +169,7 @@ static int usart_init(struct usart_console *console) return 0; } -FILE *console_init(void) +FILE *console_init(void (* process_line)(FILE *fp)) { cookie_io_functions_t fops = { .read = usart_read, @@ -185,7 +185,7 @@ FILE *console_init(void) console->dev = USART1; console->cur = 0; console->next = 0; - console->process_line = NULL; + console->process_line = process_line; usart[0] = console; usart_init(console);