GrabBag/Module/BinocularMarkReceiver/Inc/IBinocularMarkReceiver.h

188 lines
5.6 KiB
C
Raw Normal View History

2025-12-10 00:01:32 +08:00
#ifndef IBINOCULARMARKRECEIVER_H
#define IBINOCULARMARKRECEIVER_H
#include <functional>
#include <vector>
#include <string>
#include <cstdint>
// 导出宏定义
#ifdef _WIN32
# ifdef BINOCULARMARKRECEIVER_LIBRARY
# define BINOCULARMARKRECEIVER_EXPORT __declspec(dllexport)
# else
# define BINOCULARMARKRECEIVER_EXPORT __declspec(dllimport)
# endif
#else
# define BINOCULARMARKRECEIVER_EXPORT __attribute__((visibility("default")))
#endif
2025-12-10 00:01:32 +08:00
/**
* @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
*/
enum class ReceiverEventType
{
UNKNOWN, // 未知事件
CONNECTED, // 已连接
DISCONNECTED, // 已断开
CONNECTION_ERROR, // 连接错误
HEARTBEAT_TIMEOUT // 心跳超时
};
2025-12-10 00:01:32 +08:00
/**
* @brief Mark数据接收器接口
* BinocularMarkApp接收3D Mark检测结果
*/
class BINOCULARMARKRECEIVER_EXPORT IBinocularMarkReceiver
2025-12-10 00:01:32 +08:00
{
public:
virtual ~IBinocularMarkReceiver() = default;
/**
* @brief
*/
struct SingleDetectionResult {
std::vector<VrMark3D> marks; // 检测到的3D标记列表
std::string leftImageBase64; // 左相机图像Base64编码
std::string rightImageBase64; // 右相机图像Base64编码
int64_t timestamp; // 时间戳
int errorCode; // 错误码0表示成功
};
/**
* @brief
*/
struct ImageData {
std::string leftImageBase64; // 左相机图像Base64编码
std::string rightImageBase64; // 右相机图像Base64编码
int64_t timestamp; // 时间戳
};
/**
* @brief Mark结果回调函数类型
2025-12-10 00:01:32 +08:00
* @param marks 3D标记列表
* @param timestamp
* @param errorCode 0
*/
using MarkResultCallback = std::function<void(const std::vector<VrMark3D>& marks,
int64_t timestamp,
2025-12-10 00:01:32 +08:00
int errorCode)>;
/**
* @brief
* @param eventType
* @param errorMsg
2025-12-10 00:01:32 +08:00
*/
using EventCallback = std::function<void(ReceiverEventType eventType, const std::string& errorMsg)>;
2025-12-10 00:01:32 +08:00
/**
* @brief TCP客户端并连接到服务器
* @param serverIp IP地址
* @param serverPort
* @return 0--
*/
virtual int Connect(const std::string& serverIp, uint16_t serverPort) = 0;
2025-12-10 00:01:32 +08:00
/**
* @brief
* @return 0--
*/
virtual int Disconnect() = 0;
/**
* @brief
* @return true-false-
*/
virtual bool IsConnected() const = 0;
/**
* @brief 使RequestSingleDetection代替
2025-12-10 00:01:32 +08:00
* @return 0--
*/
virtual int TriggerDetection() = 0;
/**
* @brief Mark结果
* @param timeoutMs 5000ms
* @return
*/
virtual SingleDetectionResult RequestSingleDetection(int timeoutMs = 5000) = 0;
/**
* @brief
* @param timeoutMs 5000ms
* @return
*/
virtual ImageData RequestSingleImage(int timeoutMs = 5000) = 0;
2025-12-10 00:01:32 +08:00
/**
* @brief
2025-12-10 00:01:32 +08:00
* @return 0--
*/
virtual int StartWork() = 0;
2025-12-10 00:01:32 +08:00
/**
* @brief
* @return 0--
2025-12-10 00:01:32 +08:00
*/
virtual int StopWork() = 0;
2025-12-10 00:01:32 +08:00
/**
* @brief
* @param calibrationXml XML内容
* @return 0--
2025-12-10 00:01:32 +08:00
*/
virtual int SetCalibrationMatrix(const std::string& calibrationXml) = 0;
2025-12-10 00:01:32 +08:00
/**
* @brief
* @param exposureTime
* @return 0--
2025-12-10 00:01:32 +08:00
*/
virtual int SetExposureTime(double exposureTime) = 0;
2025-12-10 00:01:32 +08:00
/**
* @brief
* @param gain
* @return 0--
*/
virtual int SetGain(double gain) = 0;
/**
* @brief Mark结果回调使
* @param callback
*/
virtual void SetMarkResultCallback(MarkResultCallback callback) = 0;
/**
* @brief
* @param callback
2025-12-10 00:01:32 +08:00
*/
virtual void SetEventCallback(EventCallback callback) = 0;
2025-12-10 00:01:32 +08:00
/**
* @brief BinocularMarkReceiver实例
* @param ppReceiver
* @return 0--
*/
static int CreateInstance(IBinocularMarkReceiver** ppReceiver);
};
#endif // IBINOCULARMARKRECEIVER_H