stm32f0: usart: add callback to process each fully received line
This commit is contained in:
parent
2610c11a3d
commit
04d161a6a9
1 changed files with 12 additions and 7 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue