35 lines
809 B
C
35 lines
809 B
C
|
|
enum uart_parity {
|
|
UART_PARITY_NONE,
|
|
UART_PARITY_EVEN,
|
|
UART_PARITY_ODD,
|
|
UART_PARITY_MARK,
|
|
UART_PARITY_SPACE,
|
|
};
|
|
|
|
/* uart flags */
|
|
#define UART_PARITY_ERROR (1 << 0)
|
|
#define UART_CODE_VIOLATION (1 << 1)
|
|
#define UART_BREAK (1 << 2)
|
|
|
|
typedef struct uart {
|
|
void *inst;
|
|
int (*tx_cb)(void *inst);
|
|
void (*rx_cb)(void *inst, int data, uint32_t flags);
|
|
uint8_t data_bits;
|
|
enum uart_parity parity;
|
|
uint8_t stop_bits;
|
|
int last_bit;
|
|
uint32_t tx_data;
|
|
uint32_t rx_data;
|
|
int tx_pos;
|
|
int rx_pos;
|
|
int length;
|
|
} uart_t;
|
|
|
|
int uart_init(uart_t *uart, void *inst, uint8_t data_bits, enum uart_parity parity, uint8_t stop_bits, int (*tx_cb)(void *inst), void (*rx_cb)(void *inst, int data, uint32_t flags));
|
|
int uart_tx_bit(uart_t *uart);
|
|
int uart_is_tx(uart_t *uart);
|
|
void uart_rx_bit(uart_t *uart, int bit);
|
|
|