125 lines
2.7 KiB
C++
125 lines
2.7 KiB
C++
#include "serialcontroller.h"
|
|
#include <QDebug>
|
|
|
|
SerialController::SerialController(QObject *parent) : QObject(parent)
|
|
{
|
|
serial = new QSerialPort(this);
|
|
connect(serial, SIGNAL(readyRead()), this,SLOT(handleRecv()));
|
|
|
|
|
|
// QList<QSerialPortInfo> SerialList = QSerialPortInfo::availablePorts();
|
|
// if(SerialList.size()!=0){
|
|
// openSerial(SerialList[0].portName());
|
|
// }
|
|
// testAng = 0;
|
|
// testWise= false;
|
|
|
|
// connect(&testTimer,&QTimer::timeout, this,[this](){
|
|
// emit sendPos(testAng-=2,0);
|
|
// });
|
|
// testTimer.setInterval(1);
|
|
// testTimer.start();
|
|
|
|
|
|
}
|
|
|
|
void SerialController::openSerial(QString name)
|
|
{
|
|
qDebug() << name;
|
|
serial->setPortName(name);
|
|
if (serial->open(QIODevice::ReadWrite))
|
|
{
|
|
//串口打开成功
|
|
serial->setDataTerminalReady(false);
|
|
serial->setDataTerminalReady(false);
|
|
emit openSuccess();
|
|
|
|
}
|
|
else
|
|
{
|
|
//串口打开失败
|
|
emit openFailed();
|
|
qDebug() << serial->error();
|
|
}
|
|
}
|
|
|
|
void SerialController::getBaudrate(QString baudrate)
|
|
{
|
|
serial->setBaudRate(baudrate.toInt());
|
|
}
|
|
|
|
void SerialController::getStopbits(QString stopbits)
|
|
{
|
|
if (stopbits == "1")
|
|
serial->setStopBits(QSerialPort::OneStop);
|
|
else if (stopbits == "1.5")
|
|
serial->setStopBits(QSerialPort::OneAndHalfStop);
|
|
else if (stopbits == "2")
|
|
serial->setStopBits(QSerialPort::TwoStop);
|
|
}
|
|
|
|
void SerialController::getDatabits(QString databits)
|
|
{
|
|
serial->setDataBits(QSerialPort::DataBits(databits.toInt()));
|
|
}
|
|
|
|
void SerialController::getParity(QString parity)
|
|
{
|
|
if (parity == tr("无"))
|
|
serial->setParity(QSerialPort::NoParity);
|
|
|
|
else if (parity == tr("奇校验"))
|
|
serial->setParity(QSerialPort::OddParity);
|
|
|
|
else if (parity == tr("偶校验"))
|
|
serial->setParity(QSerialPort::EvenParity);
|
|
}
|
|
|
|
void SerialController::closeSerial()
|
|
{
|
|
if (serial->isOpen())
|
|
{
|
|
serial->close();
|
|
emit closeSuccess();
|
|
}
|
|
}
|
|
|
|
void SerialController::handleRecv()
|
|
{
|
|
QByteArray data = serial->readAll();
|
|
QString str = data;
|
|
int a, d;
|
|
try {
|
|
qDebug()<<str;
|
|
QStringList sl = str.split("|");
|
|
if (sl.size() == 2) {
|
|
a = sl[0].toInt();
|
|
d = sl[1].toInt();
|
|
}
|
|
qDebug()<<a<<","<<d;
|
|
emit sendPos(a, d);
|
|
} catch(...) {
|
|
;
|
|
}
|
|
}
|
|
|
|
void SerialController::contrloRTS(bool set)
|
|
{
|
|
serial->setRequestToSend(set);
|
|
}
|
|
|
|
void SerialController::controlDTR(bool set)
|
|
{
|
|
serial->setDataTerminalReady(set);
|
|
}
|
|
|
|
void SerialController::writeData(QString content)
|
|
{
|
|
if (serial->isWritable())
|
|
{
|
|
qint64 result = serial->write(content.toLocal8Bit().data());
|
|
// if (result == -1);
|
|
// else;
|
|
}
|
|
}
|