Files
fastbee/sdk/合宙/air780e/csdk/luatos-soc-2022/interface/include/luat_uart.h
2023-03-04 03:44:56 +08:00

177 lines
5.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (c) 2022 OpenLuat & AirM2M
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef LUAT_UART_H
#define LUAT_UART_H
#include "luat_base.h"
#include "luat_uart_legacy.h"
/**
*@version V1.0
*@attention
*上报接收数据中断的逻辑:
* 1.串口初始化时,新建一个缓冲区
* 2.可以考虑多为用户申请几百字节的缓冲长度,用户处理时防止丢包
* 3.每次串口收到数据时,先存入缓冲区,记录长度
* 4.遇到以下情况时,再调用串口中断
a)缓冲区满(帮用户多申请的的情况)/缓冲区只剩几百字节(按实际长度申请缓冲区的情况)
b)收到fifo接收超时中断此时串口数据应该是没有继续收了
* 5.触发收到数据中断时,返回的数据应是缓冲区的数据
* 6.关闭串口时,释放缓冲区资源
*/
/**
* @ingroup luatos_device 外设接口
* @{
*/
/**
* @defgroup luatos_device_uart UART接口
* @{
*/
/**
* @brief 校验位
*/
#define LUAT_PARITY_NONE 0 /**< 无校验 */
#define LUAT_PARITY_ODD 1 /**< 奇校验 */
#define LUAT_PARITY_EVEN 2 /**< 偶校验 */
/**
* @brief 高低位顺序
*/
#define LUAT_BIT_ORDER_LSB 0 /**< 低位有效 */
#define LUAT_BIT_ORDER_MSB 1 /**< 高位有效 */
/**
* @brief 停止位
*/
#define LUAT_0_5_STOP_BITS 0xf0 /**< 0.5 */
#define LUAT_1_5_STOP_BITS 0xf1 /**< 1.5 */
#define LUAT_VUART_ID_0 0x20
/**
* @brief luat_uart
* @attention uart0 为底层日志口接口,如果确需使用并明白所带来的后果, 请调用soc_uart0_set_log_off(1)关闭底层日志口具体实例参见project/example_uart demo;
*/
typedef struct luat_uart {
int id; /**< 串口id */
int baud_rate; /**< 波特率 */
uint8_t data_bits; /**< 数据位 */
uint8_t stop_bits; /**< 停止位 */
uint8_t bit_order; /**< 高低位 */
uint8_t parity; /**< 奇偶校验位 */
size_t bufsz; /**< 接收数据缓冲区大小 */
uint32_t pin485; /**< 转换485的pin, 如果没有则是0xffffffff*/
uint32_t delay; /**< 485翻转延迟时间单位us */
uint8_t rx_level; /**< 接收方向的电平 */
} luat_uart_t;
/**
* @brief uart初始化
*
* @param uart luat_uart结构体
* @return int
*/
int luat_uart_setup(luat_uart_t* uart);
/**
* @brief 串口写数据
*
* @param uart_id 串口id
* @param data 数据
* @param length 数据长度
* @return int
*/
int luat_uart_write(int uart_id, void* data, size_t length);
/**
* @brief 串口读数据
*
* @param uart_id 串口id
* @param buffer 数据
* @param length 数据长度
* @return int
*/
int luat_uart_read(int uart_id, void* buffer, size_t length);
/**
* @brief 关闭串口
*
* @param uart_id 串口id
* @return int
*/
int luat_uart_close(int uart_id);
/**
* @brief 检测串口是否存在
*
* @param uart_id 串口id
* @return int
*/
int luat_uart_exist(int uart_id);
/**
* @brief 串口控制参数
*/
typedef enum LUAT_UART_CTRL_CMD
{
LUAT_UART_SET_RECV_CALLBACK,/**< 接收回调 */
LUAT_UART_SET_SENT_CALLBACK/**< 发送回调 */
}LUAT_UART_CTRL_CMD_E;
/**
* @brief 接收回调函数
*
*/
typedef void (*luat_uart_recv_callback_t)(int uart_id, uint32_t data_len);
/**
* @brief 发送回调函数
*
*/
typedef void (*luat_uart_sent_callback_t)(int uart_id, void *param);
/**
* @brief 串口控制参数
*
*/
typedef struct luat_uart_ctrl_param
{
luat_uart_recv_callback_t recv_callback_fun;/**< 接收回调函数 */
luat_uart_sent_callback_t sent_callback_fun;/**< 发送回调函数 */
}luat_uart_ctrl_param_t;
/**
* @brief 串口控制
*
* @param uart_id 串口id
* @param cmd 串口控制命令
* @param param 串口控制参数
* @return int
*/
int luat_uart_ctrl(int uart_id, LUAT_UART_CTRL_CMD_E cmd, void* param);
/** @}*/
/** @}*/
#endif