#include "wavesd.h"
#include "ui_wavesd.h"
#include <QMessageBox>
#include <QStringList>
#include <QFileDialog>
#include <QDebug>
#include <QDir>
#include <QFileInfo>
#include <QStringList>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
_WaveData_ wavedata;
WaveSD::WaveSD(QWidget *parent) :
QWidget(parent),
ui(new Ui::WaveSD)
{
ui->setupUi(this);
}
WaveSD::~WaveSD()
{
delete ui;
}
void WaveSD::on_pushButton_clicked()
{
QString fileName=QFileDialog::getOpenFileName(this,QStringLiteral("请选择一个文件"),\
QDir::currentPath(),QStringLiteral(".h文件(*.h);;所有文件(*.*)"));
if(fileName.isEmpty())
return;
QFile aFile(fileName);
if(!aFile.open(QIODevice::ReadOnly|QIODevice::Text))
return;
ui->plainTextEdit->appendPlainText(QStringLiteral("文件大小:")+QString::number(aFile.size())+"\n");
ui->plainTextEdit->appendPlainText(QStringLiteral("文件访问权限:")+QString::number(aFile.permissions(),16)+"\n");
// QFile file("image.jpg");
// QFileInfo info(file);//获取文件的信息
QFileInfo info(aFile);//获取文件的信息
qDebug() << QStringLiteral("路径") << info.absoluteFilePath()
<< QStringLiteral("大小") << info.size();
aFile.close();
}
void WaveSD::on_pushButton_2_clicked()
{
// QFile file("image.jpg");
// QFileInfo info(file);//获取文件的信息
// qDebug() << QStringLiteral("路径") << info.absoluteFilePath()
// << QStringLiteral("大小") << info.size();
// file.close();
QString oldFileName=QFileDialog::getOpenFileName(this,QStringLiteral("请选择一个文件"),\
QDir::currentPath(),QStringLiteral(".h文件(*.h);;所有文件(*.*)"));
if(oldFileName.isEmpty())
return;
QFileInfo fileInfo(oldFileName);
QString newFileName=fileInfo.path()+"/"+fileInfo.baseName()+".XYZ"; //设置新文件名称
QFile::rename(oldFileName,newFileName); //改名
ui->plainTextEdit->appendPlainText(QStringLiteral("源文件名为:")+oldFileName+"\n");
ui->plainTextEdit->appendPlainText(QStringLiteral("重命名为:")+newFileName);
}
void WaveSD::on_pushButton_3_clicked()
{
//过滤器的使用
// QDir mDir(QDir::current());
// QStringList filters;
// filters<<"*.cpp"<<"*.h"<<"*.txt"<<".pro"; //设置指定的文件类型
// mDir.setNameFilters(filters); //设置过滤器
// qDebug()<<mDir.entryList(filters, QDir::Files); //打印帅选出的条目
// QDir dir("E:\QT");
QDir dir(QDir::current());
foreach (QFileInfo mItem,dir.entryInfoList())//遍历路径下的每一项
{
if(mItem.isDir())//如果是文件夹
{
qDebug() << " Dir " << mItem.filePath(); //打印路径
}
else//如果不是文件夹
{
qDebug() << "File" << mItem.filePath();
}
}
ui->plainTextEdit->appendPlainText(QStringLiteral("临时文件目录名称:")+QDir::tempPath()+"\n");
ui->plainTextEdit->appendPlainText(QStringLiteral("根目录名称:")+QDir::rootPath()+"\n");
ui->plainTextEdit->appendPlainText(QStringLiteral("主目录名称:")+QDir::homePath()+"\n");
ui->plainTextEdit->appendPlainText(QStringLiteral("当前目录名称:")+QDir::currentPath()+"\n");
}
void WaveSD::on_pushButton_4_clicked()
{
QString fileName=QFileDialog::getOpenFileName(this,QStringLiteral("请选择一个文件"),QDir::currentPath());
if(fileName.isEmpty())
return;
ui->lineEdit->setText(fileName);
}
void WaveSD::on_pushButton_5_clicked()
{
QString dirName=QFileDialog::getExistingDirectory(this,QStringLiteral("选择一个目录"),QDir::currentPath());
if(dirName.isEmpty())
return;
ui->lineEdit_2->setText(dirName);
}
void WaveSD::on_pushButton_6_clicked()
{
//添加监听对象
fileWathcer.addPath(ui->lineEdit->text());
fileWathcer.addPath(ui->lineEdit_2->text());
//绑定信号与槽
QObject::connect(&fileWathcer,SIGNAL(directoryChanged(const QString path)),this,SLOT(on_directoryChanged(const QString path)));
QObject::connect(&fileWathcer,SIGNAL(fileChanged(const QString path)),this,SLOT(on_fileChanged(const QString path)));
}
void WaveSD::on_pushButton_7_clicked()
{
//解除监听对象
fileWathcer.removePath(ui->lineEdit->text());
fileWathcer.removePath(ui->lineEdit_2->text());
//解除信号与槽
QObject::connect(&fileWathcer,&QFileSystemWatcher::directoryChanged,this,&WaveSD::on_directoryChanged);
QObject::connect(&fileWathcer,&QFileSystemWatcher::fileChanged,this,&WaveSD::on_fileChanged);
}
void WaveSD::on_fileChanged(const QString path)
{
ui->plainTextEdit->appendPlainText(path);
ui->plainTextEdit->appendPlainText(QStringLiteral("文件发生了变化"));
}
void WaveSD::on_directoryChanged(const QString path)
{
ui->plainTextEdit->appendPlainText(path);
ui->plainTextEdit->appendPlainText(QStringLiteral("目录发生了变化"));
}
void WaveSD::on_pushButton_8_clicked()
{
QString fileName=QFileDialog::getOpenFileName(this,QStringLiteral("请选择一个文件"),\
QDir::currentPath(),QStringLiteral(".h文件(*.h);;所有文件(*.*)"));
if(fileName.isEmpty())
return;
QFile file(fileName);
// if(!file.open(QIODevice::ReadOnly|QIODevice::Text))
// return;
// QFile file("test.txt"); //打开文件test.txt
QVector<float>array; //vector矢量,建立一个数组array
if(file.open(QIODevice::ReadOnly|QIODevice::Text)) // 以只读方式打开文件
{
QTextStream ts(&file); //利用QTextStream流读取file,ts通过指针访问file
while(!file.atEnd()) //文件未读完时
{
float buf; //定义float类型数据buf
QStringList list=ts.readAll().split(QRegExp("\\s+")); //利用QStringList读取所有内容,split分割内容,有多种分割样式
QListIterator<QString>li(list); //起到定位列表内字符初始位置的作用
while(li.hasNext()) //hasNext当读取未进行到末尾时,返回true,故可以在未到末尾时一直读取
{
buf=li.next().toFloat(); //next的作用是读取下一个值并向下跳转位置
array.append(buf); //append追加,等同于list.insert(size(), value)的作用,添加内容
}
}
}
ui->lineEdit->setText(QString::number(array[0])); //将数组array中的第1个数据显示到第一个lineedit上
ui->lineEdit_2->setText(QString::number(array[2]));
}
void WaveSD::on_pushButton_9_clicked()
{
//指定该连接使用的数据库驱动,没有设置第二个参数即为默认连接
QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
//创建一个有名字的连接
// QSqlDatabase db1=QSqlDatabase::addDatabase("QSQLITE","connection1");
//设置数据库名。若没有数据库则会创建数据库.(即build****-Debug下没有*.db的数据库文件,则会创建)
db.setDatabaseName("mydatabase_test");
//设置主机名
db.setHostName("compute");
//设置用户名和密码
db.setUserName("asus");
db.setPassword("123456");
//打开数据库
if(db.open()==true)
qDebug("yes");
else
qDebug("no");
//用它来对数据库进行操作
QSqlQuery q(db);
// q.exec("create table wavedata(id int primary key,name tinyint)");
q.exec("create table yujutest2(id int primary key,name varchar(2000))");
QString fileName=QFileDialog::getOpenFileName(this,QStringLiteral("请选择一个文件"),\
QDir::currentPath(),QStringLiteral(".h文件(*.h);;所有文件(*.*)"));
if(fileName.isEmpty())
return;
QFile file(fileName);
// if(!file.open(QIODevice::ReadOnly|QIODevice::Text))
// return;
// QFile file("test.txt"); //打开文件test.txt
// QFile file("data.data");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
// QString str;
quint8 a;
// in >> str >> a;
int m=0;
int n=0;
uint8_t arry[1000];
while(m<2)
{
q.seek(m);
while(n<1000)
{
in>>a;
arry[n]=a;
n++;
}
saveDataBase(q,arry,m,1000);
m++;
n=0;
}
readDataBase(q);
// int c=0;
// while (c<2000) {
// in>>a;
q.exec(QString("insert into wavedata values(%1,%2)").arg(c).arg(a));
qDebug()<<str<<a;
// qDebug()<<a;
// c++;
// }
// q.exec("select * from wavedata");
// bool ok;
// int temp_value=0;
// QString string_value;
// QByteArray binaryData;
// while(q.next())
// {
// if(q.value(1).toInt()<0)
// {
// temp_value=-q.value(1).toInt();
// }
// else
// {
// temp_value=q.value(1).toInt();
// }
binaryData.data()[q.value(0).toInt()]= (quint8)temp_value;
// wavedatabuff.pack[q.value(0).toInt()]=(uint8_t)q.value(1).toInt();
// string_value=QString::number(temp_value,16);
// if(string_value.length()<2)
// {
// QString s=QString(2-string_value.length(), '0');
// string_value.prepend(s);
// }
// qDebug()<<"id:"<<q.value(0).toString()<<" value:"<<string_value <<"\n";
// qDebug()<<"id:"<<q.value(0).toString()<<" value:"<<q.value(1).toChar() <<"\n";
// qDebug()<<"id:"<<q.value(0).toString()<<" value:"<<q.value(1).toInt() <<"\n";
// qDebug()<<"id:"<<q.value(0).toString()<<" value:"<<q.value(1).toString() <<"\n";
// }
// analysisPack(&wavedatabuff);
// qDebug()<<binaryData;
// for(int i=0;i<100;i++)
// {
qDebug()<<pack[i];
// qDebug()<<binaryData.data()[i];
// }
// qDebug() << binaryData;
// qDebug() << binaryData.toHex();
// QString hex=binaryData.toHex();
// QByteArray ret;
// quint8 pack[2000];
// //QString::trimmed()函数:移除字符串两端的空白符
// //QString::simplified()函数:移除字符串两端的空白字符,使用单个空格字符“ ”代替字符串中出现的空白字符。
// hex=hex.trimmed();
// formatString(hex,2," ");
// QStringList sl=hex.split(" ");
for(int i=0;i<100;i++)
{
// qDebug()<<ret.data();
}
// int j=0;
// foreach(QString s,sl)
// {
// if(!s.isEmpty())
ret.append((char)s.toInt(&ok,16)&0xFF);
// pack[j]=s.toInt(&ok,16)&0xFF;
// j++;
// }
// qDebug() <<ret;
// QString str = binaryData;
// qDebug() <<str;
// for(int i=0;i<1000;i++)
// {
qDebug()<<pack[i];
// qDebug()<<QString::number(pack[i],16);
// }
// QByteArray text = QByteArray::fromHex("517420697320677265617421");
text.data();
// qDebug() <<text.data();// returns "Qt is great!"
// float cov[512] = {0.0}; //定义就初始化
// QSqlRecord myrecord = q.record(); //获取记录
// QByteArray binaryData = q.value(myrecord.indexOf("name")).toByteArray(); //取feature字段并弄成binaryData类型
// memcpy(&cov, binaryData.data(), static_cast<size_t>(sizeof(cov)));
//qDebug()<<binaryData;
// file.close();
// QTextStream ts(&file); //利用QTextStream流读取file,ts通过指针访问file
// while(!file.atEnd()) //文件未读完时
// {
// QString s=ts.readAll();
// qDebug() << "File" << s;
// ui->plainTextEdit->appendPlainText(s);
//ui->plainTextEdit->appendPlainText(QStringLiteral("目录发生了变化"));
// float buf; //定义float类型数据buf
// QStringList list=ts.readAll().split(QRegExp("\\s+")); //利用QStringList读取所有内容,split分割内容,有多种分割样式
// QListIterator<QString>li(list); //起到定位列表内字符初始位置的作用
// while(li.hasNext()) //hasNext当读取未进行到末尾时,返回true,故可以在未到末尾时一直读取
// {
// buf=li.next().toFloat(); //next的作用是读取下一个值并向下跳转位置
// array.append(buf); //append追加,等同于list.insert(size(), value)的作用,添加内容
// }
// }
}
void WaveSD::on_pushButton_10_clicked()
{
//本例打印出的数据库驱动,它们是QT与对应的数据库通信的桥梁。
//如驱动(QSQLITE)对应数据库(SQLite)
//这里重点提一下"SQLite"是一款轻型的文件型数据库。主要应用于嵌入式领域,支持跨平台。
QStringList qlist=QSqlDatabase::drivers();
foreach(QString qlists,qlist)
qDebug()<<qlists;
//#注意
//1.要想使用QSqlQuery或QSqlQueryModel来访问数据库,
// 先创建并打开一个或多个数据库连接。
//2.数据库连接使用连接名来定义,而不是数据库名。
//3.QSqlDatabase支持默认连接,也就是一个没有命名的连接。
// 如果应用程序中只需要有一个数据库连接,默认连接很方便。
//创建一个连接
//指定该连接使用的数据库驱动,没有设置第二个参数即为默认连接
QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
//创建一个有名字的连接
// QSqlDatabase db1=QSqlDatabase::addDatabase("QSQLITE","connection1");
//设置数据库名。若没有数据库则会创建数据库.(即build****-Debug下没有*.db的数据库文件,则会创建)
db.setDatabaseName("mydatabase");//在本目录下生成
//设置主机名
db.setHostName("compute");
//设置用户名和密码
db.setUserName("asus");
db.setPassword("123456");
//打开数据库
if(db.open()==true)
qDebug("yes");
else
qDebug("no");
//数据库操作代码
//-------
//用它来对数据库进行操作
QSqlQuery query(db);
//建表 后面是SQL语句
// query.exec("create table student(id int primary key,name varchar(20))");
// query.exec("create table wavedata(id int primary key,name int)");
//向student表插入数据
query.exec("insert into student values(1,'LiMing')");
//查询student表的所有数据
query.exec("select * from student");
//next()遍历结果集(还有下一个数据吗?是:否)
while(query.next())
//将student表的值打印出来
qDebug()<<"id:"<<query.value(0).toString()<<" name:"<<query.value(1).toString()<<"\n";
//删数据
// query.exec("delete from student where id=1 and name='LiMing'");
//更新数据
// query.exec("update student set name='af' where id=1");
//DROP: 用来删除整表,并且连表结构也会删除,删除后则只能使用CREATE TABLE来重新创建表
//TRUNCATE: 在SQLite中没有该语句,在MySQL中有该语句,用来清楚表内数据,但是表结构不会删除.
//DELETE: 删除部分记录,并且表结构不会删除,删除的速度比上面两个语句慢,可以配合WHERE来删除指定的某行
query.exec("DELETE FROM students WHERE id = 3");
query.exec("DROP TABLE student"); //删除名为students的表
query.exec("DROP TABLE wavedata");
// 改表内容
// 改表内容一般用下面两个语句:
// UPDATE : 用来修改表中内容,可以通过WHERE语句来指定修改
// ALTER TABLE: 用来重命名表,或者在已有的表中添加新的一列
// query.exec("ALTER TABLE students RENAME TO new_students"); //将students重命名为new_students
// query.exec("ALTER TABLE new_students ADD COLUMN 结果 VARCHAR(10)");
// //向 new_students表里添加新的一列,标题为结果,内容格式为VARCHAR
// UPDATE 示例
// 示例1-不使用WHERE,直接修改某列
// query.exec("UPDATE new_students SET score = 100 , name = '小A'");
// //修改score和name所在的列内容
// 示例2-使用WHERE,判断小于60的设为不合格,否则设为合格
// query.exec("UPDATE new_students SET 结果='不合格' WHERE score<60 ");
// query.exec("UPDATE new_students SET 结果='合格' WHERE score>=60 ");
// QSqlQuery query;
// int id = ui->spinBox->value();
// query.exec(QString("select name from student where id =%1")
// .arg(id));
// query.next();
// QString name = query.value(0).toString();
// qDebug() << name;
//关闭数据库
db.close();
}
void WaveSD::on_pushButton_11_clicked()
{
// QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
// db.setHostName("127.0.0.1");
// db.setPort(3306);
// db.setDatabaseName("mysql");
// db.setUserName("root");
// db.setPassword("root");
// bool ok = db.open();
// if (ok){
// QMessageBox::information(this, "infor", "success");
// }
// else {
// QMessageBox::information(this, "infor", "open failed");
qDebug()<<"error open database because"<<db.lastError().text();
// }
}
void WaveSD::on_pushButton_12_clicked()
{
// QFile file("file.dat");
// QString fileName=QFileDialog::getOpenFileName(this,QStringLiteral("请选择一个文件"),\
// QDir::currentPath(),QStringLiteral(".h文件(*.h);;所有文件(*.*)"));
// if(fileName.isEmpty())
// return;
// QFile file(fileName);
// QFile file("file.dat");
// QFile file("datatest.txt");
QFile file("data.data");
file.open(QIODevice::WriteOnly);
QDataStream out(&file); // we will serialize the data into the file
out << QString("the answer is"); // serialize a string
out << (qint32)42; // serialize an intege
file.close();
out.setVersion(QDataStream::Qt_4_0);
}
void WaveSD::on_pushButton_13_clicked()
{
// QFile file("file.dat");
// QFile file("datatest.txt");
QFile file("data.data");
file.open(QIODevice::ReadOnly);
QDataStream in(&file); // read the data serialized from the file
QString str;
qint32 a;
in >> str >> a; // extract "the answer is" and 42
qDebug()<<str<<a;
file.close();
}
void WaveSD::on_pushButton_14_clicked()
{
//指定该连接使用的数据库驱动,没有设置第二个参数即为默认连接
QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
//创建一个有名字的连接
// QSqlDatabase db1=QSqlDatabase::addDatabase("QSQLITE","connection1");
//设置数据库名。若没有数据库则会创建数据库.(即build****-Debug下没有*.db的数据库文件,则会创建)
db.setDatabaseName("mydatabase_test");
//设置主机名
db.setHostName("compute");
//设置用户名和密码
db.setUserName("asus");
db.setPassword("123456");
//打开数据库
if(db.open()==true)
qDebug("yes");
else
qDebug("no");
uint8_t arry[30];
//用它来对数据库进行操作
QSqlQuery query(db);
// query.exec("create table yujutest(id int primary key,name char)");
// query.exec("insert into yujutest values(1,100)");
// query.exec("create table yujutest2(id int primary key,name varchar(100))");
query.exec("DROP TABLE yujutest2");
qDebug()<<"DROP TABLE yujutest2";
// query.exec("select * from yujutest");
// while(query.next())
// //将student表的值打印出来
// qDebug()<<"id:"<<query.value(0).toString()<<" value:"<<query.value(1).toString()<<"\n";
// for(int i=0;i<20;i++)
// {
// arry[i]=(uint8_t)i;
// }
// QString str,string_value;
// for(int j=0;j<20;j++)
// {
// string_value=QString::number(arry[j],16);
// if(string_value.length()<2)
// {
// QString s=QString(2-string_value.length(), '0');
// string_value.prepend(s);
// }
// str.append(string_value);
// }
// qDebug()<<str;
query.exec(QString("insert into yujutest2 values(1,'dhjsk')"));
// query.exec(QString("insert into yujutest2 values(1,'%1')").arg(str));
// query.exec("select * from yujutest2");
// while(query.next())
// {
// //将student表的值打印出来
// qDebug()<<"id:"<<query.value(0).toString()<<" value:"<<query.value(1).toString()<<"\n";
// QString string_arry_hex=query.value(1).toString();
// //QString::trimmed()函数:移除字符串两端的空白符
// //QString::simplified()函数:移除字符串两端的空白字符,使用单个空格字符“ ”代替字符串中出现的空白字符。
// //hex=hex.trimmed();
// formatString(string_arry_hex,2," ");
// QStringList sl=string_arry_hex.split(" ");
// int j=0;
// bool ok;
// foreach(QString s,sl)
// {
// if(!s.isEmpty())
// qDebug()<<(s.toInt(&ok,16)&0xFF);
// }
// }
}
void WaveSD::wavePack(_WaveDataBuff_ *p_wavedatabuff)
{
_WaveDataBuff_ *p_temp_data_buff = p_wavedatabuff;
if(p_temp_data_buff->Tag==0x0001)
{
for(int i=0;i<100;i+=2)
{
ui->widget->wavedata.Press[i]=p_temp_data_buff->Press_Buff[i]<<8|p_temp_data_buff->Press_Buff[i+1];
}
}
else if(p_temp_data_buff->Tag==0x0002)
{
for(int i=0;i<100;i+=2)
{
ui->widget->wavedata.Flow[i]=p_temp_data_buff->Flow_Buff[i]<<8|p_temp_data_buff->Flow_Buff[i+1];
}
}
}
void WaveSD::saveDataBase(QSqlQuery &query, uint8_t *arry,int index,int length)
{
QString str,string_value;
for(int j=0;j<length;j++)
{
string_value=QString::number(arry[j],16);
if(string_value.length()<2)
{
QString s=QString(2-string_value.length(), '0');
string_value.prepend(s);
}
str.append(string_value);
}
query.exec(QString("insert into yujutest2 values('%1','%2')").arg(index).arg(str));
qDebug()<<"save sucess";
}
void WaveSD::readDataBase(QSqlQuery &query)
{
query.exec("select * from yujutest2");
while(query.next())
{
//将student表的值打印出来
qDebug()<<"id:"<<query.value(0).toString()<<" value:"<<query.value(1).toString()<<"\n";
QString string_arry_hex=query.value(1).toString();
//QString::trimmed()函数:移除字符串两端的空白符
//QString::simplified()函数:移除字符串两端的空白字符,使用单个空格字符“ ”代替字符串中出现的空白字符。
//hex=hex.trimmed();
formatString(string_arry_hex,2," ");
QStringList sl=string_arry_hex.split(" ");
int j=0;
bool ok;
foreach(QString s,sl)
{
if(!s.isEmpty())
{
wavedatabuff.pack[j]=s.toInt(&ok,16)&0xFF;
// qDebug()<<"j:"<<j<<"value:"<<wavedatabuff.pack[j];
}
j++;
}
analysisPack(&wavedatabuff);
}
}
void WaveSD::getHisStatus(uint8_t *p_data, int length)
{
uint8_t *p_temp_data=p_data;
if((p_temp_data[MESSAGE_TIME_TOTALLEN+0]<<8|p_temp_data[MESSAGE_TIME_TOTALLEN+1])==DATA_STATUS)
{
if((p_temp_data[MESSAGE_TIME_TOTALLEN+4])==0x01)
{
qDebug()<<"呼气状态";
}else
{
qDebug()<<"吸气状态";
}
}
}
void WaveSD::getHisMonitor(uint8_t *p_data, int length)
{
uint8_t *p_temp_data=p_data;
if((p_temp_data[MESSAGE_TIME_TOTALLEN+0]<<8|p_temp_data[MESSAGE_TIME_TOTALLEN+1])==DATA_STATUS)
{
// qDebug()<<(p_temp_data[MESSAGE_TIME_TOTALLEN+4]);
}
}
void WaveSD::formatString(QString &org, int n, const QString &ch)
{
int size= org.size();
int space= qRound(size*1.0/n+0.5)-1;
if(space<=0)
return;
for(int i=0,pos=n;i<space;++i,pos+=(n+1))
{
org.insert(pos,ch);
}
}
void WaveSD::analysisPack(_WaveDataBuff_ *p_wavedatabuff)
{
_WaveDataBuff_ *p_temp_data_buff=p_wavedatabuff;
uint8_t databuff[1000];
for(int i=0;i<1000;i++)
{
databuff[i]=p_temp_data_buff->pack[i];
}
static uint8_t one_pack_buff[500];
static uint curr_positon=0;
static uint byte_count=0;
bool Terminal_Type_Flag=false;
bool Terminal_SubType_Flag=false;
bool Data_Length_Flag=false;
int count=0;
while (count<1000)
{
if(Data_Length_Flag==true)
{
one_pack_buff[curr_positon]=databuff[count];
curr_positon++;
byte_count--;
// qDebug()<<"ffffffffff"<<curr_positon<<one_pack_buff[curr_positon];
if(byte_count==0)
{
oneTextPack(one_pack_buff,curr_positon);
// qDebug()<<"ffffffffff"<<curr_positon<<one_pack_buff[curr_positon];
curr_positon=0;
Terminal_Type_Flag=false;
Terminal_SubType_Flag=false;
Data_Length_Flag=false;
}
}
else
{
if(Terminal_SubType_Flag==true)
{
if(count>10)
{
Data_Length_Flag=true;
count-=10;
byte_count=(databuff[count]<<8|databuff[count+1]);//add crc
count--;
}
else
{
Terminal_Type_Flag=false;
Terminal_SubType_Flag=false;
}
}
else if(Terminal_Type_Flag==true)
{
if(databuff[count]==0x07)
{
Terminal_SubType_Flag=true;
}
else
{
Terminal_Type_Flag=false;
Terminal_SubType_Flag=false;
}
}
else
{
if(databuff[count]==0x02)
{
Terminal_Type_Flag=true;
// qDebug()<<"Terminal_Type_Flag"<<count;
}
else
{
Terminal_Type_Flag=false;
}
}
}
count++;
}
}
typedef class
{
public:
uint16_t MsgLength;
uint8_t Version[2];
uint16_t CommandID;
uint16_t MsgSqe;
uint8_t TerminalTyp;
uint8_t TerminalSubType;
uint8_t TerminalMode;
uint16_t TerminalID[8];
uint8_t ErrorCode;
uint8_t Reserved[4];
} _MessageHeader_;
//CRC16УÑé±í
const uint8_t auchCRCHi[] = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40
};
const uint8_t auchCRCLo[] = {
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5,
0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B,
0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE,
0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6,
0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D,
0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8,
0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C,
0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21,
0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A,
0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA,
0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7,
0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51,
0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98,
0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D,
0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83,
0x41, 0x81, 0x80, 0x40
};
uint16_t WaveSD::crc_16(uint8_t *puchMsg , uint16_t usDataLen)
{
// uint8_t CRCHi = 0xFF;
// uint8_t CRCLo = 0xFF;
// uint16_t iIndex = 0;
// for (int i = 0; i < usDataLen; i++ )
// {
// iIndex = CRCLo ^ (puchMsg[i++]);
// CRCLo = (byte)(CRCHi ^ aucCRCHi[iIndex]);
// CRCHi = aucCRCLo[iIndex];
// }
// return ( int )( CRCHi << 8 | CRCLo );
uint8_t uchCRCHi = 0xFF ; // high byte of CRC initialized
uint8_t uchCRCLo = 0xFF ; // low byte of CRC initialized
uint16_t uIndex=0 ; // will index into CRC lookup table
while (usDataLen--) // pass through message buffer
{
uIndex = uchCRCLo ^ *puchMsg++ ; // calculate the CRC
uchCRCLo = uchCRCHi ^ auchCRCHi[uIndex];
uchCRCHi = auchCRCLo[uIndex];
}
return (uint16_t)(((uint8_t)uchCRCHi << 8) | uchCRCLo);
}
void WaveSD::oneTextPack(uint8_t *p_data, int length)
{
uint8_t text_data[length];
uint8_t *p_text_data=text_data;
uint16_t crc16;
for(int i=0;i<length;i++)
{
text_data[i]=*p_data++;
}
_MessageHeader_ messageheader;
messageheader.MsgLength=text_data[0]<<8|text_data[1];
messageheader.Version[0]=text_data[2];
messageheader.Version[1]=text_data[3];
messageheader.CommandID=text_data[4]<<8|text_data[5];
messageheader.MsgSqe=text_data[6]<<8|text_data[7];
messageheader.TerminalTyp=text_data[8];
messageheader.TerminalSubType=text_data[9];
messageheader.TerminalMode=text_data[10];
messageheader.TerminalID[7]=text_data[11]<<8|text_data[12];
messageheader.TerminalID[6]=text_data[13]<<8|text_data[14];
messageheader.TerminalID[5]=text_data[15]<<8|text_data[16];
messageheader.TerminalID[4]=text_data[17]<<8|text_data[18];
messageheader.TerminalID[3]=text_data[19]<<8|text_data[20];
messageheader.TerminalID[2]=text_data[21]<<8|text_data[22];
messageheader.TerminalID[1]=text_data[23]<<8|text_data[24];
messageheader.TerminalID[0]=text_data[25]<<8|text_data[26];
messageheader.ErrorCode=text_data[27];
messageheader.Reserved[3]=text_data[28];
messageheader.Reserved[2]=text_data[29];
messageheader.Reserved[1]=text_data[30];
messageheader.Reserved[0]=text_data[31];
crc16=crc_16(p_text_data,length-2);
// qDebug()<<crc16;
// qDebug()<<text_data[length-2];
// qDebug()<<text_data[length-1];
// 003301000031000002070f303030300000000000000000000000000000000000
// 0000000800000000619dad4f
//0001000100
//9976
if(crc16==(text_data[length-2]<<8|text_data[length-1]))
{
if(messageheader.CommandID==HIS_STATUS)
{
getHisStatus(&text_data[32],1);
}
if(messageheader.CommandID==HIS_MONITOR)
{
// getHisStatus(&text_data[32],1);
}
if(messageheader.CommandID==HIS_WAVE)
{
ui->widget->saveWaveData(&text_data[32],MESSAGE_TIME_TOTALLEN+MESSAGE_WAVEP_LEN+MESSAGE_WAVEF_LEN);
}
qDebug()<<"length"<<messageheader.MsgLength;
qDebug()<<"Version"<<messageheader.Version[0];
qDebug()<<"Version"<<messageheader.Version[1];
qDebug()<<"CommandID"<<QString::number(messageheader.CommandID,16);
qDebug()<<"MsgSqe"<<messageheader.MsgSqe;
qDebug()<<"TerminalTyp"<<messageheader.TerminalTyp;
qDebug()<<"TerminalSubType"<<messageheader.TerminalSubType;
qDebug()<<"TerminalMode"<<messageheader.TerminalMode;
qDebug()<<"TerminalID"<<messageheader.TerminalID[7];
qDebug()<<"TerminalID"<<messageheader.TerminalID[6];
qDebug()<<"TerminalID"<<messageheader.TerminalID[5];
qDebug()<<"TerminalID"<<messageheader.TerminalID[4];
qDebug()<<"TerminalID"<<messageheader.TerminalID[3];
qDebug()<<"TerminalID"<<messageheader.TerminalID[2];
qDebug()<<"TerminalID"<<messageheader.TerminalID[1];
qDebug()<<"TerminalID"<<messageheader.TerminalID[0];
qDebug()<<"ErrorCode"<<messageheader.ErrorCode;
qDebug()<<"Reserved[3]"<<messageheader.Reserved[3];
qDebug()<<"Reserved[2]"<<messageheader.Reserved[2];
qDebug()<<"Reserved[1]"<<messageheader.Reserved[1];
qDebug()<<"Reserved[0]"<<messageheader.Reserved[0];
qDebug()<<"==============================================";
}
}