#pragma once #ifndef PROJECT_H #define PROJECT_H #include "../device.h" #include "mavlink_control.h" #include "MSP.h" typedef struct { int* uart_fd; sb_data_port_t* data_port; }protocol_port_t; typedef enum { PROTOCOL_IDLE, PROTOCOL_MSP, PROTOCOL_MAVLINK, }protocol_type_m; typedef enum { PORT_LINUX_UART = 0, PORT_LINUX_SBDATA, }port_type_m; typedef enum { MESSAGE_IDLE = 0, MESSAGE_OTA, }message_status_m; typedef enum { PROTOCOL_STATUS_OK = 0, PROTOCOL_STATUS_NO_DATA, //没有收到数据,或者数据小于一定量 PROTOCOL_STATUS_TYPE_IDLE, //协议类型未知 PROTOCOL_STATUS_ANALYSIS_ERROR, //长时间解析失败 PROTOCOL_STATUS_IN_OTA, //OTA中 }protocol_status_t; typedef struct { protocol_port_t port; protocol_type_m pro_type; port_type_m port_type; mavlink_device_t mavlink_device; msp_port_t msp; protocol_status_t protocol_status; uint16_t analysis_sussess_count; //数据解析成功次数 message_status_m message_status; }protocol_t; /** * @brief 初始化协议前端 * * @param port_type 使用的设备类型(如串口或其他) * @param port 由对应的驱动提供的绑定接口获得的句柄 */ void Protocol_init(port_type_m port_type, void* port); /** * @brief 搜索协议 * * @retval 协议类型 */ int Protocol_search(); /** * @brief 使用串口进行数据获取的主运行函数(针对需要使用串口读取) */ void Protocol_loop(void* arg); /** * @brief 搜索协议 * * @param data 数据缓存 * @param size 数据长度 * @retval 协议类型 */ int Protocol_buf_search(void* data, uint32_t size); /** * @brief 解析数据 (针对已获取到数据缓存) * * @param data 数据缓存 * @param size 数据长度 */ void Protocol_buf_decode(void* data, uint32_t size); /** * @brief 设置消息状态 * * @param status 消息状态 */ void protocol_set_message_status(message_status_m status); /** * @brief 获取协议状态 * * @retval 协议状态 */ protocol_status_t get_protocol_status(void); #endif