1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-01-18 12:52:44 +01:00

drivers: improvements to UART driver interface

- removed UNDEFINED value from device enum
- added argument for callbacks
- add power[on|off] functions
- removed tx_end() function in favor of cb return value
This commit is contained in:
Hauke Petersen 2014-07-28 14:45:51 +02:00
parent de2f164ee6
commit 8a80b2add8

View File

@ -23,6 +23,8 @@
#include "periph_conf.h"
/* guard file in case no UART device was specified */
#if UART_NUMOF
/**
* @brief Definition of available UART devices
@ -32,20 +34,36 @@
*/
typedef enum {
#if UART_0_EN
UART_0 = 0, /*< UART channel 0 */
UART_0 = 0, /**< UART channel 0 */
#endif
#if UART_1_EN
UART_1, /*< UART channel 1 */
UART_1, /**< UART channel 1 */
#endif
#if UART_2_EN
UART_2, /*< UART channel 2 */
UART_2, /**< UART channel 2 */
#endif
#if UART_3_EN
UART_3, /*< UART channel 3 */
UART_3, /**< UART channel 3 */
#endif
UART_UNDEFINED /*< fall-back value */
} uart_t;
/**
* @brief Signature for receive interrupt callback
*
* @param[in] arg optional argument to put the callback in the right context
* @param[in] data the byte that was received
*/
typedef void(*uart_rx_cb_t)(void *arg, char data);
/**
* @brief Signature for the transmit complete interrupt callback
*
* @param[in] arg optional argument to put the callback in the right context
*
* @return 1 if more data is to be send
* @return 0 if no more data is to be send
*/
typedef int(*uart_tx_cb_t)(void *arg);
/**
* @brief Initialize a given UART device
@ -62,10 +80,13 @@ typedef enum {
* in interrupt context
* @param[in] tx_cb transmit callback is called when done with sending a byte
* (TX buffer gets empty)
* @param[in] arg optional argument passed to the callback functions
*
* @return 0 on success, -1 for invalid baud-rate, -2 for all other errors
* @return 0 on success
* @return -1 for invalid baud-rate
* @return -2 for all other errors
*/
int uart_init(uart_t uart, uint32_t baudrate, void (*rx_cb)(char), void (*tx_cb)(void));
int uart_init(uart_t uart, uint32_t baudrate, uart_rx_cb_t rx_cb, uart_tx_cb_t tx_cb, void *arg);
/**
* @brief Initialize an UART device for (conventional) blocking usage
@ -92,13 +113,6 @@ int uart_init_blocking(uart_t uart, uint32_t baudrate);
*/
void uart_tx_begin(uart_t uart);
/**
* @brief End a transmission, on most platforms this will disable the TX interrupt
*
* @param[in] uart the UART device that is finished with transmitting stuff
*/
void uart_tx_end(uart_t uart);
/**
* @brief Write a byte into the UART's send register
*
@ -139,6 +153,21 @@ int uart_read_blocking(uart_t uart, char *data);
*/
int uart_write_blocking(uart_t uart, char data);
/**
* @brief Power on the given UART device
*
* @param[in] uart the UART device to power on
*/
void uart_poweron(uart_t uart);
/**
* @brief Power off the given UART device
*
* @param[in] uart the UART device to power off
*/
void uart_poweroff(uart_t uart);
#endif /* UART_NUMOF */
#endif /* __PERIPH_UART_H */
/** @} */