825 lines
22 KiB
C++
825 lines
22 KiB
C++
//
|
||
// Created by tangchao on 2022/6/28.
|
||
//
|
||
|
||
#include "Header_Files/configfile.h"
|
||
|
||
Configfile::Configfile()
|
||
{
|
||
|
||
}
|
||
|
||
void Configfile::setConfigfilePath(string configfilePath)
|
||
{
|
||
m_configfilePath = configfilePath;
|
||
}
|
||
|
||
bool Configfile::isConfigfileExist()
|
||
{
|
||
QFileInfo info(QString::fromStdString(m_configfilePath));
|
||
|
||
return info.exists();
|
||
}
|
||
|
||
bool Configfile::parseConfigfile()
|
||
{
|
||
// Read the file. If there is an error, report it and exit.
|
||
try
|
||
{
|
||
cfg.readFile(m_configfilePath);
|
||
|
||
return true;
|
||
}
|
||
catch(const FileIOException &fioex)
|
||
{
|
||
std::cerr << "I/O error while reading file." << std::endl;
|
||
return false;
|
||
}
|
||
catch(const ParseException &pex)
|
||
{
|
||
std::cerr << "Parse error at " << pex.getFile() << ":" << pex.getLine()
|
||
<< " - " << pex.getError() << std::endl;
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool Configfile::getSpectralBin(int &spectralBin)
|
||
{
|
||
try
|
||
{
|
||
spectralBin = cfg.lookup("spectralBin");
|
||
|
||
return true;
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
cerr << "No 'spectralBin' setting in configuration file." << endl;
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool Configfile::getspatialBin(int &spatialBin)
|
||
{
|
||
try
|
||
{
|
||
spatialBin = cfg.lookup("spatialBin");
|
||
|
||
return true;
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
cerr << "No 'spatialBin' setting in configuration file." << endl;
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool Configfile::getEffectiveWindow(int &width, int &offsetx, int &height, int &offsety)
|
||
{
|
||
const Setting& root = cfg.getRoot();
|
||
|
||
try
|
||
{
|
||
int spatialBin;
|
||
int spectralBin;
|
||
getspatialBin(spatialBin);
|
||
getSpectralBin(spectralBin);
|
||
|
||
string spatialBinString;
|
||
if(spatialBin == 1)
|
||
{
|
||
spatialBinString = "bin1";
|
||
}
|
||
else
|
||
{
|
||
spatialBinString = "bin2";
|
||
}
|
||
const Setting &spatialArgument = root["effective_window"][spatialBinString]["spatial"];
|
||
if(!(spatialArgument.lookupValue("width", width)
|
||
&& spatialArgument.lookupValue("offsetx", offsetx)))
|
||
{
|
||
return false;
|
||
}
|
||
|
||
string spectralBinString;
|
||
if(spectralBin == 1)
|
||
{
|
||
spectralBinString = "bin1";
|
||
}
|
||
else
|
||
{
|
||
spectralBinString = "bin2";
|
||
}
|
||
const Setting &spectralArgument = root["effective_window"][spectralBinString]["spectral"];
|
||
if(!(spectralArgument.lookupValue("height", height)
|
||
&& spectralArgument.lookupValue("offsety", offsety)))
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
// Ignore.
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
bool Configfile::getEffectiveWindowRoi(int &width, int &offsetx)
|
||
{
|
||
const Setting& root = cfg.getRoot();
|
||
|
||
try
|
||
{
|
||
const Setting &effective_window = root["effective_window_roi"];
|
||
int count = effective_window.getLength();
|
||
|
||
int spatialBin;
|
||
getspatialBin(spatialBin);
|
||
|
||
string spatialBinString;
|
||
if(spatialBin == 1)
|
||
{
|
||
spatialBinString = "spatialBin1";
|
||
}
|
||
else
|
||
{
|
||
spatialBinString = "spatialBin2";
|
||
}
|
||
|
||
const Setting &window = effective_window[spatialBinString];
|
||
string name = window.getName();
|
||
|
||
if(!(window.lookupValue("width", width)
|
||
&& window.lookupValue("offsetx", offsetx)
|
||
))
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
// Ignore.
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
bool Configfile::getPushFlowParam(int &flowSwitch, int &rgbHeight, int &framerateVideo)
|
||
{
|
||
Setting& root = cfg.getRoot();
|
||
|
||
if (!root.exists("push_flow_param"))
|
||
{
|
||
// 配置项不存在,添加配置项
|
||
Setting & push_flow_param = root.add("push_flow_param", Setting::TypeGroup);
|
||
|
||
push_flow_param.add("flow_switch", Setting::TypeInt) = 0;
|
||
push_flow_param.add("rgb_height", Setting::TypeInt) = 720;
|
||
push_flow_param.add("framerate_video", Setting::TypeInt) = 5;
|
||
|
||
// 保存修改后的配置到文件
|
||
try
|
||
{
|
||
QList<QString> fileInfo = getFileInfo(QString::fromStdString(m_configfilePath));
|
||
bool ret = createDir(fileInfo[0]);
|
||
|
||
cfg.writeFile(m_configfilePath.c_str());
|
||
std::cout << "Config item 'push_flow_param' added." << std::endl;
|
||
|
||
flowSwitch = 0;
|
||
rgbHeight = 720;
|
||
framerateVideo = 5;
|
||
|
||
return true;
|
||
}
|
||
catch (const libconfig::FileIOException &fioex)
|
||
{
|
||
std::cerr << "I/O error while writing file." << std::endl;
|
||
return false;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
try
|
||
{
|
||
const Setting &push_flow_param = root["push_flow_param"];
|
||
|
||
if(!(push_flow_param.lookupValue("rgb_height", rgbHeight)
|
||
&& push_flow_param.lookupValue("framerate_video", framerateVideo)
|
||
&& push_flow_param.lookupValue("flow_switch", flowSwitch)
|
||
))
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
// Ignore.
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
}
|
||
|
||
bool Configfile::getWindowOffsety_HeightOfSpectral(int &offsety, int &height, string spectralBinString)
|
||
{
|
||
const Setting& root = cfg.getRoot();
|
||
|
||
try
|
||
{
|
||
const Setting &spectralArgument = root["effective_window"][spectralBinString]["spectral"];
|
||
if(!(spectralArgument.lookupValue("height", height)
|
||
&& spectralArgument.lookupValue("offsety", offsety)))
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
// Ignore.
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
bool Configfile::getGainOffset(float &gain, float &offset)
|
||
{
|
||
const Setting& root = cfg.getRoot();
|
||
|
||
try
|
||
{
|
||
const Setting &gainOffset = root["gainOffset"];
|
||
int count = gainOffset.getLength();
|
||
|
||
int spectralBin;
|
||
getSpectralBin(spectralBin);
|
||
|
||
string spectralBinString;
|
||
if(spectralBin == 1)
|
||
{
|
||
spectralBinString = "spectralBin1";
|
||
}
|
||
else
|
||
{
|
||
spectralBinString = "spectralBin2";
|
||
}
|
||
|
||
const Setting &gainOffsetSetting = gainOffset[spectralBinString];
|
||
string name = gainOffsetSetting.getName();
|
||
|
||
if(!(gainOffsetSetting.lookupValue("gain", gain)
|
||
&& gainOffsetSetting.lookupValue("offset", offset)))
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
// Ignore.
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
bool Configfile::getGainOffsetOfSpectralBin1(float &gain, float &offset)
|
||
{
|
||
const Setting& root = cfg.getRoot();
|
||
|
||
try
|
||
{
|
||
const Setting &gainOffset = root["gainOffset"];
|
||
int count = gainOffset.getLength();
|
||
|
||
string spectralBinString = "spectralBin1";
|
||
|
||
const Setting &gainOffsetSetting = gainOffset[spectralBinString];
|
||
string name = gainOffsetSetting.getName();
|
||
|
||
if(!(gainOffsetSetting.lookupValue("gain", gain)
|
||
&& gainOffsetSetting.lookupValue("offset", offset)))
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
// Ignore.
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
bool Configfile::getSN(QString &SN)
|
||
{
|
||
try
|
||
{
|
||
std::string SN_tem = cfg.lookup("SN");
|
||
SN = QString::fromStdString(SN_tem);
|
||
|
||
return true;
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
cerr << "No 'spectralBin' setting in configuration file." << endl;
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool Configfile::getBufferPolicy(int &bufferPolicy)
|
||
{
|
||
const Setting& root = cfg.getRoot();
|
||
const Setting &ximeadll = root["ximeadll"];
|
||
|
||
try
|
||
{
|
||
if(!(ximeadll.lookupValue("buffer_policy", bufferPolicy)
|
||
))
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
cerr << "No 'spectralBin' setting in configuration file." << endl;
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
bool Configfile::getAcqBufferSize(int &acqBufferSize)
|
||
{
|
||
const Setting& root = cfg.getRoot();
|
||
const Setting &ximeadll = root["ximeadll"];
|
||
|
||
try
|
||
{
|
||
if(!(ximeadll.lookupValue("acq_buffer_size", acqBufferSize)
|
||
))
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
cerr << "No 'spectralBin' setting in configuration file." << endl;
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
bool Configfile::createConfigFile()
|
||
{
|
||
using namespace std;
|
||
using namespace libconfig;
|
||
|
||
Config cfg;
|
||
|
||
Setting &root = cfg.getRoot();
|
||
|
||
// Add some settings to the configuration.
|
||
Setting &SN = root.add("SN", Setting::TypeString) = "0098";
|
||
Setting &spatialBin = root.add("spatialBin", Setting::TypeInt) = 2;
|
||
Setting &SpectralBin = root.add("spectralBin", Setting::TypeInt) = 2;
|
||
|
||
Setting &effective_window = root.add("effective_window", Setting::TypeGroup);
|
||
Setting &effective_window_Bin1 = effective_window.add("bin1", Setting::TypeGroup);
|
||
Setting &effective_window_Bin1_spatial = effective_window_Bin1.add("spatial", Setting::TypeGroup);
|
||
Setting &effective_window_Bin1_Spectral = effective_window_Bin1.add("spectral", Setting::TypeGroup);
|
||
Setting &effective_window_Bin2 = effective_window.add("bin2", Setting::TypeGroup);
|
||
Setting &effective_window_Bin2_spatial = effective_window_Bin2.add("spatial", Setting::TypeGroup);
|
||
Setting &effective_window_Bin2_Spectral = effective_window_Bin2.add("spectral", Setting::TypeGroup);
|
||
|
||
effective_window_Bin1_spatial.add("width", Setting::TypeInt) = 1368;
|
||
effective_window_Bin1_spatial.add("offsetx", Setting::TypeInt) = 288;
|
||
effective_window_Bin1_Spectral.add("height", Setting::TypeInt) = 300;
|
||
effective_window_Bin1_Spectral.add("offsety", Setting::TypeInt) = 348;
|
||
|
||
effective_window_Bin2_spatial.add("width", Setting::TypeInt) = 688;
|
||
effective_window_Bin2_spatial.add("offsetx", Setting::TypeInt) = 144;
|
||
effective_window_Bin2_Spectral.add("height", Setting::TypeInt) = 150;
|
||
effective_window_Bin2_Spectral.add("offsety", Setting::TypeInt) = 174;
|
||
|
||
Setting &effective_window_roi = root.add("effective_window_roi", Setting::TypeGroup);
|
||
Setting &effective_window_roi_spatialBin1 = effective_window_roi.add("spatialBin1", Setting::TypeGroup);
|
||
Setting &effective_window_roi_spatialBin2 = effective_window_roi.add("spatialBin2", Setting::TypeGroup);
|
||
|
||
effective_window_roi_spatialBin1.add("width", Setting::TypeInt) = 1364;
|
||
effective_window_roi_spatialBin1.add("offsetx", Setting::TypeInt) = 14;
|
||
// effective_window_roi_Bin1.add("height", Setting::TypeInt) = 300;
|
||
// effective_window_roi_Bin1.add("offsety", Setting::TypeInt) = 348;
|
||
|
||
effective_window_roi_spatialBin2.add("width", Setting::TypeInt) = 682;
|
||
effective_window_roi_spatialBin2.add("offsetx", Setting::TypeInt) = 15;
|
||
// effective_window_roi_Bin2.add("height", Setting::TypeInt) = 151;
|
||
// effective_window_roi_Bin2.add("offsety", Setting::TypeInt) = 174;
|
||
|
||
Setting &gainOffset = root.add("gainOffset", Setting::TypeGroup);
|
||
Setting &gainOffsetSpectralBin1 = gainOffset.add("spectralBin1", Setting::TypeGroup);
|
||
Setting &gainOffsetSpectralBin2 = gainOffset.add("spectralBin2", Setting::TypeGroup);
|
||
|
||
gainOffsetSpectralBin1.add("gain", Setting::TypeFloat) = 2.00313433;
|
||
gainOffsetSpectralBin1.add("offset", Setting::TypeFloat) = -300.46283157590585;
|
||
|
||
gainOffsetSpectralBin2.add("gain", Setting::TypeFloat) = 4.00626868;
|
||
gainOffsetSpectralBin2.add("offset", Setting::TypeFloat) = -299.46126663407176;
|
||
|
||
|
||
Setting &ximeadll = root.add("ximeadll", Setting::TypeGroup);
|
||
ximeadll.add("buffer_policy", Setting::TypeInt) = 0;
|
||
ximeadll.add("acq_buffer_size", Setting::TypeInt) = 400;
|
||
|
||
Setting &push_flow_param = root.add("push_flow_param", Setting::TypeGroup);
|
||
push_flow_param.add("flow_switch", Setting::TypeInt) = 1;
|
||
push_flow_param.add("rgb_height", Setting::TypeInt) = 720;
|
||
push_flow_param.add("framerate_video", Setting::TypeInt) = 5;
|
||
|
||
// Write out the new configuration.
|
||
QString output_file = "/media/nvme/300TC/config/ximea.cfg";
|
||
try
|
||
{
|
||
QList<QString> fileInfo = getFileInfo(output_file);
|
||
bool ret = createDir(fileInfo[0]);
|
||
|
||
cfg.writeFile(output_file.toStdString().c_str());
|
||
cerr << "New configuration successfully written to: " << output_file.toStdString().c_str() << endl;
|
||
|
||
}
|
||
catch(const FileIOException &fioex)
|
||
{
|
||
cerr << "I/O error while writing configuration file: " << output_file.toStdString().c_str() << endl;
|
||
return true;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
bool Configfile::updateConfigFile()
|
||
{
|
||
using namespace std;
|
||
using namespace libconfig;
|
||
|
||
static const char *output_file = "updated.cfg";
|
||
|
||
Config cfg;
|
||
|
||
cfg.setOptions(Config::OptionFsync
|
||
| Config::OptionSemicolonSeparators
|
||
| Config::OptionColonAssignmentForGroups
|
||
| Config::OptionOpenBraceOnSeparateLine);
|
||
|
||
// Read the file. If there is an error, report it and exit.
|
||
try
|
||
{
|
||
cfg.readFile("example.cfg");
|
||
}
|
||
catch(const FileIOException &fioex)
|
||
{
|
||
std::cerr << "I/O error while reading file." << std::endl;
|
||
return false;
|
||
}
|
||
catch(const ParseException &pex)
|
||
{
|
||
std::cerr << "Parse error at " << pex.getFile() << ":" << pex.getLine()
|
||
<< " - " << pex.getError() << std::endl;
|
||
return false;
|
||
}
|
||
|
||
// Find the 'movies' setting. Add intermediate settings if they don't yet
|
||
// exist.
|
||
Setting &root = cfg.getRoot();
|
||
|
||
if(! root.exists("inventory"))
|
||
root.add("inventory", Setting::TypeGroup);
|
||
|
||
Setting &inventory = root["inventory"];
|
||
|
||
if(! inventory.exists("movies"))
|
||
inventory.add("movies", Setting::TypeList);
|
||
|
||
Setting &movies = inventory["movies"];
|
||
|
||
// Create the new movie entry.
|
||
Setting &movie = movies.add(Setting::TypeGroup);
|
||
|
||
movie.add("title", Setting::TypeString) = "Buckaroo Banzai";
|
||
movie.add("media", Setting::TypeString) = "DVD";
|
||
movie.add("price", Setting::TypeFloat) = 12.99;
|
||
movie.add("qty", Setting::TypeInt) = 20;
|
||
|
||
// Write out the updated configuration.
|
||
try
|
||
{
|
||
cfg.writeFile(output_file);
|
||
cerr << "Updated configuration successfully written to: " << output_file
|
||
<< endl;
|
||
|
||
}
|
||
catch(const FileIOException &fioex)
|
||
{
|
||
cerr << "I/O error while writing file: " << output_file << endl;
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
ParameterConfigfile::ParameterConfigfile()
|
||
{
|
||
|
||
}
|
||
|
||
void ParameterConfigfile::setConfigfilePath(string configfilePath)
|
||
{
|
||
m_configfilePath = configfilePath;
|
||
}
|
||
|
||
bool ParameterConfigfile::isConfigfileExist()
|
||
{
|
||
QFileInfo info(QString::fromStdString(m_configfilePath));
|
||
|
||
return info.exists();
|
||
}
|
||
|
||
bool ParameterConfigfile::parseConfigfile()
|
||
{
|
||
// Read the file. If there is an error, report it and exit.
|
||
try
|
||
{
|
||
cfg.readFile(m_configfilePath);
|
||
|
||
return true;
|
||
}
|
||
catch(const FileIOException &fioex)
|
||
{
|
||
std::cerr << "I/O error while reading file." << std::endl;
|
||
return false;
|
||
}
|
||
catch(const ParseException &pex)
|
||
{
|
||
std::cerr << "Parse error at " << pex.getFile() << ":" << pex.getLine()
|
||
<< " - " << pex.getError() << std::endl;
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool ParameterConfigfile::createConfigFile()
|
||
{
|
||
using namespace std;
|
||
using namespace libconfig;
|
||
|
||
Config cfg;
|
||
|
||
Setting &root = cfg.getRoot();
|
||
|
||
// Add some settings to the configuration.
|
||
// Setting &SN = root.add("SN", Setting::TypeString) = "0098";
|
||
// Setting &spatialBin = root.add("spatialBin", Setting::TypeInt) = 2;
|
||
// Setting &SpectralBin = root.add("spectralBin", Setting::TypeInt) = 2;
|
||
|
||
Setting &ximeaParam = root.add("ximeaParam", Setting::TypeGroup);
|
||
ximeaParam.add("frameRate", Setting::TypeInt) = 100;
|
||
ximeaParam.add("exposeTime", Setting::TypeFloat) = 10.0;
|
||
|
||
|
||
// Write out the new configuration.
|
||
try
|
||
{
|
||
QList<QString> fileInfo = getFileInfo(QString::fromStdString(m_configfilePath));
|
||
bool ret = createDir(fileInfo[0]);
|
||
|
||
cfg.writeFile(m_configfilePath.c_str());
|
||
cerr << "New configuration successfully written to: " << m_configfilePath.c_str() << endl;
|
||
|
||
}
|
||
catch(const FileIOException &fioex)
|
||
{
|
||
cerr << "I/O error while writing configuration file: " << m_configfilePath.c_str() << endl;
|
||
return true;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
bool ParameterConfigfile::getFrameRate(int &frameRate)
|
||
{
|
||
const Setting& root = cfg.getRoot();
|
||
try
|
||
{
|
||
const Setting &ximeaParam = root["ximeaParam"];
|
||
frameRate = ximeaParam.lookup("frameRate");
|
||
|
||
// std::cout << "ParameterConfigfile::getFrameRate:"<< frameRate<<std::endl;
|
||
return true;
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
cerr << "No 'frameRate' setting in configuration file." << endl;
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool ParameterConfigfile::setFrameRate(int frameRate)
|
||
{
|
||
const Setting& root = cfg.getRoot();
|
||
try
|
||
{
|
||
Setting &frameRate2 = root["ximeaParam"]["frameRate"];
|
||
frameRate2 = frameRate;
|
||
|
||
writeConfig2File();
|
||
|
||
return true;
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
cerr << "No 'frameRate' setting in configuration file." << endl;
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool ParameterConfigfile::getExposeTime(float &exposeTime)
|
||
{
|
||
const Setting& root = cfg.getRoot();
|
||
try
|
||
{
|
||
const Setting &ximeaParam = root["ximeaParam"];
|
||
exposeTime = ximeaParam.lookup("exposeTime");
|
||
|
||
// std::cout << "ParameterConfigfile::getExposeTime"<< exposeTime<<std::endl;
|
||
return true;
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
cerr << "No 'exposeTime' setting in configuration file." << endl;
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool ParameterConfigfile::setExposeTime(float exposeTime)
|
||
{
|
||
const Setting& root = cfg.getRoot();
|
||
try
|
||
{
|
||
Setting &frameRate2 = root["ximeaParam"]["exposeTime"];
|
||
frameRate2 = exposeTime;
|
||
|
||
writeConfig2File();
|
||
|
||
return true;
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
cerr << "No 'exposeTime' setting in configuration file." << endl;
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool ParameterConfigfile::writeConfig2File()
|
||
{
|
||
try
|
||
{
|
||
QList<QString> fileInfo = getFileInfo(QString::fromStdString(m_configfilePath));
|
||
bool ret = createDir(fileInfo[0]);
|
||
|
||
cfg.writeFile(m_configfilePath.c_str());
|
||
// cerr << "New configuration successfully written to: " << m_configfilePath.c_str() << endl;
|
||
}
|
||
catch(const FileIOException &fioex)
|
||
{
|
||
cerr << "I/O error while writing configuration file: " << m_configfilePath.c_str() << endl;
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
StateOf300tcConfigfile::StateOf300tcConfigfile()
|
||
{
|
||
}
|
||
|
||
bool StateOf300tcConfigfile::getIntValue(int &value, string field)
|
||
{
|
||
const Setting& root = cfg.getRoot();
|
||
try
|
||
{
|
||
const Setting &ximeaParam = root["ximeaParam"];
|
||
value = ximeaParam.lookup(field);
|
||
|
||
// std::cout << "StateOf300tcConfigfile::getIntValue"<< value<<std::endl;
|
||
return true;
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
cerr << "No setting in configuration file." << endl;
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool StateOf300tcConfigfile::setIntValue(int value, string field)
|
||
{
|
||
const Setting& root = cfg.getRoot();
|
||
try
|
||
{
|
||
Setting &frameRate2 = root["ximeaParam"][field];
|
||
frameRate2 = value;
|
||
|
||
writeConfig2File();
|
||
|
||
return true;
|
||
}
|
||
catch(const SettingNotFoundException &nfex)
|
||
{
|
||
cerr << "No setting in configuration file." << endl;
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool StateOf300tcConfigfile::createConfigFile()
|
||
{
|
||
using namespace std;
|
||
using namespace libconfig;
|
||
|
||
Config cfg;
|
||
|
||
Setting &root = cfg.getRoot();
|
||
|
||
// Add some settings to the configuration.
|
||
// Setting &SN = root.add("SN", Setting::TypeString) = "0098";
|
||
// Setting &spatialBin = root.add("spatialBin", Setting::TypeInt) = 2;
|
||
// Setting &SpectralBin = root.add("spectralBin", Setting::TypeInt) = 2;
|
||
|
||
Setting &ximeaParam = root.add("ximeaParam", Setting::TypeGroup);
|
||
ximeaParam.add("sbgState", Setting::TypeInt) = 0;
|
||
ximeaParam.add("sbgSolutionMode", Setting::TypeInt) = 0;
|
||
ximeaParam.add("ximeaState", Setting::TypeInt) = 100;
|
||
ximeaParam.add("frameRate", Setting::TypeInt) = 0;
|
||
ximeaParam.add("exposeTime", Setting::TypeFloat) = 0.0;
|
||
ximeaParam.add("exposeMaxValueOfOneFrame", Setting::TypeInt) = 0;
|
||
|
||
|
||
// Write out the new configuration.
|
||
try
|
||
{
|
||
QList<QString> fileInfo = getFileInfo(QString::fromStdString(m_configfilePath));
|
||
bool ret = createDir(fileInfo[0]);
|
||
|
||
cfg.writeFile(m_configfilePath.c_str());
|
||
cerr << "New configuration successfully written to: " << m_configfilePath.c_str() << endl;
|
||
|
||
}
|
||
catch(const FileIOException &fioex)
|
||
{
|
||
cerr << "I/O error while writing configuration file: " << m_configfilePath.c_str() << endl;
|
||
return true;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
bool StateOf300tcConfigfile::getSbgState(int &sbgState)
|
||
{
|
||
return getIntValue(sbgState,"sbgState");
|
||
}
|
||
|
||
bool StateOf300tcConfigfile::setSbgState(int sbgState)
|
||
{
|
||
return setIntValue(sbgState,"sbgState");
|
||
}
|
||
|
||
bool StateOf300tcConfigfile::getSbgSolutionMode(int &sbgSolutionMode)
|
||
{
|
||
return getIntValue(sbgSolutionMode,"sbgSolutionMode");
|
||
}
|
||
|
||
bool StateOf300tcConfigfile::setSbgSolutionMode(int sbgSolutionMode)
|
||
{
|
||
return setIntValue(sbgSolutionMode,"sbgSolutionMode");
|
||
}
|
||
|
||
bool StateOf300tcConfigfile::getXimeaState(int &ximeaState)
|
||
{
|
||
return getIntValue(ximeaState,"ximeaState");
|
||
}
|
||
|
||
bool StateOf300tcConfigfile::setXimeaState(int ximeaState)
|
||
{
|
||
return setIntValue(ximeaState,"ximeaState");
|
||
}
|
||
|
||
bool StateOf300tcConfigfile::getExposeMaxValueOfOneFrame(int &exposeMaxValueOfOneFrame)
|
||
{
|
||
return getIntValue(exposeMaxValueOfOneFrame,"exposeMaxValueOfOneFrame");
|
||
}
|
||
|
||
bool StateOf300tcConfigfile::setExposeMaxValueOfOneFrame(int exposeMaxValueOfOneFrame)
|
||
{
|
||
return setIntValue(exposeMaxValueOfOneFrame,"exposeMaxValueOfOneFrame");
|
||
}
|