185 lines
4.7 KiB
C
185 lines
4.7 KiB
C
|
|
#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
|