xref: /OK3568_Linux_fs/app/forlinx/flapp/src/plugins/serialassistant/serialassistantwidget.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun #include "serialassistantwidget.h"
2*4882a593Smuzhiyun #include "console.h"
3*4882a593Smuzhiyun #include <QLabel>
4*4882a593Smuzhiyun #include "serialport.h"
5*4882a593Smuzhiyun #include <QSerialPortInfo>
6*4882a593Smuzhiyun #include <QDebug>
7*4882a593Smuzhiyun #include <QLineEdit>
8*4882a593Smuzhiyun #include <QTimer>
9*4882a593Smuzhiyun #include <QFileDialog>
10*4882a593Smuzhiyun #include <QIntValidator>
11*4882a593Smuzhiyun #include "ui_serialassistantwidget.h"
12*4882a593Smuzhiyun #include "messagebox.h"
13*4882a593Smuzhiyun 
SerialAssistantWidget(QWidget * parent)14*4882a593Smuzhiyun SerialAssistantWidget::SerialAssistantWidget(QWidget *parent) :
15*4882a593Smuzhiyun     QWidget(parent),
16*4882a593Smuzhiyun     ui(new Ui::SerialAssistantWidget),
17*4882a593Smuzhiyun     m_timer(new QTimer(this))
18*4882a593Smuzhiyun {
19*4882a593Smuzhiyun     ui->setupUi(this);
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun     m_startID = getID();
22*4882a593Smuzhiyun     PlatformServer *server = new PlatformServer(m_startID, this);
23*4882a593Smuzhiyun     ServerManager::instance()->registerSever(server);
24*4882a593Smuzhiyun     ServerManager::instance()->addHandler(m_startID, this);
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun     foreach (QSerialPortInfo info, QSerialPortInfo::availablePorts()) {
27*4882a593Smuzhiyun         ui->serialPortInfoListBox->addItem(info.portName());
28*4882a593Smuzhiyun     }
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun     ui->dataBitsBox->addItem("Data8", QVariant(QSerialPort::Data8));
31*4882a593Smuzhiyun     ui->dataBitsBox->addItem("Data5", QVariant(QSerialPort::Data5));
32*4882a593Smuzhiyun     ui->dataBitsBox->addItem("Data6", QVariant(QSerialPort::Data6));
33*4882a593Smuzhiyun     ui->dataBitsBox->addItem("Data7", QVariant(QSerialPort::Data7));
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun     ui->baudRateBox->addItem("Baud115200", QVariant(QSerialPort::Baud115200));
36*4882a593Smuzhiyun     ui->baudRateBox->addItem("Baud1200", QVariant(QSerialPort::Baud1200));
37*4882a593Smuzhiyun     ui->baudRateBox->addItem("Baud2400", QVariant(QSerialPort::Baud2400));
38*4882a593Smuzhiyun     ui->baudRateBox->addItem("Baud4800", QVariant(QSerialPort::Baud4800));
39*4882a593Smuzhiyun     ui->baudRateBox->addItem("Baud9600", QVariant(QSerialPort::Baud9600));
40*4882a593Smuzhiyun     ui->baudRateBox->addItem("Baud19200", QVariant(QSerialPort::Baud19200));
41*4882a593Smuzhiyun     ui->baudRateBox->addItem("Baud38400", QVariant(QSerialPort::Baud38400));
42*4882a593Smuzhiyun     ui->baudRateBox->addItem("Baud57600", QVariant(QSerialPort::Baud57600));
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun     ui->parityBox->addItem("NoParity", QVariant(QSerialPort::NoParity));
45*4882a593Smuzhiyun     ui->parityBox->addItem("EvenParity", QVariant(QSerialPort::EvenParity));
46*4882a593Smuzhiyun     ui->parityBox->addItem("OddParity", QVariant(QSerialPort::OddParity));
47*4882a593Smuzhiyun     ui->parityBox->addItem("SpaceParity", QVariant(QSerialPort::SpaceParity));
48*4882a593Smuzhiyun     ui->parityBox->addItem("MarkParity", QVariant(QSerialPort::MarkParity));
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun     ui->stopBitsBox->addItem("OneStop", QVariant(QSerialPort::OneStop));
51*4882a593Smuzhiyun     ui->stopBitsBox->addItem("OneAndHalfStop", QVariant(QSerialPort::OneAndHalfStop));
52*4882a593Smuzhiyun     ui->stopBitsBox->addItem("TwoStop", QVariant(QSerialPort::TwoStop));
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun     ui->flowControlBox->addItem("NoFlowControl", QVariant(QSerialPort::NoFlowControl));
55*4882a593Smuzhiyun     ui->flowControlBox->addItem("HardwareControl", QVariant(QSerialPort::HardwareControl));
56*4882a593Smuzhiyun     ui->flowControlBox->addItem("SoftwareControl", QVariant(QSerialPort::SoftwareControl));
57*4882a593Smuzhiyun     ui->openBtn->setCheckable(true);
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun     connect(m_timer, &QTimer::timeout, this, [=](){
60*4882a593Smuzhiyun         QByteArray  a = ui->plainTextEdit->toPlainText().toLocal8Bit();
61*4882a593Smuzhiyun         if(ui->hexcheckBox->isChecked())
62*4882a593Smuzhiyun         {
63*4882a593Smuzhiyun             a =QByteArray::fromHex(a);
64*4882a593Smuzhiyun         }
65*4882a593Smuzhiyun         this->sendData(a+"\r");
66*4882a593Smuzhiyun     });
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun     connect(ui->timerCheckBox, &QCheckBox::clicked, this, [=](bool checked){
69*4882a593Smuzhiyun         if(!checked && m_timer->isActive())
70*4882a593Smuzhiyun         {
71*4882a593Smuzhiyun             m_timer->stop();
72*4882a593Smuzhiyun         }
73*4882a593Smuzhiyun     });
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun     QIntValidator *valid = new QIntValidator(10, 5000);
76*4882a593Smuzhiyun     ui->timeEdt->setValidator(valid);
77*4882a593Smuzhiyun }
78*4882a593Smuzhiyun 
~SerialAssistantWidget()79*4882a593Smuzhiyun SerialAssistantWidget::~SerialAssistantWidget()
80*4882a593Smuzhiyun {
81*4882a593Smuzhiyun     m_timer->stop();
82*4882a593Smuzhiyun     delete m_timer;
83*4882a593Smuzhiyun     ServerManager::instance()->stop(m_startID);
84*4882a593Smuzhiyun     delete ui;
85*4882a593Smuzhiyun }
86*4882a593Smuzhiyun 
handleData(const QByteArray & d)87*4882a593Smuzhiyun void SerialAssistantWidget::handleData(const QByteArray &d)
88*4882a593Smuzhiyun {
89*4882a593Smuzhiyun     ui->textBrowser->insertPlainText(d);
90*4882a593Smuzhiyun     ui->textBrowser->moveCursor(QTextCursor::End);
91*4882a593Smuzhiyun }
92*4882a593Smuzhiyun 
handleError(const QString error)93*4882a593Smuzhiyun void SerialAssistantWidget::handleError(const QString error)
94*4882a593Smuzhiyun {
95*4882a593Smuzhiyun     ui->textBrowser->insertPlainText(error);
96*4882a593Smuzhiyun     ui->textBrowser->moveCursor(QTextCursor::End);
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun //   "ERROR[code=111string=openfalire]";
99*4882a593Smuzhiyun     if(error.contains(QString("code=%1").arg(QSerialPort::OpenError))
100*4882a593Smuzhiyun             ||error.contains(QString("code=%1").arg(QSerialPort::DeviceNotFoundError))
101*4882a593Smuzhiyun             ||error.contains(QString("code=%1").arg(QSerialPort::PermissionError))
102*4882a593Smuzhiyun             ||error.contains(QString("code=%1").arg(QSerialPort::NotOpenError))
103*4882a593Smuzhiyun             )
104*4882a593Smuzhiyun     {
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun         ui->openBtn->click();
107*4882a593Smuzhiyun     }
108*4882a593Smuzhiyun }
109*4882a593Smuzhiyun 
getID()110*4882a593Smuzhiyun QString SerialAssistantWidget::getID()
111*4882a593Smuzhiyun {
112*4882a593Smuzhiyun     static int i=0;
113*4882a593Smuzhiyun     return QString("SERIAL %1").arg(i++);
114*4882a593Smuzhiyun }
115*4882a593Smuzhiyun 
setControl(QWidget * control)116*4882a593Smuzhiyun void SerialAssistantWidget::setControl(QWidget *control)
117*4882a593Smuzhiyun {
118*4882a593Smuzhiyun     QVBoxLayout *pVLayout = dynamic_cast<QVBoxLayout*>(ui->switchWidget->layout());
119*4882a593Smuzhiyun     if(pVLayout)
120*4882a593Smuzhiyun     {
121*4882a593Smuzhiyun        pVLayout->addWidget(control);
122*4882a593Smuzhiyun     }
123*4882a593Smuzhiyun }
124*4882a593Smuzhiyun 
on_openBtn_clicked()125*4882a593Smuzhiyun void SerialAssistantWidget::on_openBtn_clicked()
126*4882a593Smuzhiyun {
127*4882a593Smuzhiyun     if(ui->openBtn->isChecked()){
128*4882a593Smuzhiyun         ui->openBtn->setText("关闭");
129*4882a593Smuzhiyun         ui->textBrowser->clear();
130*4882a593Smuzhiyun         ui->plainTextEdit->clear();
131*4882a593Smuzhiyun         ServerManager::instance()->stop(m_startID);
132*4882a593Smuzhiyun         QVariantList arg;
133*4882a593Smuzhiyun         arg <<ui->serialPortInfoListBox->currentText()
134*4882a593Smuzhiyun            << ui->baudRateBox->currentData().toInt()
135*4882a593Smuzhiyun            << ui->dataBitsBox->currentData().toInt()
136*4882a593Smuzhiyun            <<ui->stopBitsBox->currentData().toInt()
137*4882a593Smuzhiyun           << ui->parityBox->currentData().toInt()
138*4882a593Smuzhiyun           <<ui->flowControlBox->currentData().toInt();
139*4882a593Smuzhiyun 
140*4882a593Smuzhiyun         ServerManager::instance()->config(m_startID, arg);
141*4882a593Smuzhiyun         ServerManager::instance()->start(m_startID);
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun         qDebug()<<"create server open "<< m_startID;
144*4882a593Smuzhiyun     }else{
145*4882a593Smuzhiyun           qDebug()<<"create server close"<< m_startID;
146*4882a593Smuzhiyun         if(m_timer->isActive())
147*4882a593Smuzhiyun         {
148*4882a593Smuzhiyun             m_timer->stop();
149*4882a593Smuzhiyun         }
150*4882a593Smuzhiyun         ServerManager::instance()->stop(m_startID);
151*4882a593Smuzhiyun         ui->openBtn->setText("打开");
152*4882a593Smuzhiyun     }
153*4882a593Smuzhiyun }
154*4882a593Smuzhiyun 
on_clearTXBtn_clicked()155*4882a593Smuzhiyun void SerialAssistantWidget::on_clearTXBtn_clicked()
156*4882a593Smuzhiyun {
157*4882a593Smuzhiyun    ui->textBrowser->clear();
158*4882a593Smuzhiyun }
159*4882a593Smuzhiyun 
on_sendBtn_clicked()160*4882a593Smuzhiyun void SerialAssistantWidget::on_sendBtn_clicked()
161*4882a593Smuzhiyun {
162*4882a593Smuzhiyun     if(!ui->openBtn->isChecked())
163*4882a593Smuzhiyun     {
164*4882a593Smuzhiyun         MessageBox::showMessage(this ,"please open serial");
165*4882a593Smuzhiyun         return;
166*4882a593Smuzhiyun     }
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun   if(!ui->timerCheckBox->isChecked())
169*4882a593Smuzhiyun   {
170*4882a593Smuzhiyun       m_timer->setSingleShot(true);
171*4882a593Smuzhiyun       m_timer->start(0);
172*4882a593Smuzhiyun   }else{
173*4882a593Smuzhiyun       m_timer->setSingleShot(false);
174*4882a593Smuzhiyun       int mSeconds= ui->timeEdt->text().toInt();
175*4882a593Smuzhiyun       if(mSeconds <10){
176*4882a593Smuzhiyun           mSeconds=10;
177*4882a593Smuzhiyun       }else if(mSeconds >5000){
178*4882a593Smuzhiyun           mSeconds=5000;
179*4882a593Smuzhiyun       }
180*4882a593Smuzhiyun       m_timer->start(mSeconds);
181*4882a593Smuzhiyun   }
182*4882a593Smuzhiyun }
183*4882a593Smuzhiyun 
on_sendFileBtn_clicked()184*4882a593Smuzhiyun void SerialAssistantWidget::on_sendFileBtn_clicked()
185*4882a593Smuzhiyun {
186*4882a593Smuzhiyun     if(!ui->openBtn->isChecked())
187*4882a593Smuzhiyun     {
188*4882a593Smuzhiyun         MessageBox::showMessage(this ,"please open serial");
189*4882a593Smuzhiyun         return;
190*4882a593Smuzhiyun     }
191*4882a593Smuzhiyun 
192*4882a593Smuzhiyun    QString fileName = QFileDialog::getOpenFileName();
193*4882a593Smuzhiyun    QFile file(fileName);
194*4882a593Smuzhiyun    if(!fileName.isEmpty() && file.open(QFile::ReadOnly | QFile::Text))
195*4882a593Smuzhiyun    {
196*4882a593Smuzhiyun        QTextStream s(&file);
197*4882a593Smuzhiyun        QString line;
198*4882a593Smuzhiyun        while (s.readLineInto(&line)) {
199*4882a593Smuzhiyun            QByteArray a = line.toUtf8() +"\n";
200*4882a593Smuzhiyun            if(ui->hexcheckBox->isChecked()){
201*4882a593Smuzhiyun                a =QByteArray::fromHex(a);
202*4882a593Smuzhiyun            }
203*4882a593Smuzhiyun            this->sendData(a);
204*4882a593Smuzhiyun        }
205*4882a593Smuzhiyun    }
206*4882a593Smuzhiyun }
207