#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 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_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);
#endif