GrabBag/VrCommon/Inc/VrConfigCmd.h

179 lines
5.1 KiB
C
Raw Normal View History

2025-07-23 01:35:14 +08:00
#ifndef VRCONFIGCMD_H
#define VRCONFIGCMD_H
#include <string>
#include <cstring>
// 配置命令类型枚举
enum ConfigCmdType
{
CONFIG_CMD_UNKNOWN = 0,
CONFIG_CMD_CAMERA_EXPOSE, // 相机曝光设置
CONFIG_CMD_CAMERA_GAIN, // 相机增益设置
CONFIG_CMD_CAMERA_FRAMERATE, // 相机帧率设置
CONFIG_CMD_CAMERA_SWING, // 相机摆动参数设置
CONFIG_CMD_ALGO_PARAM, // 算法参数设置
CONFIG_CMD_CALIB_PARAM, // 标定参数设置
CONFIG_CMD_FULL_CONFIG, // 完整配置更新
};
// 相机参数结构 (扩展支持UI中的所有参数)
struct CameraConfigParam
{
int cameraIndex; // 相机索引 (1或2, -1表示所有相机)
double exposeTime; // 曝光时间 (微秒)
double gain; // 增益值
double frameRate; // 帧率
double swingSpeed; // 摆动速度
double swingStartAngle; // 开始角度
double swingStopAngle; // 结束角度
CameraConfigParam() : cameraIndex(-1), exposeTime(0.0), gain(0.0),
frameRate(0.0), swingSpeed(0.0), swingStartAngle(0.0), swingStopAngle(0.0) {}
};
// ROI区域参数结构
struct ROIConfigParam
{
int cameraIndex; // 相机索引 (1或2, -1表示所有相机)
int x; // 起始X坐标
int y; // 起始Y坐标
int width; // 宽度
int height; // 高度
ROIConfigParam() : cameraIndex(-1), x(0), y(0), width(0), height(0) {}
};
// 算法参数结构
struct AlgoConfigParam
{
char paramName[64]; // 参数名称
double paramValue; // 参数值
AlgoConfigParam() : paramValue(0.0)
{
memset(paramName, 0, sizeof(paramName));
}
};
// 标定参数结构
struct CalibConfigParam
{
int cameraIndex; // 相机索引
double matrix[16]; // 4x4变换矩阵
CalibConfigParam() : cameraIndex(-1)
{
memset(matrix, 0, sizeof(matrix));
}
};
// 摆动参数结构
struct SwingConfigParam
{
int cameraIndex; // 相机索引
double swingSpeed; // 摆动速度
double startAngle; // 开始角度
double stopAngle; // 结束角度
SwingConfigParam() : cameraIndex(-1), swingSpeed(0.0), startAngle(0.0), stopAngle(0.0) {}
};
// 完整配置结构 (用于传输ConfigResult)
struct FullConfigParam
{
char configJson[4096]; // JSON格式的完整配置数据
FullConfigParam()
{
memset(configJson, 0, sizeof(configJson));
}
};
// 配置命令数据结构
struct ConfigCmdData
{
ConfigCmdType cmdType; // 命令类型
char timestamp[32]; // 时间戳
union {
CameraConfigParam cameraParam;
ROIConfigParam roiParam;
AlgoConfigParam algoParam;
CalibConfigParam calibParam;
SwingConfigParam swingParam;
FullConfigParam fullConfigParam;
};
ConfigCmdData() : cmdType(CONFIG_CMD_UNKNOWN)
{
memset(timestamp, 0, sizeof(timestamp));
}
};
// 共享内存通信协议
struct ConfigCmdHeader
{
char magic[8]; // 魔数 "VRCFG001"
int version; // 版本号
int dataSize; // 数据大小
int checksum; // 校验和
bool hasNewData; // 是否有新数据
ConfigCmdHeader()
{
strcpy(magic, "VRCFG001");
version = 1;
dataSize = sizeof(ConfigCmdData);
checksum = 0;
hasNewData = false;
}
};
// 完整的共享内存数据结构
struct ConfigCmdSharedData
{
ConfigCmdHeader header;
ConfigCmdData data;
// 计算校验和
int CalculateChecksum() const
{
int sum = 0;
const char* ptr = reinterpret_cast<const char*>(&data);
for (size_t i = 0; i < sizeof(ConfigCmdData); ++i) {
sum += static_cast<unsigned char>(ptr[i]);
}
return sum;
}
// 验证校验和
bool ValidateChecksum() const
{
return header.checksum == CalculateChecksum();
}
};
// 共享内存名称定义
#define CONFIG_CMD_SHARED_MEM_NAME "GrabBagConfigCmd"
#define CONFIG_CMD_SHARED_MEM_SIZE sizeof(ConfigCmdSharedData)
// 命令行参数解析函数声明
class ConfigCmdParser
{
public:
// 解析命令行参数
static bool ParseCommandLine(int argc, char* argv[], ConfigCmdData& configData);
// 解析具体的配置命令
static bool ParseCameraExpose(const std::string& param, ConfigCmdData& configData);
static bool ParseCameraGain(const std::string& param, ConfigCmdData& configData);
static bool ParseROISetting(const std::string& param, ConfigCmdData& configData);
static bool ParseAlgoParam(const std::string& param, ConfigCmdData& configData);
static bool ParseCalibParam(const std::string& param, ConfigCmdData& configData);
// 显示帮助信息
static void ShowHelp();
};
#endif // VRCONFIGCMD_H