111 lines
3.1 KiB
C++
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;
|
|
}
|
|
}
|
|
}
|
|
|