/* * Copyright (C) 2015-2017 Alibaba Group Holding Limited */ #ifndef HAL_UART_H #define HAL_UART_H /* * UART data width */ typedef enum { DATA_WIDTH_5BIT, DATA_WIDTH_6BIT, DATA_WIDTH_7BIT, DATA_WIDTH_8BIT, DATA_WIDTH_9BIT } hal_uart_data_width_t; /* * UART stop bits */ typedef enum { STOP_BITS_1, STOP_BITS_2 } hal_uart_stop_bits_t; /* * UART flow control */ typedef enum { FLOW_CONTROL_DISABLED, FLOW_CONTROL_CTS, FLOW_CONTROL_RTS, FLOW_CONTROL_CTS_RTS } hal_uart_flow_control_t; /* * UART parity */ typedef enum { NO_PARITY, ODD_PARITY, EVEN_PARITY } hal_uart_parity_t; /* * UART mode */ typedef enum { MODE_TX, MODE_RX, MODE_TX_RX } hal_uart_mode_t; /* * UART configuration */ typedef struct { uint32_t baud_rate; hal_uart_data_width_t data_width; hal_uart_parity_t parity; hal_uart_stop_bits_t stop_bits; hal_uart_flow_control_t flow_control; hal_uart_mode_t mode; } uart_config_t; typedef struct { uint8_t port; /* uart port */ uart_config_t config; /* uart config */ void *priv; /* priv data */ } uart_dev_t; /** * Initialises a UART interface * * * @param[in] uart the interface which should be initialised * * @return 0 : on success, EIO : if an error occurred with any step */ int32_t hal_uart_init(uart_dev_t *uart); /** * Transmit data on a UART interface * * @param[in] uart the UART interface * @param[in] data pointer to the start of data * @param[in] size number of bytes to transmit * * @return 0 : on success, EIO : if an error occurred with any step */ int32_t hal_uart_send(uart_dev_t *uart, const void *data, uint32_t size, uint32_t timeout); /** * Receive data on a UART interface * * @param[in] uart the UART interface * @param[out] data pointer to the buffer which will store incoming data * @param[in] expect_size number of bytes to receive * @param[in] timeout timeout in milisecond, set this value to HAL_WAIT_FOREVER * if you want to wait forever * * @return 0 : on success, EIO : if an error occurred with any step */ int32_t hal_uart_recv(uart_dev_t *uart, void *data, uint32_t expect_size, uint32_t timeout); /** * Receive data on a UART interface * * @param[in] uart the UART interface * @param[out] data pointer to the buffer which will store incoming data * @param[in] expect_size number of bytes to receive * @param[out] recv_size number of bytes received * @param[in] timeout timeout in milisecond, set this value to HAL_WAIT_FOREVER * if you want to wait forever * * @return 0 : on success, EIO : if an error occurred with any step */ int32_t hal_uart_recv_II(uart_dev_t *uart, void *data, uint32_t expect_size, uint32_t *recv_size, uint32_t timeout); /** * Deinitialises a UART interface * * @param[in] uart the interface which should be deinitialised * * @return 0 : on success, EIO : if an error occurred with any step */ int32_t hal_uart_finalize(uart_dev_t *uart); #endif /* HAL_UART_H */