添加自研批检仪检测命令
This commit is contained in:
377
base/file.h
377
base/file.h
@@ -1,23 +1,19 @@
|
||||
|
||||
|
||||
|
||||
#ifndef file_h__
|
||||
#define file_h__
|
||||
|
||||
|
||||
|
||||
#include <QFile>
|
||||
#include "QByteArray"
|
||||
#include "stdint-gcc.h"
|
||||
#include "QList"
|
||||
#include "base.h"
|
||||
#include <QDebug>
|
||||
#include<QDir>
|
||||
#include <QDir>
|
||||
#include "base/crc.h"
|
||||
#include "QDateTime"
|
||||
#include "base/mycfg.h"
|
||||
|
||||
|
||||
/* Type for a 16-bit quantity. */
|
||||
typedef uint16_t Elf32_Half;
|
||||
typedef uint32_t Elf32_Word;
|
||||
@@ -31,210 +27,215 @@ typedef uint32_t Elf32_Off;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */
|
||||
Elf32_Half e_type; /* Object file type */
|
||||
Elf32_Half e_machine; /* Architecture */
|
||||
Elf32_Word e_version; /* Object file version */
|
||||
Elf32_Addr e_entry; /* Entry point virtual address */
|
||||
Elf32_Off e_phoff; /* Program header table file offset */
|
||||
Elf32_Off e_shoff; /* Section header table file offset */
|
||||
Elf32_Word e_flags; /* Processor-specific flags */
|
||||
Elf32_Half e_ehsize; /* ELF header size in bytes */
|
||||
Elf32_Half e_phentsize; /* Program header table entry size */
|
||||
Elf32_Half e_phnum; /* Program header table entry count */
|
||||
Elf32_Half e_shentsize; /* Section header table entry size */
|
||||
Elf32_Half e_shnum; /* Section header table entry count */
|
||||
Elf32_Half e_shstrndx; /* Section header string table index */
|
||||
unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */
|
||||
Elf32_Half e_type; /* Object file type */
|
||||
Elf32_Half e_machine; /* Architecture */
|
||||
Elf32_Word e_version; /* Object file version */
|
||||
Elf32_Addr e_entry; /* Entry point virtual address */
|
||||
Elf32_Off e_phoff; /* Program header table file offset */
|
||||
Elf32_Off e_shoff; /* Section header table file offset */
|
||||
Elf32_Word e_flags; /* Processor-specific flags */
|
||||
Elf32_Half e_ehsize; /* ELF header size in bytes */
|
||||
Elf32_Half e_phentsize; /* Program header table entry size */
|
||||
Elf32_Half e_phnum; /* Program header table entry count */
|
||||
Elf32_Half e_shentsize; /* Section header table entry size */
|
||||
Elf32_Half e_shnum; /* Section header table entry count */
|
||||
Elf32_Half e_shstrndx; /* Section header string table index */
|
||||
} Elf32_Ehdr;
|
||||
|
||||
|
||||
|
||||
|
||||
class app_file:public QObject
|
||||
class app_file : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_OBJECT
|
||||
public:
|
||||
app_file(QString name){
|
||||
QFile file;
|
||||
file.setFileName(name);
|
||||
if(file.exists())
|
||||
{
|
||||
file.open(QIODevice::ReadOnly);
|
||||
data = file.readAll();
|
||||
file.close();
|
||||
}
|
||||
}
|
||||
~app_file(){}
|
||||
void set_file_point()
|
||||
app_file(QString name)
|
||||
{
|
||||
QFile file;
|
||||
file.setFileName(name);
|
||||
if (file.exists())
|
||||
{
|
||||
Elf32_Ehdr h;
|
||||
memcpy((void *)&h,data.data(),sizeof(h));
|
||||
addr= h.e_shoff+h.e_shnum*h.e_shentsize;
|
||||
//qDebug()<<"ext file addr="<<addr<<endl;
|
||||
file.open(QIODevice::ReadOnly);
|
||||
data = file.readAll();
|
||||
file.close();
|
||||
}
|
||||
// 找到下一个文件
|
||||
QByteArray get_next_file(QString &name)
|
||||
}
|
||||
~app_file() {}
|
||||
void set_file_point()
|
||||
{
|
||||
Elf32_Ehdr h;
|
||||
memcpy((void *)&h, data.data(), sizeof(h));
|
||||
addr = h.e_shoff + h.e_shnum * h.e_shentsize;
|
||||
// qDebug()<<"ext file addr="<<addr<<endl;
|
||||
}
|
||||
// 找到下一个文件
|
||||
QByteArray get_next_file(QString &name)
|
||||
{
|
||||
if (addr >= data.size())
|
||||
{
|
||||
if(addr>=data.size())
|
||||
{
|
||||
//qDebug()<<"addr="<<addr<<"data.size()="<<data.size()<<endl;
|
||||
return QByteArray();
|
||||
}
|
||||
int size;
|
||||
size=data[addr]|(data[addr+1]<<8)|(data[addr+2]<<16)|(data[addr+3]<<24);
|
||||
name=data.mid(addr+4,256-4);
|
||||
//qDebug()<<"file name="<<name<<endl;
|
||||
QByteArray da=data.mid(addr+256,size-256);
|
||||
addr+=size;
|
||||
return da;
|
||||
// qDebug()<<"addr="<<addr<<"data.size()="<<data.size()<<endl;
|
||||
return QByteArray();
|
||||
}
|
||||
// 输出文件列表
|
||||
QList<mystring> get_file_list(){
|
||||
QList<mystring> l;
|
||||
set_file_point();
|
||||
for(int i=0;addr<data.size();i++){
|
||||
int size;
|
||||
size=data[addr]|(data[addr+1]<<8)|(data[addr+2]<<16)|(data[addr+3]<<24);
|
||||
myarray name_t(data.mid(addr+4,256-4));
|
||||
mystring a=name_t;
|
||||
l.append(a);
|
||||
addr+=size;
|
||||
}
|
||||
return l;
|
||||
int size;
|
||||
size = data[addr] | (data[addr + 1] << 8) | (data[addr + 2] << 16) | (data[addr + 3] << 24);
|
||||
name = data.mid(addr + 4, 256 - 4);
|
||||
// qDebug()<<"file name="<<name<<endl;
|
||||
QByteArray da = data.mid(addr + 256, size - 256);
|
||||
addr += size;
|
||||
return da;
|
||||
}
|
||||
// 输出文件列表
|
||||
QList<mystring> get_file_list()
|
||||
{
|
||||
QList<mystring> l;
|
||||
set_file_point();
|
||||
for (int i = 0; addr < data.size(); i++)
|
||||
{
|
||||
int size;
|
||||
size = data[addr] | (data[addr + 1] << 8) | (data[addr + 2] << 16) | (data[addr + 3] << 24);
|
||||
myarray name_t(data.mid(addr + 4, 256 - 4));
|
||||
mystring a = name_t;
|
||||
l.append(a);
|
||||
addr += size;
|
||||
}
|
||||
// 根据文件名返回数据
|
||||
QByteArray get_file(QString name){
|
||||
set_file_point();
|
||||
for(int i=0;addr<data.size();i++){
|
||||
int size;
|
||||
size=data[addr]|(data[addr+1]<<8)|(data[addr+2]<<16)|(data[addr+3]<<24);
|
||||
QByteArray n=data.mid(addr+4,256-4);
|
||||
if(name==QString(n)){
|
||||
return data.mid(addr+256,size-256);
|
||||
}
|
||||
addr+=size;
|
||||
}
|
||||
return QByteArray();
|
||||
return l;
|
||||
}
|
||||
// 根据文件名返回数据
|
||||
QByteArray get_file(QString name)
|
||||
{
|
||||
set_file_point();
|
||||
for (int i = 0; addr < data.size(); i++)
|
||||
{
|
||||
int size;
|
||||
size = data[addr] | (data[addr + 1] << 8) | (data[addr + 2] << 16) | (data[addr + 3] << 24);
|
||||
QByteArray n = data.mid(addr + 4, 256 - 4);
|
||||
if (name == QString(n))
|
||||
{
|
||||
return data.mid(addr + 256, size - 256);
|
||||
}
|
||||
addr += size;
|
||||
}
|
||||
return QByteArray();
|
||||
}
|
||||
|
||||
private:
|
||||
QByteArray data;
|
||||
int addr;
|
||||
QByteArray data;
|
||||
int addr;
|
||||
};
|
||||
|
||||
|
||||
|
||||
#define COMM_FILE_PATH QString("/home/root/comm_log/")
|
||||
#define COMM_FILE_NAME "comm_log.csv"
|
||||
|
||||
|
||||
class comm_file:public QObject
|
||||
class comm_file : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_OBJECT
|
||||
public:
|
||||
comm_file(mycfg *cfg_){
|
||||
QDir tempDir;
|
||||
if(!tempDir.exists(COMM_FILE_PATH))
|
||||
{
|
||||
tempDir.mkpath(COMM_FILE_PATH);
|
||||
}
|
||||
file_=nullptr;
|
||||
this->cfg_=cfg_;
|
||||
|
||||
bool new_file=true;
|
||||
file_ = new QFile(COMM_FILE_PATH+find_file());
|
||||
qInfo()<<"save comm_log at "<<file_->fileName()<<endl;
|
||||
if(file_->exists())
|
||||
{
|
||||
new_file=false;
|
||||
}
|
||||
|
||||
if (!file_->open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)){
|
||||
return;
|
||||
}
|
||||
if(new_file==true){
|
||||
QTextStream tWrite(file_);
|
||||
// QStringList ret_infos=cfg_->get_return_info();
|
||||
QStringList ret_infos;
|
||||
qDebug()<<"ret_info:"<<ret_infos<<"size="<<ret_infos.size()<<endl;
|
||||
tWrite<<QString("时间,序号,流程结果,");
|
||||
for(int i=0;i<ret_infos.size();i++){
|
||||
tWrite<<ret_infos[i];
|
||||
tWrite<<",";
|
||||
}
|
||||
tWrite<<"\n";
|
||||
}
|
||||
|
||||
}
|
||||
~comm_file(){
|
||||
if(file_!=nullptr) {
|
||||
file_->flush();
|
||||
file_->close();
|
||||
delete file_;
|
||||
file_=nullptr;
|
||||
}
|
||||
}
|
||||
QString find_file(){
|
||||
// 找到检测日志文件,超过7天则删除
|
||||
QDir dir=QDir(COMM_FILE_PATH);
|
||||
QStringList list;
|
||||
list.append("*.csv");
|
||||
QStringList files=dir.entryList(list,QDir::NoFilter,QDir::NoSort);
|
||||
qDebug()<<"files="<<files<<endl;
|
||||
if(files.size()>0){
|
||||
// 删除超时的记录
|
||||
foreach (QString name, files) {
|
||||
if(dateout(name)==true){
|
||||
QFile fi;
|
||||
fi.setFileName(COMM_FILE_PATH+name);
|
||||
qDebug()<<"will remove "<<fi.fileName()<<endl;
|
||||
if(fi.remove()!=true)
|
||||
{
|
||||
qWarning()<<"remove file "<<fi.fileName()<<"err"<<endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
QDate t=QDate::currentDate();
|
||||
// return t.toString("yyyy_MM_dd")+"-"+QString::number(cfg_->get_plan_id())+".csv";
|
||||
return t.toString("yyyy_MM_dd")+"-"+QString::number(0)+".csv";
|
||||
}
|
||||
// 是否超时,true超时
|
||||
bool dateout(QString file){
|
||||
QStringList name=file.split(".");
|
||||
qDebug()<<"name="<<name<<endl;
|
||||
QDate t=QDate::fromString(name[0].split("-")[0],"yyyy_MM_dd");
|
||||
QDate t2=QDate::currentDate();
|
||||
qDebug()<<"t="<<t.toString("yyyy_MM_dd")<<" t2="<<t2.toString("yyyy_MM_dd")<<endl;
|
||||
if((t.daysTo(t2)>30)||(!t.isValid())){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
void save(uint8_t src,QByteArray data)
|
||||
comm_file(mycfg *cfg_)
|
||||
{
|
||||
QDir tempDir;
|
||||
if (!tempDir.exists(COMM_FILE_PATH))
|
||||
{
|
||||
if(file_){
|
||||
QTextStream tWrite(file_);
|
||||
QString str=QString("%1,").arg(src);
|
||||
str.append(QString("%1,").arg(crc::byte_array_to_string(data.mid(0,8))));
|
||||
str.append(QString("%1\n").arg(crc::byte_array_to_int_string(data.mid(16,data.size()-16))));
|
||||
QDateTime t=QDateTime::currentDateTime();
|
||||
tWrite<<t.toString("yyyy.MM.dd hh:mm:ss.zzz ddd");
|
||||
tWrite<<",";
|
||||
tWrite<<str;
|
||||
}
|
||||
tempDir.mkpath(COMM_FILE_PATH);
|
||||
}
|
||||
file_ = nullptr;
|
||||
this->cfg_ = cfg_;
|
||||
|
||||
bool new_file = true;
|
||||
file_ = new QFile(COMM_FILE_PATH + find_file());
|
||||
qInfo() << "save comm_log at " << file_->fileName() << endl;
|
||||
if (file_->exists())
|
||||
{
|
||||
new_file = false;
|
||||
}
|
||||
|
||||
if (!file_->open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append))
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (new_file == true)
|
||||
{
|
||||
QTextStream tWrite(file_);
|
||||
// QStringList ret_infos=cfg_->get_return_info();
|
||||
QStringList ret_infos;
|
||||
qDebug() << "ret_info:" << ret_infos << "size=" << ret_infos.size() << endl;
|
||||
tWrite << QString("时间,序号,流程结果,");
|
||||
for (int i = 0; i < ret_infos.size(); i++)
|
||||
{
|
||||
tWrite << ret_infos[i];
|
||||
tWrite << ",";
|
||||
}
|
||||
tWrite << "\n";
|
||||
}
|
||||
}
|
||||
~comm_file()
|
||||
{
|
||||
if (file_ != nullptr)
|
||||
{
|
||||
file_->flush();
|
||||
file_->close();
|
||||
delete file_;
|
||||
file_ = nullptr;
|
||||
}
|
||||
}
|
||||
QString find_file()
|
||||
{
|
||||
// 找到检测日志文件,超过7天则删除
|
||||
QDir dir = QDir(COMM_FILE_PATH);
|
||||
QStringList list;
|
||||
list.append("*.csv");
|
||||
QStringList files = dir.entryList(list, QDir::NoFilter, QDir::NoSort);
|
||||
qDebug() << "files=" << files << endl;
|
||||
if (files.size() > 0)
|
||||
{
|
||||
// 删除超时的记录
|
||||
foreach (QString name, files)
|
||||
{
|
||||
if (dateout(name) == true)
|
||||
{
|
||||
QFile fi;
|
||||
fi.setFileName(COMM_FILE_PATH + name);
|
||||
qDebug() << "will remove " << fi.fileName() << endl;
|
||||
if (fi.remove() != true)
|
||||
{
|
||||
qWarning() << "remove file " << fi.fileName() << "err" << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
QDate t = QDate::currentDate();
|
||||
// return t.toString("yyyy_MM_dd")+"-"+QString::number(cfg_->get_plan_id())+".csv";
|
||||
return t.toString("yyyy_MM_dd") + "-" + QString::number(0) + ".csv";
|
||||
}
|
||||
// 是否超时,true超时
|
||||
bool dateout(QString file)
|
||||
{
|
||||
QStringList name = file.split(".");
|
||||
qDebug() << "name=" << name << endl;
|
||||
QDate t = QDate::fromString(name[0].split("-")[0], "yyyy_MM_dd");
|
||||
QDate t2 = QDate::currentDate();
|
||||
qDebug() << "t=" << t.toString("yyyy_MM_dd") << " t2=" << t2.toString("yyyy_MM_dd") << endl;
|
||||
if ((t.daysTo(t2) > 30) || (!t.isValid()))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
void save(uint8_t src, QByteArray data)
|
||||
{
|
||||
if (file_)
|
||||
{
|
||||
QTextStream tWrite(file_);
|
||||
QString str = QString("%1,").arg(src);
|
||||
str.append(QString("%1,").arg(crc::byte_array_to_string(data.mid(0, 8))));
|
||||
str.append(QString("%1\n").arg(crc::byte_array_to_int_string(data.mid(16, data.size() - 16))));
|
||||
QDateTime t = QDateTime::currentDateTime();
|
||||
tWrite << t.toString("yyyy.MM.dd hh:mm:ss.zzz ddd");
|
||||
tWrite << ",";
|
||||
tWrite << str;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
QFile *file_;
|
||||
mycfg *cfg_;
|
||||
QFile *file_;
|
||||
mycfg *cfg_;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user