#ifndef _UART_H_
#define _UART_H_

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

/* UART DEFINES */
#define UART_BAUD 9600
#define UART_HALF_BIT_DELAY_US 50
#define UART_STATUS_BUSY 0
#define UART_STATUS_RECEIVING 1
/* UART RX DEFINES */
#define UART_RX_DDR             DDRA
#define UART_RX_PORT            PORTA
#define UART_RX_PIN             PA0
#define UART_TX_DDR             DDRA
#define UART_TX_PORT            PORTA
#define UART_TX_PIN             PA1
#define UART_RX_INTERRUPT       PCINT0
#define UART_RX_INTERRUPT_PORT  PCIE0
#define UART_RX_BUFFER_SIZE     32

/* UART GENERAL VARIABLES */
uint8_t uart_status_bitfield;
/* UART RX VARIABLES */
uint8_t uart_rx_buffer[UART_RX_BUFFER_SIZE];
uint8_t uart_rx_buff_position;
uint8_t uart_rx_buff_end;

void uart_init(void);
void uart_init_rx(void);            /* enables interrupts */
void uart_init_tx(void);
uint8_t uart_available(void);
uint8_t uart_getc(void);
void uart_putc(uint8_t c);

#endif
