代码框架

包含两个模块相互配合,分别为地面站和通信节点;

其中逻辑就是两个模块的通信交互,地面站和Prometheus收发程序的其余功能多数都是基于此进行的扩展开发。

地面站和通信节点的代码框架以及流程可以参考下图:(注:此地面站为专业版地面站)

地面站流程图.png

注意:Prometheus收发程序为Prometheus通信节点

接口介绍

主要介绍一下地面站中一些核心接口函数,介绍如下:

    /**
     * @brief 模版函数,编码函数
     * 
     * @param send_mode 发送方式,TCP或者UDP
     * @param msg 进行编码的结构体
     * @param id 该数据的发送者ID,输入为0时,则按初始化中的无人机ID为准
     * @return int 返回编码后的长度
     */
    template <typename T>
    int encodeMsg(int8_t send_mode, T msg,int id = 0);

    /**
     * @brief 解码函数
     * 
     * @param buff 接收到的数据
     * @param send_mode 接收到的方式,TCP或者UDP
     * @return int 返回解码后得到的结构体对应的ID
     */
    int decodeMsg(char *buff,int8_t send_mode);

    /**
     * @brief 返回结构体ID
     * 
     * @param msg 结构体
     * @return uint8_t 结构体对应的ID
     */
    template <typename T>
    uint8_t getMsgId(T msg);

    /**
     * @brief UDP发送函数
     * 
     * @param msg_len 发送的数据的长度
     * @param target_ip 发送的目标地址
     */
    void sendMsgByUdp(int msg_len, std::string target_ip);

    /**
     * @brief TCP发送函数
     * 
     * @param msg_len 发送的数据的长度
     * @param target_ip 发送的目标地址
     */
    void sendMsgByTcp(int msg_len, std::string target_ip);

    /**
     * @brief 创建TCP服务端并返回socket标识符
     * 
     * @param port 端口号
     * @return int TCP服务端socket标识符
     */
    int waitConnectionFromGroundStation(const int port);

    /**
     * @brief 创建UDP服务端并返回socket标识符
     * 
     * @param port 端口号
     * @return int UDP服务端socket标识符
     */
    int waitConnectionFromMulticast(const int port);