找回密码
 立即注册
收起左侧

对串口代码做了点更改,可以申请提交master到代码中吗

4
回复
6887
查看
[复制链接]

尚未签到

来源: 2015-2-4 14:17:28 显示全部楼层 |阅读模式
1Qter豆
增加了一个实用的小功能,每次在初始化之后扫描有哪个串口是可用的,并且把串口选择控件设置为第一个可用的串口

最佳答案

查看完整内容

很高兴一起来进行优化,这个本来就是开源的东西,况且我们代码页面就是为了让大家协同来开发的,只不过一直没有推广而已。希望把QQ号发消息给我,然后我们用QQ联系。

相关帖子

回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2015-2-4 14:17:29 显示全部楼层
很高兴一起来进行优化,这个本来就是开源的东西,况且我们代码页面就是为了让大家协同来开发的,只不过一直没有推广而已。希望把QQ号发消息给我,然后我们用QQ联系。
回复

使用道具 举报

尚未签到

2015-2-4 14:29:47 显示全部楼层
修改的代码如下:

commit c4b8f9bf159f4c2e788cb9d47555dd02aff346c4
Author: ******* <pengclpsz@gmail.com>
Date:   Wed Feb 4 14:24:52 2015 +0800

    set serial port to available one

diff --git a/mainwindow.cpp b/mainwindow.cpp
index eb3d34d..5a18db8 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -45,6 +45,7 @@ MainWindow::MainWindow(QWidget *parent) :

#endif

+    try_set_active_port();
     ui->statusBar->showMessage(tr("欢迎使用QCom串口调试助手!"));
}

@@ -71,6 +72,94 @@ void MainWindow::changeEvent(QEvent *e)
     }
}

+bool MainWindow::try_open(QextSerialPort *com)
+{
+    bool res = false;
+
+
+    connect(com, SIGNAL(readyRead()), this, SLOT(readMyCom()));
+
+    //设置波特率
+    com->setBaudRate((BaudRateType)ui->baudRateComboBox->currentText().toInt());
+    //com->setBaudRate((BaudRateType)115200);
+
+    //设置数据位
+    com->setDataBits((DataBitsType)ui->dataBitsComboBox->currentText().toInt());
+
+    //设置校验
+    switch(ui->parityComboBox->currentIndex()){
+    case 0:
+         com->setParity(PAR_NONE);
+         break;
+    case 1:
+        com->setParity(PAR_ODD);
+        break;
+    case 2:
+        com->setParity(PAR_EVEN);
+        break;
+    default:
+        com->setParity(PAR_NONE);
+        qDebug("set to default : PAR_NONE");
+        break;
+    }
+
+    //设置停止位
+    switch(ui->stopBitsComboBox->currentIndex()){
+    case 0:
+        com->setStopBits(STOP_1);
+        break;
+    case 1:
+ #ifdef Q_OS_WIN
+        com->setStopBits(STOP_1_5);
+ #endif
+        break;
+    case 2:
+        com->setStopBits(STOP_2);
+        break;
+    default:
+        com->setStopBits(STOP_1);
+        qDebug("set to default : STOP_1");
+        break;
+    }
+
+    //设置数据流控制
+    com->setFlowControl(FLOW_OFF);
+    //设置延时
+    com->setTimeout(TIME_OUT);
+
+    if(com->open(QIODevice::ReadWrite)){
+        res = true;
+    }
+
+    return res;
+}
+
+void MainWindow::try_set_active_port()
+{
+    unsigned int s_port_count = ui->portNameComboBox->count();
+
+    QextSerialPort *com = NULL;
+
+    for (unsigned int i = 0; i < s_port_count; i++)
+    {
+        QString portName = ui->portNameComboBox->itemText(i);
+        #ifdef Q_OS_LINUX
+            com = new QextSerialPort("/dev/" + portName);
+        #elif defined (Q_OS_WIN)
+            com = new QextSerialPort(portName);
+        #endif
+        if (try_open(com))
+        {
+            ui->portNameComboBox->setCurrentIndex(i);
+            com->close();
+            delete(com);
+            break;
+        }
+        delete(com);
+    }
+}
+
+
void MainWindow::startInit(){
     setActionsEnabled(false);
     ui->delayspinBox->setEnabled(false);
@@ -115,56 +204,9 @@ void MainWindow:n_actionOpen_triggered()
#elif defined (Q_OS_WIN)
     myCom = new QextSerialPort(portName);
#endif
-    connect(myCom, SIGNAL(readyRead()), this, SLOT(readMyCom()));

-    //设置波特率
-    myCom->setBaudRate((BaudRateType)ui->baudRateComboBox->currentText().toInt());
-
-    //设置数据位
-    myCom->setDataBits((DataBitsType)ui->dataBitsComboBox->currentText().toInt());
-
-    //设置校验
-    switch(ui->parityComboBox->currentIndex()){
-    case 0:
-         myCom->setParity(PAR_NONE);
-         break;
-    case 1:
-        myCom->setParity(PAR_ODD);
-        break;
-    case 2:
-        myCom->setParity(PAR_EVEN);
-        break;
-    default:
-        myCom->setParity(PAR_NONE);
-        qDebug("set to default : PAR_NONE");
-        break;
-    }
-
-    //设置停止位
-    switch(ui->stopBitsComboBox->currentIndex()){
-    case 0:
-        myCom->setStopBits(STOP_1);
-        break;
-    case 1:
- #ifdef Q_OS_WIN
-        myCom->setStopBits(STOP_1_5);
- #endif
-        break;
-    case 2:
-        myCom->setStopBits(STOP_2);
-        break;
-    default:
-        myCom->setStopBits(STOP_1);
-        qDebug("set to default : STOP_1");
-        break;
-    }   
-
-    //设置数据流控制
-    myCom->setFlowControl(FLOW_OFF);
-    //设置延时
-    myCom->setTimeout(TIME_OUT);

-    if(myCom->open(QIODevice::ReadWrite)){
+    if(try_open(myCom)){
         QMessageBox::information(this, tr("打开成功"), tr("已成功打开串口") + portName, QMessageBox::Ok);
                //界面控制
                ui->sendmsgBtn->setEnabled(true);
回复

使用道具 举报

累计签到:595 天
连续签到:1 天
2015-2-5 09:25:12 显示全部楼层
顶一个,人多力量啊。
回复

使用道具 举报

尚未签到

2015-2-5 09:44:32 显示全部楼层
yafeilinux 发表于 2015-2-4 21:39
很高兴一起来进行优化,这个本来就是开源的东西,况且我们代码页面就是为了让大家协同来开发的,只不过一直 ...

我的QQ是676863074,我也是最近要用到串口,所以下了你们的代码,做了一点修改
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了