Files
witmotionDll/source/qtserialport.cpp
xin 277e347e56 构建新的cmakelist工程
修改了  delay_tc函数
修返回频率为20hz
修改波特率修改后先重新设置通讯波特率在保存
2023-02-13 09:15:17 +08:00

123 lines
2.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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(1000);
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(1000))
{
//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;
}