#include "base/check_cfg.h" #include "base/mycfg.h" #include "base/crc.h" #include "QDir" // 配置路径 #define CFG_PATH mystring("/home/root/config/") #define CHECK_CFG_FILE_NAME cfg_->def_check_cfg check_range my_json::json_to_range(QJsonValue v){ if(v.type()==QJsonValue::Object) return check_range(v.toObject()); else{ qWarning()<<"json not a object"<cfg_=syscfg(); this->scheme_=nullptr; QDir path; if (!path.exists(CFG_PATH)) { path.mkdir(CFG_PATH); } reload(); } check_cfg::~check_cfg(){ if(scheme_!=nullptr){ free(scheme_); scheme_=nullptr; } } // 把方案转化为结构体 void check_cfg::scheme_json_to_struct(){ if(scheme_!=nullptr){ free(scheme_); scheme_=nullptr; } scheme_struct_size=sizeof(scheme_def)+sizeof(scheme_task_def)*get_check_task_num(); scheme_=(scheme_def *)calloc(1,scheme_struct_size); if(scheme_){ scheme_->plan_id=get_plan_id(); scheme_->task_num=get_check_task_num(); scheme_->timeout_m=get_check_time_out(); scheme_->marerr_num=errs.size(); qDebug()<<"scheme,id,task_num="<plan_id<task_num<task_num;i++){ scheme_task_def *st=&scheme_->task[i]; check_task ct=tasks[i]; st->err=ct.get_failed_code(); st->item_num=ct.get_return_num(); st->taskid=ct.get_task_id(); st->taskindex=ct.get_index(); QList ret_errs=ct.get_ret_failed_code(); QList rangs=ct.get_ranges(); int rangs_num=rangs.size(); int err_num=ret_errs.size(); qDebug()<<"st,err,item_num,taskid,taskindex="<item_num<taskid<taskindex<item_num;i++){ qDebug()<<"i="<i){ st->range[i].err=0; if(err_num>i){ st->range[i].err=ret_errs[i]; } st->range[i].max=rangs[i].max; st->range[i].min=rangs[i].min; }else{ st->range[i].err=0; st->range[i].max=65535; st->range[i].min=0; } } } qDebug()<<"tran err list."<marerr_num;i++){ marerr_def *merr=&scheme_->marerr[i]; QList suberr=errs[i].get_subcodes(); merr->err=errs[i].get_code(); merr->suberr_num=suberr.size(); for(int j=0;jsuberr_num;j++){ merr->suberr[j]=suberr[j]; } } qDebug()<<"tran slave array."<>8)&0xff); slave_array.append((crc32>>16)&0xff); slave_array.append((crc32>>24)&0xff); memcpy(scheme_->slave_data,slave_array.data(),slave_array.size()); qDebug()<<"tran end."< s=ch_errcode.toSet(); if(s.contains(uint8_t(0))) s.remove(uint8_t(0)); QList d=s.toList(); for(int i=0;i>8)&0xff); t.append((plan_id>>16)&0xff); t.append((plan_id>>24)&0xff); for(int i=0;i>0)&0x7f; int modele=(id>>7)&0x1f; int chip=(id>>12)&0xf; int day=(id>>16)&0x1f; int month=(id>>21)&0xf; int year=((id>>25)&0x7f)+2022; QString s="%1-%2-%3 id=%4,modele=%5,chip=%6"; return s.arg(year).arg(month).arg(day).arg(sid).arg(modele).arg(chip); } // 获取适配的从机软件版本号 QList& check_cfg::get_slave_soft_versions() { return slave_soft_versions; } // 获取适配的从机硬件版本号 QList& check_cfg::get_slave_hard_versions() { return slave_hard_versions; } // 获取方案执行最长时间 int check_cfg::get_check_time_out() { return time_out_m; } // 获取任务id最大值 uint8_t check_cfg::get_task_id_max() { return task_id_max; } // 根据错误号返回错误字符串 QString check_cfg::get_err_string(int err) { QString r; for(int i=0;i e=get_ch_merrcode(); // QJsonArray err_code; // QString err_str; // for(int i=0;i check_cfg::get_ch_merrcode() { QList l; QSet s=ch_errcode.toSet(); if(s.contains(uint8_t(0))) s.remove(uint8_t(0)); ch_errcode=s.toList(); //qDebug()<<"mejor errs="< &l,uint8_t code) { for(int j=0;j=64){ qWarning()<<"index out of range."< ranges=tasks[i].get_ranges(); for(int j=0;j=ranges[j].min&&temp<=ranges[j].max){ p[index/8]=p[index/8]& (~(1<<(index%8))); }else{ p[index/8]=p[index/8]|(1<<(index%8)); } index++; } } return p; } static check_cfg *g_check_cfg; check_cfg *check_plan() { if(g_check_cfg==nullptr){ g_check_cfg = new check_cfg(); } return g_check_cfg; }