stm32f0: usart: add callback to process each fully received line

tags/0.1.0
S.J.R. van Schaik 7 years ago
parent 2610c11a3d
commit 04d161a6a9
  1. 19
      source/drivers/usart_console.c

@ -18,6 +18,7 @@
struct usart_console {
char recv_buf[RECV_BUF_LEN];
void (* process_line)(void);
volatile size_t cur, next;
uint32_t dev;
};
@ -28,21 +29,25 @@ struct usart_console user_console;
static void usart_isr(struct usart_console *console)
{
uint32_t reg;
size_t i;
size_t idx, next;
if (!console)
return;
while (usart_get_flag(console->dev, USART_ISR_RXNE)) {
console->recv_buf[console->next] = usart_recv(console->dev);
idx = console->next;
console->recv_buf[idx] = usart_recv(console->dev);
if (console->recv_buf[console->next] == '\003')
scb_reset_system();
next = (console->next + 1) % RECV_BUF_LEN;
i = (console->next + 1) % RECV_BUF_LEN;
if (next != console->cur)
console->next = next;
if (i != console->cur)
console->next = i;
switch (console->recv_buf[idx]) {
case '\003': scb_reset_system();
case '\r': console->process_line();
default: break;
}
}
}

Loading…
Cancel
Save