serialTransferTool/serialConnection.cpp

111 lines
3.1 KiB
C++

#include "serialConnection.h"
#include <QMessageBox>
#include <QDebug>
SerialConnection::SerialConnection()
{
m_SerialPort.connectReadEvent(this);
protocol = "SERIAL";
}
SerialConnection::~SerialConnection()
{
if(isConnected()){
close();
}
}
bool SerialConnection::open()
{
QString portName = paras.value("serialCom","");
QString baud = paras.value("baud","115200");
int databits = paras.value("databits",QString::number(itas109::DataBits::DataBits8)).toInt();
int stopbits = paras.value("stopbits",QString::number(itas109::StopBits::StopOne)).toInt();
int parity = paras.value("parity",QString::number(itas109::Parity::ParityNone)).toInt();
int flowControl = paras.value("flowControl",QString::number(itas109::FlowControl::FlowNone)).toInt();
if(portName.isEmpty()){
return false;
}
m_SerialPort.init(portName.toStdString().c_str(),baud.toInt(),
itas109::Parity(parity),itas109::DataBits(databits),
itas109::StopBits(stopbits),itas109::FlowControl(flowControl),1024*64);
m_SerialPort.setReadIntervalTimeout(readIntervalTimeoutMS);
if(m_SerialPort.open()){
emit connectionStatusChangeSignal(true);
return true;
}else{
QMessageBox::warning(NULL,tr("警告"),tr("串口打开错误") + QString("\n\ncode: %1\nmessage: %2").arg(
m_SerialPort.getLastError()).arg(m_SerialPort.getLastErrorMsg()));
emit connectionStatusChangeSignal(false);
return false;
}
}
bool SerialConnection::close()
{
m_SerialPort.close();
emit connectionStatusChangeSignal(false);
return true;
}
bool SerialConnection::isConnected()
{
return m_SerialPort.isOpen();
}
int SerialConnection::sendData(const QByteArray &data)
{
if(m_SerialPort.isOpen())
{
const char *s = data.constData();
// 支持中文并获取正确的长度
int len = m_SerialPort.writeData(s,data.length());
emit recvUserSendDataSignal(data);
return len;
}else{
return -1;
}
}
void SerialConnection::setting(QMap<QString, QString> &map)
{
if(isConnected()){
close();
}
paras = map;
connectionName = paras.value("serialCom","");
}
void SerialConnection::onReadEvent(const char *portName, unsigned int readBufferLen)
{
Q_UNUSED(portName);
if(readBufferLen > 0)
{
int recLen = 0;
char * str = NULL;
str = new char[readBufferLen];
if(str){
recLen = m_SerialPort.readData(str, readBufferLen);
}
if(recLen > 0)
{
// TODO: 中文需要由两个字符拼接,否则显示为空""
//QString m_str = QString::fromLocal8Bit(str,recLen);
//emitUpdateReceive(m_str);
QByteArray array(str,recLen);
emit recvDataSignal(array);
}
if(str)
{
delete[] str;
str = NULL;
}
}
}