#include "serialassistantwidget.h" #include "console.h" #include #include "serialport.h" #include #include #include #include #include #include #include "ui_serialassistantwidget.h" #include "messagebox.h" SerialAssistantWidget::SerialAssistantWidget(QWidget *parent) : QWidget(parent), ui(new Ui::SerialAssistantWidget), m_timer(new QTimer(this)) { ui->setupUi(this); m_startID = getID(); PlatformServer *server = new PlatformServer(m_startID, this); ServerManager::instance()->registerSever(server); ServerManager::instance()->addHandler(m_startID, this); foreach (QSerialPortInfo info, QSerialPortInfo::availablePorts()) { ui->serialPortInfoListBox->addItem(info.portName()); } ui->dataBitsBox->addItem("Data8", QVariant(QSerialPort::Data8)); ui->dataBitsBox->addItem("Data5", QVariant(QSerialPort::Data5)); ui->dataBitsBox->addItem("Data6", QVariant(QSerialPort::Data6)); ui->dataBitsBox->addItem("Data7", QVariant(QSerialPort::Data7)); ui->baudRateBox->addItem("Baud115200", QVariant(QSerialPort::Baud115200)); ui->baudRateBox->addItem("Baud1200", QVariant(QSerialPort::Baud1200)); ui->baudRateBox->addItem("Baud2400", QVariant(QSerialPort::Baud2400)); ui->baudRateBox->addItem("Baud4800", QVariant(QSerialPort::Baud4800)); ui->baudRateBox->addItem("Baud9600", QVariant(QSerialPort::Baud9600)); ui->baudRateBox->addItem("Baud19200", QVariant(QSerialPort::Baud19200)); ui->baudRateBox->addItem("Baud38400", QVariant(QSerialPort::Baud38400)); ui->baudRateBox->addItem("Baud57600", QVariant(QSerialPort::Baud57600)); ui->parityBox->addItem("NoParity", QVariant(QSerialPort::NoParity)); ui->parityBox->addItem("EvenParity", QVariant(QSerialPort::EvenParity)); ui->parityBox->addItem("OddParity", QVariant(QSerialPort::OddParity)); ui->parityBox->addItem("SpaceParity", QVariant(QSerialPort::SpaceParity)); ui->parityBox->addItem("MarkParity", QVariant(QSerialPort::MarkParity)); ui->stopBitsBox->addItem("OneStop", QVariant(QSerialPort::OneStop)); ui->stopBitsBox->addItem("OneAndHalfStop", QVariant(QSerialPort::OneAndHalfStop)); ui->stopBitsBox->addItem("TwoStop", QVariant(QSerialPort::TwoStop)); ui->flowControlBox->addItem("NoFlowControl", QVariant(QSerialPort::NoFlowControl)); ui->flowControlBox->addItem("HardwareControl", QVariant(QSerialPort::HardwareControl)); ui->flowControlBox->addItem("SoftwareControl", QVariant(QSerialPort::SoftwareControl)); ui->openBtn->setCheckable(true); connect(m_timer, &QTimer::timeout, this, [=](){ QByteArray a = ui->plainTextEdit->toPlainText().toLocal8Bit(); if(ui->hexcheckBox->isChecked()) { a =QByteArray::fromHex(a); } this->sendData(a+"\r"); }); connect(ui->timerCheckBox, &QCheckBox::clicked, this, [=](bool checked){ if(!checked && m_timer->isActive()) { m_timer->stop(); } }); QIntValidator *valid = new QIntValidator(10, 5000); ui->timeEdt->setValidator(valid); } SerialAssistantWidget::~SerialAssistantWidget() { m_timer->stop(); delete m_timer; ServerManager::instance()->stop(m_startID); delete ui; } void SerialAssistantWidget::handleData(const QByteArray &d) { ui->textBrowser->insertPlainText(d); ui->textBrowser->moveCursor(QTextCursor::End); } void SerialAssistantWidget::handleError(const QString error) { ui->textBrowser->insertPlainText(error); ui->textBrowser->moveCursor(QTextCursor::End); // "ERROR[code=111string=openfalire]"; if(error.contains(QString("code=%1").arg(QSerialPort::OpenError)) ||error.contains(QString("code=%1").arg(QSerialPort::DeviceNotFoundError)) ||error.contains(QString("code=%1").arg(QSerialPort::PermissionError)) ||error.contains(QString("code=%1").arg(QSerialPort::NotOpenError)) ) { ui->openBtn->click(); } } QString SerialAssistantWidget::getID() { static int i=0; return QString("SERIAL %1").arg(i++); } void SerialAssistantWidget::setControl(QWidget *control) { QVBoxLayout *pVLayout = dynamic_cast(ui->switchWidget->layout()); if(pVLayout) { pVLayout->addWidget(control); } } void SerialAssistantWidget::on_openBtn_clicked() { if(ui->openBtn->isChecked()){ ui->openBtn->setText("关闭"); ui->textBrowser->clear(); ui->plainTextEdit->clear(); ServerManager::instance()->stop(m_startID); QVariantList arg; arg <serialPortInfoListBox->currentText() << ui->baudRateBox->currentData().toInt() << ui->dataBitsBox->currentData().toInt() <stopBitsBox->currentData().toInt() << ui->parityBox->currentData().toInt() <flowControlBox->currentData().toInt(); ServerManager::instance()->config(m_startID, arg); ServerManager::instance()->start(m_startID); qDebug()<<"create server open "<< m_startID; }else{ qDebug()<<"create server close"<< m_startID; if(m_timer->isActive()) { m_timer->stop(); } ServerManager::instance()->stop(m_startID); ui->openBtn->setText("打开"); } } void SerialAssistantWidget::on_clearTXBtn_clicked() { ui->textBrowser->clear(); } void SerialAssistantWidget::on_sendBtn_clicked() { if(!ui->openBtn->isChecked()) { MessageBox::showMessage(this ,"please open serial"); return; } if(!ui->timerCheckBox->isChecked()) { m_timer->setSingleShot(true); m_timer->start(0); }else{ m_timer->setSingleShot(false); int mSeconds= ui->timeEdt->text().toInt(); if(mSeconds <10){ mSeconds=10; }else if(mSeconds >5000){ mSeconds=5000; } m_timer->start(mSeconds); } } void SerialAssistantWidget::on_sendFileBtn_clicked() { if(!ui->openBtn->isChecked()) { MessageBox::showMessage(this ,"please open serial"); return; } QString fileName = QFileDialog::getOpenFileName(); QFile file(fileName); if(!fileName.isEmpty() && file.open(QFile::ReadOnly | QFile::Text)) { QTextStream s(&file); QString line; while (s.readLineInto(&line)) { QByteArray a = line.toUtf8() +"\n"; if(ui->hexcheckBox->isChecked()){ a =QByteArray::fromHex(a); } this->sendData(a); } } }