#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) volatile RBUF(UART_RX_BUF_SIZE) rx_buffer; volatile RBUF(UART_TX_BUF_SIZE) tx_buffer; void uart_init(void) { UBRRH = (uint8_t) (__UBRR>>8); UBRRL = (uint8_t) __UBRR; UCSRB = (1<