diff --git a/include/console.h b/include/console.h index 37e1580..99e7997 100644 --- a/include/console.h +++ b/include/console.h @@ -6,4 +6,4 @@ struct usart_console; typedef void (* process_line_func)(FILE *fp); -FILE *console_init(process_line_func process_line); +FILE *console_init(unsigned dev_id, process_line_func process_line); diff --git a/source/drivers/usart_console.c b/source/drivers/usart_console.c index d97eaa8..b02df25 100644 --- a/source/drivers/usart_console.c +++ b/source/drivers/usart_console.c @@ -46,9 +46,8 @@ static void usart_isr(struct usart_console *console) if (console->recv_buf[idx] == '\003') scb_reset_system(); - if (console->recv_buf[idx] == '\r' && console->process_line) { + if (console->recv_buf[idx] == '\r' && console->process_line) console->process_line(console->fp); - } } } @@ -169,7 +168,7 @@ static int usart_init(struct usart_console *console) return 0; } -FILE *console_init(void (* process_line)(FILE *fp)) +FILE *console_init(unsigned dev_id, void (* process_line)(FILE *fp)) { cookie_io_functions_t fops = { .read = usart_read, @@ -182,11 +181,16 @@ FILE *console_init(void (* process_line)(FILE *fp)) if (!(console = malloc(sizeof *console))) return NULL; - console->dev = USART1; + switch (dev_id) { + case 0: console->dev = USART1; break; + case 1: console->dev = USART2; break; + default: return NULL; + } + console->cur = 0; console->next = 0; console->process_line = process_line; - usart[0] = console; + usart[dev_id] = console; usart_init(console);