更新硬件SDK

This commit is contained in:
kerwincui
2023-03-04 03:44:56 +08:00
parent dcdf6e1b7c
commit e39d3d2f03
1900 changed files with 663153 additions and 0 deletions

View File

@@ -0,0 +1,176 @@
/*
* 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