tx-gxx-linux/device/gxx-linux/scanner/deviceconfig.cpp

103 lines
2.0 KiB
C++

#include "deviceconfig.h"
#include <fstream>
#include <iomanip>
#include <sys/stat.h>
#include "commondef.h"
#include <unistd.h>
DeviceConfig::DeviceConfig()
{
}
DeviceConfig::~DeviceConfig()
{
}
DeviceConfig::DeviceParam DeviceConfig::GetParam()
{
std::lock_guard<std::mutex> lc(m_lock);
json tmp = getjson();
return json2struct(tmp);
}
void DeviceConfig::SaveParam(DeviceConfig::DeviceParam param)
{
std::lock_guard<std::mutex> lc(m_lock);
auto tmp = struct2json(param);
savejson(tmp);
}
json DeviceConfig::struct2json(DeviceConfig::DeviceParam param)
{
json js;
js[token_code] = param.token;
js[lock_enable] = param.is_lock;
return js;
}
DeviceConfig::DeviceParam DeviceConfig::json2struct(json js)
{
DeviceConfig::DeviceParam param;
if(js[lock_enable].is_boolean())
param.is_lock = js[lock_enable];
else
param.is_lock = false;
if(js[token_code].is_string())
param.token = js[token_code];
else
param.token = "null";
return param;
}
json DeviceConfig::getdefaultjson()
{
json m_json;
m_json[lock_enable] = false;
m_json[token_code] = "null";
return m_json;
}
void DeviceConfig::savejson(json js)
{
//std::lock_guard<std::mutex> lc(m_lock);
std::ofstream o(ParamPath);
o << std::setw(4) << js <<std::endl;
o.flush();
o.close();
}
json DeviceConfig::getjson()
{
if(access(JSON_CORRECTDIR_PATH,0) == -1)
{
auto ret = mkdir(JSON_CORRECTDIR_PATH, 0777);
if (ret != 0)
{
printf("make dir failed .path=%s \n", JSON_CORRECTDIR_PATH);
}
}
if (access(ParamPath.c_str(), F_OK) != 0)
{
auto cfs = getdefaultjson();
savejson(cfs);
return cfs;
}
std::ifstream i(ParamPath);
auto pos = i.tellg();
i.seekg(0, std::ios::end);
if (i.tellg() <= 2)
{
auto cfs = getdefaultjson();
savejson(cfs);
return cfs;
}
i.seekg(pos);
json m_json;
i >> m_json;
i.close();
return m_json;
}