#include "stdafx.h" #include "CCOS.Dev.FPDDeviceMould.hpp" #include "DetectorConfiguration.h" #include "Detector_Model_Def.h" #include "common_api.h" #include "CCOSConfigurations.h" namespace nsFPD = CCOS::Dev::Detail::Detector; extern Log4CPP::Logger* gLogger; nsFPD::DetectorConfiguration::DetectorConfiguration(string ConfigPath) : m_strConfigPath(ConfigPath) , m_nDetModeNum(0) , m_pDetModeList(nullptr) { } nsFPD::DetectorConfiguration::~DetectorConfiguration() { if (m_pDetModeList) { delete[] m_pDetModeList; m_pDetModeList = nullptr; } } bool nsFPD::DetectorConfiguration::LoadConfigurations(DeviceIndexStruct & DeviceConf) { Info("Input the ConfigPath: {$}", m_strConfigPath); if (!m_ConfigAll.loadFile((m_strConfigPath).c_str())) { printf( "Load configuration file failed!!! \n"); return false; } try { m_Configurations = m_ConfigAll["CONFIGURATION"]; TransferModuleJosnConfig2DriverConfig(m_Configurations); auto Child_table = m_Configurations[NODE_ModeTable]; m_nDetModeNum = (int)Child_table.size(); if (m_nDetModeNum > 0) { m_pDetModeList = new DetModeInfo[m_nDetModeNum]; } for (int i = 0; i < m_nDetModeNum; i++) { //加载所有modeinfo到结构体 m_pDetModeList[i].nLogicMode = (int)Child_table[i]["LogicMode"]; m_pDetModeList[i].strExamType = (string)Child_table[i]["ExamType"]; m_pDetModeList[i].nImageWidth = (int)Child_table[i]["ImageWidth"]; m_pDetModeList[i].nImageHeight = (int)Child_table[i]["ImageHeight"]; m_pDetModeList[i].nWidthOffset = (int)Child_table[i]["WidthOffset"]; m_pDetModeList[i].nHeightOffset = (int)Child_table[i]["HeightOffset"]; m_pDetModeList[i].nRawImgWidth = (int)Child_table[i]["RawImgWidth"]; m_pDetModeList[i].nRawImgHeight = (int)Child_table[i]["RawImgHeight"]; m_pDetModeList[i].nPhySizeInfoBit = (int)Child_table[i]["PhySizeInfoBit"]; m_pDetModeList[i].nSensitivity = (int)Child_table[i]["Sensitivity"]; m_pDetModeList[i].bPreviewEnable = ((int)Child_table[i]["PreviewEnable"] == 1) ? true : false; m_pDetModeList[i].nPreviewWidth = (int)Child_table[i]["PreviewWidth"]; m_pDetModeList[i].nPreviewHeight = (int)Child_table[i]["PreviewHeight"]; m_pDetModeList[i].nPixelPitch = (int)Child_table[i]["PixelPitch"]; m_pDetModeList[i].nSyncType = (int)Child_table[i]["SyncType"]; m_pDetModeList[i].nXwindow = (int)Child_table[i]["XwindowSize"]; m_pDetModeList[i].bIsSaveRaw = ((int)Child_table[i]["IsSaveRaw"] == 1) ? true : false; m_pDetModeList[i].nRotateAngle = (int)Child_table[i]["RotateAngle"]; m_pDetModeList[i].nBinningDx = (int)Child_table[i]["BinningX"]; m_pDetModeList[i].nBinningDy = (int)Child_table[i]["BinningY"]; m_pDetModeList[i].nGainValue = (int)Child_table[i]["GainValue"]; m_pDetModeList[i].nFrequency = (int)Child_table[i]["Frequency"]; m_pDetModeList[i].nFrameCount = (int)Child_table[i]["FrameCount"]; m_pDetModeList[i].nWorkStation = (int)Child_table[i]["WorkStation"]; m_pDetModeList[i].nOperationMode = (int)Child_table[i]["OperationMode"]; m_pDetModeList[i].nExpTime = (int)Child_table[i]["ExpTime"]; m_pDetModeList[i].nTriggerType = (int)Child_table[i]["TriggerType"]; m_pDetModeList[i].nExiThreshold = (int)Child_table[i]["ExiThreshold"]; //获取所有模式中最大图像尺寸,用于申请共享内存 if (m_pDetModeList[i].nRawImgWidth * m_pDetModeList[i].nRawImgHeight > DeviceConf.nMaxImgWidth * DeviceConf.nMaxImgHeight) { DeviceConf.nMaxImgWidth = m_pDetModeList[i].nRawImgWidth; DeviceConf.nMaxImgHeight = m_pDetModeList[i].nRawImgHeight; } } //end for DeviceConf.AcqModeInfo = m_pDetModeList[0]; //默认取第一个 DeviceConf.strDeviceName = (string)m_Configurations[DetectorDescription]; DeviceConf.fTemperMaxLimit = (float)m_Configurations[ConfKey::CcosTempMaxLimit]; DeviceConf.fTemperMaxWarn = (float)m_Configurations[ConfKey::CcosTempUpperLimit]; DeviceConf.fTemperLowLimit = (float)m_Configurations[ConfKey::CcosTempLowerLimit]; DeviceConf.fTemperMinWarn = (float)m_Configurations[ConfKey::CcosTempMinLimit]; DeviceConf.nBatteryWarning = (int)m_Configurations[ConfKey::CcosBatLowerLimit]; DeviceConf.nBatteryLimit = (int)m_Configurations[ConfKey::CcosBatMiniLimit]; DeviceConf.nWifiWarning = (int)m_Configurations[ConfKey::CcosWifiLowerLimit]; DeviceConf.nWifiLimit = (int)m_Configurations[ConfKey::CcosWifiMiniLimit]; DeviceConf.strCalibrationDate = (string)m_Configurations["DateofLastDetectorCalibration"]; DeviceConf.strCalibrationTime = (string)m_Configurations["TimeofLastDetectorCalibration"]; DeviceConf.bSupportDDR = ((int)m_Configurations["SupportDDR"] == 1) ? true : false; DeviceConf.nMaxFrameNum = (int)m_Configurations["MaxFrameNum"]; DeviceConf.strWiredIP = (string)m_Configurations["DetectorWiredIP"]; DeviceConf.strWirelessIP = (string)m_Configurations["DetectorWirelessIP"]; DeviceConf.strLocalIP = (string)m_Configurations["LocalIP"]; DeviceConf.nPort = (int)m_Configurations["DetectorPort"]; DeviceConf.strFPDSN = (string)m_Configurations["FPDSN"]; DeviceConf.nRADDelayTime = (int)m_Configurations["RADDelayTime"]; DeviceConf.fMaxFrameRate = (float)m_Configurations["MaxFrameRate"]; DeviceConf.nOffsetInterval = (int)m_Configurations["OffsetInterval"]; } catch (ResDataObjectExption &e) { Error("Get config error: %s \r\n", e.what()); return false; } return true; } bool nsFPD::DetectorConfiguration::SaveConfig() { try { m_ConfigAll["CONFIGURATION"] = m_Configurations; } catch (...) { return false; } return m_ConfigAll.SaveFile((m_strConfigPath).c_str()); } /*** * 根据nMode,获取对应的ModeInfo * nMode: 采集模式 ***/ bool nsFPD::DetectorConfiguration::GetDetModeInfo(int nMode, DetModeInfo& AcqModeInfo) { bool bFind = false; for (int i = 0; i < m_nDetModeNum; i++) { DetModeInfo stTemp = m_pDetModeList[i]; if (nMode == stTemp.nLogicMode) { AcqModeInfo = m_pDetModeList[i]; bFind = true; break; } } return bFind; }