123 lines
2.9 KiB
C++
123 lines
2.9 KiB
C++
#include "qtserialport.h"
|
||
|
||
int QtSerialport::OpenSerialPort(string portName, int baudrate)
|
||
{
|
||
QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();
|
||
|
||
for (int i=0; i<infos.length();i++)
|
||
{
|
||
qDebug()<<infos[i].portName();
|
||
// std::cout<<infos[i].portName()<<std::endl;
|
||
}
|
||
|
||
//std::cout<<"number of availablePorts:"<<infos.size()<<std::endl;
|
||
|
||
//如果在构造函数中创建m_serial就会出现错误:
|
||
//QObject: Cannot create children for a parent that is in a different thread.
|
||
//(Parent is QSerialPort(0x2e31b20), parent's thread is QThread(0x2e2f130), current thread is QThread(0x2e31110)
|
||
m_serial = new QSerialPort();
|
||
|
||
if(m_serial->isOpen())//如果串口已经打开了 先给他关闭了
|
||
{
|
||
m_serial->clear();
|
||
m_serial->close();
|
||
}
|
||
|
||
m_serial->setPortName(QString::fromStdString(portName));
|
||
m_serial->open(QIODevice::ReadWrite);
|
||
|
||
|
||
int x=SetBaudrate(baudrate);
|
||
if(x == 0)
|
||
{
|
||
return 0;
|
||
}
|
||
else
|
||
{
|
||
return 1;
|
||
}
|
||
}
|
||
|
||
int QtSerialport::CloseSerialPort()
|
||
{
|
||
m_serial->close();
|
||
return 0;
|
||
}
|
||
|
||
int QtSerialport::SetBaudrate(int baudrate)
|
||
{
|
||
bool x=m_serial->setBaudRate(baudrate);//qt的串口类,设置波特率时任何数字都能成功,这是什么鬼????
|
||
int tmp = m_serial->baudRate();
|
||
|
||
if(x)
|
||
{
|
||
return 0;//成功
|
||
}
|
||
else
|
||
{
|
||
return 1;//失败
|
||
}
|
||
}
|
||
|
||
//qint64 write(const char *data, qint64 len);
|
||
int QtSerialport::SendData1(const char *data, const unsigned int len)
|
||
{
|
||
QByteArray tmp(data, len);
|
||
|
||
// QByteArray tmp2 = tmp.toHex();
|
||
|
||
|
||
//QIODevice::write(const char *data, qint64 maxSize)
|
||
int num = m_serial->write(tmp);
|
||
|
||
bool re = m_serial->waitForBytesWritten();
|
||
|
||
if(re)
|
||
{
|
||
return num;
|
||
}
|
||
else
|
||
{
|
||
return -1;
|
||
}
|
||
|
||
}
|
||
|
||
int QtSerialport::SendData(const char chrSendBuffer[],const unsigned short usLen)
|
||
{
|
||
int num = m_serial->write(chrSendBuffer, usLen);
|
||
return num;
|
||
}
|
||
|
||
int QtSerialport::ReadData(char * receivedData)
|
||
{
|
||
FILE * fileHandle=fopen("D:\\cpp_qtcreator\\witmotionDll_use-build\\debug\\test.dat","w+b");
|
||
QByteArray requestData;
|
||
|
||
while (true)
|
||
{
|
||
//std::cout<<"SbgRecorder::startRecordSbg--------------:"<<std::endl;
|
||
if(m_serial->waitForReadyRead())
|
||
{
|
||
//requestData.resize(m_serial->size());
|
||
requestData = m_serial->readAll();
|
||
std::cout<<"size: "<< requestData.size() <<std::endl;
|
||
fwrite(requestData.data(),requestData.size(),1,fileHandle);
|
||
// fflush(fileHandle);
|
||
|
||
// if(!m_bIsSbgReady)
|
||
// {
|
||
// parseSbgMessage(&requestData);
|
||
// }
|
||
// parseSbgMessage(&requestData);//边采集惯导数据边解析,并不会导致惯导漏帧
|
||
}
|
||
else
|
||
{
|
||
std::cout<<"SbgRecorder::startRecordSbg----:Wait write response timeout"<<std::endl;
|
||
}
|
||
}
|
||
|
||
|
||
return 0;
|
||
}
|