#ifndef _DEVICES_UART_H
#define _DEVICES_UART_H

#include <stdint.h>
#include "gen/uart.h"

static inline uint32_t uart_get_tx_free(volatile uart_t* reg){
    return get_uart_rx_tx_reg_tx_free(reg);
}

static inline uint32_t uart_get_tx_empty(volatile uart_t* reg){
    return get_uart_rx_tx_reg_tx_empty(reg);
}

static inline uint32_t uart_get_rx_avail(volatile uart_t* reg){
    return get_uart_rx_tx_reg_rx_avail(reg);
}

static inline void uart_write(volatile uart_t* reg, uint8_t data){
    while(get_uart_rx_tx_reg_tx_free(reg) == 0);
    set_uart_rx_tx_reg_data(reg, data);
}

static inline inline uint8_t uart_read(volatile uart_t* reg){
    uint32_t res = get_uart_rx_tx_reg_data(reg);
    while((res&0x10000) == 0) res = get_uart_rx_tx_reg_data(reg);
    return res;
}

#endif /* _DEVICES_UART_H */