#include "ScanConfig.h" #include #include const char * PATH_FPAG_DUNNAN_CONFIG = "/usr/local/huago/dunnan_fpga.properties"; const char * PATH_FPAG_HUALING_CONFIG = "/usr/local/huago/hualing_fpga.properties"; //#define PATH_FPAG_CONFIG "/usr/local/huago/fpga.properties" #define ETC_FPAG_CONFIG "/etc/fpga.properties" Properties ScanConfig::fpgaProperties; CaptureParams ScanConfig::captureParmars; static const char *keys[] = { "fpga.correctColor.AExposureR", "fpga.correctColor.AExposureG", "fpga.correctColor.AExposureB", "fpga.correctColor.BExposureR", "fpga.correctColor.BExposureG", "fpga.correctColor.BExposureB", "fpga.correctColor.gainA", "fpga.correctColor.gainB", "fpga.correctColor.AOffset", "fpga.correctColor.BOffset", "fpga.correctGray.AExposureR", "fpga.correctGray.AExposureG", "fpga.correctGray.AExposureB", "fpga.correctGray.BExposureR", "fpga.correctGray.BExposureG", "fpga.correctGray.BExposureB", "fpga.correctGray.gainA", "fpga.correctGray.gainB", "fpga.correctGray.AOffset", "fpga.correctGray.BOffset", "fpga.color.AExposureR", "fpga.color.AExposureG", "fpga.color.AExposureB", "fpga.color.BExposureR", "fpga.color.BExposureG", "fpga.color.BExposureB", "fpga.color.gainA", "fpga.color.gainB", "fpga.color.AOffset", "fpga.color.BOffset", "fpga.gray.AExposureR", "fpga.gray.AExposureG", "fpga.gray.AExposureB", "fpga.gray.BExposureR", "fpga.gray.BExposureG", "fpga.gray.BExposureB", "fpga.gray.gainA", "fpga.gray.gainB", "fpga.gray.AOffset", "fpga.gray.BOffset", "fpga.correctColor.UVExposureA", "fpga.correctGray.UVExposureB", "fpga.color.UVExposureA", "fpga.gray.UVExposureA", }; int parseInt(const std::string str){ if(str.compare(0, 2, "0X") == 0 || str.compare(0, 2, "0x") == 0){ return (int)std::strtol(str.c_str(),nullptr,16); }else{ return std::atoi(str.c_str()); } } void ScanConfig::parseIntArray(const std::string& str, std::string split,int* p, int size){ int lastPosition = 0; int index = -1; int i = 0; while(-1 != (index=str.find(split , lastPosition)) && i < size) { // vecString.push_back(str.substr(lastPosition, index - lastPosition)); *(p + i) = parseInt(str.substr(lastPosition, index - lastPosition)); lastPosition = index + split.size(); i ++; } std::string lastStr = str.substr(lastPosition); if ( !lastStr.empty() && i < size) { *(p + i) = parseInt(lastStr); } } ScanConfig::ScanConfig():cistype(CIS_T_S0,CIS_T_S1,CIS_T_S2,CIS_T_S3){ if(cistype.GetCisType () == CISVendor::DUNNAN_CIS_V0) { PATH_FPAG_CONFIG = PATH_FPAG_DUNNAN_CONFIG; if(access(PATH_FPAG_CONFIG,F_OK) == -1){ PATH_FPAG_CONFIG = "/usr/local/huago/fpga.properties"; } } if(cistype.GetCisType () == CISVendor::HUALIN_CIS_V0) { PATH_FPAG_CONFIG = PATH_FPAG_HUALING_CONFIG; if(access(PATH_FPAG_CONFIG,F_OK) == -1){ PATH_FPAG_CONFIG = "/usr/local/huago/fpga.properties"; } } //printf("PATH_FPAG_CONFIG == %s \r\n",PATH_FPAG_CONFIG); if(access(PATH_FPAG_CONFIG,F_OK) !=-1){ fpgaProperties = PropertiesParser::Read(PATH_FPAG_CONFIG); }else{ fpgaProperties = PropertiesParser::Read(ETC_FPAG_CONFIG); std::cout<<"error 88888888888888888888"<> s; return s; } std::string parseArrayString(int *array, int len){ std::string s; for(int i= 0; i < len; i ++){ s.append(parseString(array[i])); if(i < len - 1)s.append(","); } return s; } //δʹ�� void ScanConfig::modifyCaptureParams(const char * key, const char * value){ fpgaProperties.AddProperty(key, value); parseCaptureParams(); PropertiesParser::Write(PATH_FPAG_CONFIG, fpgaProperties); } std::string ScanConfig::getCaptureParmas(std::string key){ std::string ret = fpgaProperties.GetProperty(key, ""); if(ret.length() == 0){ fpgaProperties = PropertiesParser::Read(PATH_FPAG_CONFIG); ret = fpgaProperties.GetProperty(key, ""); } return ret; } void ScanConfig::save(){ int *p = (int *)&captureParmars; for(int i = 0; i < 4; i ++ ){ int *params = p + 30 * i; for(int j = 0; j < 6; j ++ ){ fpgaProperties.AddProperty(keys[10 * i + j ], parseString(params[j])); } for(int k = 0; k < 4; k ++ ){ fpgaProperties.AddProperty(keys[10 * i + k + 6], parseArrayString(¶ms[6 + 6 * k], 6)); } } PropertiesParser::Write(PATH_FPAG_CONFIG, fpgaProperties); } //�����޸� void ScanConfig::writeParamars(std::string type, int * params){ if(type.compare("color") == 0){ memcpy(captureParmars.colorExposure, params, 6 * sizeof(int)); memcpy(captureParmars.colorGain, ¶ms[6], 12 * sizeof(int)); memcpy(captureParmars.colorOffset, ¶ms[18], 12 * sizeof(int)); }else if(type.compare("correctColor") == 0){ memcpy(captureParmars.correctColorExposure, params, 6 * sizeof(int)); memcpy(captureParmars.correctColorGain, ¶ms[6], 12 * sizeof(int)); memcpy(captureParmars.correctColorOffset, ¶ms[18], 12 * sizeof(int)); }else if(type.compare("gray") == 0){ memcpy(captureParmars.grayExposure, params, 6 * sizeof(int)); memcpy(captureParmars.grayGain, ¶ms[6], 12 * sizeof(int)); memcpy(captureParmars.grayOffset, ¶ms[18], 12 * sizeof(int)); }else if(type.compare("correctGray") == 0){ memcpy(captureParmars.correctGrayExposure, params, 6 * sizeof(int)); memcpy(captureParmars.correctGrayGain, ¶ms[6], 12 * sizeof(int)); memcpy(captureParmars.correctGrayOffset, ¶ms[18], 12 * sizeof(int)); } fpgaProperties.AddProperty("fpga." + type + ".AExposureR", parseString(params[0])); fpgaProperties.AddProperty("fpga." + type + ".AExposureG", parseString(params[1])); fpgaProperties.AddProperty("fpga." + type + ".AExposureB", parseString(params[2])); fpgaProperties.AddProperty("fpga." + type + ".BExposureR", parseString(params[3])); fpgaProperties.AddProperty("fpga." + type + ".BExposureG", parseString(params[4])); fpgaProperties.AddProperty("fpga." + type + ".BExposureB", parseString(params[5])); fpgaProperties.AddProperty("fpga." + type + ".gainA", parseArrayString(¶ms[6], 6)); fpgaProperties.AddProperty("fpga." + type + ".gainB", parseArrayString(¶ms[12], 6)); fpgaProperties.AddProperty("fpga." + type + ".AOffset", parseArrayString(¶ms[18], 6)); fpgaProperties.AddProperty("fpga." + type + ".BOffset", parseArrayString(¶ms[24], 6)); PropertiesParser::Write(PATH_FPAG_CONFIG, fpgaProperties); }