sqlite database

别兴国
2023-12-01
#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()<<"==============================================";
 
}
 
 
 
 
}
 
 
 
 
 
 类似资料:

相关阅读

相关文章

相关问答