Files
ESPC3-wireless/app/drivers/sertrf/protocol/p_protocol.h

106 lines
2.2 KiB
C

#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;
mavlink_message_t message;
}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);
/**
* @brief 飞控重启命令
*
*/
int fc_reboot(void);
#endif