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