tx-gxx-linux/device/gxx-linux/capimage/jsonconfig.cpp

421 lines
13 KiB
C++

#include "jsonconfig.h"
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fstream>
#include <iostream>
#include <iomanip>
#define SP_COLOR_DEFAULT 0x438
#define SP_GRAY_DEFAULT 0xca8
jsonconfig::jsonconfig()
{
}
jsonconfig::~jsonconfig()
{
}
void jsonconfig::savecisconfig(HGCorrectConfigs configs)
{
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);
}
}
json m_json;
m_json[STRCON(STR_COLOR, STR_EXPF)] = configs.color.expF;
m_json[STRCON(STR_COLOR, STR_EXPB)] = configs.color.expB;
m_json[STRCON(STR_COLOR, STR_GAINF)] = configs.color.gainF;
m_json[STRCON(STR_COLOR, STR_GAINB)] = configs.color.gainB;
m_json[STRCON(STR_COLOR, STR_OFFSETF)] = configs.color.offsetsF;
m_json[STRCON(STR_COLOR, STR_OFFSETB)] = configs.color.offsetsB;
if(configs.color.sp <= 0 ){
configs.color.sp = SP_COLOR_DEFAULT;
}
m_json[STRCON(STR_COLOR, STR_SP)] = configs.color.sp;
m_json[STRCON(STR_CORRECTCOLOR, STR_EXPF)] = configs.colorCorrect.expF;
m_json[STRCON(STR_CORRECTCOLOR, STR_EXPB)] = configs.colorCorrect.expB;
m_json[STRCON(STR_CORRECTCOLOR, STR_GAINF)] = configs.colorCorrect.gainF;
m_json[STRCON(STR_CORRECTCOLOR, STR_GAINB)] = configs.colorCorrect.gainB;
m_json[STRCON(STR_CORRECTCOLOR, STR_OFFSETF)] = configs.colorCorrect.offsetsF;
m_json[STRCON(STR_CORRECTCOLOR, STR_OFFSETB)] = configs.colorCorrect.offsetsB;
if(configs.colorCorrect.sp <= 0 ){
configs.colorCorrect.sp = SP_COLOR_DEFAULT;
}
m_json[STRCON(STR_CORRECTCOLOR, STR_SP)] = configs.colorCorrect.sp;
m_json[STRCON(STR_GRAY, STR_EXPF)] = configs.gray.expF;
m_json[STRCON(STR_GRAY, STR_EXPB)] = configs.gray.expB;
m_json[STRCON(STR_GRAY, STR_GAINF)] = configs.gray.gainF;
m_json[STRCON(STR_GRAY, STR_GAINB)] = configs.gray.gainB;
m_json[STRCON(STR_GRAY, STR_OFFSETF)] = configs.gray.offsetsF;
m_json[STRCON(STR_GRAY, STR_OFFSETB)] = configs.gray.offsetsB;
if(configs.gray.sp <= 0 ){
configs.gray.sp = SP_GRAY_DEFAULT;
}
m_json[STRCON(STR_GRAY, STR_SP)] = configs.gray.sp;
m_json[STRCON(STR_CORRECTGRAY, STR_EXPF)] = configs.grayCorrect.expF;
m_json[STRCON(STR_CORRECTGRAY, STR_EXPB)] = configs.grayCorrect.expB;
m_json[STRCON(STR_CORRECTGRAY, STR_GAINF)] = configs.grayCorrect.gainF;
m_json[STRCON(STR_CORRECTGRAY, STR_GAINB)] = configs.grayCorrect.gainB;
m_json[STRCON(STR_CORRECTGRAY, STR_OFFSETF)] = configs.grayCorrect.offsetsF;
m_json[STRCON(STR_CORRECTGRAY, STR_OFFSETB)] = configs.grayCorrect.offsetsB;
if(configs.grayCorrect.sp <= 0 ){
configs.grayCorrect.sp = SP_GRAY_DEFAULT;
}
m_json[STRCON(STR_CORRECTGRAY, STR_SP)] = configs.grayCorrect.sp;
std::cout << m_json << std::endl;
std::ofstream o(JSON_CORRECTFILE_PATH);
o << std::setw(4) << m_json << std::endl;
}
HGCorrectConfigs jsonconfig::getcorrectconfigs()
{
HGCorrectConfigs cfs;
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(JSON_CORRECTFILE_PATH, F_OK) != 0)
{
cfs = getdefaultconfigs();
savecisconfig(cfs);
return cfs;
}
std::ifstream i(JSON_CORRECTFILE_PATH);
auto pos = i.tellg();
i.seekg(0, std::ios::end);
//printf("file length =%d ", i.tellg());
if (i.tellg() <= 2)
{
cfs = getdefaultconfigs();
savecisconfig(cfs);
return cfs;
}
i.seekg(pos);
json m_json;
i >> m_json;
cfs.colorCorrect.sp = cfs.color.sp = SP_COLOR_DEFAULT;
cfs.grayCorrect.sp = cfs.gray.sp = SP_GRAY_DEFAULT;
std::cout <<"GET GET GET GET GET GET" <<m_json << std::endl;
m_json[STRCON(STR_COLOR, STR_EXPF)].get_to(cfs.color.expF);
m_json[STRCON(STR_COLOR, STR_EXPB)].get_to(cfs.color.expB);
m_json[STRCON(STR_COLOR, STR_GAINF)].get_to(cfs.color.gainF);
m_json[STRCON(STR_COLOR, STR_GAINB)].get_to(cfs.color.gainB);
m_json[STRCON(STR_COLOR, STR_OFFSETF)].get_to(cfs.color.offsetsF);
m_json[STRCON(STR_COLOR, STR_OFFSETB)].get_to(cfs.color.offsetsB);
m_json[STRCON(STR_COLOR, STR_SP)].get_to(cfs.color.sp);
m_json[STRCON(STR_CORRECTCOLOR, STR_EXPF)].get_to(cfs.colorCorrect.expF);
m_json[STRCON(STR_CORRECTCOLOR, STR_EXPB)].get_to(cfs.colorCorrect.expB);
m_json[STRCON(STR_CORRECTCOLOR, STR_GAINF)].get_to(cfs.colorCorrect.gainF);
m_json[STRCON(STR_CORRECTCOLOR, STR_GAINB)].get_to(cfs.colorCorrect.gainB);
m_json[STRCON(STR_CORRECTCOLOR, STR_OFFSETF)].get_to(cfs.colorCorrect.offsetsF);
m_json[STRCON(STR_CORRECTCOLOR, STR_OFFSETB)].get_to(cfs.colorCorrect.offsetsB);
m_json[STRCON(STR_CORRECTCOLOR, STR_SP)].get_to(cfs.colorCorrect.sp);
m_json[STRCON(STR_GRAY, STR_EXPF)].get_to(cfs.gray.expF);
m_json[STRCON(STR_GRAY, STR_EXPB)].get_to(cfs.gray.expB);
m_json[STRCON(STR_GRAY, STR_GAINF)].get_to(cfs.gray.gainF);
m_json[STRCON(STR_GRAY, STR_GAINB)].get_to(cfs.gray.gainB);
m_json[STRCON(STR_GRAY, STR_OFFSETF)].get_to(cfs.gray.offsetsF);
m_json[STRCON(STR_GRAY, STR_OFFSETB)].get_to(cfs.gray.offsetsB);
m_json[STRCON(STR_GRAY, STR_SP)].get_to(cfs.gray.sp);
m_json[STRCON(STR_CORRECTGRAY, STR_EXPF)].get_to(cfs.grayCorrect.expF);
m_json[STRCON(STR_CORRECTGRAY, STR_EXPB)].get_to(cfs.grayCorrect.expB);
m_json[STRCON(STR_CORRECTGRAY, STR_GAINF)].get_to(cfs.grayCorrect.gainF);
m_json[STRCON(STR_CORRECTGRAY, STR_GAINB)].get_to(cfs.grayCorrect.gainB);
m_json[STRCON(STR_CORRECTGRAY, STR_OFFSETF)].get_to(cfs.grayCorrect.offsetsF);
m_json[STRCON(STR_CORRECTGRAY, STR_OFFSETB)].get_to(cfs.grayCorrect.offsetsB);
m_json[STRCON(STR_CORRECTGRAY, STR_SP)].get_to(cfs.grayCorrect.sp);
return cfs;
}
HGCorrectConfigs jsonconfig::getdefaultconfigs()
{
HGCorrectConfigs cfs;
for (int i = 0; i < 3; i++)
{
int expclorF, expgrayF,expclorB,expgrayB;
switch (i)
{
case 0://B
expclorF = 1300;//789
expclorB = 1350;
expgrayF = 420;
expgrayB = 420;
break;
case 1://G
expclorF = 1350;
expclorB = 1280;
expgrayF = 420;
expgrayB = 420;
break;
case 2://R
expclorF = 789;
expclorB = 824;
expgrayF = 420;
expgrayB = 420;
break;
default:
break;
}
cfs.colorCorrect.expB[i] = expclorF;
cfs.colorCorrect.expF[i] = expclorB;
cfs.grayCorrect.expB[i] = expgrayF;
cfs.grayCorrect.expF[i] = expgrayB;
cfs.gray.expB[i] = expgrayB;
cfs.gray.expF[i] = expgrayF;
cfs.color.expF[i] = expclorF;
cfs.color.expB[i] = expclorB;
}
for (int i = 0; i < 6; i++)
{
cfs.colorCorrect.gainB[i] = cfs.colorCorrect.gainF[i] = 120;
cfs.grayCorrect.gainB[i] = cfs.grayCorrect.gainF[i] = 120;
cfs.gray.gainB[i] = cfs.gray.gainF[i] = 120;
cfs.color.gainB[i] = cfs.color.gainF[i] = 120;
cfs.colorCorrect.offsetsB[i] = cfs.colorCorrect.offsetsF[i] = 125;
cfs.grayCorrect.offsetsB[i] = cfs.grayCorrect.offsetsF[i] = 125;
cfs.gray.offsetsB[i] = cfs.gray.offsetsF[i] = 125;
cfs.color.offsetsB[i] = cfs.color.offsetsF[i] = 125;
}
cfs.colorCorrect.sp = cfs.color.sp = SP_COLOR_DEFAULT;
cfs.grayCorrect.sp = cfs.gray.sp = SP_GRAY_DEFAULT;
return cfs;
}
void jsonconfig::savescannerinfo(ScannerNativeParam param)
{
json m_json;
m_json[S_INFO_DOUNUM] = (param.DoubleFeedTimes);
m_json[S_INFO_FEEDERROR] = (param.FeedErrorTimes);
m_json[S_INFO_HRATIO] = (param.H_ratio);
m_json[S_INFO_JAMNUM] = (param.JamTimes);
m_json[S_INFO_ROLLERNUM] = (param.RollerNum);
m_json[S_INFO_SCANSESSIONCOUNT] = (param.ScanSessionsCount);
m_json[S_INFO_SERIALNUM] = (param.SerialNum);
m_json[S_INFO_TOKEN] = (param.Token);
m_json[S_INFO_TOTALSCANNED] = (param.TotalScanned);
m_json[S_INFO_VRATIO] = (param.V_ratio);
m_json[S_COLOR_SP]=(param.color_sp);
m_json[S_GRAY_SP]=(param.gray_sp);
m_json[S_INFO_SLEEPTIME]=(param.sleeptime);
m_json[S_INFO_CLR_MAXBRT] = (param.clr_maxbright);
m_json[S_INFO_GRAY_MAXBRT] = (param.gray_maxbright);
m_json[S_INFO_SPEEDMODE] = (param.speedmode);
m_json[S_INFO_VID] = (param.Vid);
m_json[S_INFO_PID] = (param.Pid);
std::ofstream o(JSON_SCANNER_INFO_FILE);
o << std::setw(4) << m_json << std::endl;
//printf("\n %s speedmode value = %d",JSON_SCANNER_INFO_FILE,param.speedmode);
}
ScannerNativeParam jsonconfig::getscannerinfo()
{
std::lock_guard<std::mutex> lc(mtx);
ScannerNativeParam snp;
if (access(JSON_SCANNER_INFO_DIR, 0) == -1)
{
auto ret = mkdir(JSON_SCANNER_INFO_DIR, 0777);
if (ret != 0)
{
printf("make dir failed .path=%s \n", JSON_SCANNER_INFO_DIR);
}
}
if (access(JSON_SCANNER_INFO_FILE, F_OK) != 0)
{
snp = getdefaultscannerinfo();
savescannerinfo(snp);
return snp;
}
std::ifstream i(JSON_SCANNER_INFO_FILE);
auto pos = i.tellg();
i.seekg(0, std::ios::end);
//printf("file length =%d ", i.tellg());
if (i.tellg() <= 2)
{
snp = getdefaultscannerinfo();
savescannerinfo(snp);
return snp;
}
i.seekg(pos);
json m_json;
i >> m_json;
if (!m_json[S_INFO_DOUNUM].is_null())
m_json[S_INFO_DOUNUM].get_to(snp.DoubleFeedTimes);
else
snp.DoubleFeedTimes = 0;
if (!m_json[S_INFO_FEEDERROR].is_null())
m_json[S_INFO_FEEDERROR].get_to(snp.FeedErrorTimes);
else
snp.FeedErrorTimes = 0;
if (!m_json[S_INFO_HRATIO].is_null())
m_json[S_INFO_HRATIO].get_to(snp.H_ratio);
else
snp.H_ratio = 1065353216;
if (!m_json[S_INFO_JAMNUM].is_null())
m_json[S_INFO_JAMNUM].get_to(snp.JamTimes);
else
snp.JamTimes = 0;
if (!m_json[S_INFO_ROLLERNUM].is_null())
m_json[S_INFO_ROLLERNUM].get_to(snp.RollerNum);
else
snp.RollerNum = 0;
if (!m_json[S_INFO_SCANSESSIONCOUNT].is_null())
m_json[S_INFO_SCANSESSIONCOUNT].get_to(snp.ScanSessionsCount);
else
snp.ScanSessionsCount = 0;
if (!m_json[S_INFO_SERIALNUM].is_null())
m_json[S_INFO_SERIALNUM].get_to(snp.SerialNum);
else
snp.SerialNum = SERIALNUM;
if (!m_json[S_INFO_TOKEN].is_null())
m_json[S_INFO_TOKEN].get_to(snp.Token);
else
snp.Token = "abcdefghijklmnopqrstuvwxyz012345";
if (!m_json[S_INFO_TOTALSCANNED].is_null())
m_json[S_INFO_TOTALSCANNED].get_to(snp.TotalScanned);
else
snp.TotalScanned = 0;
if (!m_json[S_INFO_VRATIO].is_null())
m_json[S_INFO_VRATIO].get_to(snp.V_ratio);
else
snp.V_ratio = 1065353216;
if (!m_json[S_COLOR_SP].is_null())
m_json[S_COLOR_SP].get_to(snp.color_sp);
else
#ifdef G200
snp.color_sp = 0x27C;
#else
snp.color_sp = 0x2B6;
#endif
if (!m_json[S_GRAY_SP].is_null())
m_json[S_GRAY_SP].get_to(snp.gray_sp);
else
#ifdef G200
snp.gray_sp = 0x775;
#else
snp.gray_sp = 0x822;
#endif
if(!m_json[S_INFO_SLEEPTIME].is_null())
m_json[S_INFO_SLEEPTIME].get_to(snp.sleeptime);
else
snp.sleeptime = 10800;
if(!m_json[S_INFO_CLR_MAXBRT].is_null())
m_json[S_INFO_CLR_MAXBRT].get_to(snp.clr_maxbright);
else
snp.clr_maxbright=200;
if(!m_json[S_INFO_GRAY_MAXBRT].is_null())
m_json[S_INFO_GRAY_MAXBRT].get_to(snp.gray_maxbright);
else
snp.gray_maxbright=200;
if(!m_json[S_INFO_SPEEDMODE].is_null())
m_json[S_INFO_SPEEDMODE].get_to(snp.speedmode);
else
snp.speedmode=0;
if(!m_json[S_INFO_PID].is_null())
m_json[S_INFO_PID].get_to(snp.Pid);
else
{
#ifdef G100
snp.Pid = 0x139;
#elif defined G200
snp.Pid = 0x239;
#elif defined G300
snp.Pid = 0x339;
#else
snp.Pid = 0x439;
#endif
}
if(!m_json[S_INFO_VID].is_null())
m_json[S_INFO_VID].get_to(snp.Vid);
else
snp.Vid = 0x3072;
//printf("vid = %d pid =%d \n",snp.Vid,snp.Pid );
return snp;
}
ScannerNativeParam jsonconfig::getdefaultscannerinfo()
{
ScannerNativeParam param;
param.DoubleFeedTimes = 0;
param.FeedErrorTimes = 0;
param.H_ratio = 1065353216;
param.V_ratio = 1065353216;
param.JamTimes = 0;
param.RollerNum = param.TotalScanned = 0;
param.Token = "abcdefghijklmnopqrstuvwxyz012345"; //default 32byte length
param.SerialNum = SERIALNUM;
#ifdef G200
param.gray_sp=0x775; //G200 140 ppm 0x27c 0x775 G100 100 ppm 0x2B6 0x822
param.color_sp=0x27C;
param.speedmode = 100;
param.Pid = 0x0239;
#elif defined G100
param.gray_sp=0x822; //G200 140 ppm 0x27c 0x781 G100 100 ppm 0x2B6 0x822
param.color_sp=0x2B6;
param.speedmode = 70;
param.Pid = 0x0139;
#elif defined G300
param.gray_sp=0x822;
param.color_sp=0x2B6;
param.speedmode = 40;
param.Pid = 0x0339;
#else
param.gray_sp=0x822;
param.color_sp=0x2B6;
param.speedmode = 50;
param.Pid = 0x0439;
#endif
param.Vid = 0x3072;
param.sleeptime=10800;
param.clr_maxbright = param.gray_maxbright = 200;
return param;
}