107 lines
4.5 KiB
C++
Raw Normal View History

2026-03-26 08:30:31 +08:00
#include "ConfigManager.h"
#include "VrLog.h"
#include "VrError.h"
#include "PathManager.h"
#include <cstdio>
// HolePitPosition 应用的 ConfigManager 实现
// 所有通用功能都在 BaseConfigManager 中实现
// 这里只实现 HolePitPosition 特定的功能
ConfigManager::ConfigManager()
{
}
ConfigManager::~ConfigManager()
{
}
// 重写 Initialize 以禁用共享内存监控HolePitPositionApp 不需要)
bool ConfigManager::Initialize(const std::string& configFilePath)
{
LOG_INFO("ConfigManager initializing for HolePitPositionApp...\n");
fprintf(stderr, "[DIAG-CM] ConfigManager::Initialize start\n"); fflush(stderr);
// 保存配置文件路径
QString defaultPath = PathManager::GetInstance().GetConfigFilePath();
m_configFilePath = defaultPath.toStdString();
fprintf(stderr, "[DIAG-CM] Config file path: %s\n", m_configFilePath.c_str()); fflush(stderr);
// 创建VrConfig实例
fprintf(stderr, "[DIAG-CM] Creating VrConfig instance...\n"); fflush(stderr);
if (!IVrConfig::CreateInstance(&m_pVrConfig) || !m_pVrConfig) {
LOG_ERROR("Failed to create VrConfig instance\n");
return false;
}
fprintf(stderr, "[DIAG-CM] VrConfig instance created OK\n"); fflush(stderr);
// 加载配置文件
fprintf(stderr, "[DIAG-CM] Loading config file...\n"); fflush(stderr);
if (!LoadConfigFromFile(m_configFilePath)) {
LOG_WARNING("Failed to load config file, using default config\n");
fprintf(stderr, "[DIAG-CM] Config file load failed, using defaults\n"); fflush(stderr);
_InitializeDefaultConfig();
}
fprintf(stderr, "[DIAG-CM] Config loaded OK\n"); fflush(stderr);
// HolePitPositionApp 不需要共享内存监控,跳过 ConfigMonitor 启动
LOG_INFO("ConfigManager initialized successfully for HolePitPositionApp (shared memory disabled)\n");
fprintf(stderr, "[DIAG-CM] ConfigManager::Initialize completed\n"); fflush(stderr);
return true;
}
// 实现 LoadConfigFromFile 以适配 HolePitPosition 的 IVrConfig API
// HolePitPosition 使用引用参数方式int LoadConfig(const std::string& filePath, ConfigResult& configResult)
bool ConfigManager::LoadConfigFromFile(const std::string& filePath)
{
fprintf(stderr, "[DIAG-CM] LoadConfigFromFile entry, path=%s\n", filePath.c_str()); fflush(stderr);
if (!m_pVrConfig) {
LOG_ERROR("VrConfig instance not available\n");
fprintf(stderr, "[DIAG-CM] LoadConfigFromFile: m_pVrConfig is null!\n"); fflush(stderr);
return false;
}
fprintf(stderr, "[DIAG-CM] LoadConfigFromFile: m_pVrConfig=%p OK\n", (void*)m_pVrConfig); fflush(stderr);
try {
fprintf(stderr, "[DIAG-CM] LoadConfigFromFile: creating ConfigResult on stack...\n"); fflush(stderr);
ConfigResult configResult;
fprintf(stderr, "[DIAG-CM] LoadConfigFromFile: ConfigResult created OK\n"); fflush(stderr);
// HolePitPosition 使用引用参数方式
fprintf(stderr, "[DIAG-CM] LoadConfigFromFile: calling m_pVrConfig->LoadConfig...\n"); fflush(stderr);
int ret = m_pVrConfig->LoadConfig(filePath, configResult);
fprintf(stderr, "[DIAG-CM] LoadConfigFromFile: LoadConfig returned %d\n", ret); fflush(stderr);
if (ret != SUCCESS) {
LOG_ERROR("Failed to load config from file: %s, error: %d\n", filePath.c_str(), ret);
fprintf(stderr, "[DIAG-CM] LoadConfigFromFile: LoadConfig failed with %d\n", ret); fflush(stderr);
return false;
}
// 使用基类的公共逻辑应用配置
fprintf(stderr, "[DIAG-CM] LoadConfigFromFile: calling _ApplyLoadedConfig...\n"); fflush(stderr);
bool applyResult = _ApplyLoadedConfig(configResult, filePath);
fprintf(stderr, "[DIAG-CM] LoadConfigFromFile: _ApplyLoadedConfig returned %d\n", applyResult); fflush(stderr);
return applyResult;
} catch (const std::exception& e) {
LOG_ERROR("Failed to load configuration from file %s: %s\n", filePath.c_str(), e.what());
fprintf(stderr, "[DIAG-CM] LoadConfigFromFile: exception: %s\n", e.what()); fflush(stderr);
return false;
}
}
void ConfigManager::OnSwitchWorkPositionCommand(int workPosition)
{
LOG_INFO("HolePitPosition: Received switch work position command: workPosition=%d\n", workPosition);
// HolePitPosition 应用特有的工作点切换逻辑
// 可能需要:
// 1. 重新加载不同的配置文件
// 2. 更新算法参数
// 3. 切换检测区域
// 4. 更新标定矩阵
// 5. 通知UI更新
}