#ifndef CONFIGMONITOR_H #define CONFIGMONITOR_H #include #include #include #include #include #include "IVrShareMem.h" #include "VrConfigCmd.h" /** * @brief 配置命令处理器接口 * * 应用程序需要实现此接口来处理从共享内存接收到的配置命令 */ class IConfigCommandHandler { public: virtual ~IConfigCommandHandler() = default; /** * @brief 处理相机曝光设置命令 * @param param 相机配置参数 * @return true: 成功, false: 失败 */ virtual bool OnCameraExposeCommand(const CameraConfigParam& param) = 0; /** * @brief 处理相机增益设置命令 * @param param 相机配置参数 * @return true: 成功, false: 失败 */ virtual bool OnCameraGainCommand(const CameraConfigParam& param) = 0; /** * @brief 处理相机帧率设置命令 * @param param 相机配置参数 * @return true: 成功, false: 失败 */ virtual bool OnCameraFrameRateCommand(const CameraConfigParam& param) = 0; /** * @brief 处理相机摆动参数设置命令 * @param param 摆动配置参数 * @return true: 成功, false: 失败 */ virtual bool OnCameraSwingCommand(const SwingConfigParam& param) = 0; /** * @brief 处理算法参数设置命令 * @param param 算法配置参数 * @return true: 成功, false: 失败 */ virtual bool OnAlgoParamCommand(const AlgoConfigParam& param) = 0; /** * @brief 处理标定参数设置命令 * @param param 标定配置参数 * @return true: 成功, false: 失败 */ virtual bool OnCalibParamCommand(const CalibConfigParam& param) = 0; /** * @brief 处理完整配置更新命令 * @param param 完整配置参数 * @return true: 成功, false: 失败 */ virtual bool OnFullConfigCommand(const FullConfigParam& param) = 0; /** * @brief 处理工作点切换命令 * @param param 工作点切换参数 * @return true: 成功, false: 失败 */ virtual bool OnSwitchWorkPositionCommand(const SwitchWorkPositionParam& param) { // 默认空实现,子类可选择重写 return true; } /** * @brief 处理包裹类型切换命令 * @param param 包裹类型切换参数 * @return true: 成功, false: 失败 */ virtual bool OnSwitchPackageTypeCommand(const SwitchPackageTypeParam& param) { // 默认空实现,子类可选择重写 return true; } }; /** * @brief 配置监控器类 * * 负责监控共享内存中的配置命令,并分发给注册的处理器 * * 使用方法: * @code * // 1. 创建监控器实例 * ConfigMonitor monitor; * * // 2. 设置命令处理器 * monitor.SetCommandHandler(myHandler); * * // 3. 启动监控 * monitor.Start(); * * // 4. 停止监控 * monitor.Stop(); * @endcode */ class ConfigMonitor { public: ConfigMonitor(); ~ConfigMonitor(); /** * @brief 设置配置命令处理器 * @param handler 命令处理器指针 */ void SetCommandHandler(IConfigCommandHandler* handler); /** * @brief 启动共享内存监控 * @param sharedMemName 共享内存名称(默认使用CONFIG_CMD_SHARED_MEM_NAME) * @return true: 成功, false: 失败 */ bool Start(const std::string& sharedMemName = CONFIG_CMD_SHARED_MEM_NAME); /** * @brief 停止共享内存监控 */ void Stop(); /** * @brief 检查监控是否正在运行 * @return true: 运行中, false: 已停止 */ bool IsRunning() const { return m_bMonitorRunning; } private: /** * @brief 共享内存监控线程函数 */ void MonitorThreadFunc(); /** * @brief 初始化共享内存 * @param sharedMemName 共享内存名称 * @return true: 成功, false: 失败 */ bool InitializeSharedMemory(const std::string& sharedMemName); /** * @brief 清理共享内存 */ void CleanupSharedMemory(); /** * @brief 应用配置命令 * @param configData 配置命令数据 * @return true: 成功, false: 失败 */ bool ApplyConfigCommand(const ConfigCmdData& configData); private: // 共享内存实例 IVrShareMem* m_pShareMem; // 命令处理器 IConfigCommandHandler* m_pCommandHandler; // 监控线程 std::atomic m_bMonitorRunning; std::thread m_monitorThread; // 共享内存名称 std::string m_sharedMemName; }; #endif // CONFIGMONITOR_H