#include "serialConnection.h" #include #include 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 &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; } } }