#include "check_obj.h" #include "unistd.h" #include Check_Obj::Check_Obj() { } bool Check_Obj::MTest_Data(CHECK_DATA workingdata, bool W) { QFile file(workdata); if(!file.open(QIODevice::WriteOnly)) return false; QDomDocument doc; QDomProcessingInstruction instruction; instruction = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\""); doc.appendChild(instruction); QDomElement root=doc.createElement("WORK_DATA_ROOT"); doc.appendChild(root); QDomElement DE = doc.createElement("testfilename"); DE.appendChild(doc.createTextNode(workingdata.testfilename)); root.appendChild(DE); DE = doc.createElement("workstate"); DE.appendChild(doc.createTextNode(QString::number(workingdata.workstate))); root.appendChild(DE); DE = doc.createElement("alarmstate"); DE.appendChild(doc.createTextNode(QString::number(workingdata.alarmstate))); root.appendChild(DE); DE = doc.createElement("PowerCtrl"); DE.appendChild(doc.createTextNode(QString::number(workingdata.PowerCtrl))); root.appendChild(DE); DE = doc.createElement("CapPS"); DE.appendChild(doc.createTextNode(QString::number(workingdata.CapPS))); root.appendChild(DE); DE = doc.createElement("SubCapPS1"); DE.appendChild(doc.createTextNode(QString::number(workingdata.SubCapPS[0]))); root.appendChild(DE); DE = doc.createElement("SubCapPS2"); DE.appendChild(doc.createTextNode(QString::number(workingdata.SubCapPS[1]))); root.appendChild(DE); DE = doc.createElement("SubCapPS3"); DE.appendChild(doc.createTextNode(QString::number(workingdata.SubCapPS[2]))); root.appendChild(DE); DE = doc.createElement("SubCapPS4"); DE.appendChild(doc.createTextNode(QString::number(workingdata.SubCapPS[3]))); root.appendChild(DE); QTextStream out( &file ); doc.save(out, 4); if(W) { file.flush(); int fd = file.handle(); fsync(fd); } file.close(); return true; } bool Check_Obj::RTest_Data(CHECK_DATA &workingdata) { QDomDocument doc; QFile file(workdata); if( !file.exists()) return false; if( !file.open( QFile::ReadOnly)) return false; if(!doc.setContent(&file)) return false; file.close(); QDomElement root = doc.documentElement(); QDomNode DN; if(!(DN=root.elementsByTagName("testfilename").at(0)).isNull()) { workingdata.testfilename = DN.toElement().text(); } if(!(DN=root.elementsByTagName("workstate").at(0)).isNull()) { workingdata.workstate = DN.toElement().text().toInt(); } if(!(DN=root.elementsByTagName("alarmstate").at(0)).isNull()) { workingdata.alarmstate = DN.toElement().text().toInt(); } if(!(DN=root.elementsByTagName("PowerCtrl").at(0)).isNull()) { workingdata.PowerCtrl = DN.toElement().text().toInt(); } if(!(DN=root.elementsByTagName("CapPS").at(0)).isNull()) { workingdata.CapPS = DN.toElement().text().toInt(); } if(!(DN=root.elementsByTagName("SubCapPS1").at(0)).isNull()) { workingdata.SubCapPS[0] = DN.toElement().text().toInt(); } if(!(DN=root.elementsByTagName("SubCapPS2").at(0)).isNull()) { workingdata.SubCapPS[1] = DN.toElement().text().toInt(); } if(!(DN=root.elementsByTagName("SubCapPS3").at(0)).isNull()) { workingdata.SubCapPS[2] = DN.toElement().text().toInt(); } if(!(DN=root.elementsByTagName("SubCapPS4").at(0)).isNull()) { workingdata.SubCapPS[3] = DN.toElement().text().toInt(); } return true; } bool Check_Obj::Read_Fbo_Data(QString fname, FBO_DATA &fbo_data){ QFile file(fname); if( !file.open(QFile::ReadOnly) ) return false; QDataStream dataStream(&file); qint64 length = file.size(); quint8 *datas = new quint8[length]; memset(datas,0,length*sizeof(quint8)); dataStream.readRawData((char*)datas,length); FBO_DATA_HEAD_START data_start; memcpy(&data_start,datas,sizeof(FBO_DATA_HEAD_START)); int fbo_length = data_start.BattGroup; fbo_length *= data_start.BattSum; fbo_length = sizeof(FBO_DATA)-MONOMER_NUM_MAX*2+fbo_length*2; qint64 addr = length-fbo_length; while(addr>=FBO_DATA_HEAD_INFO_LENTH) { if( (datas[addr] == 0xFD || datas[addr] == 0xFC) && datas[addr] == datas[addr+1] && datas[addr] == datas[addr+2] && datas[addr] == datas[addr+3] ) { memcpy(&fbo_data,&datas[addr],fbo_length); delete []datas; return true; } else { addr -=1; } } delete []datas; file.close(); return false; }