114 lines
3.1 KiB
C
114 lines
3.1 KiB
C
|
|
#ifndef IBINOCULARMARKRECEIVER_H
|
|||
|
|
#define IBINOCULARMARKRECEIVER_H
|
|||
|
|
|
|||
|
|
#include <functional>
|
|||
|
|
#include <vector>
|
|||
|
|
#include <string>
|
|||
|
|
#include <QtGlobal> // 提供qint64、quint16等Qt基本类型
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 通用 Mark 3D 数据结构
|
|||
|
|
* 不依赖具体算法库的 Mark 数据定义
|
|||
|
|
*/
|
|||
|
|
struct VrMark3D
|
|||
|
|
{
|
|||
|
|
int markID; // Mark ID
|
|||
|
|
double x; // X 坐标
|
|||
|
|
double y; // Y 坐标
|
|||
|
|
double z; // Z 坐标
|
|||
|
|
|
|||
|
|
VrMark3D() : markID(-1), x(0.0), y(0.0), z(0.0) {}
|
|||
|
|
VrMark3D(int id, double _x, double _y, double _z)
|
|||
|
|
: markID(id), x(_x), y(_y), z(_z) {}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 双目Mark数据接收器接口
|
|||
|
|
* 用于从BinocularMarkApp接收3D Mark检测结果
|
|||
|
|
*/
|
|||
|
|
class IBinocularMarkReceiver
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
virtual ~IBinocularMarkReceiver() = default;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief Mark结果回调函数类型
|
|||
|
|
* @param marks 检测到的3D标记列表
|
|||
|
|
* @param timestamp 时间戳
|
|||
|
|
* @param errorCode 错误码(0表示成功)
|
|||
|
|
*/
|
|||
|
|
using MarkResultCallback = std::function<void(const std::vector<VrMark3D>& marks,
|
|||
|
|
qint64 timestamp,
|
|||
|
|
int errorCode)>;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 连接状态改变回调函数类型
|
|||
|
|
* @param connected true-已连接,false-断开连接
|
|||
|
|
*/
|
|||
|
|
using ConnectionStatusCallback = std::function<void(bool connected)>;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 启动TCP客户端并连接到服务器
|
|||
|
|
* @param serverIp 服务器IP地址
|
|||
|
|
* @param serverPort 服务器端口
|
|||
|
|
* @return 0-成功,其他-失败
|
|||
|
|
*/
|
|||
|
|
virtual int Connect(const std::string& serverIp, quint16 serverPort) = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 断开连接
|
|||
|
|
* @return 0-成功,其他-失败
|
|||
|
|
*/
|
|||
|
|
virtual int Disconnect() = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 检查是否已连接
|
|||
|
|
* @return true-已连接,false-未连接
|
|||
|
|
*/
|
|||
|
|
virtual bool IsConnected() const = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 发送心跳消息
|
|||
|
|
* @return 0-成功,其他-失败
|
|||
|
|
*/
|
|||
|
|
virtual int SendHeartbeat() = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 发送触发检测命令
|
|||
|
|
* @return 0-成功,其他-失败
|
|||
|
|
*/
|
|||
|
|
virtual int TriggerDetection() = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 设置Mark结果回调
|
|||
|
|
* @param callback 回调函数
|
|||
|
|
*/
|
|||
|
|
virtual void SetMarkResultCallback(MarkResultCallback callback) = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 设置连接状态回调
|
|||
|
|
* @param callback 回调函数
|
|||
|
|
*/
|
|||
|
|
virtual void SetConnectionStatusCallback(ConnectionStatusCallback callback) = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 启动心跳定时器
|
|||
|
|
* @param intervalSeconds 心跳间隔(秒),默认30秒
|
|||
|
|
*/
|
|||
|
|
virtual void StartHeartbeat(int intervalSeconds = 30) = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 停止心跳定时器
|
|||
|
|
*/
|
|||
|
|
virtual void StopHeartbeat() = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 创建BinocularMarkReceiver实例
|
|||
|
|
* @param ppReceiver 接收器实例指针
|
|||
|
|
* @return 0-成功,其他-失败
|
|||
|
|
*/
|
|||
|
|
static int CreateInstance(IBinocularMarkReceiver** ppReceiver);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
#endif // IBINOCULARMARKRECEIVER_H
|