593 lines
24 KiB
C
593 lines
24 KiB
C
/**
|
||
* Copyright (c) @CompanyNameMagicTag 2022-2022. All rights reserved. \n
|
||
*
|
||
* Description: Provides UART driver api \n
|
||
* Author: @CompanyNameTag \n
|
||
* History: \n
|
||
* 2022-06-01, Create file. \n
|
||
*/
|
||
#ifndef UART_H
|
||
#define UART_H
|
||
|
||
#include <stdint.h>
|
||
#include <stddef.h>
|
||
#include "errcode.h"
|
||
#include "hal_uart.h"
|
||
#include "uart_porting.h"
|
||
|
||
#if !defined(CONFIG_UART_SUPPORT_TX) && !defined(CONFIG_UART_SUPPORT_RX)
|
||
#error UART must support TX or RX
|
||
#endif /* !defined(CONFIG_UART_SUPPORT_TX) && !defined(CONFIG_UART_SUPPORT_RX) */
|
||
|
||
#ifdef __cplusplus
|
||
#if __cplusplus
|
||
extern "C" {
|
||
#endif /* __cplusplus */
|
||
#endif /* __cplusplus */
|
||
|
||
/**
|
||
* @defgroup drivers_driver_uart UART
|
||
* @ingroup drivers_driver
|
||
* @{
|
||
*/
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Definition of UART pin configuration.
|
||
* @else
|
||
* @brief UART PIN配置结构体。
|
||
* @endif
|
||
*/
|
||
typedef hal_uart_pin_config_t uart_pin_config_t;
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Definition of UART data bit.
|
||
* @else
|
||
* @brief UART停止位定义。
|
||
* @endif
|
||
*/
|
||
typedef hal_uart_data_bit_t uart_data_bit_t;
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Definition of UART parity.
|
||
* @else
|
||
* @brief UART奇偶校验位定义。
|
||
* @endif
|
||
*/
|
||
typedef hal_uart_parity_t uart_parity_t;
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Definition of UART stop bit.
|
||
* @else
|
||
* @brief UART停止位定义。
|
||
* @endif
|
||
*/
|
||
typedef hal_uart_stop_bit_t uart_stop_bit_t;
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Definition of UART attributes.
|
||
* @else
|
||
* @brief UART基本属性定义。
|
||
* @endif
|
||
*/
|
||
typedef hal_uart_attr_t uart_attr_t;
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Definition of UART extral attributes.
|
||
* @else
|
||
* @brief UART扩展属性定义。
|
||
* @endif
|
||
*/
|
||
typedef hal_uart_extra_attr_t uart_extra_attr_t;
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Definition of UART Flow Control.
|
||
* @else
|
||
* @brief UART流控类型定义。
|
||
* @endif
|
||
*/
|
||
typedef hal_uart_flow_ctrl_t uart_flow_ctrl_t;
|
||
|
||
#if defined(CONFIG_UART_SUPPORT_TX) && defined(CONFIG_UART_SUPPORT_DMA)
|
||
/**
|
||
* @if Eng
|
||
* @brief Definition of UART DMA configuration.
|
||
* @else
|
||
* @brief UART DMA配置数据结构定义。
|
||
* @endif
|
||
*/
|
||
typedef struct uart_write_dma_config {
|
||
uint8_t src_width; /*!< @if Eng Transfer data width of the source.
|
||
* - 0: 1byte
|
||
* - 1: 2byte
|
||
* - 2: 4byte
|
||
* @else 源端传输数据宽度 \n
|
||
* - 0: 1字节
|
||
* - 1: 2字节
|
||
* - 2: 4字节
|
||
* @endif */
|
||
uint8_t dest_width; /*!< @if Eng Transfer data width of the destination.
|
||
* - 0: 1byte
|
||
* - 1: 2byte
|
||
* - 2: 4byte
|
||
* @else 目的端传输数据宽度 \n
|
||
* - 0: 1字节
|
||
* - 1: 2字节
|
||
* - 2: 4字节
|
||
* @endif */
|
||
uint8_t burst_length; /*!< @if Eng Number of data items, to be written to the destination every time
|
||
* a destination burst transaction request is made from
|
||
* either the corresponding hardware or software handshaking interface.
|
||
* - 0: burst length is 1
|
||
* - 1: burst length is 4
|
||
* - 2: burst length is 8
|
||
* - 3: burst length is 16
|
||
* @else 每次从相应的硬件或软件握手接口发出目的burst请求时,要写入目的端数据量
|
||
* - 0: burst长度是1
|
||
* - 1: burst长度是4
|
||
* - 2: burst长度是8
|
||
* - 3: burst长度是16
|
||
* @endif */
|
||
uint8_t priority; /*!< @if Eng Transfer channel priority(Minimum: 0 and Maximum: 3).
|
||
* @else 传输通道优先级(最小为0以及最大为3) @endif */
|
||
} uart_write_dma_config_t;
|
||
#endif /* defined(CONFIG_UART_SUPPORT_TX) && defined(CONFIG_UART_SUPPORT_DMA) */
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief UART buffer configuration
|
||
* @else
|
||
* @brief UART 缓存数据结构定义。
|
||
* @endif
|
||
*/
|
||
typedef struct uart_buffer_config {
|
||
void *rx_buffer; /*!< @if Eng Reception buffer pointer.
|
||
@else 接收数据的buffer指针 @endif */
|
||
size_t rx_buffer_size; /*!< @if Eng Reception buffer size in bytes.
|
||
@else 接收Buffer的长度 @endif */
|
||
} uart_buffer_config_t;
|
||
|
||
#if defined(CONFIG_UART_SUPPORT_RX)
|
||
|
||
#define UART_RX_CONDITION_MASK_IDLE 1
|
||
#define UART_RX_CONDITION_MASK_SUFFICIENT_DATA 2
|
||
#define UART_RX_CONDITION_MASK_FULL 4
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief UART Condition under the RX Callback will be invoked
|
||
* @else
|
||
* @brief UART在数据接收的时候触发回调的条件定义。
|
||
* @endif
|
||
*/
|
||
typedef enum uart_rx_condition {
|
||
/** @if Eng A call-back will be made if the RX data pauses or there is no more RX buffer space. \n
|
||
* So data is no longer being accepted. When registering this condition, a back-log of.
|
||
* @else 如果数据接收暂停,或者接收缓存已经满了,就触发数据接收回调,\n
|
||
* 在接收回调处理过程中接收到的UART数据,会直接丢弃。
|
||
* @endif */
|
||
UART_RX_CONDITION_FULL_OR_IDLE = (UART_RX_CONDITION_MASK_FULL | UART_RX_CONDITION_MASK_IDLE),
|
||
/** @if Eng A call-back will be made as soon as possible after the specified amount of data is
|
||
* received or there is no more RX buffer space. \n
|
||
* So data is no longer being accepted. More than the requested data may be
|
||
* provided to the call-back if there was a back-log of received data.
|
||
* @else 如果接收缓存已满,或者接收的数据量到达指定的数据长度,就触发数据接收回调,\n
|
||
* 在接收回调处理过程中接收到的UART数据,会直接丢弃。
|
||
* 如果存在接收数据的积压数据,则可以向回调提供超过请求的数据。 @endif */
|
||
UART_RX_CONDITION_FULL_OR_SUFFICIENT_DATA = (UART_RX_CONDITION_MASK_FULL | UART_RX_CONDITION_MASK_SUFFICIENT_DATA),
|
||
|
||
/** @if Eng A call-back will be made if the RX data buffer is full or
|
||
* the specified number of bytes has been received or there is a pause. \n
|
||
* So data is no longer being accepted.
|
||
* @else 如果接收缓存已满,或者接收的数据量到达指定的数据长度,或者接收数据暂停,就触发数据接收回调,\n
|
||
* 在接收回调处理过程中接收到的UART数据,会直接丢弃。 @endif */
|
||
UART_RX_CONDITION_FULL_OR_SUFFICIENT_DATA_OR_IDLE = (UART_RX_CONDITION_MASK_FULL |
|
||
UART_RX_CONDITION_MASK_SUFFICIENT_DATA |
|
||
UART_RX_CONDITION_MASK_IDLE)
|
||
} uart_rx_condition_t;
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief UART Transmission Callback type to call when the RX condition registered on
|
||
* @ref uapi_uart_register_rx_callback call or on error.
|
||
* @note This callback is invoked in an interrupt context and the buffer will be freed after the call.
|
||
* @param buffer pointer to the beginning of the buffer read.
|
||
* @param length length of the buffer.
|
||
* @param error true if there was an error on the line for this buffer, false otherwise.
|
||
* Errors registered are parity, stop bits, data bits.
|
||
* @else
|
||
* @brief UART接收数据的回调函数,通过 @ref uapi_uart_register_rx_callback 注册到驱动中。
|
||
* @note 这个函数是在中断上下文中执行的。
|
||
* @param buffer 读取数据时用于存储数据的Buffer。
|
||
* @param length 读取数据时用于存储数据的Buffer的长度。
|
||
* @param error true表示在接收数据时产生了错误(可能的错误是parity, stop bits, data bits),否则表示正常的数据读取。
|
||
* @endif
|
||
*/
|
||
typedef void (*uart_rx_callback_t)(const void *buffer, uint16_t length, bool error);
|
||
#endif /* CONFIG_UART_SUPPORT_RX */
|
||
|
||
#if defined(CONFIG_UART_SUPPORT_TX)
|
||
/**
|
||
* @if Eng
|
||
* @brief UART Transmission Callback type to pass to the @ref uapi_uart_write_int function.
|
||
* @note This callback is invoked in an interrupt context.
|
||
* @param buffer buffer given on the @ref uapi_uart_write_int call.
|
||
* @param length length given on the @ref uapi_uart_write_int call.
|
||
* @param params params given on the @ref uapi_uart_write_int call.
|
||
* @else
|
||
* @brief UART发送数据的回调函数,在调用 @ref uapi_uart_write_int 时传递给函数。
|
||
* @note 这个函数是在中断上下文中执行的。
|
||
* @param buffer @ref uapi_uart_write_int 调用时的数据缓存。
|
||
* @param length @ref uapi_uart_write_int 调用时的数据长度。
|
||
* @param params @ref uapi_uart_write_int 调用时传递进去的参数。
|
||
* @endif
|
||
*/
|
||
typedef void (*uart_tx_callback_t)(const void *buffer, uint32_t length, const void *params);
|
||
#endif /* CONFIG_UART_SUPPORT_TX */
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief UART Transmission Callback type to call when the RX condition registered on
|
||
* uapi_uart_register_frame_error_callback call or uart_register_parity_error_callback on error.
|
||
* @note This callback is invoked in an interrupt context and the buffer will be freed after the call.
|
||
* Errors registered are frame.
|
||
* @param err_info The UART error info data, every data is 32-bit.
|
||
* @param len The UART error info data, every data is 32-bit.
|
||
* @else
|
||
* @brief UART错误处理回调函数,通过uapi_uart_register_frame_error_callback注册到驱动中。
|
||
* @note 这个函数是在中断上下文中执行的,而且在执行完成之后会自动释放内存。
|
||
* @param err_info 错误信息,每一个成员都是32-bit的。
|
||
* @param len 错误信息的长度。
|
||
* @endif
|
||
*/
|
||
typedef void (*uart_error_callback_t)(uint32_t *err_info, uint32_t len);
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Initialize the serial port.
|
||
* @param [in] bus The UART bus. see @ref uart_bus_t.
|
||
* @param [in] pins The PINs to use for UART TX, RX, RTS and CTS.
|
||
* @param [in] attr Basic configuration of UART. see @ref uart_attr_t.
|
||
* @param [in] extra_attr High-level configuration of UART. see @ref uart_extra_attr_t.
|
||
* @param [in] uart_buffer_config Specify a reception buffer.
|
||
* @retval ERRCODE_SUCC Success.
|
||
* @retval Other Failure. For details, see @ref errcode_t
|
||
* @else
|
||
* @brief 初始化指定的串口。
|
||
* @param [in] bus 串口号,参考 @ref uart_bus_t 。
|
||
* @param [in] pins UART中使用的PIN,包括TX, RX, RTS和CTS。
|
||
* @param [in] attr UART的基础配置参数,参考 @ref uart_attr_t 。
|
||
* @param [in] extra_attr UART的高级配置参数,参考 @ref uart_extra_attr_t 。
|
||
* @param [in] uart_buffer_config 指定UART的接收Buffer。
|
||
* @retval ERRCODE_SUCC 成功。
|
||
* @retval Other 失败,参考 @ref errcode_t 。
|
||
* @endif
|
||
*/
|
||
errcode_t uapi_uart_init(uart_bus_t bus, const uart_pin_config_t *pins,
|
||
const uart_attr_t *attr, const uart_extra_attr_t *extra_attr,
|
||
uart_buffer_config_t *uart_buffer_config);
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Deinitialize the serial port.
|
||
* @param [in] bus The UART bus, see @ref uart_bus_t.
|
||
* @retval ERRCODE_SUCC Success.
|
||
* @retval Other Failure. For details, see @ref errcode_t.
|
||
* @else
|
||
* @brief 去初始化指定的串口。
|
||
* @param [in] bus 串口号,参考 @ref uart_bus_t 。
|
||
* @retval ERRCODE_SUCC 成功。
|
||
* @retval Other 失败,参考 @ref errcode_t 。
|
||
* @endif
|
||
*/
|
||
errcode_t uapi_uart_deinit(uart_bus_t bus);
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Set UART basic configuration.
|
||
* @param [in] bus The UART bus. see @ref uart_bus_t.
|
||
* @param [in] attr Basic configuration of UART. see @ref uart_attr_t.
|
||
* @retval ERRCODE_SUCC Success.
|
||
* @retval Other Failure. For details, see @ref errcode_t.
|
||
* @else
|
||
* @brief 设置串口的基础配置参数。
|
||
* @param [in] bus 串口号,参考 @ref uart_bus_t 。
|
||
* @param [in] attr UART的基础配置参数,参考 @ref uart_attr_t 。
|
||
* @retval ERRCODE_SUCC 成功。
|
||
* @retval Other 失败,参考 @ref errcode_t 。
|
||
* @endif
|
||
*/
|
||
errcode_t uapi_uart_set_attr(uart_bus_t bus, const uart_attr_t *attr);
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Get UART basic configuration.
|
||
* @param [in] bus The UART bus. see @ref uart_bus_t.
|
||
* @param [in] attr Basic configuration of UART. see @ref uart_attr_t.
|
||
* @retval ERRCODE_SUCC Success.
|
||
* @retval Other Failure. For details, see @ref errcode_t.
|
||
* @else
|
||
* @brief 获取串口的基础配置参数。
|
||
* @param [in] bus 串口号,参考 @ref uart_bus_t 。
|
||
* @param [in] attr UART的基础配置参数,参考 @ref uart_attr_t 。
|
||
* @retval ERRCODE_SUCC 成功。
|
||
* @retval Other 失败,参考 @ref errcode_t 。
|
||
* @endif
|
||
*/
|
||
errcode_t uapi_uart_get_attr(uart_bus_t bus, const uart_attr_t *attr);
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Returns true if there are pending transmissions.
|
||
* @param [in] bus The UART bus. see @ref uart_bus_t.
|
||
* @return true indicates that there're pending transmissions, otherwise false.
|
||
* @else
|
||
* @brief 判断是否存在正在等待的传输。
|
||
* @param [in] bus 串口号,参考 @ref uart_bus_t 。
|
||
* @return true表示存在正在等待的传输,false表示没有正在等待的传输。
|
||
* @endif
|
||
*/
|
||
bool uapi_uart_has_pending_transmissions(uart_bus_t bus);
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Returns true if rx fifo is empty.
|
||
* @param [in] bus The UART bus. see @ref uart_bus_t.
|
||
* @return true indicates that rx fifo is empty, otherwise false.
|
||
* @else
|
||
* @brief 判断RX FIFO是否为空。
|
||
* @param [in] bus 串口号,参考 @ref uart_bus_t 。
|
||
* @return true表示RX FIFO为空,false表示RX FIFO非空。
|
||
* @endif
|
||
*/
|
||
bool uapi_uart_rx_fifo_is_empty(uart_bus_t bus);
|
||
|
||
#if defined(CONFIG_UART_SUPPORT_RX)
|
||
/**
|
||
* @if Eng
|
||
* @brief Registers a receive callback that will be triggered depending on condition and size.
|
||
* @note Callback will be called in an interrupt context.
|
||
* @param [in] bus The UART bus. see @ref uart_bus_t.
|
||
* @param [in] condition Condition on which the callback will be triggered.
|
||
* @param [in] size If condition implies a size this will be used.
|
||
* @param [in] callback Receive callback to call.
|
||
* @retval ERRCODE_SUCC Success.
|
||
* @retval Other Failure. For details, see @ref errcode_t
|
||
* @else
|
||
* @brief 注册接收回调函数,这个回调函数会根据触发条件和Size触发。
|
||
* @note 回调函数在中断上下文执行。
|
||
* @param [in] bus 串口号,参考 @ref uart_bus_t 。
|
||
* @param [in] condition 回调触发的条件,参考 @ref uart_rx_condition_t 。
|
||
* @param [in] size 如果触发条件涉及到数据长度,这个参数就表示需要的数据长度。
|
||
* @param [in] callback 接收数据的回调函数。
|
||
* @retval ERRCODE_SUCC 成功。
|
||
* @retval Other 失败,参考 @ref errcode_t 。
|
||
* @endif
|
||
*/
|
||
errcode_t uapi_uart_register_rx_callback(uart_bus_t bus, uart_rx_condition_t condition,
|
||
uint32_t size, uart_rx_callback_t callback);
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Unregisters a receive callback.
|
||
* @param [in] bus The UART bus. see @ref uart_bus_t.
|
||
* @else
|
||
* @brief 去注册接收回调函数。
|
||
* @param [in] bus 串口号,参考 @ref uart_bus_t 。
|
||
* @endif
|
||
*/
|
||
void uapi_uart_unregister_rx_callback(uart_bus_t bus);
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Registers a parity error callback that will be triggered.
|
||
* @note Callback will be called in an interrupt context.
|
||
* @param [in] bus The UART bus. see @ref uart_bus_t.
|
||
* @param [in] callback Parity error callback to call.
|
||
* @retval ERRCODE_SUCC Success.
|
||
* @retval Other Failure. For details, see @ref errcode_t.
|
||
* @else
|
||
* @brief 注册奇偶校验错误处理的回调函数。
|
||
* @note 回调函数在中断上下文执行。
|
||
* @param [in] bus 串口号,参考 @ref uart_bus_t 。
|
||
* @param [in] callback 奇偶校验错误处理回调函数。
|
||
* @retval ERRCODE_SUCC 成功。
|
||
* @retval Other 失败,参考 @ref errcode_t 。
|
||
* @endif
|
||
*/
|
||
errcode_t uapi_uart_register_parity_error_callback(uart_bus_t bus, uart_error_callback_t callback);
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Registers a frame error callback that will be triggered.
|
||
* @note Callback will be called in an interrupt context.
|
||
* @param [in] bus The UART bus. see @ref uart_bus_t.
|
||
* @param [in] callback Frame error callback to call.
|
||
* @retval ERRCODE_SUCC Success.
|
||
* @retval Other Failure. For details, see @ref errcode_t.
|
||
* @else
|
||
* @brief 注册帧错误处理回调函数。
|
||
* @note 回调函数在中断上下文执行。
|
||
* @param [in] bus 串口号,参考 @ref uart_bus_t 。
|
||
* @param [in] callback 帧错误错误处理回调函数。
|
||
* @retval ERRCODE_SUCC 成功。
|
||
* @retval Other 失败,参考 @ref errcode_t 。
|
||
* @endif
|
||
*/
|
||
errcode_t uapi_uart_register_frame_error_callback(uart_bus_t bus, uart_error_callback_t callback);
|
||
#endif /* CONFIG_UART_SUPPORT_RX */
|
||
|
||
#if defined(CONFIG_UART_SUPPORT_TX)
|
||
/**
|
||
* @if Eng
|
||
* @brief Writes a buffer to an opened UART in polling mode.
|
||
* @param [in] bus The UART bus. see @ref uart_bus_t
|
||
* @param [in] buffer Pointer to the buffer to write through the UART.
|
||
* @param [in] length Length of the buffer to write.
|
||
* @param [in] timeout Timeout duration.
|
||
* @return Amount of data write to UART.
|
||
* @else
|
||
* @brief 将数据发送到已经打开的UART上,使用直接发送的方式。
|
||
* @param [in] bus 串口号,参考 @ref uart_bus_t 。
|
||
* @param [in] buffer 要发送的数据Buffer。
|
||
* @param [in] length 要发送的数据Buffer长度。
|
||
* @param [in] timeout 超时时间。
|
||
* @return 实际发送的数据长度。
|
||
* @endif
|
||
*/
|
||
int32_t uapi_uart_write(uart_bus_t bus, const uint8_t *buffer, uint32_t length, uint32_t timeout);
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Writes a buffer to an opened UART by interrupt and
|
||
* calls a finished_with_buffer_func call back when it finish.
|
||
* @note callback will be called in an interrupt context.
|
||
* @param [in] bus The UART bus. see @ref uart_bus_t
|
||
* @param [in] buffer Pointer to the buffer to write through the UART.
|
||
* @param [in] length Length of the buffer to write.
|
||
* @param [in] params Parameter to pass to finished_with_buffer_func.
|
||
* @param [in] finished_with_buffer_func Function to call when the buffer is fully transmitted. it will be called in
|
||
* the way finished_with_buffer_func(buffer, length, params).
|
||
* @retval ERRCODE_SUCC Success.
|
||
* @retval Other Failure. For details, see @ref errcode_t.
|
||
* @else
|
||
* @brief 使用中断模式将数据发送到已经打开的UART上,当数据发送完成,会调用回调函数。
|
||
* @note 回调函数在中断上下文执行。
|
||
* @param [in] bus 串口号,参考 @ref uart_bus_t 。
|
||
* @param [in] buffer 要发送的数据Buffer。
|
||
* @param [in] length 要发送的数据Buffer长度。
|
||
* @param [in] params 传递到完成传输的回调函数的参数。
|
||
* @param [in] finished_with_buffer_func 数据发送完成的回调函数。
|
||
* @retval ERRCODE_SUCC 成功。
|
||
* @retval Other 失败,参考 @ref errcode_t 。
|
||
* @endif
|
||
*/
|
||
errcode_t uapi_uart_write_int(uart_bus_t bus, const uint8_t *buffer, uint32_t length,
|
||
void *params, uart_tx_callback_t finished_with_buffer_func);
|
||
|
||
#if defined(CONFIG_UART_SUPPORT_DMA)
|
||
/**
|
||
* @if Eng
|
||
* @brief Write data to the UART by dma.
|
||
* @param [in] bus The UART bus. see @ref uart_bus_t.
|
||
* @param [in] buffer Pointer to the write buffer.
|
||
* @param [in] length Length of the buffer.
|
||
* @param [in] dma_cfg Dma configuration of UART. see @ref uart_write_dma_config_t.
|
||
* @return The count of data have been sent by UART.
|
||
* @else
|
||
* @brief 通过DMA发送数据。
|
||
* @param [in] bus 串口号,参考 @ref uart_bus_t 。
|
||
* @param [in] buffer 要发送的数据Buffer。
|
||
* @param [in] length 要发送的数据Buffer长度。
|
||
* @param [in] dma_cfg 发送数据时候的DMA配置,参考 @ref uart_write_dma_config_t 。
|
||
* @return 完成发送的数据长度。
|
||
* @endif
|
||
*/
|
||
int32_t uapi_uart_write_by_dma(uart_bus_t bus, const void *buffer, uint32_t length, uart_write_dma_config_t *dma_cfg);
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Read data from the UART by dma.
|
||
* @param [in] bus The UART bus. see @ref uart_bus_t
|
||
* @param [in] buffer Pointer to the read buffer.
|
||
* @param [in] length Length of the buffer.
|
||
* @param [in] dma_cfg Dma configuration of UART. see @ref uart_write_dma_config_t.
|
||
* @return The count of data have been receive by UART.
|
||
* @else
|
||
* @brief 通过DMA读取数据。
|
||
* @param [in] bus 串口号,参考 @ref uart_bus_t 。
|
||
* @param [in] buffer 要发送的数据Buffer。
|
||
* @param [in] length 要发送的数据Buffer长度。
|
||
* @param [in] dma_cfg 接收数据时候的DMA配置,参考 @ref uart_write_dma_config_t 。
|
||
* @return 完成接收的数据长度。
|
||
* @endif
|
||
*/
|
||
int32_t uapi_uart_read_by_dma(uart_bus_t bus, const void *buffer, uint32_t length, uart_write_dma_config_t *dma_cfg);
|
||
#endif /* CONFIG_UART_SUPPORT_DMA */
|
||
#endif /* CONFIG_UART_SUPPORT_TX */
|
||
|
||
#if defined(CONFIG_UART_SUPPORT_RX)
|
||
/**
|
||
* @if Eng
|
||
* @brief Read data from UART.
|
||
* @param [in] bus The UART bus. see @ref uart_bus_t.
|
||
* @param [in] buffer Pointer to the read buffer.
|
||
* @param [in] length Amount of data to be received.
|
||
* @param [in] timeout Timeout duration.
|
||
* @return Amount of data read from UART.
|
||
* @else
|
||
* @brief 从UART读取数据。
|
||
* @param [in] bus 串口号,参考 @ref uart_bus_t 。
|
||
* @param [in] buffer 存储接收数据的Buffer。
|
||
* @param [in] length 存储接收数据的Buffer长度。
|
||
* @param [in] timeout 超时时间。
|
||
* @return 实际读到的数据长度。
|
||
* @endif
|
||
*/
|
||
int32_t uapi_uart_read(uart_bus_t bus, const uint8_t *buffer, uint32_t length, uint32_t timeout);
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Flush all data held in the supplied UART's RX buffer.
|
||
* @param [in] bus The UART bus. see @ref uart_bus_t.
|
||
* @retval ERRCODE_SUCC Success.
|
||
* @retval Other Failure. For details, see @ref errcode_t.
|
||
* @else
|
||
* @brief 刷新UART接收Buffer中的数据。
|
||
* @param [in] bus 串口号,参考 @ref uart_bus_t 。
|
||
* @retval ERRCODE_SUCC 成功。
|
||
* @retval Other 失败,参考 @ref errcode_t 。
|
||
* @endif
|
||
*/
|
||
errcode_t uapi_uart_flush_rx_data(uart_bus_t bus);
|
||
#endif /* CONFIG_UART_SUPPORT_RX */
|
||
|
||
#if defined(CONFIG_UART_SUPPORT_LPM)
|
||
/**
|
||
* @if Eng
|
||
* @brief Suspend all of the UART channels.
|
||
* @param [in] arg Argument for suspend.
|
||
* @retval ERRCODE_SUCC Success.
|
||
* @retval Other Failure. For details, see @ref errcode_t.
|
||
* @else
|
||
* @brief 挂起所有的UART通道。
|
||
* @param [in] arg 挂起所需要的参数。
|
||
* @retval ERRCODE_SUCC 成功。
|
||
* @retval Other 失败,参考 @ref errcode_t 。
|
||
* @endif
|
||
*/
|
||
errcode_t uapi_uart_suspend(uintptr_t arg);
|
||
|
||
/**
|
||
* @if Eng
|
||
* @brief Resume all of the UART channels.
|
||
* @param [in] arg Argument for resume.
|
||
* @retval ERRCODE_SUCC Success.
|
||
* @retval Other Failure. For details, see @ref errcode_t.
|
||
* @else
|
||
* @brief 恢复所有的UART通道。
|
||
* @param [in] arg 恢复所需要的参数。
|
||
* @retval ERRCODE_SUCC 成功。
|
||
* @retval Other 失败,参考 @ref errcode_t 。
|
||
* @endif
|
||
*/
|
||
errcode_t uapi_uart_resume(uintptr_t arg);
|
||
#endif /* CONFIG_UART_SUPPORT_LPM */
|
||
|
||
/**
|
||
* @}
|
||
*/
|
||
|
||
#ifdef __cplusplus
|
||
#if __cplusplus
|
||
}
|
||
#endif /* __cplusplus */
|
||
#endif /* __cplusplus */
|
||
|
||
#endif |