GrabBag/Module/BinocularMarkReceiver/Inc/IBinocularMarkReceiver.h
2025-12-10 00:01:32 +08:00

114 lines
3.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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