GrabBag/AppUtils/AppCommon/Inc/ConfigMonitor.h

185 lines
4.7 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 CONFIGMONITOR_H
#define CONFIGMONITOR_H
#include <atomic>
#include <thread>
#include <mutex>
#include <memory>
#include <functional>
#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<bool> m_bMonitorRunning;
std::thread m_monitorThread;
// 共享内存名称
std::string m_sharedMemName;
};
#endif // CONFIGMONITOR_H