158 lines
4.7 KiB
C++
158 lines
4.7 KiB
C++
#include "connectionSettingWidget.h"
|
|
#include "ui_connectionSettingWidget.h"
|
|
#include "connectionManager.h"
|
|
|
|
#include <QSerialPortInfo>
|
|
#include <QDebug>
|
|
|
|
ConnectionSettingWidget::ConnectionSettingWidget(QWidget *parent) :
|
|
QWidget(parent),
|
|
ui(new Ui::ConnectionSettingWidget)
|
|
{
|
|
ui->setupUi(this);
|
|
refreshComList();
|
|
ui->toolBtnConnectSerial->setText(tr("连接"));
|
|
ui->toolBtnConnectTcp->setText(tr("连接"));
|
|
serialConnection = std::make_shared<SerialConnection>();
|
|
}
|
|
|
|
ConnectionSettingWidget::ConnectionSettingWidget(const QString &proto, QWidget *parent):
|
|
QWidget(parent),
|
|
ui(new Ui::ConnectionSettingWidget)
|
|
{
|
|
ui->setupUi(this);
|
|
setProtocol(proto);
|
|
refreshComList();
|
|
ui->toolBtnConnectSerial->setText(tr("连接"));
|
|
ui->toolBtnConnectTcp->setText(tr("连接"));
|
|
serialConnection = std::make_shared<SerialConnection>();
|
|
}
|
|
|
|
ConnectionSettingWidget::~ConnectionSettingWidget()
|
|
{
|
|
if(serialConnection->isConnected()){
|
|
serialConnection->close();
|
|
}
|
|
ConnectionManager::getInstance().remove(serialConnection);
|
|
delete ui;
|
|
}
|
|
|
|
void ConnectionSettingWidget::setProtocol(const QString &proto)
|
|
{
|
|
protocol = proto;
|
|
if(protocol=="TCP"){
|
|
ui->gpbTcp->setVisible(true);
|
|
ui->gpbSerial->setVisible(false);
|
|
}else{
|
|
ui->gpbTcp->setVisible(false);
|
|
ui->gpbSerial->setVisible(true);
|
|
}
|
|
}
|
|
|
|
void ConnectionSettingWidget::setParam(const QMap<QString, QString> ¶)
|
|
{
|
|
QString proto = para.value("protocol","");
|
|
if(proto=="SERIAL"){
|
|
QString serialCom = para.value("serialCom","");
|
|
QString baud = para.value("baud","");
|
|
if(serialCom.isEmpty() || baud.isEmpty()){
|
|
return;
|
|
}
|
|
ui->cmbCom->setCurrentText(serialCom);
|
|
if(ui->cmbCom->currentText()!=serialCom){
|
|
ui->cmbCom->addItem(serialCom);
|
|
ui->cmbCom->setCurrentText(serialCom);
|
|
}
|
|
ui->cmbBaud->setCurrentText(baud);
|
|
if(ui->cmbBaud->currentText()!=baud){
|
|
ui->cmbBaud->addItem(baud);
|
|
ui->cmbBaud->setCurrentText(baud);
|
|
}
|
|
}
|
|
setProtocol(proto);
|
|
}
|
|
|
|
bool ConnectionSettingWidget::isConnected()
|
|
{
|
|
if(protocol=="SERIAL"){
|
|
return bSerialConnected;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
std::shared_ptr<SerialConnection> ConnectionSettingWidget::getConnection()
|
|
{
|
|
return serialConnection;
|
|
}
|
|
|
|
QMap<QString, QString> ConnectionSettingWidget::getParam()
|
|
{
|
|
QMap<QString,QString> paras;
|
|
paras["protocol"] = protocol;
|
|
if(protocol=="SERIAL"){
|
|
paras["serialCom"] = ui->cmbCom->currentText();
|
|
paras["baud"] = ui->cmbBaud->currentText();
|
|
}
|
|
return paras;
|
|
}
|
|
|
|
void ConnectionSettingWidget::on_cmbCom_clicked()
|
|
{
|
|
refreshComList();
|
|
}
|
|
|
|
void ConnectionSettingWidget::on_toolBtnConnectSerial_clicked()
|
|
{
|
|
if(!bSerialConnected){
|
|
if(serialConnection->isConnected()){
|
|
serialConnection->close();
|
|
}
|
|
QMap<QString,QString> paras;
|
|
paras["serialCom"] = ui->cmbCom->currentText();
|
|
paras["baud"] = ui->cmbBaud->currentText();
|
|
serialConnection->setting(paras);
|
|
bSerialConnected = serialConnection->open();
|
|
if(bSerialConnected){
|
|
ui->toolBtnConnectSerial->setText(tr("断开"));
|
|
ui->toolBtnConnectSerial->setStyleSheet("color:red");
|
|
ui->cmbCom->setEnabled(false);
|
|
ui->cmbBaud->setEnabled(false);
|
|
ConnectionManager::getInstance().insert(serialConnection);
|
|
}
|
|
}else{
|
|
serialConnection->close();
|
|
bSerialConnected = false;
|
|
QMap<QString,QString> paras;
|
|
paras["serialCom"] = "";
|
|
paras["baud"] = ui->cmbBaud->currentText();
|
|
serialConnection->setting(paras);
|
|
ConnectionManager::getInstance().insert(serialConnection);
|
|
ui->toolBtnConnectSerial->setText(tr("连接"));
|
|
ui->toolBtnConnectSerial->setStyleSheet("color:green");
|
|
ui->cmbCom->setEnabled(true);
|
|
ui->cmbBaud->setEnabled(true);
|
|
}
|
|
}
|
|
|
|
void ConnectionSettingWidget::refreshComList()
|
|
{
|
|
QString currentTxt = ui->cmbCom->currentText();
|
|
QStringList nameList;
|
|
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
|
|
{
|
|
nameList.append(info.portName());
|
|
}
|
|
std::sort(nameList.begin(), nameList.end(), [&](QString &s1, QString &s2){
|
|
if(s1.size()==s2.size()){
|
|
return s1<s2;
|
|
}else{
|
|
return s1.size()<s2.size();
|
|
} });
|
|
ui->cmbCom->clear();
|
|
ui->cmbCom->addItems(nameList);
|
|
if(!currentTxt.isEmpty()){
|
|
ui->cmbCom->setCurrentText(currentTxt);
|
|
}
|
|
}
|
|
|