
fix Security breach found by Tencent Blade Team please refer to security advisory - CVE-2020-11068
196 lines
3.9 KiB
C
196 lines
3.9 KiB
C
/*!
|
|
* \file uart.h
|
|
*
|
|
* \brief UART driver implementation
|
|
*
|
|
* \copyright Revised BSD License, see section \ref LICENSE.
|
|
*
|
|
* \code
|
|
* ______ _
|
|
* / _____) _ | |
|
|
* ( (____ _____ ____ _| |_ _____ ____| |__
|
|
* \____ \| ___ | (_ _) ___ |/ ___) _ \
|
|
* _____) ) ____| | | || |_| ____( (___| | | |
|
|
* (______/|_____)_|_|_| \__)_____)\____)_| |_|
|
|
* (C)2013-2017 Semtech
|
|
*
|
|
* \endcode
|
|
*
|
|
* \author Miguel Luis ( Semtech )
|
|
*
|
|
* \author Gregory Cristian ( Semtech )
|
|
*/
|
|
#ifndef __UART_H__
|
|
#define __UART_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
#include "fifo.h"
|
|
#include "gpio.h"
|
|
|
|
/*!
|
|
* UART peripheral ID
|
|
*/
|
|
typedef enum
|
|
{
|
|
UART_1,
|
|
UART_2,
|
|
UART_USB_CDC = 255,
|
|
}UartId_t;
|
|
|
|
/*!
|
|
* UART notification identifier
|
|
*/
|
|
typedef enum
|
|
{
|
|
UART_NOTIFY_TX,
|
|
UART_NOTIFY_RX
|
|
}UartNotifyId_t;
|
|
|
|
/*!
|
|
* UART object type definition
|
|
*/
|
|
typedef struct
|
|
{
|
|
UartId_t UartId;
|
|
bool IsInitialized;
|
|
Gpio_t Tx;
|
|
Gpio_t Rx;
|
|
Fifo_t FifoTx;
|
|
Fifo_t FifoRx;
|
|
/*!
|
|
* IRQ user notification callback prototype.
|
|
*/
|
|
void ( *IrqNotify )( UartNotifyId_t id );
|
|
}Uart_t;
|
|
|
|
/*!
|
|
* Operation Mode for the UART
|
|
*/
|
|
typedef enum
|
|
{
|
|
TX_ONLY = 0,
|
|
RX_ONLY,
|
|
RX_TX
|
|
}UartMode_t;
|
|
|
|
/*!
|
|
* UART word length
|
|
*/
|
|
typedef enum
|
|
{
|
|
UART_8_BIT = 0,
|
|
UART_9_BIT
|
|
}WordLength_t;
|
|
|
|
/*!
|
|
* UART stop bits
|
|
*/
|
|
typedef enum
|
|
{
|
|
UART_1_STOP_BIT = 0,
|
|
UART_0_5_STOP_BIT,
|
|
UART_2_STOP_BIT,
|
|
UART_1_5_STOP_BIT
|
|
}StopBits_t;
|
|
|
|
/*!
|
|
* UART parity
|
|
*/
|
|
typedef enum
|
|
{
|
|
NO_PARITY = 0,
|
|
EVEN_PARITY,
|
|
ODD_PARITY
|
|
}Parity_t;
|
|
|
|
/*!
|
|
* UART flow control
|
|
*/
|
|
typedef enum
|
|
{
|
|
NO_FLOW_CTRL = 0,
|
|
RTS_FLOW_CTRL,
|
|
CTS_FLOW_CTRL,
|
|
RTS_CTS_FLOW_CTRL
|
|
}FlowCtrl_t;
|
|
|
|
/*!
|
|
* \brief Initializes the UART object and MCU peripheral
|
|
*
|
|
* \param [IN] obj UART object
|
|
* \param [IN] tx UART Tx pin name to be used
|
|
* \param [IN] rx UART Rx pin name to be used
|
|
*/
|
|
void UartInit( Uart_t *obj, UartId_t uartId, PinNames tx, PinNames rx );
|
|
|
|
/*!
|
|
* \brief Configures the UART object and MCU peripheral
|
|
*
|
|
* \remark UartInit function must be called first.
|
|
*
|
|
* \param [IN] obj UART object
|
|
* \param [IN] mode Mode of operation for the UART
|
|
* \param [IN] baudrate UART baudrate
|
|
* \param [IN] wordLength packet length
|
|
* \param [IN] stopBits stop bits setup
|
|
* \param [IN] parity packet parity
|
|
* \param [IN] flowCtrl UART flow control
|
|
*/
|
|
void UartConfig( Uart_t *obj, UartMode_t mode, uint32_t baudrate, WordLength_t wordLength, StopBits_t stopBits, Parity_t parity, FlowCtrl_t flowCtrl );
|
|
|
|
/*!
|
|
* \brief DeInitializes the UART object and MCU pins
|
|
*
|
|
* \param [IN] obj UART object
|
|
*/
|
|
void UartDeInit( Uart_t *obj );
|
|
|
|
/*!
|
|
* \brief Sends a character to the UART
|
|
*
|
|
* \param [IN] obj UART object
|
|
* \param [IN] data Character to be sent
|
|
* \retval status [0: OK, 1: Busy]
|
|
*/
|
|
uint8_t UartPutChar( Uart_t *obj, uint8_t data );
|
|
|
|
/*!
|
|
* \brief Sends a buffer to the UART
|
|
*
|
|
* \param [IN] obj UART object
|
|
* \param [IN] buffer Buffer to be sent
|
|
* \param [IN] size Buffer size
|
|
* \retval status [0: OK, 1: Busy]
|
|
*/
|
|
uint8_t UartPutBuffer( Uart_t *obj, uint8_t *buffer, uint16_t size );
|
|
|
|
/*!
|
|
* \brief Gets a character from the UART
|
|
*
|
|
* \param [IN] obj UART object
|
|
* \param [IN] data Received character
|
|
* \retval status [0: OK, 1: Busy]
|
|
*/
|
|
uint8_t UartGetChar( Uart_t *obj, uint8_t *data );
|
|
|
|
/*!
|
|
* \brief Gets a character from the UART
|
|
*
|
|
* \param [IN] obj UART object
|
|
* \param [IN] buffer Received buffer
|
|
* \param [IN] size Number of bytes to be received
|
|
* \param [OUT] nbReadBytes Number of bytes really read
|
|
* \retval status [0: OK, 1: Busy]
|
|
*/
|
|
uint8_t UartGetBuffer( Uart_t *obj, uint8_t *buffer, uint16_t size, uint16_t *nbReadBytes );
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // __UART_H__
|