#include #include #include #include #include "uart.h" // Ring buffer macros #define RBUF(BUF_SIZE) struct { char data[BUF_SIZE]; uint8_t head; uint8_t tail; } #define RBUF_NEXT(BUF_IDX, MOD_MASK) (((BUF_IDX) + 1) & MOD_MASK) #define RBUF_FORWARD(BUF_IDX, MOD_MASK) BUF_IDX = RBUF_NEXT(BUF_IDX, MOD_MASK) #define RBUF_EMPTY(BUFF) (BUFF.head == BUFF.tail) #define CR 0x0D #define LF 0x0A volatile RBUF(UART_RX_BUF_SIZE) rx_buffer; volatile RBUF(UART_TX_BUF_SIZE) tx_buffer; volatile uint8_t lines = 0; void (*uart_handler)(char* line); void uart_init(void) { UBRRH = (uint8_t) (__UBRR>>8); UBRRL = (uint8_t) __UBRR; UCSRB = (1<