#ifndef VRCONFIGCMD_H #define VRCONFIGCMD_H #include #include // 配置命令类型枚举 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, // 完整配置更新 CONFIG_CMD_SWITCH_WORKPOSITION, // 切换工作点 CONFIG_CMD_SWITCH_PACKAGETYPE, // 切换包裹类型 }; // 相机参数结构 (扩展支持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 SwitchWorkPositionParam { char workPositionId[64]; // 工作点ID SwitchWorkPositionParam() { memset(workPositionId, 0, sizeof(workPositionId)); } }; // 包裹类型切换参数结构 struct SwitchPackageTypeParam { char packageTypeId[64]; // 包裹类型ID SwitchPackageTypeParam() { memset(packageTypeId, 0, sizeof(packageTypeId)); } }; // 配置命令数据结构 struct ConfigCmdData { ConfigCmdType cmdType; // 命令类型 char timestamp[32]; // 时间戳 union { CameraConfigParam cameraParam; ROIConfigParam roiParam; AlgoConfigParam algoParam; CalibConfigParam calibParam; SwingConfigParam swingParam; FullConfigParam fullConfigParam; SwitchWorkPositionParam switchWorkPositionParam; SwitchPackageTypeParam switchPackageTypeParam; }; 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(&data); for (size_t i = 0; i < sizeof(ConfigCmdData); ++i) { sum += static_cast(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