original source from sdk 602
authorSnickerSun <snickersun@163.com>
Fri, 15 Mar 2024 01:39:55 +0000 (09:39 +0800)
committerSnickerSun <snickersun@163.com>
Fri, 15 Mar 2024 01:39:55 +0000 (09:39 +0800)
23 files changed:
CMakeLists.txt [new file with mode: 0644]
Demoqrc.qrc [new file with mode: 0644]
at_data.cpp [new file with mode: 0644]
at_data.h [new file with mode: 0644]
common.h [new file with mode: 0644]
custom.cpp [new file with mode: 0644]
custom.h [new file with mode: 0644]
demopng.rc [new file with mode: 0644]
icon/FAIL.ico [new file with mode: 0644]
icon/succ.ico [new file with mode: 0644]
icon/windows.ico [new file with mode: 0644]
icon/windows.png [new file with mode: 0644]
main.cpp [new file with mode: 0644]
mainwindow.cpp [new file with mode: 0644]
mainwindow.h [new file with mode: 0644]
mainwindow.ui [new file with mode: 0644]
mythread.cpp [new file with mode: 0644]
mythread.h [new file with mode: 0644]
readme.txt [new file with mode: 0644]
result_thread.cpp [new file with mode: 0644]
result_thread.h [new file with mode: 0644]
src/header.h [new file with mode: 0644]
untitled_zh_CN.ts [new file with mode: 0644]

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..041dcc3
--- /dev/null
@@ -0,0 +1,68 @@
+cmake_minimum_required(VERSION 3.5)\r
+\r
+project(untitled LANGUAGES CXX)\r
+\r
+set(CMAKE_INCLUDE_CURRENT_DIR ON)\r
+\r
+set(CMAKE_AUTOUIC ON)\r
+set(CMAKE_AUTOMOC ON)\r
+set(CMAKE_AUTORCC ON)\r
+\r
+set(CMAKE_CXX_STANDARD 11)\r
+set(CMAKE_CXX_STANDARD_REQUIRED ON)\r
+set(RC_ICONS windows.ico)\r
+# QtCreator supports the following variables for Android, which are identical to qmake Android variables.\r
+# Check http://doc.qt.io/qt-5/deployment-android.html for more information.\r
+# They need to be set before the find_package(Qt5 ...) call.\r
+\r
+#if(ANDROID)\r
+#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")\r
+#    if (ANDROID_ABI STREQUAL "armeabi-v7a")\r
+#        set(ANDROID_EXTRA_LIBS\r
+#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so\r
+#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)\r
+#    endif()\r
+#endif()\r
+\r
+find_package(Qt5 COMPONENTS Widgets LinguistTools REQUIRED)\r
+\r
+set(TS_FILES untitled_zh_CN.ts)\r
+include_directories(${CMAKE_SOURCE_DIR}/src)\r
+if(ANDROID)\r
+  add_library(untitled SHARED\r
+    main.cpp\r
+    mainwindow.cpp\r
+    mainwindow.h\r
+    mainwindow.ui\r
+    ${TS_FILES}\r
+  )\r
+else()\r
+  add_executable(untitled\r
+    WIN32\r
+    main.cpp\r
+    mainwindow.cpp\r
+    mainwindow.h\r
+    mainwindow.ui\r
+    mythread.h\r
+    mythread.cpp\r
+    custom.h\r
+    custom.cpp\r
+    Demoqrc.qrc\r
+    demopng.rc\r
+    at_data.cpp\r
+    at_data.h\r
+    result_thread.cpp\r
+    result_thread.h\r
+    common.h\r
+    ${TS_FILES}\r
+  )\r
+endif()\r
+\r
+target_link_libraries(untitled PRIVATE\r
+                      Qt5::Widgets\r
+                      ${CMAKE_SOURCE_DIR}/lib/libwireless_tools.dll)\r
+target_link_libraries(untitled PRIVATE\r
+                      Qt5::Widgets\r
+                      ${CMAKE_SOURCE_DIR}/lib/libsecurec.a)\r
+\r
+qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})\r
diff --git a/Demoqrc.qrc b/Demoqrc.qrc
new file mode 100644 (file)
index 0000000..7f18d42
--- /dev/null
@@ -0,0 +1,8 @@
+<RCC>\r
+    <qresource prefix="/">\r
+        <file>icon/windows.png</file>\r
+        <file>icon/windows.ico</file>\r
+        <file>icon/FAIL.ico</file>\r
+        <file>icon/succ.ico</file>\r
+    </qresource>\r
+</RCC>\r
diff --git a/at_data.cpp b/at_data.cpp
new file mode 100644 (file)
index 0000000..993d64d
--- /dev/null
@@ -0,0 +1,134 @@
+#include <at_data.h>\r
+\r
+At_Process::At_Process(QObject *parent)\r
+{\r
+    Q_UNUSED(parent);\r
+    phy_type_list<<"01"<<"02";\r
+    ble_pattern_type_list<<"02 "<<"00 "<<"01 ";\r
+    br_pattern_type_list<<"03 "<<"04 "<<"09 ";\r
+    packet_type_list<<"04 01 "<<"0B 01 "<<"0F 01 "<<"04 00 "<<"0A 00 "<<"0E 00 "<<"08 00 "<<"0B 00 "<<"0F 00 ";\r
+    br_len_array<<27<<183<<339<<54<<367<<679<<83<<552<<1021;\r
+    board_cmd_map.insert(BT_MODE_BR_TX,"AT^BTTX=");\r
+    board_cmd_map.insert(BT_MODE_BR_RX,"AT^BTRX=");\r
+    board_cmd_map.insert(BT_MODE_BLE_TX,"AT^BLETX=");\r
+    board_cmd_map.insert(BT_MODE_BLE_RX,"AT^BLERX=");\r
+    board_cmd_map.insert(BT_MODE_BTDUTMODE, "AT^BTDUTMODE=");\r
+    board_cmd_map.insert(DONGLE_MODE_SPPCONN,"AT+SPPCONN=");\r
+    board_cmd_map.insert(DONGLE_MODE_AT,"AT");\r
+    board_cmd_map.insert(DONGLE_MODE_ADDR,"AT+ADDR");\r
+    board_cmd_map.insert(BT_MODE_BTLO,"AT^BTLO=");\r
+    board_cmd_map.insert(BT_MODE_BTPWR,"AT^BTPWR=");\r
+\r
+}\r
+At_Process::~At_Process(){}\r
+QString At_Process::at_get_packet_type(int packet_type_index)\r
+{\r
+    return packet_type_list.at(packet_type_index);\r
+}\r
+int At_Process::at_get_packet_len(int packet_type_index)\r
+{\r
+    return br_len_array.at(packet_type_index);\r
+}\r
+QString At_Process::at_get_br_pattern_type(int pattern_type_index)\r
+{\r
+    return br_pattern_type_list.at(pattern_type_index);\r
+}\r
+QString At_Process::at_get_ble_pattern_type(int pattern_type_index)\r
+{\r
+    return ble_pattern_type_list.at(pattern_type_index);\r
+}\r
+\r
+QString At_Process::at_get_ble_phy_type(int phy_type_index)\r
+{\r
+    return phy_type_list.at(phy_type_index);\r
+}\r
+QString At_Process::at_get_cmd_board(at_mode_board mode)\r
+{\r
+    return board_cmd_map[mode];\r
+}\r
+QString At_Process::at_get_switch_format(QString br_switch)\r
+{\r
+    QString str;\r
+    if(br_switch.contains("OFF")){\r
+        str="00";\r
+    }else if(br_switch.contains("ON")){\r
+        str="01 ";\r
+    }\r
+    return str;\r
+}\r
+QString At_Process::at_get_br_format(at_mode_board mode,QString br_switch,QString channel, int packet_type_index, QString payload_len, int pattern_type)\r
+{\r
+    QString str;\r
+    str += at_get_switch_format(br_switch);\r
+    if(br_switch.contains("ON")){\r
+        str += QString("%1 ").arg(channel.toUInt(), 2, 16, QLatin1Char('0'));\r
+        str += at_get_packet_type(packet_type_index);\r
+        QString str_temp = QString("%1").arg(payload_len.toUInt(), 4, 16, QLatin1Char('0'));\r
+        str.insert(9, str_temp.mid(0, 2)+" ");\r
+        str.insert(9, str_temp.mid(2, 2)+" ");\r
+        str += at_get_br_pattern_type(pattern_type);\r
+        if(mode==BT_MODE_BR_TX){\r
+            str.insert(3, "02 ");\r
+        }\r
+    }\r
+    return str;\r
+}\r
+\r
+QString At_Process::at_get_ble_format(at_mode_board mode,QString br_switch,QString channel,int pattern_type_index, QString payload_len, int phy_index)\r
+{\r
+    QString str=NULL;\r
+    str += at_get_switch_format(br_switch);\r
+    if(br_switch.contains("ON")){\r
+        str += QString("%1 ").arg(channel.toUInt(), 2, 16, QLatin1Char('0'));\r
+        if(mode==BT_MODE_BLE_TX){\r
+            str+= at_get_ble_pattern_type(pattern_type_index);\r
+            str+= QString("%1 ").arg(payload_len.toUInt(), 2, 16, QLatin1Char('0'));\r
+        }\r
+        str+=at_get_ble_phy_type(phy_index);\r
+    }\r
+    return str;\r
+}\r
+\r
+\r
+bool At_Process::at_send_cmd_board(at_mode_board mode,QString format)\r
+{\r
+    char *buf=nullptr;\r
+    uint32_t buf_len=0;\r
+    bool ret=false;\r
+    QString str=at_get_cmd_board(mode);\r
+    str+=format;\r
+    str+="\r\n";\r
+    buf = (char *)str.toStdString().c_str();\r
+    buf_len = strlen(buf);\r
+    if(uapi_uart_tx_data(buf, buf_len)){\r
+        ret=true;\r
+    }\r
+    return ret;\r
+}\r
+\r
+bool At_Process::at_send_cmd_string(at_module_id module_id, at_cmd_id cmd_id,QString format)\r
+{\r
+    char *buf = nullptr;\r
+    uint32_t buf_len=0;\r
+    bool ret=false;\r
+    QByteArray arr = format.toLatin1();\r
+    buf = arr.data();\r
+    buf_len = arr.size();\r
+    if (uapi_at_send(module_id, cmd_id, (uint8_t *)buf, buf_len, at_callback) == SUCC) {\r
+        at_set_id(module_id, cmd_id);\r
+        ret=true;\r
+    }\r
+    return ret;\r
+}\r
+\r
+void At_Process::at_set_id(at_module_id at_module_id_temp, at_cmd_id at_cmd_id_temp)\r
+{\r
+    at_module_id_save = at_module_id_temp;\r
+    at_cmd_id_save = at_cmd_id_temp;\r
+}\r
+\r
+void At_Process::at_get_id(at_module_id *at_module_id, at_cmd_id *at_cmd_id)\r
+{\r
+    *at_module_id = at_module_id_save;\r
+    *at_cmd_id = at_cmd_id_save;\r
+}\r
diff --git a/at_data.h b/at_data.h
new file mode 100644 (file)
index 0000000..8323390
--- /dev/null
+++ b/at_data.h
@@ -0,0 +1,112 @@
+#ifndef AT_DATA_H\r
+#define AT_DATA_H\r
+\r
+#include<stdio.h>\r
+#include<stdint.h>\r
+#include<qstring.h>\r
+#include<qdebug.h>\r
+#include<result_thread.h>\r
+\r
+struct at_media_command {\r
+    uint8_t cmd[2];\r
+    uint8_t payload[0];\r
+};\r
+\r
+enum at_br_packet_type\r
+{\r
+    PACKET_DH1,\r
+    PACKET_DH3,\r
+    PACKET_DH5,\r
+    PACKET_2DH1,\r
+    PACKET_2DH3,\r
+    PACKET_2DH5,\r
+    PACKET_3DH1,\r
+    PACKET_3DH3,\r
+    PACKET_3DH5,\r
+};\r
+\r
+enum at_ble_phy\r
+{\r
+    PHY_1M,\r
+    PHY_2M,\r
+};\r
+\r
+enum  at_pattern_type\r
+{\r
+    PATTERN_TYPE_1,\r
+    PATTERN_TYPE_2,\r
+    PATTERN_TYPE_3,\r
+};\r
+\r
+enum at_mode_board\r
+{\r
+    BT_MODE_BR_TX,\r
+    BT_MODE_BR_RX,\r
+    BT_MODE_BLE_TX,\r
+    BT_MODE_BLE_RX,\r
+    BT_MODE_BTDUTMODE,\r
+    BT_MODE_BTLO,\r
+    BT_MODE_BTPWR,\r
+    DONGLE_MODE_SPPCONN,\r
+    DONGLE_MODE_AT,\r
+    DONGLE_MODE_ADDR,\r
+    MODE_MAX,\r
+};\r
+\r
+enum at_module_id\r
+{\r
+    MODULE_MCU =0x08,\r
+    MODULE_BT =0x09,\r
+    MODULE_AUDIO =0x0A,\r
+};\r
+\r
+enum at_cmd_id\r
+{\r
+    AUDIO_CMD = 0x00,\r
+    MCU_CMD_FSRM = 0x09,\r
+    MCU_CMD_STACKINFO = 0x0D,\r
+    MCU_CMD_CHECK_CONNECTED=0x40,\r
+    MCU_CMD_RETURN_VALUE=0x41,\r
+    BT_CMD_SETTXPOWER = 0x7A,\r
+    BT_CMD_DUTMODE = 0x7D,\r
+    BT_CMD_GET_RX = 0x83,\r
+    BT_CMD_BR_TX,\r
+    BT_CMD_BR_RX,\r
+    BT_CMD_BLE_TX,\r
+    BT_CMD_BLE_RX,\r
+    BT_CMD_DELAY_MS,\r
+    BT_CMD_DONGLE_MAC,\r
+    BT_CMD_RX_RESULT = 0xFF,\r
+};\r
+\r
+\r
+class At_Process\r
+{\r
+public:\r
+    At_Process(QObject *parent = 0);\r
+    ~At_Process();\r
+    QString at_get_br_format(at_mode_board bt_mode,QString br_switch,QString channel, int packet_type, QString payload_len, int pattern_type);\r
+    QString at_get_ble_format(at_mode_board bt_mode,QString br_switch,QString channel,int pattern_type_index , QString payload_len, int phy_index);\r
+    bool at_send_cmd_string(at_module_id module_id, at_cmd_id cmd_id,QString format);\r
+    bool at_send_cmd_board(at_mode_board bt_mode,QString format);\r
+    void at_get_id(at_module_id *at_module_id, at_cmd_id *at_cmd_id);\r
+    int at_get_packet_len(int packet_type);\r
+    QString at_get_switch_format(QString br_switch);\r
+private:\r
+    at_module_id at_module_id_save;\r
+    at_cmd_id at_cmd_id_save;\r
+    QStringList phy_type_list;\r
+    QStringList ble_pattern_type_list;\r
+    QStringList br_pattern_type_list;\r
+    QStringList packet_type_list;\r
+    QVector<int> br_len_array;\r
+    QMap<at_mode_board, QString> board_cmd_map;\r
+private:\r
+    QString at_get_cmd_board(at_mode_board bt_mode);\r
+    QString at_get_ble_phy_type(int phy_type_index);\r
+    QString at_get_ble_pattern_type(int pattern_type);\r
+    QString at_get_br_pattern_type(int pattern_type);\r
+    QString at_get_packet_type(int packet_type);\r
+    void at_set_id(at_module_id at_module_id, at_cmd_id at_cmd_id);\r
+};\r
+#endif // AT_DATA_H\r
diff --git a/common.h b/common.h
new file mode 100644 (file)
index 0000000..c9ed230
--- /dev/null
+++ b/common.h
@@ -0,0 +1,16 @@
+#ifndef COMMON_H\r
+#define COMMON_H\r
+\r
+#include <QMetaType>\r
+#include <QDebug>\r
+\r
+typedef uint8_t* u8Piont;\r
+typedef void* vPiont;\r
+\r
+Q_DECLARE_METATYPE(u8Piont);\r
+Q_DECLARE_METATYPE(vPiont);\r
+\r
+#define MESSAGE_INFO_COLOR(STRING) "<font color=red>" STRING "</font>" "<font color=\"#7FFF00\"> </font>"\r
+#define CHECK_DONGLE_CONNECTED\r
+\r
+#endif // COMMON_H\r
diff --git a/custom.cpp b/custom.cpp
new file mode 100644 (file)
index 0000000..542ed25
--- /dev/null
@@ -0,0 +1,48 @@
+#include <custom.h>\r
+\r
+MyComboBox::MyComboBox(QWidget *paraent) : QComboBox(paraent) {}\r
+MyComboBox::~MyComboBox() {}\r
+\r
+void MyComboBox::mousePressEvent(QMouseEvent *e)\r
+{\r
+    if (e->button() == Qt::LeftButton) {\r
+        emit mouse_clicked(true);\r
+    }\r
+    QComboBox::mousePressEvent(e);\r
+}\r
+\r
+void MyComboBox::ChangeItem(QString str)\r
+{\r
+    for(int i=0;i<this->count();i++ ){\r
+        if(this->itemText(i).contains(str)){\r
+            this->setCurrentIndex(i);\r
+            break;\r
+        }\r
+    }\r
+}\r
+\r
+MyLineEdit::MyLineEdit(QWidget *parent):QLineEdit(parent)\r
+{\r
+\r
+}\r
+\r
+void MyLineEdit::keyPressEvent(QKeyEvent *event)\r
+{\r
+    qDebug()<<event->key();\r
+    if(event->key()==Qt::Key_Up){\r
+        int current_data=this->text().toInt()+1;\r
+        const QIntValidator *validator=(QIntValidator *)this->validator();\r
+        if(current_data <= validator->top()){\r
+            this->setText(QString::number(current_data,10));\r
+        }\r
+    }else if(event->key()==Qt::Key_Down){\r
+        int current_data=this->text().toInt()-1;\r
+        const QIntValidator *validator=(QIntValidator *)this->validator();\r
+        if(current_data >= validator->bottom()){\r
+            this->setText(QString::number(current_data,10));\r
+        }\r
+    }else{\r
+        QLineEdit::keyPressEvent(event);//执行\r
+    }\r
+    event->ignore();//输出后,才将继续执行主窗口的keypressEvent事件\r
+}\r
diff --git a/custom.h b/custom.h
new file mode 100644 (file)
index 0000000..dca637f
--- /dev/null
+++ b/custom.h
@@ -0,0 +1,70 @@
+#ifndef MYCOMBOBOX_H\r
+#define MYCOMBOBOX_H\r
+#include <QComboBox>\r
+#include <QMouseEvent>\r
+#include <qlineedit.h>\r
+#include <qDebug.h>\r
+#include <QKeyEvent>\r
+#include <QIntValidator>\r
+\r
+// 自定义 QComboBox 类,实现 clicked 信号\r
+class MyComboBox : public QComboBox\r
+{\r
+    Q_OBJECT\r
+   public:\r
+    explicit MyComboBox(QWidget *paraent = 0);\r
+    ~MyComboBox();\r
+    void ChangeItem(QString str);\r
+   protected:\r
+    virtual void mousePressEvent(QMouseEvent *e) override;\r
+   signals:\r
+    void mouse_clicked(bool);\r
+};\r
+\r
+// 自定义MyLineEdit类,实现 up down按键自动加减值\r
+class MyLineEdit : public QLineEdit\r
+{\r
+    Q_OBJECT\r
+public:\r
+    explicit MyLineEdit(QWidget *parent=0);\r
+protected:\r
+    void keyPressEvent(QKeyEvent *event);\r
+};\r
+\r
+class MyValidator : public QIntValidator\r
+{\r
+    Q_OBJECT\r
+public:\r
+    explicit MyValidator(QObject * parent = 0):QIntValidator(parent)\r
+    {\r
+    }\r
+    MyValidator(int bottom, int top, QObject * parent):QIntValidator(bottom, top, parent)\r
+    {\r
+    }\r
+    virtual void setRange(int bottom, int top)\r
+    {\r
+        QIntValidator::setRange(bottom, top);\r
+    }\r
+    ~MyValidator()\r
+    {\r
+    }\r
+    virtual State validate(QString &str, int &n) const\r
+    {\r
+        if(str.contains("+")){\r
+            return Invalid;\r
+        }\r
+        if(n > 1 && str.startsWith("0")){\r
+            return Invalid;\r
+        }\r
+        if(str.toInt()<bottom()||str.toInt()>top()){\r
+            return Invalid;\r
+        }\r
+        return QIntValidator::validate(str, n);\r
+    }\r
+//    virtual void fixup(QString &s) const\r
+//    {\r
+//        s = QString("%1").arg(bottom());\r
+//    }\r
+};\r
+\r
+#endif // MYCOMBOBOX_H\r
diff --git a/demopng.rc b/demopng.rc
new file mode 100644 (file)
index 0000000..4b0ae81
--- /dev/null
@@ -0,0 +1 @@
+IDI_ICON1 ICON DISCARDABLE "icon/windows.ico"\r
diff --git a/icon/FAIL.ico b/icon/FAIL.ico
new file mode 100644 (file)
index 0000000..abdb54e
Binary files /dev/null and b/icon/FAIL.ico differ
diff --git a/icon/succ.ico b/icon/succ.ico
new file mode 100644 (file)
index 0000000..61fb14f
Binary files /dev/null and b/icon/succ.ico differ
diff --git a/icon/windows.ico b/icon/windows.ico
new file mode 100644 (file)
index 0000000..4bb7bc8
Binary files /dev/null and b/icon/windows.ico differ
diff --git a/icon/windows.png b/icon/windows.png
new file mode 100644 (file)
index 0000000..f0cc3a0
Binary files /dev/null and b/icon/windows.png differ
diff --git a/main.cpp b/main.cpp
new file mode 100644 (file)
index 0000000..177bfa0
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,10 @@
+#include "mainwindow.h"\r
+#include <QApplication>\r
+\r
+int main(int argc, char *argv[])\r
+{\r
+    QApplication a(argc, argv);\r
+    MainWindow w;\r
+    w.show();\r
+    return a.exec();\r
+}\r
diff --git a/mainwindow.cpp b/mainwindow.cpp
new file mode 100644 (file)
index 0000000..960ba57
--- /dev/null
@@ -0,0 +1,1058 @@
+#include "mainwindow.h"\r
+#include "./ui_mainwindow.h"\r
+// 初始化线程、状态寄存器、配置信息\r
+MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)\r
+{\r
+    ui->setupUi(this);\r
+    result_thread = new Result_Thread(this);\r
+    result_thread->start();\r
+    result_thread->pause();\r
+    at_handler = new At_Process(this);\r
+    ui_setting_read();\r
+    at_set_bt_format();\r
+}\r
+\r
+//  结束线程\r
+MainWindow::~MainWindow()\r
+{\r
+    if (spp_timer_handle != NULL) {\r
+        spp_timer_handle->stop();\r
+        spp_timer_handle = NULL;\r
+    }\r
+    if (spp_connected_handle != NULL) {\r
+        spp_connected_handle->stop();\r
+        spp_connected_handle = NULL;\r
+    }\r
+    ui_setting_save();\r
+    result_thread->stop();\r
+    result_thread->wait();\r
+    if (transmit_timer_handle != NULL) {\r
+        transmit_timer_handle->stop();\r
+        transmit_timer_handle = NULL;\r
+    }\r
+    if (ui->pbtn_open_uart->isChecked()) {\r
+        if (uapi_uart_close() == TRUE) {\r
+        }\r
+    }\r
+    delete result_thread;\r
+    delete at_handler;\r
+    delete ui;\r
+}\r
+\r
+void MainWindow::ui_display(QString str,bool inOrOut)\r
+{\r
+//    QTime Time= QTime::currentTime();//获取系统当前的时间\r
+//    QString str_time = Time.toString("[hh:mm:ss ");//格式化时间\r
+    ui->txtb_dispaly->moveCursor(QTextCursor::End);\r
+    if(inOrOut){\r
+        ui->txtb_dispaly->setTextColor(QColor(127, 255, 0));\r
+    }else{\r
+        ui->txtb_dispaly->setTextColor(Qt::red);\r
+    }\r
+//    if(inOrOut){\r
+//        str_time.append("IN] : ");\r
+//    }else{\r
+//        str_time.append("OUT] : ");\r
+//    }\r
+//    str.prepend(str_time);\r
+//    str+="\r\n";\r
+    ui->txtb_dispaly->insertPlainText(str);\r
+    ui->txtb_dispaly->moveCursor(QTextCursor::End);\r
+}\r
+\r
+void MainWindow::ui_tab_mainwindow_complete()\r
+{\r
+    if (ui->stkw_stage->currentIndex() == PAGE_COMPLETE) {\r
+        ui->action_complete->setChecked(true);\r
+        return;\r
+    }\r
+    ui->stkw_stage->setCurrentIndex(PAGE_COMPLETE);\r
+    ui->ledit_spp_addr->setEnabled(true);\r
+    ui->connected_flag->setStyleSheet("QPushButton{background-color: rgb(255, 0, 0);}");\r
+    if (spp_connected_handle != NULL) {\r
+        spp_connected_handle->start(1500);\r
+    }\r
+    if (ui->action_board->isChecked()) {\r
+        ui->action_board->setChecked(false);\r
+    }\r
+    if(ui->pbtn_open_uart->isChecked()){\r
+        uart_close();\r
+    }\r
+}\r
+void MainWindow::ui_tab_mainwindow_board()\r
+{\r
+    if (ui->stkw_stage->currentIndex() == PAGE_BOARD) {\r
+        ui->action_board->setChecked(true);\r
+        return;\r
+    }\r
+    ui->stkw_stage->setCurrentIndex(PAGE_BOARD);\r
+    ui->ledit_spp_addr->setEnabled(false);\r
+    ui->connected_flag->setStyleSheet("QPushButton{background-color: rgb(240, 240, 240);}");\r
+    if (spp_connected_handle != NULL) {\r
+        spp_connected_handle->stop();\r
+    }\r
+    dongle_is_connected = false;\r
+    if (ui->action_complete->isChecked()) {\r
+        ui->action_complete->setChecked(false);\r
+    }\r
+    if(ui->pbtn_open_uart->isChecked()){\r
+        uart_close();\r
+    }\r
+\r
+}\r
+void MainWindow::ui_save_windows()\r
+{\r
+    QString fname = QFileDialog::getExistingDirectory(this, "请选择文件");\r
+    QFile file(fname+"/save.txt");\r
+    if (!file.open(QFile::WriteOnly | QFile::Text)) //检测文件是否打开\r
+    {\r
+        QMessageBox::information(this, "Error Message", "Please Select a Text File!");\r
+        return;\r
+    }\r
+\r
+    QTextStream out(&file); //分行写入文件\r
+    out << ui->txtb_dispaly->toPlainText();  //这里的File_edit就是之前声明的Textedit控件的名字\r
+}\r
+// 存储config配置文件\r
+void MainWindow::ui_setting_save()\r
+{\r
+    QSettings *settings = new QSettings("Setting.ini", QSettings::IniFormat);\r
+\r
+    // 写入第一组数据\r
+    settings->beginGroup("Uart_setting");\r
+    settings->setValue("uart_com", ui->cbox_uart_com_select->currentText());\r
+    settings->setValue("uart_baud", ui->cbox_uart_baud_select->currentIndex());\r
+    settings->setValue("spp_addr", ui->ledit_spp_addr->text());\r
+    settings->sync();\r
+    settings->endGroup();\r
+    // 写入第二组数据\r
+    settings->beginGroup("Download_Setting");\r
+    settings->setValue("download_board_path", ui->ledit_formboad_bordpath->text());\r
+    settings->setValue("download_local_path", ui->ledit_frombord_savefilepath->text());\r
+    settings->sync();\r
+    settings->endGroup();\r
+\r
+    settings->beginGroup("Upload_Setting");\r
+    settings->setValue("upload_board_path", ui->ledit_toboard_boardpath->text());\r
+    settings->setValue("upload_local_path", ui->ledit_toboard_filepath->text());\r
+    settings->sync();\r
+    settings->endGroup();\r
+\r
+    settings->beginGroup("At_Setting");\r
+    settings->setValue("at_mediamusicplay", ui->ledit_at_mediamusicplay->text());\r
+    settings->setValue("at_mediaaudiorecord", ui->ledit_at_mediaaudiorecord->text());\r
+    settings->setValue("at_fsrm", ui->ledit_at_fsrm->text());\r
+    settings->setValue("at_delay_ms", ui->ledit_delay_ms->text());\r
+    settings->setValue("at_spp_addr", ui->ledit_dongle_mac->text());\r
+    settings->setValue("custom_module_id", ui->ledit_at_custom_moduleId->text());\r
+    settings->setValue("custom_cmd_id", ui->ledit_at_custom_CmdId->text());\r
+    settings->setValue("custom_payload", ui->ledit_at_custom_Payload->text());\r
+    settings->sync();\r
+    settings->endGroup();\r
+\r
+    delete settings;\r
+    settings = nullptr;\r
+}\r
+// 读取config配置\r
+void MainWindow::ui_setting_read()\r
+{\r
+    uart_com_select();\r
+    QSettings *settings = new QSettings("Setting.ini", QSettings::IniFormat);\r
+    ui->cbox_uart_com_select->ChangeItem(settings->value("Uart_setting/uart_com").toString());\r
+    ui->cbox_uart_baud_select->setCurrentIndex(settings->value("Uart_setting/uart_baud").toInt());\r
+    ui->ledit_spp_addr->setText(settings->value("Uart_setting/spp_addr").toString());\r
+    ui->tbw_stage_complete->setEnabled(true);\r
+    ui->ledit_formboad_bordpath->setText(settings->value("Download_Setting/download_board_path").toString());\r
+    ui->ledit_frombord_savefilepath->setText(settings->value("Download_Setting/download_local_path").toString());\r
+    ui->ledit_toboard_boardpath->setText(settings->value("Upload_Setting/upload_board_path").toString());\r
+    ui->ledit_toboard_filepath->setText(settings->value("Upload_Setting/upload_local_path").toString());\r
+    ui->ledit_at_mediamusicplay->setText(settings->value("At_Setting/at_mediamusicplay").toString());\r
+    ui->ledit_at_mediaaudiorecord->setText(settings->value("At_Setting/at_mediaaudiorecord").toString());\r
+    ui->ledit_at_fsrm->setText(settings->value("At_Setting/at_fsrm").toString());\r
+    ui->ledit_delay_ms->setText(settings->value("At_Setting/at_delay_ms").toString());\r
+    ui->ledit_dongle_mac->setText(settings->value("At_Setting/at_spp_addr").toString());\r
+    ui->ledit_at_custom_moduleId->setText(settings->value("At_Setting/custom_module_id").toString());\r
+    ui->ledit_at_custom_CmdId->setText(settings->value("At_Setting/custom_cmd_id").toString());\r
+    ui->ledit_at_custom_Payload->setText(settings->value("At_Setting/custom_payload").toString());\r
+    ui->tbw_stage_complete->setEnabled(false);\r
+    ui->ledit_btlo_channel->setText("0");\r
+    ui->ledit_btpwr_powerchip->setText("2");\r
+}\r
+\r
+\r
+/* --------------------------------uart操作--------------------------- */\r
+void MainWindow::uart_process()\r
+{\r
+    if (ui->pbtn_open_uart->isChecked()) {\r
+        QString str_com = ui->cbox_uart_com_select->currentText();\r
+        QString str_uart_baud = ui->cbox_uart_baud_select->currentText();\r
+        uart_open(str_com,str_uart_baud);\r
+    } else {\r
+        uart_close();\r
+    }\r
+}\r
+void MainWindow::uart_open(QString com,QString com_baud)\r
+{\r
+    char buf[15] = {0};\r
+    uint32_t band = com_baud.toUInt();\r
+    com.replace("COM", "");\r
+    int comNumber = com.toInt();\r
+    if (comNumber < COM_NUMBER) {\r
+         (void)sprintf_s(buf, "COM%d", comNumber);\r
+    } else {\r
+      (void)sprintf_s(buf, "\\\\.\\COM%d", comNumber);\r
+    }\r
+    if (uapi_uart_open(buf, band)) {\r
+       uapi_uart_callback_register(uart_callback);\r
+       result_thread->resume();\r
+\r
+       if(ui->stkw_stage->currentIndex() == PAGE_COMPLETE){\r
+            ui->tbw_stage_complete->setEnabled(true);\r
+            ui->pbtn_spp_connect->setEnabled(true);\r
+       }else if(ui->stkw_stage->currentIndex() == PAGE_BOARD){\r
+           ui->tbw_stage_board->setEnabled(true);\r
+       }\r
+\r
+       ui->pbtn_open_uart->setText("关闭串口");\r
+//       ui_display("open uart success.\r\n",false);\r
+       if(!ui->pbtn_open_uart->isChecked()){\r
+           ui->pbtn_open_uart->setChecked(true);\r
+       }\r
+    } else {\r
+//            ui_display("open uart fail.\r\n",false,false);\r
+            QMessageBox::warning(this, tr("串口"), tr("打开串口失败!"), QMessageBox::Ok);\r
+            ui->pbtn_open_uart->setChecked(false);\r
+    }\r
+}\r
+void MainWindow::uart_close()\r
+{\r
+        if (uapi_uart_close() == TRUE) {\r
+            result_thread->pause();\r
+//            ui_display("close uart success.\r\n",false);\r
+            ui->tbw_stage_complete->setEnabled(false);\r
+            ui->tbw_stage_board->setEnabled(false);\r
+            ui->pbtn_spp_connect->setEnabled(false);\r
+            ui->pbtn_open_uart->setText("打开串口");\r
+            if(ui->pbtn_open_uart->isChecked()){\r
+                ui->pbtn_open_uart->setChecked(false);\r
+            }\r
+            if (spp_connected_handle != NULL) {\r
+                spp_connected_handle->stop();\r
+                spp_connected_handle = NULL;\r
+            }\r
+            if (spp_timer_handle != NULL) {\r
+                spp_timer_handle->stop();\r
+                spp_timer_handle = NULL;\r
+            }\r
+        } else {\r
+//            ui_display("close uart fail.\r\n",false);\r
+        }\r
+}\r
+void MainWindow::uart_send_data()\r
+{\r
+    QString str;\r
+    char *buf = nullptr;\r
+    int buf_len = 0;\r
+    if(ui->stkw_stage->currentIndex() == PAGE_COMPLETE){\r
+        str = ui->tedit_input_data->toPlainText();\r
+    }else{\r
+        str = ui->tedit_input_data_board->toPlainText();\r
+    }\r
+    uapi_uart_callback_register(uart_callback);\r
+    if (ui->ckbox_hex_send->isChecked()) {\r
+        QByteArray array = str.toLatin1();\r
+        QByteArray hex_bytes = QByteArray::fromHex(array.data());\r
+        buf_len = hex_bytes.size();\r
+        buf = hex_bytes.data();\r
+        str=str.toUpper();\r
+    } else {\r
+        if ((ui->stkw_stage->currentIndex() == PAGE_COMPLETE &&ui->ckbox_word_wrap->isChecked())||\r
+                (ui->stkw_stage->currentIndex() ==PAGE_BOARD && ui->ckbox_word_wrap_board->isChecked())) {\r
+            str+="\r\n";\r
+        }\r
+        buf = (char *)str.toStdString().c_str();\r
+        buf_len = strlen(buf);\r
+    }\r
+    uapi_uart_tx_data(buf, buf_len);\r
+    ui_display(str,false);\r
+}\r
+\r
+// uart收到的数据进行回显到显示栏\r
+void MainWindow::uart_rx_dispaly(int buf_len, u8Piont buf)\r
+{\r
+    uart_rx_flag = true;\r
+    if (uart_rx_Ignoring_display) {\r
+        QString str((char *)buf);\r
+        if(str.contains("ADDR")){\r
+            ui->ledit_dongle_mac->setText(str.mid(str.indexOf("=",0)+1,12));\r
+        }\r
+        return;\r
+    }\r
+    QString str;\r
+    QByteArray data((const char*)buf, buf_len);\r
+    if (ui->ckbox_Hex_Display->isChecked()) {\r
+        for (int i = 0; i < data.size(); i++) {\r
+           str += QString("%1 ").arg((quint8)data.at(i), 2, 16, QChar('0'));\r
+        }\r
+        str=str.toUpper();\r
+    } else {\r
+        for (int i = 0; i < data.size(); i++) {\r
+           str += QString(data.at(i));\r
+        }\r
+    }\r
+    ui_display(str,true);\r
+    free(buf);\r
+}\r
+\r
+void MainWindow::uart_check_dtr_rts()\r
+{\r
+    bool rts = false, dtr = false;\r
+    if (ui->ckbox_rts->isChecked()) {\r
+        rts = true;\r
+    }\r
+    if (ui->ckbox_dtr->isChecked()) {\r
+        dtr = true;\r
+    }\r
+    if (uapi_uart_set_rts_dtr(rts, dtr) == TRUE) {\r
+//        ui_display("set rts dtr success.\r\n",false);\r
+    }\r
+}\r
+\r
+void MainWindow::uart_com_select()\r
+{\r
+    ui->cbox_uart_com_select->clear();\r
+    QStringList strlist = uart_get_enable_comm_or_port();\r
+    qSort(strlist.begin(), strlist.end(),[](const QString& s1, const QString& s2){\r
+        QString a1=s1;QString a2=s2;\r
+        return a1.replace("COM","").toInt() < a2.replace("COM","").toInt(); });\r
+        ui->cbox_uart_com_select->addItems(strlist);\r
+}\r
+void MainWindow::uart_com_switch(QString com)\r
+{\r
+    QString str_uart_baud = ui->cbox_uart_baud_select->currentText();\r
+    if(ui->pbtn_open_uart->isChecked()){\r
+        uart_close();\r
+        uart_open(com,str_uart_baud);\r
+    }\r
+}\r
+void MainWindow::uart_baud_switch(QString baud)\r
+{\r
+   QString str_com = ui->cbox_uart_com_select->currentText();\r
+    if(ui->pbtn_open_uart->isChecked()){\r
+        uart_close();\r
+        uart_open(str_com,baud);\r
+    }\r
+}\r
+// nIndex为索引号 bValue选择返回值为key还是value,默认为value\r
+QString MainWindow::uart_get_comm_or_port(int nIndex, bool bValue)\r
+{\r
+    QString strCommRet = QObject::tr("");\r
+    HKEY hKey;\r
+    if (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM"), 0, KEY_READ, &hKey) != 0) {\r
+        QMessageBox::warning(this, tr("注册表"), tr("无法打开注册表!"), QMessageBox::Ok);\r
+        return QObject::tr(""); // 无法打开注册表\r
+    }\r
+    QString strKeyMsg;   // 键名\r
+    QString strValueMsg; // 键值\r
+    TCHAR portName[256]; // 键名数组\r
+    TCHAR commName[256]; // 键值数组\r
+    ulong nKeySize = sizeof(portName);\r
+    ulong nValueSize = sizeof(commName);\r
+    ulong nType;\r
+    if (::RegEnumValue(hKey, nIndex, portName, &nKeySize, 0, &nType, (BYTE *)commName, &nValueSize) == 0) { // 列举键名\r
+        // 读取键名\r
+        for (uint i = 0; i < nKeySize; i++) {\r
+            if (portName[i] != 0x00)\r
+                strKeyMsg.append(portName[i]);\r
+        }\r
+        // 读取键值\r
+        for (uint j = 0; j < nValueSize; j++) {\r
+            if (commName[j] != 0x00)\r
+                strValueMsg.append(commName[j]);\r
+        }\r
+        if (bValue)\r
+            strCommRet = strValueMsg;\r
+        else\r
+            strCommRet = strKeyMsg;\r
+    } else {\r
+        ::RegCloseKey(hKey);    // 关闭注册表\r
+        return QObject::tr(""); // 无可用串口\r
+    }\r
+    return strCommRet;\r
+}\r
+\r
+QStringList MainWindow::uart_get_enable_comm_or_port()\r
+{\r
+    QStringList CommPortList;\r
+    QString strCommPath = QObject::tr("HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM");\r
+    QSettings *settings = new QSettings(strCommPath, QSettings::NativeFormat);\r
+    QStringList keyList = settings->allKeys();\r
+    if (!keyList.isEmpty()) {\r
+        for (int i = 0; i < keyList.count(); i++)\r
+            CommPortList.append(uart_get_comm_or_port(i, true));\r
+    }\r
+    return CommPortList;\r
+}\r
+\r
+/* ------------------------------------------------------------------- */\r
+void MainWindow::spp_connected_callback()\r
+{\r
+    at_handler->at_send_cmd_string(MODULE_MCU,MCU_CMD_CHECK_CONNECTED,NULL);\r
+    dongle_connected_times++;\r
+    if (dongle_connected_times > 5) {\r
+        ui_display("Dongle has been disconnected.\r\n",false);\r
+        dongle_is_connected = false;\r
+    }\r
+    if (dongle_is_connected == true) {\r
+        ui->connected_flag->setStyleSheet("QPushButton{background-color: rgb(0, 255, 64);}");\r
+    } else {\r
+        ui->connected_flag->setStyleSheet("QPushButton{background-color: rgb(255, 0, 0);}");\r
+    }\r
+}\r
+\r
+void MainWindow::spp_timer_callback()\r
+{\r
+    bool final_ret = false;\r
+    if (dongle_try_count > 5) {\r
+        ui_display("\r\nNo device, check the dongle is connected.\r\n",false);\r
+        final_ret = true;\r
+    }\r
+    if (uart_rx_flag == false) {\r
+        at_handler->at_send_cmd_string(MODULE_MCU,MCU_CMD_CHECK_CONNECTED,NULL);\r
+        dongle_try_count++;\r
+    } else if (spp_try_count % 3 == 0) { // 每3次重新发送一次连接AT命令\r
+        QString str = ui->ledit_spp_addr->text();\r
+        at_handler->at_send_cmd_board(DONGLE_MODE_SPPCONN,str);\r
+    } else if (spp_try_count > 10) { // 循环10次还有数据上报则表示连接失败\r
+        ui_display("\r\nconnect fail.\r\n",false);\r
+        final_ret = true;\r
+    }\r
+    if (dongle_is_connected == true) {\r
+        final_ret = true;\r
+        ui_display("\r\nDongle has been connected.\r\n",false);\r
+        if (spp_connected_handle == NULL) {\r
+            spp_connected_handle = new QTimer(this);\r
+            connect(spp_connected_handle, SIGNAL(timeout()), this, SLOT(spp_connected_callback()));\r
+            spp_connected_handle->start(1500);\r
+        }\r
+    }\r
+    if (final_ret == false) {\r
+        at_handler->at_send_cmd_board(DONGLE_MODE_AT,NULL);\r
+        spp_try_count++;\r
+        uart_rx_flag = false;\r
+        ui_display(".",false);\r
+    } else {\r
+        spp_timer_handle->stop();\r
+        spp_timer_handle = NULL;\r
+        uart_rx_Ignoring_display = false;\r
+        ui->pbtn_spp_connect->setEnabled(true);\r
+    }\r
+}\r
+\r
+void MainWindow::spp_connect()\r
+{\r
+    uart_rx_Ignoring_display = true;\r
+    dongle_is_connected = false;\r
+    dongle_try_count = 0;\r
+    spp_try_count = 0;\r
+    uapi_uart_callback_register(uart_callback);\r
+    at_handler->at_send_cmd_board(DONGLE_MODE_ADDR,NULL);\r
+    ui_display("spp connectting...",false);\r
+    spp_timer_handle = new QTimer(this);\r
+    connect(spp_timer_handle, SIGNAL(timeout()), this, SLOT(spp_timer_callback()));\r
+    // spp查询定时器周期为1500ms\r
+    spp_timer_handle->start(1500);\r
+    ui->pbtn_spp_connect->setEnabled(false);\r
+}\r
+\r
+/* ------------------------------------------------------------------------ */\r
+/* -------------------------业务处理部分------------------------------------- */\r
+\r
+void MainWindow::transmit_ls_rx_diaplay(int transmit_ls_size, vPiont transmit_ls_buff)\r
+{\r
+    if(transmit_ls_size>0){\r
+        ui_display("文件名            大小\r\n",true);\r
+    }\r
+    uapi_ls_info_t *transmit_ls_buff_temp = (uapi_ls_info_t *)transmit_ls_buff;\r
+    for (int i = 0; i < transmit_ls_size; i++) {\r
+        QString strName = QString::fromUtf8((char *)(transmit_ls_buff_temp[i].name));\r
+        QString strFileLen = QString::number(transmit_ls_buff_temp[i].file_size,10);\r
+        if (transmit_ls_buff_temp[i].is_dir) {\r
+            strName.append("/");\r
+        }\r
+        ui_display(strName+"            "+strFileLen+"\r\n",true);\r
+        ui->cbox_fromborad_filelist->addItem(strName,strFileLen);\r
+    }\r
+    free(transmit_ls_buff);\r
+}\r
+\r
+void MainWindow::transmit_rx_display(bool transmit_result_flag)\r
+{\r
+    uint32_t total_size=0;\r
+    uint32_t current_size=0;\r
+    transmit_get_data_count(&total_size,&current_size);\r
+    uint32_t value = transmit_result_flag ? total_size : 0;\r
+    if (transmit_timer_handle) {\r
+        transmit_timer_handle->stop();\r
+        transmit_timer_handle = NULL;\r
+    }\r
+    if (transmit_download_or_upload == TRANSMIT_UPLOAD) {\r
+        ui->pbar_toboard->setValue(value);\r
+        ui->pbtn_toboard_Upload->setEnabled(true);\r
+    }\r
+    if (transmit_download_or_upload == TRANSMIT_DOWNLOAD) {\r
+        ui->pbar_fromboard->setValue(value);\r
+        ui->pbtn_fromboard_download->setEnabled(true);\r
+    }\r
+    if (transmit_result_flag) {\r
+        ui_display("download or upload file success.\r\n",false);\r
+    } else {\r
+        ui_display("download or upload file fail.\r\n",false);\r
+    }\r
+    transmit_download_or_upload = TRANSMIT_IDLE;\r
+    ui->pbtn_fromboard_delete->setEnabled(true);\r
+    ui->pbtn_fromboard_getfilelist->setEnabled(true);\r
+}\r
+\r
+void MainWindow::transmit_fromboard_name_change()\r
+{\r
+    ui->cbox_fromborad_filelist->clear();\r
+}\r
+\r
+void MainWindow::transmit_fromboard_selectfilepath()\r
+{\r
+    QString fname = QFileDialog::getExistingDirectory(this, "请选择文件");\r
+    ui->ledit_frombord_savefilepath->setText(fname);\r
+}\r
+\r
+void MainWindow::transmit_fromboard_getfilelist()\r
+{\r
+    QString str = ui->ledit_formboad_bordpath->text();\r
+    if (str.isEmpty()) {\r
+        QMessageBox::warning(this, tr("File Path"), tr("文件路径为空!"), QMessageBox::Ok);\r
+        return;\r
+    }\r
+    ui->cbox_fromborad_filelist->clear();\r
+    char *buf = (char *)str.toStdString().c_str();\r
+    int ret = uapi_ls_send(buf, strlen(buf), ls_callback);\r
+    if (ret == FAIL) {\r
+        QMessageBox::warning(this, tr("ls"), tr("ls fail!\r\n"), QMessageBox::Ok);\r
+    }\r
+    tansmit_fromborad_borad_list.push_back(str);\r
+    QCompleter *com = new QCompleter(tansmit_fromborad_borad_list, this);\r
+    com->setCaseSensitivity(Qt::CaseInsensitive);\r
+    delete ui->ledit_formboad_bordpath->completer();\r
+    ui->ledit_formboad_bordpath->setCompleter(com);\r
+}\r
+\r
+void MainWindow::transmit_fromboard_download()\r
+{\r
+    QString str_savepath = ui->ledit_frombord_savefilepath->text();\r
+    QString str_file_path = ui->ledit_formboad_bordpath->text();\r
+    QString str_file_name = ui->cbox_fromborad_filelist->currentText();\r
+    if (str_savepath.isEmpty() || str_file_path.isEmpty() || str_file_name.isEmpty()) {\r
+        QMessageBox::warning(this, tr("File Path"), tr("文件路径为空!"), QMessageBox::Ok);\r
+        return;\r
+    }\r
+    if (str_file_name.contains("/")) {\r
+        QMessageBox::warning(this, tr("Board File Name"), tr("请选择正确的文件!"), QMessageBox::Ok);\r
+        return;\r
+    }\r
+    qDebug()<<ui->cbox_fromborad_filelist->currentData().toInt();\r
+    if(ui->cbox_fromborad_filelist->currentData().toInt()==0){\r
+        QMessageBox::warning(this, tr("Board File Name"), tr("文件大小为0!"), QMessageBox::Ok);\r
+        return;\r
+    }\r
+    if(!str_file_path.endsWith("/")){\r
+        str_file_path.append("/");\r
+    }\r
+    str_file_path.append(str_file_name);\r
+    std::string buf_temp = str_file_path.toStdString();\r
+    char *str_file_buff = (char *)buf_temp.c_str();\r
+    std::string buf_temp2 = str_savepath.toStdString();\r
+    char *str_save_buff = (char *)buf_temp2.c_str();\r
+    int ret = uapi_file_download(str_file_buff, str_save_buff, transmit_callback);\r
+    if (ret == FAIL) {\r
+        QMessageBox::warning(this, tr("Downloade"), tr("文件下载启动失败!"), QMessageBox::Ok);\r
+        return;\r
+    }\r
+    transmit_progress_start();\r
+    transmit_download_or_upload = TRANSMIT_DOWNLOAD;\r
+    transmit_fromborad_local_list.push_back(str_savepath);\r
+    QCompleter *com = new QCompleter(transmit_fromborad_local_list, this);\r
+    com->setCaseSensitivity(Qt::CaseInsensitive);\r
+    delete ui->ledit_frombord_savefilepath->completer();\r
+    ui->ledit_frombord_savefilepath->setCompleter(com);\r
+    ui->pbtn_fromboard_download->setEnabled(false);\r
+    ui->pbtn_fromboard_delete->setEnabled(false);\r
+    ui->pbtn_fromboard_getfilelist->setEnabled(false);\r
+}\r
+\r
+void MainWindow::transmit_fromboard_delete()\r
+{\r
+    QString str_file_path = ui->ledit_formboad_bordpath->text();\r
+    QString str_file_name = ui->cbox_fromborad_filelist->currentText();\r
+    if (str_file_path.isEmpty() || str_file_name.isEmpty()) {\r
+        QMessageBox::warning(this, tr("File Path"), tr("文件路径为空!"), QMessageBox::Ok);\r
+        return;\r
+    }\r
+    if (str_file_name.contains("/")) {\r
+        str_file_name.chop(1);\r
+    } else {\r
+        str_file_path.append("/");\r
+    }\r
+    str_file_path.append(str_file_name);\r
+    char *str_file_buff = (char *)str_file_path.toStdString().c_str();\r
+    int ret = uapi_file_delete(str_file_buff, strlen(str_file_buff)); // ls\r
+    if (ret == FAIL) {\r
+        QMessageBox::warning(this, tr("delete"), tr("delete file fail!\r\n"), QMessageBox::Ok);\r
+    }\r
+    ui->cbox_fromborad_filelist->removeItem(ui->cbox_fromborad_filelist->currentIndex());\r
+}\r
+\r
+void MainWindow::transmit_fromboard_stop()\r
+{\r
+    if (transmit_timer_handle) {\r
+        transmit_timer_handle->stop();\r
+        transmit_timer_handle = NULL;\r
+    }\r
+    transmit_download_or_upload = TRANSMIT_IDLE;\r
+    ui->pbar_fromboard->setValue(0);\r
+    ui->pbtn_fromboard_download->setEnabled(true);\r
+    ui->pbtn_fromboard_delete->setEnabled(true);\r
+    ui->pbtn_fromboard_getfilelist->setEnabled(true);\r
+    uapi_file_transmit_stop();\r
+}\r
+\r
+void MainWindow::transmit_toboard_choosefile()\r
+{\r
+    QString fname = QFileDialog::getOpenFileName(this, "请选择文件");\r
+    ui->ledit_toboard_filepath->setText(fname);\r
+}\r
+\r
+void MainWindow::transmit_toboard_upload()\r
+{\r
+    QString board_file_path = ui->ledit_toboard_boardpath->text();\r
+    QString local_file_path = ui->ledit_toboard_filepath->text();\r
+    if (board_file_path.isEmpty() || local_file_path.isEmpty()) {\r
+        QMessageBox::warning(this, tr("File Path"), tr("文件路径为空!"), QMessageBox::Ok);\r
+        return;\r
+    }\r
+    char *buf_board_file_path = (char *)board_file_path.toStdString().c_str();\r
+    char *buf_local_file_path = (char *)local_file_path.toStdString().c_str();\r
+    int ret = uapi_file_upload(buf_board_file_path, buf_local_file_path, transmit_callback);\r
+    if (ret == FAIL) {\r
+        QMessageBox::warning(this, tr("Upload"), tr("文件上传启动失败!\r\n"), QMessageBox::Ok);\r
+        return;\r
+    }\r
+    transmit_progress_start();\r
+    transmit_download_or_upload = TRANSMIT_UPLOAD;\r
+    transmit_toboard_local_list.push_back(local_file_path);\r
+    transmit_toboard_borad_list.push_back(board_file_path);\r
+    QCompleter *com1 = new QCompleter(transmit_toboard_local_list, this);\r
+    com1->setCaseSensitivity(Qt::CaseInsensitive);\r
+    delete ui->ledit_toboard_filepath->completer();\r
+    ui->ledit_toboard_filepath->setCompleter(com1);\r
+    QCompleter *com2 = new QCompleter(transmit_toboard_borad_list, this);\r
+    com2->setCaseSensitivity(Qt::CaseInsensitive);\r
+    delete ui->ledit_toboard_boardpath->completer();\r
+    ui->ledit_toboard_boardpath->setCompleter(com2);\r
+    ui->pbtn_toboard_Upload->setEnabled(false);\r
+}\r
+\r
+void MainWindow::transmit_toboard_stop()\r
+{\r
+    if (transmit_timer_handle) {\r
+        transmit_timer_handle->stop();\r
+        transmit_timer_handle = NULL;\r
+    }\r
+    transmit_download_or_upload = TRANSMIT_IDLE;\r
+    ui->pbar_toboard->setValue(0);\r
+    ui->pbtn_toboard_Upload->setEnabled(true);\r
+    uapi_file_transmit_stop();\r
+}\r
+\r
+void MainWindow::transmit_update_progress()\r
+{\r
+    uint32_t total_size=0;\r
+    uint32_t current_size=0;\r
+    transmit_get_data_count(&total_size,&current_size);\r
+    if (transmit_download_or_upload == TRANSMIT_UPLOAD) {\r
+        ui->pbar_toboard->setMaximum(total_size);\r
+        ui->pbar_toboard->setValue(current_size);\r
+    }\r
+    if (transmit_download_or_upload == TRANSMIT_DOWNLOAD) {\r
+        ui->pbar_fromboard->setMaximum(total_size);\r
+        ui->pbar_fromboard->setValue(current_size);\r
+    }\r
+}\r
+void MainWindow::transmit_progress_start()\r
+{\r
+    transmit_timer_handle = new QTimer(this);\r
+    connect(transmit_timer_handle, SIGNAL(timeout()), this, SLOT(transmit_update_progress()));\r
+    // 进度条更新时间为60ms\r
+    transmit_timer_handle->start(60);\r
+}\r
+void MainWindow::at_check_send_status(bool flag)\r
+{\r
+    if(flag){\r
+        ui_display("at cmd send success.\r\n",false);\r
+    }else{\r
+        QMessageBox::warning(this, tr("AT"), tr("AT send fail!\r\n"), QMessageBox::Ok);\r
+        ui_display("at cmd send fail.\r\n",false);\r
+    }\r
+}\r
+\r
+void MainWindow::dongle_suspend()\r
+{\r
+    if(ui->stkw_stage->currentIndex() == PAGE_COMPLETE){\r
+         ui->tbw_stage_complete->setEnabled(false);\r
+         ui->pbtn_spp_connect->setEnabled(true);\r
+    }else if(ui->stkw_stage->currentIndex() == PAGE_BOARD){\r
+        ui->tbw_stage_board->setEnabled(false);\r
+    }\r
+}\r
+\r
+void MainWindow::dongle_resume()\r
+{\r
+    if(ui->stkw_stage->currentIndex() == PAGE_COMPLETE){\r
+         ui->tbw_stage_complete->setEnabled(true);\r
+         ui->pbtn_spp_connect->setEnabled(true);\r
+    }else if(ui->stkw_stage->currentIndex() == PAGE_BOARD){\r
+        ui->tbw_stage_board->setEnabled(true);\r
+    }\r
+}\r
+\r
+void MainWindow::at_rx_display(int at_buf_len, u8Piont at_buf)\r
+{\r
+    Q_UNUSED(at_buf_len);\r
+    at_module_id at_module_id_temp;\r
+    at_cmd_id at_cmd_id_temp;\r
+    at_handler->at_get_id(&at_module_id_temp, &at_cmd_id_temp);\r
+    if (at_buf[0] == MODULE_BT && at_buf[1] == BT_CMD_RX_RESULT) { // 耦合测试RxCount\r
+        uint32_t rx_count = at_buf[2] + (at_buf[3] << 8);\r
+        ui->ledit_display_rx_count->setText(QString::number(rx_count));\r
+    } else if (at_buf[0] == MODULE_MCU && at_buf[1] == MCU_CMD_CHECK_CONNECTED) { // Dongle是否已连接\r
+        dongle_is_connected = true;\r
+        dongle_connected_times = 0;\r
+        dongle_resume();\r
+    } else if (at_buf[0] == MODULE_MCU && at_buf[1] == MCU_CMD_RETURN_VALUE) {\r
+        for (int i = 0; i < 40; i++) {\r
+            qDebug("buf[%d] is %d.\r\n", i, at_buf[i]);\r
+        }\r
+        ui_display("cmd executed " + (QString)(at_buf[2] == 0 ? "Succ!" : "Fail!") + "\r\n",false);\r
+        if (at_buf[3] != 0) {\r
+            QByteArray data((const char*)&at_buf[4], at_buf[3]);\r
+            ui_display(QString(data),false);\r
+        }\r
+    } else if (at_buf[0] == at_module_id_temp && at_buf[1] == at_cmd_id_temp) {\r
+        ui_display("at receive success.\r\n",false);\r
+    } else {\r
+        ui_display("at receive fail.\r\n",false);\r
+    }\r
+    free(at_buf);\r
+}\r
+\r
+void MainWindow::at_stackinfo_send()\r
+{\r
+    at_check_send_status(at_handler->at_send_cmd_string(MODULE_MCU,MCU_CMD_STACKINFO,NULL));\r
+}\r
+\r
+void MainWindow::at_fsrm_send()\r
+{\r
+    QString str = ui->ledit_at_fsrm->text();\r
+    if (str.isEmpty()) {\r
+        QMessageBox::warning(this, tr("File Path"), tr("文件路径为空!"), QMessageBox::Ok);\r
+        return;\r
+    }\r
+    at_check_send_status(at_handler->at_send_cmd_string(MODULE_MCU,MCU_CMD_FSRM,str));\r
+}\r
+\r
+void MainWindow::at_mediamusicplay_send()\r
+{\r
+    uint8_t media_buf_cmd[2] = {0x00, 0x00};\r
+    QString str = ui->ledit_at_mediamusicplay->text();\r
+    if (str.isEmpty()) {\r
+        QMessageBox::warning(this, tr("File Path"), tr("文件路径为空!"), QMessageBox::Ok);\r
+        return;\r
+    }\r
+    QString media_sub_str;\r
+    QByteArray data((const char*)media_buf_cmd, 2);\r
+    for (int i = 0; i < data.size(); i++) {\r
+        media_sub_str += QString(data.at(i));\r
+    }\r
+    str.prepend(media_sub_str);\r
+    at_check_send_status(at_handler->at_send_cmd_string(MODULE_AUDIO,AUDIO_CMD,str));\r
+}\r
+\r
+void MainWindow::at_mediamusicstop_send()\r
+{\r
+    uint8_t media_buf_cmd[2] = {0x00, 0x03};\r
+    QString media_sub_str;\r
+    QByteArray data((const char*)media_buf_cmd, 2);\r
+    for (int i = 0; i < data.size(); i++) {\r
+        media_sub_str += QString(data.at(i));\r
+    }\r
+    at_check_send_status(at_handler->at_send_cmd_string(MODULE_AUDIO,AUDIO_CMD,media_sub_str));\r
+}\r
+\r
+void MainWindow::at_mediaaudiorecord_send()\r
+{\r
+    uint8_t media_buf_cmd[2] = {0x01, 0x00};\r
+    QString str = ui->ledit_at_mediaaudiorecord->text();\r
+    if (str.isEmpty()) {\r
+        QMessageBox::warning(this, tr("File Path"), tr("文件路径为空!"), QMessageBox::Ok);\r
+        return;\r
+    }\r
+    QString media_sub_str;\r
+    QByteArray data((const char*)media_buf_cmd, 2);\r
+    for (int i = 0; i < data.size(); i++) {\r
+        media_sub_str += QString(data.at(i));\r
+    }\r
+    str.prepend(media_sub_str);\r
+    at_check_send_status(at_handler->at_send_cmd_string(MODULE_AUDIO,AUDIO_CMD,str));\r
+}\r
+\r
+/* ----------------------- 耦合测试设置 ------------------------------------------------- */\r
+void MainWindow::at_bt_delay_ms_complete()\r
+{\r
+    QString str = ui->ledit_delay_ms->text();\r
+    at_check_send_status(at_handler->at_send_cmd_string(MODULE_BT,BT_CMD_DELAY_MS,str));\r
+}\r
+\r
+void MainWindow::at_set_dongle_addr_complete()\r
+{\r
+    QString str = ui->ledit_dongle_mac->text();\r
+    if (str.isEmpty() || str.size() != 12) {\r
+        QMessageBox::warning(this, tr("File Path"), tr("MAC地址为空!"), QMessageBox::Ok);\r
+        return;\r
+    }\r
+    at_check_send_status(at_handler->at_send_cmd_string(MODULE_BT,BT_CMD_DONGLE_MAC,str));\r
+}\r
+void MainWindow::at_set_bt_format()\r
+{\r
+    ui->ledit_br_rx_channel_complete->setValidator(new MyValidator(0,78,this));\r
+    ui->ledit_br_tx_channel_complete->setValidator(new MyValidator(0,78,this));\r
+    ui->ledit_ble_rx_channel_complete->setValidator(new MyValidator(0,39,this));\r
+    ui->ledit_ble_tx_channel_complete->setValidator(new MyValidator(0,39,this));\r
+    ui->ledit_br_rx_PayloadLen_complete->setValidator(new MyValidator(0,27,this));\r
+    ui->ledit_br_tx_PayloadLen_complete->setValidator(new MyValidator(0,27,this));\r
+    ui->ledit_ble_tx_PayloadLen_complete->setValidator(new MyValidator(0,255,this));\r
+\r
+    ui->ledit_br_rx_channel_board->setValidator(new MyValidator(0,78,this));\r
+    ui->ledit_br_tx_channel_board->setValidator(new MyValidator(0,78,this));\r
+    ui->ledit_ble_rx_channel_board->setValidator(new MyValidator(0,39,this));\r
+    ui->ledit_ble_tx_channel_board->setValidator(new MyValidator(0,39,this));\r
+    ui->ledit_br_rx_PayloadLen_board->setValidator(new MyValidator(0,27,this));\r
+    ui->ledit_br_tx_PayloadLen_board->setValidator(new MyValidator(0,27,this));\r
+    ui->ledit_ble_tx_PayloadLen_board->setValidator(new MyValidator(0,255,this));\r
+    ui->ledit_btlo_channel->setValidator(new MyValidator(0,78,this));\r
+}\r
+\r
+void MainWindow::at_check_bt_len(int packtype_index)\r
+{\r
+    QComboBox *cbox = qobject_cast<QComboBox *>(sender());\r
+    int len=at_handler->at_get_packet_len(packtype_index);\r
+    QString name = cbox->objectName();\r
+    if(name == "cbox_br_tx_PacketType_complete"){\r
+        const MyValidator *validator=(MyValidator *)ui->ledit_br_tx_PayloadLen_complete->validator();\r
+        delete validator;\r
+        ui->ledit_br_tx_PayloadLen_complete->setPlaceholderText("Length(0-"+QString::number(len)+")");\r
+        ui->ledit_br_tx_PayloadLen_complete->setValidator(new MyValidator(0,len,this));\r
+    }else if(name == "cbox_br_rx_PacketType_complete"){\r
+        const MyValidator *validator=(MyValidator *)ui->ledit_br_rx_PayloadLen_complete->validator();\r
+        delete validator;\r
+        ui->ledit_br_rx_PayloadLen_complete->setPlaceholderText("Length(0-"+QString::number(len)+")");\r
+        ui->ledit_br_rx_PayloadLen_complete->setValidator(new MyValidator(0,len,this));\r
+    }else if(name == "cbox_br_tx_PacketType_board"){\r
+        const MyValidator *validator=(MyValidator *)ui->ledit_br_tx_PayloadLen_board->validator();\r
+        delete validator;\r
+        ui->ledit_br_tx_PayloadLen_board->setPlaceholderText("Length(0-"+QString::number(len)+")");\r
+        ui->ledit_br_tx_PayloadLen_board->setValidator(new MyValidator(0,len,this));\r
+    }else if(name == "cbox_br_rx_PacketType_board"){\r
+        const MyValidator *validator=(MyValidator *)ui->ledit_br_rx_PayloadLen_board->validator();\r
+        delete validator;\r
+        ui->ledit_br_rx_PayloadLen_board->setPlaceholderText("Length(0-"+QString::number(len)+")");\r
+        ui->ledit_br_rx_PayloadLen_board->setValidator(new MyValidator(0,len,this));\r
+    }\r
+}\r
+\r
+/* -----------------------耦合测试-整机段------------------------------------------------ */\r
+void MainWindow::at_get_rx_count_complete()\r
+{\r
+    at_check_send_status(at_handler->at_send_cmd_string(MODULE_BT,BT_CMD_GET_RX, NULL));\r
+}\r
+\r
+void MainWindow::at_bt_tx_complete()\r
+{\r
+    QString br_tx_switch = ui->cbox_br_tx_on_or_off_complete->currentText();\r
+    QString channel = ui->ledit_br_tx_channel_complete->text();\r
+    int packet_type_index = ui->cbox_br_tx_PacketType_complete->currentIndex();\r
+    QString payload_len = ui->ledit_br_tx_PayloadLen_complete->text();\r
+    int pattern_type_index = ui->cbox_br_tx_pattern_type_complete->currentIndex();\r
+    QString format=at_handler->at_get_br_format(BT_MODE_BR_TX,br_tx_switch,channel,packet_type_index,payload_len,pattern_type_index);\r
+    if(format==NULL){\r
+        QMessageBox::warning(this, tr("AT"), tr("length错误!"), QMessageBox::Ok);\r
+    }\r
+    at_check_send_status(at_handler->at_send_cmd_string(MODULE_BT,BT_CMD_BR_TX,format));\r
+    dongle_is_connected = false;\r
+    dongle_suspend();\r
+}\r
+\r
+void MainWindow::at_bt_rx_complete()\r
+{\r
+    QString br_tx_switch = ui->cbox_br_tx_on_or_off_complete->currentText();\r
+    QString channel = ui->ledit_br_rx_channel_complete->text();\r
+    int packet_type_index = ui->cbox_br_rx_PacketType_complete->currentIndex();\r
+    QString payload_len = ui->ledit_br_rx_PayloadLen_complete->text();\r
+    int pattern_type_index = ui->cbox_br_rx_pattern_type_complete->currentIndex();\r
+    QString format=at_handler->at_get_br_format(BT_MODE_BR_RX,br_tx_switch,channel,packet_type_index,payload_len,pattern_type_index);\r
+    if(format==NULL){\r
+        QMessageBox::warning(this, tr("AT"), tr("length错误!"), QMessageBox::Ok);\r
+    }\r
+    at_check_send_status(at_handler->at_send_cmd_string(MODULE_BT,BT_CMD_BR_RX,format));\r
+    dongle_is_connected = false;\r
+    dongle_suspend();\r
+}\r
+\r
+void MainWindow::at_ble_tx_complete()\r
+{\r
+    QString br_tx_switch = ui->cbox_ble_tx_on_or_off_complete->currentText();\r
+    QString channel = ui->ledit_ble_tx_channel_complete->text();\r
+    int pattern_type_index = ui->cbox_ble_tx_pattern_type_complete->currentIndex();\r
+    QString payload_len = ui->ledit_ble_tx_PayloadLen_complete->text();\r
+    int phy_type_index = ui->cbox_ble_tx_PacketType_complete->currentIndex();\r
+    QString format=at_handler->at_get_ble_format(BT_MODE_BLE_TX,br_tx_switch,channel,pattern_type_index,payload_len,phy_type_index);\r
+    at_check_send_status(at_handler->at_send_cmd_string(MODULE_BT,BT_CMD_BLE_TX,format));\r
+    dongle_is_connected = false;\r
+    dongle_suspend();\r
+}\r
+\r
+void MainWindow::at_ble_rx_complete()\r
+{\r
+    QString br_tx_switch = ui->cbox_ble_rx_on_or_off_complete->currentText();\r
+    QString channel = ui->ledit_ble_rx_channel_complete->text();\r
+    int phy_type_index = ui->cbox_ble_rx_PacketType_complete->currentIndex();\r
+    QString format=at_handler->at_get_ble_format(BT_MODE_BLE_RX,br_tx_switch,channel,0,0,phy_type_index);\r
+    at_check_send_status(at_handler->at_send_cmd_string(MODULE_BT,BT_CMD_BLE_RX,format));\r
+    dongle_is_connected = false;\r
+    dongle_suspend();\r
+}\r
+\r
+void MainWindow::at_custom_send()\r
+{\r
+    QString moduleId = ui->ledit_at_custom_moduleId->text();\r
+    QString cmdId = ui->ledit_at_custom_CmdId->text();\r
+    QString payload = ui->ledit_at_custom_Payload->text();\r
+    bool ok;\r
+    at_check_send_status(at_handler->at_send_cmd_string((at_module_id)moduleId.toUInt(&ok,16),(at_cmd_id)cmdId.toUInt(&ok,16),payload));\r
+}\r
+/* -----------------------传导测试-单板段------------------------------------------------ */\r
+void MainWindow::at_bt_tx_board()\r
+{\r
+    QString br_tx_switch = ui->cbox_br_tx_on_or_off_board->currentText();\r
+    if (br_tx_switch.contains("ON") && bt_test_switch == true) {\r
+        QMessageBox::warning(this, tr("操作错误"), tr("应先关闭射频测试项!"), QMessageBox::Ok);\r
+    }\r
+    bt_test_switch = br_tx_switch.contains("ON") ? true : false;\r
+    QString channel = ui->ledit_br_tx_channel_board->text();\r
+    int packet_type_index = ui->cbox_br_tx_PacketType_board->currentIndex();\r
+    QString payload_len = ui->ledit_br_tx_PayloadLen_board->text();\r
+    int pattern_type_index = ui->cbox_br_tx_pattern_type_board->currentIndex();\r
+    QString format=at_handler->at_get_br_format(BT_MODE_BR_TX,br_tx_switch,channel,packet_type_index,payload_len,pattern_type_index);\r
+    if(format==NULL){\r
+        QMessageBox::warning(this, tr("AT"), tr("length错误!"), QMessageBox::Ok);\r
+    }\r
+    at_check_send_status(at_handler->at_send_cmd_board(BT_MODE_BR_TX,format));\r
+}\r
+void MainWindow::at_bt_rx_board()\r
+{\r
+    QString br_rx_switch = ui->cbox_br_rx_on_or_off_board->currentText();\r
+    if (br_rx_switch.contains("ON") && bt_test_switch == true) {\r
+        QMessageBox::warning(this, tr("操作错误"), tr("应先关闭射频测试项!"), QMessageBox::Ok);\r
+    }\r
+    bt_test_switch = br_rx_switch.contains("ON") ? true : false;\r
+    QString channel = ui->ledit_br_rx_channel_board->text();\r
+    int packet_type_index = ui->cbox_br_rx_PacketType_board->currentIndex();\r
+    QString payload_len = ui->ledit_br_rx_PayloadLen_board->text();\r
+    int pattern_type_index = ui->cbox_br_rx_pattern_type_board->currentIndex();\r
+    QString format=at_handler->at_get_br_format(BT_MODE_BR_RX,br_rx_switch,channel,packet_type_index,payload_len,pattern_type_index);\r
+    if(format==NULL){\r
+        QMessageBox::warning(this, tr("AT"), tr("length错误!"), QMessageBox::Ok);\r
+    }\r
+    at_check_send_status(at_handler->at_send_cmd_board(BT_MODE_BR_RX,format));\r
+}\r
+void MainWindow::at_ble_tx_board()\r
+{\r
+    QString ble_tx_switch = ui->cbox_ble_tx_on_or_off_board->currentText();\r
+    if (ble_tx_switch.contains("ON") && bt_test_switch == true) {\r
+        QMessageBox::warning(this, tr("操作错误"), tr("应先关闭射频测试项!"), QMessageBox::Ok);\r
+    }\r
+    bt_test_switch = ble_tx_switch.contains("ON") ? true : false;\r
+    QString channel = ui->ledit_ble_tx_channel_board->text();\r
+    int pattern_type_index = ui->cbox_ble_tx_pattern_type_board->currentIndex();\r
+    QString payload_len = ui->ledit_ble_tx_PayloadLen_board->text();\r
+    int phy_type_index = ui->cbox_ble_tx_PacketType_board->currentIndex();\r
+    QString format=at_handler->at_get_ble_format(BT_MODE_BLE_TX,ble_tx_switch,channel,pattern_type_index,payload_len,phy_type_index);\r
+    at_check_send_status(at_handler->at_send_cmd_board(BT_MODE_BLE_TX,format));\r
+}\r
+void MainWindow::at_ble_rx_board()\r
+{\r
+    QString ble_rx_switch = ui->cbox_ble_rx_on_or_off_board->currentText();\r
+    if (ble_rx_switch.contains("ON") && bt_test_switch == true) {\r
+        QMessageBox::warning(this, tr("操作错误"), tr("应先关闭射频测试项!"), QMessageBox::Ok);\r
+    }\r
+    bt_test_switch = ble_rx_switch.contains("ON") ? true : false;\r
+    QString channel = ui->ledit_ble_rx_channel_board->text();\r
+    int phy_type_index = ui->cbox_ble_rx_PacketType_board->currentIndex();\r
+    QString format=at_handler->at_get_ble_format(BT_MODE_BLE_RX,ble_rx_switch,channel,0,0,phy_type_index);\r
+    at_check_send_status(at_handler->at_send_cmd_board(BT_MODE_BLE_RX,format));\r
+}\r
+\r
+void MainWindow::at_bt_dutmode_board()\r
+{\r
+    QString bt_dutmode_switch = ui->cbox_btdutmode_on_or_off_board->currentText();\r
+    if (bt_dutmode_switch.contains("ON") && bt_test_switch == true) {\r
+        QMessageBox::warning(this, tr("操作错误"), tr("应先关闭射频测试项!"), QMessageBox::Ok);\r
+    }\r
+    bt_test_switch = bt_dutmode_switch.contains("ON") ? true : false;\r
+    QString format=at_handler->at_get_switch_format(bt_dutmode_switch);\r
+    at_check_send_status(at_handler->at_send_cmd_board(BT_MODE_BTDUTMODE,format));\r
+}\r
+void MainWindow::at_bt_btlo_board()\r
+{\r
+    QString format;\r
+    format += ui->ledit_btlo_channel->text()+",";\r
+    format += "7,";\r
+    if(ui->cbox_btlo_on_or_off_board->currentText().contains("ON")){\r
+        format+="1";\r
+    }else{\r
+        format+="2";\r
+    }\r
+    at_check_send_status(at_handler->at_send_cmd_board(BT_MODE_BTLO,format));\r
+}\r
+\r
+void MainWindow::at_bt_btpwr_board()\r
+{\r
+    QString format;\r
+    format += ui->ledit_btpwr_powerchip->text()+",";\r
+    if(ui->cbox_btpwr_on_or_off_board->currentText().contains("ON")){\r
+        format+="1";\r
+    }else{\r
+        format+="0";\r
+    }\r
+    at_check_send_status(at_handler->at_send_cmd_board(BT_MODE_BTPWR,format));\r
+}\r
+\r
+void MainWindow::at_bt_wakeup()\r
+{\r
+    QString format= "012345678901234567890123456789";\r
+    at_check_send_status(at_handler->at_send_cmd_board(MODE_MAX,format));\r
+}\r
+\r
+void MainWindow::at_bt_sleep()\r
+{\r
+    QString format= "AT^RMVO";\r
+    at_check_send_status(at_handler->at_send_cmd_board(MODE_MAX,format));\r
+}\r
+/* ----------------------------------------------------------------------------------- */\r
diff --git a/mainwindow.h b/mainwindow.h
new file mode 100644 (file)
index 0000000..8a58b37
--- /dev/null
@@ -0,0 +1,145 @@
+#ifndef MAINWINDOW_H\r
+#define MAINWINDOW_H\r
+\r
+#include <Windows.h>\r
+#include <custom.h>\r
+#include <stdio.h>\r
+#include <QCompleter>\r
+#include <QMainWindow>\r
+#include <QSettings>\r
+#include <QTimer>\r
+#include "header.h"\r
+#include "result_thread.h"\r
+#include "common.h"\r
+#include "at_data.h"\r
+#include "QFileDialog"\r
+#include "QMessageBox"\r
+#include "QTime"\r
+\r
+#define COM_NUMBER 10\r
+\r
+// 封装了UI上需要调用的所有函数接口\r
+QT_BEGIN_NAMESPACE\r
+namespace Ui {\r
+class MainWindow;\r
+}\r
+QT_END_NAMESPACE\r
+\r
+class MainWindow : public QMainWindow {\r
+    Q_OBJECT\r
+\r
+public:\r
+    MainWindow(QWidget *parent = nullptr);\r
+    ~MainWindow();\r
+\r
+private:\r
+    Ui::MainWindow *ui;\r
+    /* ------------------------uart------------------------------- */\r
+    Result_Thread *result_thread;\r
+    // 是否忽略uart数据,不回显\r
+    bool uart_rx_Ignoring_display {false};\r
+    // 是否有uart通路数据上报\r
+    bool uart_rx_flag {false};\r
+    bool dongle_is_connected {false};\r
+    int dongle_connected_times {0};\r
+    QStringList uart_get_enable_comm_or_port();\r
+    QString uart_get_comm_or_port(int nIndex, bool bValue);\r
+    void uart_open(QString com,QString com_band);\r
+    void uart_close();\r
+    /* ------------------------spp-------------------------------- */\r
+    QTimer *spp_timer_handle {NULL};\r
+    QTimer *spp_connected_handle {NULL};\r
+    int dongle_try_count {0};\r
+    int spp_try_count {0};\r
+\r
+    /* -----------------------transmit---------------------------- */\r
+    QStringList transmit_fromborad_local_list;\r
+    QStringList tansmit_fromborad_borad_list;\r
+    QStringList transmit_toboard_local_list;\r
+    QStringList transmit_toboard_borad_list;\r
+    typedef enum{\r
+        TRANSMIT_IDLE,\r
+        TRANSMIT_DOWNLOAD,\r
+        TRANSMIT_UPLOAD,\r
+    }transmit_mode;\r
+    // download is 1,uplaod is 2\r
+    transmit_mode transmit_download_or_upload {TRANSMIT_IDLE};\r
+    QTimer *transmit_timer_handle {NULL};\r
+    void transmit_progress_start();\r
+    /* -------------------------UI------------------------------- */\r
+    enum ui_page{\r
+        PAGE_COMPLETE,\r
+        PAGE_BOARD,\r
+    };\r
+    void ui_setting_save();\r
+    void ui_setting_read();\r
+    void ui_display(QString str,bool inOrOut);\r
+    /* -------------------------AT------------------------------- */\r
+    At_Process *at_handler;\r
+    void at_check_send_status(bool flag);\r
+    void at_set_bt_format();\r
+    bool bt_test_switch {false};\r
+    /* ------------------------end------------------------------ */\r
+\r
+private slots:\r
+    /* --------------------------UI------------------------------ */\r
+    void ui_tab_mainwindow_complete();\r
+    void ui_tab_mainwindow_board();\r
+    void ui_save_windows();\r
+    /* -------------------------uart----------------------------- */\r
+    void uart_process();\r
+    void uart_send_data();\r
+    void uart_rx_dispaly(int buf_len, u8Piont buf);\r
+    void uart_check_dtr_rts();\r
+    void uart_com_select();\r
+    void uart_com_switch(QString com);\r
+    void uart_baud_switch(QString baud);\r
+    /* -------------------------spp------------------------------- */\r
+    void spp_connect();\r
+    void spp_timer_callback();\r
+    void spp_connected_callback();\r
+    void dongle_suspend();\r
+    void dongle_resume();\r
+    /* -----------------------at/transmit---------------------------- */\r
+    void at_rx_display(int at_buf_len, u8Piont at_buf);\r
+    void at_stackinfo_send();\r
+    void at_fsrm_send();\r
+    void at_mediamusicplay_send();\r
+    void at_mediamusicstop_send();\r
+    void at_mediaaudiorecord_send();\r
+    void at_custom_send();\r
+    void transmit_ls_rx_diaplay(int transmit_ls_size, vPiont transmit_ls_buff);\r
+    void transmit_rx_display(bool transmit_result_flag);\r
+    void transmit_update_progress();\r
+    void transmit_fromboard_name_change();\r
+    void transmit_fromboard_selectfilepath();\r
+    void transmit_fromboard_getfilelist();\r
+    void transmit_fromboard_download();\r
+    void transmit_fromboard_delete();\r
+    void transmit_fromboard_stop();\r
+    void transmit_toboard_choosefile();\r
+    void transmit_toboard_upload();\r
+    void transmit_toboard_stop();\r
+    /* ----------------------- 耦合测试设置 --------------------------- */\r
+    void at_set_dongle_addr_complete();\r
+    void at_bt_delay_ms_complete();\r
+    void at_check_bt_len(int packtype_index);\r
+    /* -----------------------耦合测试-整机段-------------------------- */\r
+    void at_get_rx_count_complete();\r
+    void at_bt_tx_complete();  // BT长发(非信令)\r
+    void at_bt_rx_complete();  // BT长收(非信令)\r
+    void at_ble_tx_complete(); // BLE长发(非信令)\r
+    void at_ble_rx_complete(); // BLE长收(非信令)\r
+    /* -----------------------传导测试-单板段-------------------------- */\r
+    void at_bt_tx_board();  // BT长发(非信令)\r
+    void at_bt_rx_board();  // BT长收(非信令)\r
+    void at_ble_tx_board(); // BLE长发(非信令)\r
+    void at_ble_rx_board(); // BLE长收(非信令)\r
+    void at_bt_dutmode_board();\r
+    void at_bt_btlo_board();\r
+    void at_bt_btpwr_board();\r
+    void at_bt_wakeup();\r
+    void at_bt_sleep();\r
+    /* ------------------------------------------------------------- */\r
+};\r
+#endif // MAINWINDOW_H\r
diff --git a/mainwindow.ui b/mainwindow.ui
new file mode 100644 (file)
index 0000000..84ece13
--- /dev/null
@@ -0,0 +1,3848 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ui version="4.0">\r
+ <class>MainWindow</class>\r
+ <widget class="QMainWindow" name="MainWindow">\r
+  <property name="geometry">\r
+   <rect>\r
+    <x>0</x>\r
+    <y>0</y>\r
+    <width>890</width>\r
+    <height>707</height>\r
+   </rect>\r
+  </property>\r
+  <property name="font">\r
+   <font>\r
+    <family>黑体</family>\r
+    <weight>50</weight>\r
+    <bold>false</bold>\r
+   </font>\r
+  </property>\r
+  <property name="windowTitle">\r
+   <string>Factory_Tools</string>\r
+  </property>\r
+  <property name="windowIcon">\r
+   <iconset resource="Demoqrc.qrc">\r
+    <normaloff>:/icon/windows.ico</normaloff>:/icon/windows.ico</iconset>\r
+  </property>\r
+  <property name="windowOpacity">\r
+   <double>1.000000000000000</double>\r
+  </property>\r
+  <property name="layoutDirection">\r
+   <enum>Qt::LeftToRight</enum>\r
+  </property>\r
+  <widget class="QWidget" name="centralwidget">\r
+   <widget class="QTextBrowser" name="txtb_dispaly">\r
+    <property name="geometry">\r
+     <rect>\r
+      <x>0</x>\r
+      <y>0</y>\r
+      <width>631</width>\r
+      <height>371</height>\r
+     </rect>\r
+    </property>\r
+    <property name="font">\r
+     <font>\r
+      <family>Times New Roman</family>\r
+      <pointsize>10</pointsize>\r
+     </font>\r
+    </property>\r
+    <property name="mouseTracking">\r
+     <bool>true</bool>\r
+    </property>\r
+    <property name="styleSheet">\r
+     <string notr="true">QTextBrowser{background-color:rgb(26, 26, 26);\r
+                       color:rgb(127, 255, 0)}</string>\r
+    </property>\r
+    <property name="verticalScrollBarPolicy">\r
+     <enum>Qt::ScrollBarAlwaysOn</enum>\r
+    </property>\r
+    <property name="textInteractionFlags">\r
+     <set>Qt::TextBrowserInteraction</set>\r
+    </property>\r
+   </widget>\r
+   <widget class="QStackedWidget" name="stkw_stage">\r
+    <property name="geometry">\r
+     <rect>\r
+      <x>0</x>\r
+      <y>370</y>\r
+      <width>891</width>\r
+      <height>311</height>\r
+     </rect>\r
+    </property>\r
+    <property name="font">\r
+     <font>\r
+      <family>黑体</family>\r
+      <weight>50</weight>\r
+      <bold>false</bold>\r
+     </font>\r
+    </property>\r
+    <property name="currentIndex">\r
+     <number>0</number>\r
+    </property>\r
+    <widget class="QWidget" name="page_compelte">\r
+     <widget class="QTabWidget" name="tbw_stage_complete">\r
+      <property name="enabled">\r
+       <bool>false</bool>\r
+      </property>\r
+      <property name="geometry">\r
+       <rect>\r
+        <x>0</x>\r
+        <y>0</y>\r
+        <width>891</width>\r
+        <height>291</height>\r
+       </rect>\r
+      </property>\r
+      <property name="sizePolicy">\r
+       <sizepolicy hsizetype="Fixed" vsizetype="Fixed">\r
+        <horstretch>0</horstretch>\r
+        <verstretch>0</verstretch>\r
+       </sizepolicy>\r
+      </property>\r
+      <property name="font">\r
+       <font>\r
+        <family>黑体</family>\r
+        <pointsize>12</pointsize>\r
+        <weight>50</weight>\r
+        <bold>false</bold>\r
+       </font>\r
+      </property>\r
+      <property name="cursor">\r
+       <cursorShape>ArrowCursor</cursorShape>\r
+      </property>\r
+      <property name="currentIndex">\r
+       <number>0</number>\r
+      </property>\r
+      <widget class="QWidget" name="tab_complete_debug">\r
+       <attribute name="title">\r
+        <string>Debug</string>\r
+       </attribute>\r
+       <widget class="QTextEdit" name="tedit_input_data">\r
+        <property name="geometry">\r
+         <rect>\r
+          <x>0</x>\r
+          <y>0</y>\r
+          <width>771</width>\r
+          <height>261</height>\r
+         </rect>\r
+        </property>\r
+       </widget>\r
+       <widget class="QPushButton" name="pbtn_send_data">\r
+        <property name="geometry">\r
+         <rect>\r
+          <x>790</x>\r
+          <y>30</y>\r
+          <width>75</width>\r
+          <height>23</height>\r
+         </rect>\r
+        </property>\r
+        <property name="font">\r
+         <font>\r
+          <family>Times New Roman</family>\r
+          <pointsize>10</pointsize>\r
+          <weight>50</weight>\r
+          <bold>false</bold>\r
+         </font>\r
+        </property>\r
+        <property name="text">\r
+         <string>发送</string>\r
+        </property>\r
+       </widget>\r
+       <widget class="QPushButton" name="pbtn_clear_senddata">\r
+        <property name="geometry">\r
+         <rect>\r
+          <x>790</x>\r
+          <y>83</y>\r
+          <width>75</width>\r
+          <height>23</height>\r
+         </rect>\r
+        </property>\r
+        <property name="font">\r
+         <font>\r
+          <family>Times New Roman</family>\r
+          <pointsize>10</pointsize>\r
+          <weight>50</weight>\r
+          <bold>false</bold>\r
+         </font>\r
+        </property>\r
+        <property name="text">\r
+         <string>清除发送</string>\r
+        </property>\r
+       </widget>\r
+       <widget class="QCheckBox" name="ckbox_word_wrap">\r
+        <property name="geometry">\r
+         <rect>\r
+          <x>789</x>\r
+          <y>157</y>\r
+          <width>88</width>\r
+          <height>16</height>\r
+         </rect>\r
+        </property>\r
+        <property name="font">\r
+         <font>\r
+          <family>Times New Roman</family>\r
+          <pointsize>10</pointsize>\r
+          <weight>50</weight>\r
+          <bold>false</bold>\r
+         </font>\r
+        </property>\r
+        <property name="text">\r
+         <string>加回车换行</string>\r
+        </property>\r
+        <property name="tristate">\r
+         <bool>false</bool>\r
+        </property>\r
+       </widget>\r
+      </widget>\r
+      <widget class="QWidget" name="tab_complete_toboard">\r
+       <attribute name="title">\r
+        <string>To Board</string>\r
+       </attribute>\r
+       <widget class="QProgressBar" name="pbar_toboard">\r
+        <property name="geometry">\r
+         <rect>\r
+          <x>20</x>\r
+          <y>210</y>\r
+          <width>831</width>\r
+          <height>23</height>\r
+         </rect>\r
+        </property>\r
+        <property name="value">\r
+         <number>0</number>\r
+        </property>\r
+        <property name="invertedAppearance">\r
+         <bool>false</bool>\r
+        </property>\r
+       </widget>\r
+       <widget class="QGroupBox" name="groupBox_4">\r
+        <property name="geometry">\r
+         <rect>\r
+          <x>20</x>\r
+          <y>20</y>\r
+          <width>831</width>\r
+          <height>161</height>\r
+         </rect>\r
+        </property>\r
+        <property name="font">\r
+         <font>\r
+          <family>Times New Roman</family>\r
+          <pointsize>10</pointsize>\r
+          <weight>50</weight>\r
+          <bold>false</bold>\r
+         </font>\r
+        </property>\r
+        <property name="title">\r
+         <string>Upload File</string>\r
+        </property>\r
+        <widget class="QLabel" name="label">\r
+         <property name="geometry">\r
+          <rect>\r
+           <x>10</x>\r
+           <y>40</y>\r
+           <width>121</width>\r
+           <height>21</height>\r
+          </rect>\r
+         </property>\r
+         <property name="font">\r
+          <font>\r
+           <family>Times New Roman</family>\r
+           <pointsize>10</pointsize>\r
+           <weight>50</weight>\r
+           <bold>false</bold>\r
+          </font>\r
+         </property>\r
+         <property name="text">\r
+          <string>Local File Path:</string>\r
+         </property>\r
+        </widget>\r
+        <widget class="QLabel" name="label_2">\r
+         <property name="geometry">\r
+          <rect>\r
+           <x>10</x>\r
+           <y>100</y>\r
+           <width>121</width>\r
+           <height>20</height>\r
+          </rect>\r
+         </property>\r
+         <property name="font">\r
+          <font>\r
+           <family>Times New Roman</family>\r
+           <pointsize>10</pointsize>\r
+           <weight>50</weight>\r
+           <bold>false</bold>\r
+          </font>\r
+         </property>\r
+         <property name="text">\r
+          <string>Board File Path:</string>\r
+         </property>\r
+        </widget>\r
+        <widget class="QPushButton" name="pbtn_toboard_stop">\r
+         <property name="geometry">\r
+          <rect>\r
+           <x>730</x>\r
+           <y>100</y>\r
+           <width>75</width>\r
+           <height>23</height>\r
+          </rect>\r
+         </property>\r
+         <property name="font">\r
+          <font>\r
+           <family>Times New Roman</family>\r
+           <pointsize>10</pointsize>\r
+           <weight>50</weight>\r
+           <bold>false</bold>\r
+          </font>\r
+         </property>\r
+         <property name="text">\r
+          <string>stop</string>\r
+         </property>\r
+        </widget>\r
+        <widget class="QLineEdit" name="ledit_toboard_boardpath">\r
+         <property name="geometry">\r
+          <rect>\r
+           <x>140</x>\r
+           <y>100</y>\r
+           <width>471</width>\r
+           <height>20</height>\r
+          </rect>\r
+         </property>\r
+        </widget>\r
+        <widget class="QPushButton" name="pbtn_toboard_choosefile">\r
+         <property name="geometry">\r
+          <rect>\r
+           <x>640</x>\r
+           <y>40</y>\r
+           <width>161</width>\r
+           <height>23</height>\r
+          </rect>\r
+         </property>\r
+         <property name="font">\r
+          <font>\r
+           <family>Times New Roman</family>\r
+           <pointsize>10</pointsize>\r
+           <weight>50</weight>\r
+           <bold>false</bold>\r
+          </font>\r
+         </property>\r
+         <property name="text">\r
+          <string>Choose File</string>\r
+         </property>\r
+        </widget>\r
+        <widget class="QPushButton" name="pbtn_toboard_Upload">\r
+         <property name="geometry">\r
+          <rect>\r
+           <x>640</x>\r
+           <y>100</y>\r
+           <width>75</width>\r
+           <height>23</height>\r
+          </rect>\r
+         </property>\r
+         <property name="font">\r
+          <font>\r
+           <family>Times New Roman</family>\r
+           <pointsize>10</pointsize>\r
+           <weight>50</weight>\r
+           <bold>false</bold>\r
+          </font>\r
+         </property>\r
+         <property name="text">\r
+          <string>Upload</string>\r
+         </property>\r
+         <property name="checkable">\r
+          <bool>false</bool>\r
+         </property>\r
+        </widget>\r
+        <widget class="QLineEdit" name="ledit_toboard_filepath">\r
+         <property name="geometry">\r
+          <rect>\r
+           <x>140</x>\r
+           <y>40</y>\r
+           <width>471</width>\r
+           <height>20</height>\r
+          </rect>\r
+         </property>\r
+        </widget>\r
+       </widget>\r
+      </widget>\r
+      <widget class="QWidget" name="tab_complete_fromboard">\r
+       <attribute name="title">\r
+        <string>From Board</string>\r
+       </attribute>\r
+       <widget class="QGroupBox" name="groupBox_2">\r
+        <property name="geometry">\r
+         <rect>\r
+          <x>20</x>\r
+          <y>20</y>\r
+          <width>701</width>\r
+          <height>71</height>\r
+         </rect>\r
+        </property>\r
+        <property name="font">\r
+         <font>\r
+          <family>Times New Roman</family>\r
+          <pointsize>10</pointsize>\r
+          <weight>50</weight>\r
+          <bold>false</bold>\r
+         </font>\r
+        </property>\r
+        <property name="title">\r
+         <string>File Storage</string>\r
+        </property>\r
+        <widget class="QLabel" name="label_4">\r
+         <property name="geometry">\r
+          <rect>\r
+           <x>10</x>\r
+           <y>30</y>\r
+           <width>121</width>\r
+           <height>21</height>\r
+          </rect>\r
+         </property>\r
+         <property name="font">\r
+          <font>\r
+           <family>Times New Roman</family>\r
+           <pointsize>10</pointsize>\r
+           <weight>50</weight>\r
+           <bold>false</bold>\r
+          </font>\r
+         </property>\r
+         <property name="text">\r
+          <string>Local File Path:</string>\r
+         </property>\r
+        </widget>\r
+        <widget class="QLineEdit" name="ledit_frombord_savefilepath">\r
+         <property name="geometry">\r
+          <rect>\r
+           <x>140</x>\r
+           <y>30</y>\r
+           <width>421</width>\r
+           <height>20</height>\r
+          </rect>\r
+         </property>\r
+        </widget>\r
+        <widget class="QPushButton" name="pbtn_fromboard_selectfilepath">\r
+         <property name="geometry">\r
+          <rect>\r
+           <x>580</x>\r
+           <y>30</y>\r
+           <width>91</width>\r
+           <height>23</height>\r
+          </rect>\r
+         </property>\r
+         <property name="font">\r
+          <font>\r
+           <family>Times New Roman</family>\r
+           <pointsize>10</pointsize>\r
+           <weight>50</weight>\r
+           <bold>false</bold>\r
+          </font>\r
+         </property>\r
+         <property name="text">\r
+          <string>....</string>\r
+         </property>\r
+        </widget>\r
+       </widget>\r
+       <widget class="QGroupBox" name="groupBox_3">\r
+        <property name="geometry">\r
+         <rect>\r
+          <x>20</x>\r
+          <y>110</y>\r
+          <width>701</width>\r
+          <height>101</height>\r
+         </rect>\r
+        </property>\r
+        <property name="font">\r
+         <font>\r
+          <family>Times New Roman</family>\r
+          <pointsize>10</pointsize>\r
+          <weight>50</weight>\r
+          <bold>false</bold>\r
+         </font>\r
+        </property>\r
+        <property name="title">\r
+         <string>File Selector</string>\r
+        </property>\r
+        <widget class="QLabel" name="label_11">\r
+         <property name="geometry">\r
+          <rect>\r
+           <x>40</x>\r
+           <y>20</y>\r
+           <width>71</width>\r
+           <height>20</height>\r
+          </rect>\r
+         </property>\r
+         <property name="font">\r
+          <font>\r
+           <family>Times New Roman</family>\r
+           <pointsize>10</pointsize>\r
+           <weight>50</weight>\r
+           <bold>false</bold>\r
+          </font>\r
+         </property>\r
+         <property name="text">\r
+          <string>File Path:</string>\r
+         </property>\r
+        </widget>\r
+        <widget class="QLineEdit" name="ledit_formboad_bordpath">\r
+         <property name="geometry">\r
+          <rect>\r
+           <x>140</x>\r
+           <y>20</y>\r
+           <width>531</width>\r
+           <height>20</height>\r
+          </rect>\r
+         </property>\r
+        </widget>\r
+        <widget class="QComboBox" name="cbox_fromborad_filelist">\r
+         <property name="geometry">\r
+          <rect>\r
+           <x>140</x>\r
+           <y>60</y>\r
+           <width>411</width>\r
+           <height>22</height>\r
+          </rect>\r
+         </property>\r
+        </widget>\r
+        <widget class="QPushButton" name="pbtn_fromboard_getfilelist">\r
+         <property name="geometry">\r
+          <rect>\r
+           <x>570</x>\r
+           <y>60</y>\r
+           <width>101</width>\r
+           <height>23</height>\r
+          </rect>\r
+         </property>\r
+         <property name="font">\r
+          <font>\r
+           <family>Times New Roman</family>\r
+           <pointsize>9</pointsize>\r
+           <weight>50</weight>\r
+           <bold>false</bold>\r
+          </font>\r
+         </property>\r
+         <property name="text">\r
+          <string>Get file List</string>\r
+         </property>\r
+        </widget>\r
+        <widget class="QLabel" name="label_12">\r
+         <property name="geometry">\r
+          <rect>\r
+           <x>40</x>\r
+           <y>60</y>\r
+           <width>71</width>\r
+           <height>20</height>\r
+          </rect>\r
+         </property>\r
+         <property name="font">\r
+          <font>\r
+           <family>Times New Roman</family>\r
+           <pointsize>10</pointsize>\r
+           <weight>50</weight>\r
+           <bold>false</bold>\r
+          </font>\r
+         </property>\r
+         <property name="text">\r
+          <string>File Name:</string>\r
+         </property>\r
+        </widget>\r
+        <widget class="QPushButton" name="pushButton_29">\r
+         <property name="geometry">\r
+          <rect>\r
+           <x>290</x>\r
+           <y>130</y>\r
+           <width>75</width>\r
+           <height>23</height>\r
+          </rect>\r
+         </property>\r
+         <property name="text">\r
+          <string>PushButton</string>\r
+         </property>\r
+        </widget>\r
+       </widget>\r
+       <widget class="QProgressBar" name="pbar_fromboard">\r
+        <property name="geometry">\r
+         <rect>\r
+          <x>20</x>\r
+          <y>220</y>\r
+          <width>711</width>\r
+          <height>20</height>\r
+         </rect>\r
+        </property>\r
+        <property name="value">\r
+         <number>0</number>\r
+        </property>\r
+       </widget>\r
+       <widget class="QWidget" name="layoutWidget">\r
+        <property name="geometry">\r
+         <rect>\r
+          <x>760</x>\r
+          <y>20</y>\r
+          <width>95</width>\r
+          <height>201</height>\r
+         </rect>\r
+        </property>\r
+        <layout class="QVBoxLayout" name="verticalLayout">\r
+         <item>\r
+          <widget class="QPushButton" name="pbtn_fromboard_download">\r
+           <property name="font">\r
+            <font>\r
+             <family>Times New Roman</family>\r
+             <pointsize>10</pointsize>\r
+             <weight>50</weight>\r
+             <bold>false</bold>\r
+            </font>\r
+           </property>\r
+           <property name="text">\r
+            <string>Download</string>\r
+           </property>\r
+           <property name="checkable">\r
+            <bool>false</bool>\r
+           </property>\r
+          </widget>\r
+         </item>\r
+         <item>\r
+          <widget class="QPushButton" name="pbtn_fromboard_delete">\r
+           <property name="font">\r
+            <font>\r
+             <family>Times New Roman</family>\r
+             <pointsize>10</pointsize>\r
+             <weight>50</weight>\r
+             <bold>false</bold>\r
+            </font>\r
+           </property>\r
+           <property name="text">\r
+            <string>Delete</string>\r
+           </property>\r
+          </widget>\r
+         </item>\r
+         <item>\r
+          <widget class="QPushButton" name="pbtn_fromboard_stop">\r
+           <property name="font">\r
+            <font>\r
+             <family>Times New Roman</family>\r
+             <pointsize>10</pointsize>\r
+             <weight>50</weight>\r
+             <bold>false</bold>\r
+            </font>\r
+           </property>\r
+           <property name="text">\r
+            <string>Stop</string>\r
+           </property>\r
+          </widget>\r
+         </item>\r
+        </layout>\r
+       </widget>\r
+      </widget>\r
+      <widget class="QWidget" name="tab_complete_at_cmd">\r
+       <attribute name="title">\r
+        <string>AT命令</string>\r
+       </attribute>\r
+       <widget class="QTabWidget" name="tbw_at_cmd">\r
+        <property name="geometry">\r
+         <rect>\r
+          <x>0</x>\r
+          <y>0</y>\r
+          <width>891</width>\r
+          <height>271</height>\r
+         </rect>\r
+        </property>\r
+        <property name="font">\r
+         <font>\r
+          <family>黑体</family>\r
+          <pointsize>10</pointsize>\r
+          <weight>50</weight>\r
+          <bold>false</bold>\r
+         </font>\r
+        </property>\r
+        <property name="tabPosition">\r
+         <enum>QTabWidget::West</enum>\r
+        </property>\r
+        <property name="tabShape">\r
+         <enum>QTabWidget::Triangular</enum>\r
+        </property>\r
+        <property name="currentIndex">\r
+         <number>0</number>\r
+        </property>\r
+        <property name="elideMode">\r
+         <enum>Qt::ElideNone</enum>\r
+        </property>\r
+        <widget class="QWidget" name="tab_at_cmd_mcu">\r
+         <attribute name="title">\r
+          <string>MCU</string>\r
+         </attribute>\r
+         <widget class="QGroupBox" name="groupBox">\r
+          <property name="geometry">\r
+           <rect>\r
+            <x>20</x>\r
+            <y>10</y>\r
+            <width>831</width>\r
+            <height>211</height>\r
+           </rect>\r
+          </property>\r
+          <property name="title">\r
+           <string>Debug</string>\r
+          </property>\r
+          <widget class="QWidget" name="horizontalLayoutWidget">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>20</x>\r
+             <y>30</y>\r
+             <width>791</width>\r
+             <height>31</height>\r
+            </rect>\r
+           </property>\r
+           <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,1,1,1,1">\r
+            <property name="spacing">\r
+             <number>10</number>\r
+            </property>\r
+            <item>\r
+             <widget class="QPushButton" name="pbtn_at_stackinfo">\r
+              <property name="text">\r
+               <string>StackInfo</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item>\r
+             <widget class="QPushButton" name="pushButton_2">\r
+              <property name="text">\r
+               <string>待开发</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item>\r
+             <widget class="QPushButton" name="pushButton_7">\r
+              <property name="text">\r
+               <string>待开发</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item>\r
+             <widget class="QPushButton" name="pushButton_6">\r
+              <property name="text">\r
+               <string>待开发</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item>\r
+             <widget class="QPushButton" name="pushButton_9">\r
+              <property name="text">\r
+               <string>待开发</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+           </layout>\r
+          </widget>\r
+          <widget class="QWidget" name="layoutWidget">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>20</x>\r
+             <y>90</y>\r
+             <width>371</width>\r
+             <height>30</height>\r
+            </rect>\r
+           </property>\r
+           <layout class="QGridLayout" name="gridLayout_3">\r
+            <item row="0" column="0">\r
+             <widget class="QLineEdit" name="ledit_at_fsrm"/>\r
+            </item>\r
+            <item row="0" column="1">\r
+             <widget class="QPushButton" name="pbtn_at_fsrm">\r
+              <property name="text">\r
+               <string>FSRM</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+           </layout>\r
+          </widget>\r
+          <widget class="QWidget" name="layoutWidget">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>20</x>\r
+             <y>150</y>\r
+             <width>731</width>\r
+             <height>25</height>\r
+            </rect>\r
+           </property>\r
+           <layout class="QHBoxLayout" name="horizontalLayout_4" stretch="2,0,1,1,6">\r
+            <item>\r
+             <widget class="QPushButton" name="pbtn_at_custom_send">\r
+              <property name="text">\r
+               <string>发送</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item>\r
+             <spacer name="horizontalSpacer_4">\r
+              <property name="orientation">\r
+               <enum>Qt::Horizontal</enum>\r
+              </property>\r
+              <property name="sizeType">\r
+               <enum>QSizePolicy::Minimum</enum>\r
+              </property>\r
+              <property name="sizeHint" stdset="0">\r
+               <size>\r
+                <width>30</width>\r
+                <height>20</height>\r
+               </size>\r
+              </property>\r
+             </spacer>\r
+            </item>\r
+            <item>\r
+             <widget class="QLineEdit" name="ledit_at_custom_moduleId">\r
+              <property name="font">\r
+               <font>\r
+                <family>黑体</family>\r
+                <pointsize>8</pointsize>\r
+                <weight>50</weight>\r
+                <bold>false</bold>\r
+               </font>\r
+              </property>\r
+              <property name="placeholderText">\r
+               <string>module id</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item>\r
+             <widget class="QLineEdit" name="ledit_at_custom_CmdId">\r
+              <property name="font">\r
+               <font>\r
+                <family>黑体</family>\r
+                <pointsize>8</pointsize>\r
+                <weight>50</weight>\r
+                <bold>false</bold>\r
+               </font>\r
+              </property>\r
+              <property name="placeholderText">\r
+               <string>cmd id</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item>\r
+             <widget class="QLineEdit" name="ledit_at_custom_Payload">\r
+              <property name="placeholderText">\r
+               <string>payload</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+           </layout>\r
+          </widget>\r
+         </widget>\r
+        </widget>\r
+        <widget class="QWidget" name="tab_at_cmd_media">\r
+         <attribute name="title">\r
+          <string>MEDIA</string>\r
+         </attribute>\r
+         <widget class="QGroupBox" name="groupBox_5">\r
+          <property name="geometry">\r
+           <rect>\r
+            <x>20</x>\r
+            <y>10</y>\r
+            <width>821</width>\r
+            <height>161</height>\r
+           </rect>\r
+          </property>\r
+          <property name="title">\r
+           <string>Media</string>\r
+          </property>\r
+          <widget class="QWidget" name="layoutWidget">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>20</x>\r
+             <y>30</y>\r
+             <width>591</width>\r
+             <height>32</height>\r
+            </rect>\r
+           </property>\r
+           <layout class="QGridLayout" name="gridLayout_2" columnstretch="4,1,1">\r
+            <property name="leftMargin">\r
+             <number>3</number>\r
+            </property>\r
+            <property name="topMargin">\r
+             <number>3</number>\r
+            </property>\r
+            <property name="rightMargin">\r
+             <number>3</number>\r
+            </property>\r
+            <property name="bottomMargin">\r
+             <number>3</number>\r
+            </property>\r
+            <item row="0" column="0">\r
+             <widget class="QLineEdit" name="ledit_at_mediamusicplay"/>\r
+            </item>\r
+            <item row="0" column="1">\r
+             <widget class="QPushButton" name="pbtn_at_mediamusicplay">\r
+              <property name="text">\r
+               <string>Music Play</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="2">\r
+             <widget class="QPushButton" name="pbtn_at_mediamusicstop">\r
+              <property name="text">\r
+               <string>Music Stop</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+           </layout>\r
+          </widget>\r
+          <widget class="QWidget" name="layoutWidget">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>20</x>\r
+             <y>80</y>\r
+             <width>591</width>\r
+             <height>32</height>\r
+            </rect>\r
+           </property>\r
+           <layout class="QGridLayout" name="gridLayout_4" columnstretch="5,1">\r
+            <property name="leftMargin">\r
+             <number>3</number>\r
+            </property>\r
+            <property name="topMargin">\r
+             <number>3</number>\r
+            </property>\r
+            <property name="rightMargin">\r
+             <number>3</number>\r
+            </property>\r
+            <property name="bottomMargin">\r
+             <number>3</number>\r
+            </property>\r
+            <item row="0" column="0">\r
+             <widget class="QLineEdit" name="ledit_at_mediaaudiorecord"/>\r
+            </item>\r
+            <item row="0" column="1">\r
+             <widget class="QPushButton" name="pbtn_at_mediaaudiorecord">\r
+              <property name="text">\r
+               <string>Audio Record</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+           </layout>\r
+          </widget>\r
+         </widget>\r
+        </widget>\r
+        <widget class="QWidget" name="tab_at_cmd_bt">\r
+         <attribute name="title">\r
+          <string>BT</string>\r
+         </attribute>\r
+         <widget class="QGroupBox" name="groupBox_7">\r
+          <property name="geometry">\r
+           <rect>\r
+            <x>20</x>\r
+            <y>10</y>\r
+            <width>821</width>\r
+            <height>111</height>\r
+           </rect>\r
+          </property>\r
+          <property name="title">\r
+           <string>耦合测试设置</string>\r
+          </property>\r
+          <widget class="QWidget" name="layoutWidget">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>20</x>\r
+             <y>40</y>\r
+             <width>671</width>\r
+             <height>25</height>\r
+            </rect>\r
+           </property>\r
+           <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="1,2,3,1,2">\r
+            <item>\r
+             <widget class="QPushButton" name="pbtn_delay_time">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string>延时时间</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item>\r
+             <widget class="QLineEdit" name="ledit_delay_ms">\r
+              <property name="text">\r
+               <string/>\r
+              </property>\r
+              <property name="alignment">\r
+               <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>\r
+              </property>\r
+              <property name="placeholderText">\r
+               <string>ms</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item>\r
+             <spacer name="horizontalSpacer">\r
+              <property name="orientation">\r
+               <enum>Qt::Horizontal</enum>\r
+              </property>\r
+              <property name="sizeHint" stdset="0">\r
+               <size>\r
+                <width>40</width>\r
+                <height>20</height>\r
+               </size>\r
+              </property>\r
+             </spacer>\r
+            </item>\r
+            <item>\r
+             <widget class="QPushButton" name="pbtn_donglemac">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string>DongleMAC</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item>\r
+             <widget class="QLineEdit" name="ledit_dongle_mac">\r
+              <property name="text">\r
+               <string/>\r
+              </property>\r
+              <property name="alignment">\r
+               <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+           </layout>\r
+          </widget>\r
+         </widget>\r
+        </widget>\r
+        <widget class="QWidget" name="tab_at_cmd_rftest">\r
+         <attribute name="title">\r
+          <string>耦合测试</string>\r
+         </attribute>\r
+         <widget class="QGroupBox" name="groupBox_13">\r
+          <property name="geometry">\r
+           <rect>\r
+            <x>20</x>\r
+            <y>10</y>\r
+            <width>831</width>\r
+            <height>121</height>\r
+           </rect>\r
+          </property>\r
+          <property name="title">\r
+           <string>BR EDR</string>\r
+          </property>\r
+          <widget class="QWidget" name="layoutWidget">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>20</x>\r
+             <y>20</y>\r
+             <width>761</width>\r
+             <height>81</height>\r
+            </rect>\r
+           </property>\r
+           <layout class="QGridLayout" name="gridLayout_5" columnstretch="2,1,4,2,4,2">\r
+            <item row="0" column="3">\r
+             <widget class="QComboBox" name="cbox_br_tx_PacketType_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="contextMenuPolicy">\r
+               <enum>Qt::DefaultContextMenu</enum>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>DH1</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>DH3</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>DH5</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>2-DH1</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>2-DH3</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>2-DH5</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>3-DH1</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>3-DH3</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>3-DH5</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="1" column="4">\r
+             <widget class="MyLineEdit" name="ledit_br_rx_PayloadLen_complete">\r
+              <property name="placeholderText">\r
+               <string>Length(0-27)</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="1" column="1">\r
+             <widget class="QComboBox" name="cbox_br_rx_on_or_off_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>ON</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="1" column="5">\r
+             <widget class="QComboBox" name="cbox_br_rx_pattern_type_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>10101010</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>PRBS9</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>11110000</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="1" column="0">\r
+             <widget class="QPushButton" name="pbtn_br_rx_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string>BR RX</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="1">\r
+             <widget class="QComboBox" name="cbox_br_tx_on_or_off_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="minimumContentsLength">\r
+               <number>0</number>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>ON</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="0">\r
+             <widget class="QPushButton" name="pbtn_br_tx_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string>BR TX</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="2">\r
+             <widget class="MyLineEdit" name="ledit_br_tx_channel_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string/>\r
+              </property>\r
+              <property name="frame">\r
+               <bool>true</bool>\r
+              </property>\r
+              <property name="echoMode">\r
+               <enum>QLineEdit::Normal</enum>\r
+              </property>\r
+              <property name="placeholderText">\r
+               <string>Channel(0-78)</string>\r
+              </property>\r
+              <property name="cursorMoveStyle">\r
+               <enum>Qt::LogicalMoveStyle</enum>\r
+              </property>\r
+              <property name="clearButtonEnabled">\r
+               <bool>false</bool>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="1" column="2">\r
+             <widget class="MyLineEdit" name="ledit_br_rx_channel_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string/>\r
+              </property>\r
+              <property name="placeholderText">\r
+               <string>Channel(0-78)</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="1" column="3">\r
+             <widget class="QComboBox" name="cbox_br_rx_PacketType_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="contextMenuPolicy">\r
+               <enum>Qt::DefaultContextMenu</enum>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>DH1</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>DH3</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>DH5</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>2-DH1</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>2-DH3</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>2-DH5</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>3-DH1</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>3-DH3</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>3-DH5</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="5">\r
+             <widget class="QComboBox" name="cbox_br_tx_pattern_type_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>10101010</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>PRBS9</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>11110000</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="4">\r
+             <widget class="MyLineEdit" name="ledit_br_tx_PayloadLen_complete">\r
+              <property name="placeholderText">\r
+               <string>Length(0-27)</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+           </layout>\r
+          </widget>\r
+         </widget>\r
+         <widget class="QGroupBox" name="groupBox_14">\r
+          <property name="geometry">\r
+           <rect>\r
+            <x>20</x>\r
+            <y>140</y>\r
+            <width>831</width>\r
+            <height>111</height>\r
+           </rect>\r
+          </property>\r
+          <property name="title">\r
+           <string>BLE</string>\r
+          </property>\r
+          <widget class="QWidget" name="layoutWidget_8">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>20</x>\r
+             <y>70</y>\r
+             <width>461</width>\r
+             <height>26</height>\r
+            </rect>\r
+           </property>\r
+           <layout class="QGridLayout" name="gridLayout_13" columnstretch="2,1,4,2">\r
+            <property name="rightMargin">\r
+             <number>3</number>\r
+            </property>\r
+            <item row="0" column="1">\r
+             <widget class="QComboBox" name="cbox_ble_rx_on_or_off_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>ON</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="2">\r
+             <widget class="MyLineEdit" name="ledit_ble_rx_channel_complete">\r
+              <property name="placeholderText">\r
+               <string>Channel(0-39)</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="3">\r
+             <widget class="QComboBox" name="cbox_ble_rx_PacketType_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="contextMenuPolicy">\r
+               <enum>Qt::DefaultContextMenu</enum>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>BLE 1M</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>BLE 2M</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="0">\r
+             <widget class="QPushButton" name="pbtn_ble_rx_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string>BLE RX</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+           </layout>\r
+          </widget>\r
+          <widget class="QWidget" name="layoutWidget">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>20</x>\r
+             <y>21</y>\r
+             <width>761</width>\r
+             <height>25</height>\r
+            </rect>\r
+           </property>\r
+           <layout class="QGridLayout" name="gridLayout_6" columnstretch="2,1,4,2,4,2">\r
+            <item row="0" column="0">\r
+             <widget class="QPushButton" name="pbtn_ble_tx_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string>BLE TX</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="1">\r
+             <widget class="QComboBox" name="cbox_ble_tx_on_or_off_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>ON</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="2">\r
+             <widget class="MyLineEdit" name="ledit_ble_tx_channel_complete">\r
+              <property name="placeholderText">\r
+               <string>Channel(0-39)</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="3">\r
+             <widget class="QComboBox" name="cbox_ble_tx_pattern_type_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>10101010</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>PRBS9</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>11110000</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="4">\r
+             <widget class="MyLineEdit" name="ledit_ble_tx_PayloadLen_complete">\r
+              <property name="placeholderText">\r
+               <string>Length(0-255)</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="5">\r
+             <widget class="QComboBox" name="cbox_ble_tx_PacketType_complete">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="contextMenuPolicy">\r
+               <enum>Qt::DefaultContextMenu</enum>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>BLE 1M</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>BLE 2M</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+           </layout>\r
+          </widget>\r
+          <widget class="QWidget" name="layoutWidget">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>560</x>\r
+             <y>70</y>\r
+             <width>221</width>\r
+             <height>25</height>\r
+            </rect>\r
+           </property>\r
+           <layout class="QHBoxLayout" name="horizontalLayout_3" stretch="1,2">\r
+            <item>\r
+             <widget class="QPushButton" name="pbtn_get_rx_count">\r
+              <property name="text">\r
+               <string>获取RX Count</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item>\r
+             <widget class="QLineEdit" name="ledit_display_rx_count">\r
+              <property name="text">\r
+               <string/>\r
+              </property>\r
+              <property name="alignment">\r
+               <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>\r
+              </property>\r
+              <property name="placeholderText">\r
+               <string/>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+           </layout>\r
+          </widget>\r
+         </widget>\r
+        </widget>\r
+       </widget>\r
+      </widget>\r
+     </widget>\r
+    </widget>\r
+    <widget class="QWidget" name="page_board">\r
+     <widget class="QTabWidget" name="tbw_stage_board">\r
+      <property name="enabled">\r
+       <bool>false</bool>\r
+      </property>\r
+      <property name="geometry">\r
+       <rect>\r
+        <x>0</x>\r
+        <y>0</y>\r
+        <width>911</width>\r
+        <height>291</height>\r
+       </rect>\r
+      </property>\r
+      <property name="font">\r
+       <font>\r
+        <family>黑体</family>\r
+        <pointsize>12</pointsize>\r
+        <weight>50</weight>\r
+        <bold>false</bold>\r
+       </font>\r
+      </property>\r
+      <property name="currentIndex">\r
+       <number>2</number>\r
+      </property>\r
+      <widget class="QWidget" name="tab_board_debug">\r
+       <attribute name="title">\r
+        <string>Debug</string>\r
+       </attribute>\r
+       <widget class="QTextEdit" name="tedit_input_data_board">\r
+        <property name="geometry">\r
+         <rect>\r
+          <x>0</x>\r
+          <y>0</y>\r
+          <width>771</width>\r
+          <height>261</height>\r
+         </rect>\r
+        </property>\r
+       </widget>\r
+       <widget class="QPushButton" name="pbtn_send_data_board">\r
+        <property name="geometry">\r
+         <rect>\r
+          <x>790</x>\r
+          <y>30</y>\r
+          <width>75</width>\r
+          <height>23</height>\r
+         </rect>\r
+        </property>\r
+        <property name="font">\r
+         <font>\r
+          <family>黑体</family>\r
+          <pointsize>10</pointsize>\r
+          <weight>50</weight>\r
+          <bold>false</bold>\r
+         </font>\r
+        </property>\r
+        <property name="text">\r
+         <string>发送</string>\r
+        </property>\r
+       </widget>\r
+       <widget class="QPushButton" name="pbtn_board">\r
+        <property name="geometry">\r
+         <rect>\r
+          <x>790</x>\r
+          <y>83</y>\r
+          <width>75</width>\r
+          <height>23</height>\r
+         </rect>\r
+        </property>\r
+        <property name="font">\r
+         <font>\r
+          <family>黑体</family>\r
+          <pointsize>10</pointsize>\r
+          <weight>50</weight>\r
+          <bold>false</bold>\r
+         </font>\r
+        </property>\r
+        <property name="text">\r
+         <string>清除发送</string>\r
+        </property>\r
+       </widget>\r
+       <widget class="QCheckBox" name="ckbox_word_wrap_board">\r
+        <property name="geometry">\r
+         <rect>\r
+          <x>789</x>\r
+          <y>157</y>\r
+          <width>88</width>\r
+          <height>16</height>\r
+         </rect>\r
+        </property>\r
+        <property name="font">\r
+         <font>\r
+          <family>黑体</family>\r
+          <pointsize>10</pointsize>\r
+          <weight>50</weight>\r
+          <bold>false</bold>\r
+         </font>\r
+        </property>\r
+        <property name="text">\r
+         <string>加回车换行</string>\r
+        </property>\r
+        <property name="tristate">\r
+         <bool>false</bool>\r
+        </property>\r
+       </widget>\r
+      </widget>\r
+      <widget class="QWidget" name="tab_board_mcu">\r
+       <attribute name="title">\r
+        <string>MCU</string>\r
+       </attribute>\r
+      </widget>\r
+      <widget class="QWidget" name="tab_board_bt">\r
+       <attribute name="title">\r
+        <string>BT</string>\r
+       </attribute>\r
+       <widget class="QTabWidget" name="tabWidget_BT">\r
+        <property name="geometry">\r
+         <rect>\r
+          <x>0</x>\r
+          <y>0</y>\r
+          <width>911</width>\r
+          <height>281</height>\r
+         </rect>\r
+        </property>\r
+        <property name="font">\r
+         <font>\r
+          <family>黑体</family>\r
+          <pointsize>10</pointsize>\r
+          <weight>50</weight>\r
+          <bold>false</bold>\r
+         </font>\r
+        </property>\r
+        <property name="tabPosition">\r
+         <enum>QTabWidget::West</enum>\r
+        </property>\r
+        <property name="tabShape">\r
+         <enum>QTabWidget::Triangular</enum>\r
+        </property>\r
+        <property name="currentIndex">\r
+         <number>2</number>\r
+        </property>\r
+        <property name="elideMode">\r
+         <enum>Qt::ElideNone</enum>\r
+        </property>\r
+        <property name="tabBarAutoHide">\r
+         <bool>false</bool>\r
+        </property>\r
+        <widget class="QWidget" name="tab_bt_rftest">\r
+         <attribute name="title">\r
+          <string>非信令测试</string>\r
+         </attribute>\r
+         <widget class="QGroupBox" name="groupBox_11">\r
+          <property name="geometry">\r
+           <rect>\r
+            <x>20</x>\r
+            <y>140</y>\r
+            <width>831</width>\r
+            <height>111</height>\r
+           </rect>\r
+          </property>\r
+          <property name="title">\r
+           <string>BLE</string>\r
+          </property>\r
+          <widget class="QWidget" name="layoutWidget_2">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>20</x>\r
+             <y>20</y>\r
+             <width>761</width>\r
+             <height>25</height>\r
+            </rect>\r
+           </property>\r
+           <layout class="QGridLayout" name="gridLayout_7" columnstretch="2,1,4,2,4,2">\r
+            <item row="0" column="0">\r
+             <widget class="QPushButton" name="pbtn_ble_tx_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string>BLE TX</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="1">\r
+             <widget class="QComboBox" name="cbox_ble_tx_on_or_off_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>ON</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>OFF</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="2">\r
+             <widget class="MyLineEdit" name="ledit_ble_tx_channel_board">\r
+              <property name="whatsThis">\r
+               <string/>\r
+              </property>\r
+              <property name="placeholderText">\r
+               <string>Channel(0-39)</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="3">\r
+             <widget class="QComboBox" name="cbox_ble_tx_pattern_type_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>10101010</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>PRBS9</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>11110000</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="4">\r
+             <widget class="MyLineEdit" name="ledit_ble_tx_PayloadLen_board">\r
+              <property name="placeholderText">\r
+               <string>Length(0-255)</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="5">\r
+             <widget class="QComboBox" name="cbox_ble_tx_PacketType_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="contextMenuPolicy">\r
+               <enum>Qt::DefaultContextMenu</enum>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>BLE 1M</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>BLE 2M</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+           </layout>\r
+          </widget>\r
+          <widget class="QWidget" name="layoutWidget_9">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>20</x>\r
+             <y>69</y>\r
+             <width>461</width>\r
+             <height>26</height>\r
+            </rect>\r
+           </property>\r
+           <layout class="QGridLayout" name="gridLayout_14" columnstretch="2,1,4,2">\r
+            <property name="rightMargin">\r
+             <number>3</number>\r
+            </property>\r
+            <item row="0" column="1">\r
+             <widget class="QComboBox" name="cbox_ble_rx_on_or_off_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>ON</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>OFF</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="2">\r
+             <widget class="MyLineEdit" name="ledit_ble_rx_channel_board">\r
+              <property name="placeholderText">\r
+               <string>Channel(0-39)</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="3">\r
+             <widget class="QComboBox" name="cbox_ble_rx_PacketType_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="contextMenuPolicy">\r
+               <enum>Qt::DefaultContextMenu</enum>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>BLE 1M</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>BLE 2M</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="0">\r
+             <widget class="QPushButton" name="pbtn_ble_rx_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string>BLE RX</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+           </layout>\r
+          </widget>\r
+         </widget>\r
+         <widget class="QGroupBox" name="groupBox_15">\r
+          <property name="geometry">\r
+           <rect>\r
+            <x>20</x>\r
+            <y>10</y>\r
+            <width>831</width>\r
+            <height>121</height>\r
+           </rect>\r
+          </property>\r
+          <property name="title">\r
+           <string>BR EDR</string>\r
+          </property>\r
+          <widget class="QWidget" name="layoutWidget_3">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>20</x>\r
+             <y>20</y>\r
+             <width>761</width>\r
+             <height>81</height>\r
+            </rect>\r
+           </property>\r
+           <layout class="QGridLayout" name="gridLayout_8" columnstretch="2,1,4,2,4,2">\r
+            <item row="1" column="1">\r
+             <widget class="QComboBox" name="cbox_br_rx_on_or_off_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>ON</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>OFF</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="1" column="5">\r
+             <widget class="QComboBox" name="cbox_br_rx_pattern_type_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>10101010</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>PRBS9</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>11110000</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="3">\r
+             <widget class="QComboBox" name="cbox_br_tx_PacketType_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="contextMenuPolicy">\r
+               <enum>Qt::DefaultContextMenu</enum>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>DH1</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>DH3</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>DH5</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>2-DH1</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>2-DH3</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>2-DH5</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>3-DH1</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>3-DH3</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>3-DH5</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="2">\r
+             <widget class="MyLineEdit" name="ledit_br_tx_channel_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string/>\r
+              </property>\r
+              <property name="placeholderText">\r
+               <string>Channel(0-78)</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="5">\r
+             <widget class="QComboBox" name="cbox_br_tx_pattern_type_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>10101010</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>PRBS9</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>11110000</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="1" column="0">\r
+             <widget class="QPushButton" name="pbtn_br_rx_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string>BR RX</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="4">\r
+             <widget class="MyLineEdit" name="ledit_br_tx_PayloadLen_board">\r
+              <property name="placeholderText">\r
+               <string>Length(0-27)</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="1">\r
+             <widget class="QComboBox" name="cbox_br_tx_on_or_off_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="minimumContentsLength">\r
+               <number>0</number>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>ON</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>OFF</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="1" column="4">\r
+             <widget class="MyLineEdit" name="ledit_br_rx_PayloadLen_board">\r
+              <property name="placeholderText">\r
+               <string>Length(0-27)</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="0">\r
+             <widget class="QPushButton" name="pbtn_br_tx_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string>BR TX</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="1" column="3">\r
+             <widget class="QComboBox" name="cbox_br_rx_PacketType_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="contextMenuPolicy">\r
+               <enum>Qt::DefaultContextMenu</enum>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>DH1</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>DH3</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>DH5</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>2-DH1</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>2-DH3</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>2-DH5</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>3-DH1</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>3-DH3</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>3-DH5</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="1" column="2">\r
+             <widget class="MyLineEdit" name="ledit_br_rx_channel_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string/>\r
+              </property>\r
+              <property name="placeholderText">\r
+               <string>Channel(0-78)</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+           </layout>\r
+          </widget>\r
+         </widget>\r
+        </widget>\r
+        <widget class="QWidget" name="tab_bt_duttest">\r
+         <attribute name="title">\r
+          <string>信令测试</string>\r
+         </attribute>\r
+         <widget class="QGroupBox" name="groupBox_12">\r
+          <property name="geometry">\r
+           <rect>\r
+            <x>20</x>\r
+            <y>10</y>\r
+            <width>831</width>\r
+            <height>111</height>\r
+           </rect>\r
+          </property>\r
+          <property name="title">\r
+           <string>信令</string>\r
+          </property>\r
+          <widget class="QWidget" name="layoutWidget_5">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>20</x>\r
+             <y>30</y>\r
+             <width>371</width>\r
+             <height>29</height>\r
+            </rect>\r
+           </property>\r
+           <layout class="QGridLayout" name="gridLayout_11" columnstretch="2,2,1,2">\r
+            <property name="leftMargin">\r
+             <number>3</number>\r
+            </property>\r
+            <property name="topMargin">\r
+             <number>3</number>\r
+            </property>\r
+            <property name="rightMargin">\r
+             <number>3</number>\r
+            </property>\r
+            <property name="bottomMargin">\r
+             <number>3</number>\r
+            </property>\r
+            <item row="0" column="1">\r
+             <widget class="QPushButton" name="pbtn_btdutmode_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string>BTDUTMODE</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="0">\r
+             <widget class="QLabel" name="label_7">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Preferred">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string>信令测试:</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="3">\r
+             <widget class="QComboBox" name="cbox_btdutmode_on_or_off_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>ON</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>OFF</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="2">\r
+             <spacer name="horizontalSpacer_3">\r
+              <property name="orientation">\r
+               <enum>Qt::Horizontal</enum>\r
+              </property>\r
+              <property name="sizeHint" stdset="0">\r
+               <size>\r
+                <width>30</width>\r
+                <height>20</height>\r
+               </size>\r
+              </property>\r
+             </spacer>\r
+            </item>\r
+           </layout>\r
+          </widget>\r
+         </widget>\r
+        </widget>\r
+        <widget class="QWidget" name="tab">\r
+         <attribute name="title">\r
+          <string>其他</string>\r
+         </attribute>\r
+         <widget class="QGroupBox" name="groupBox_6">\r
+          <property name="geometry">\r
+           <rect>\r
+            <x>20</x>\r
+            <y>20</y>\r
+            <width>791</width>\r
+            <height>121</height>\r
+           </rect>\r
+          </property>\r
+          <property name="title">\r
+           <string>单音测试与功率调整</string>\r
+          </property>\r
+          <widget class="QWidget" name="layoutWidget">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>30</x>\r
+             <y>40</y>\r
+             <width>731</width>\r
+             <height>25</height>\r
+            </rect>\r
+           </property>\r
+           <layout class="QGridLayout" name="gridLayout_9" columnstretch="4,1,8,8,4,1,8">\r
+            <property name="horizontalSpacing">\r
+             <number>10</number>\r
+            </property>\r
+            <item row="0" column="2">\r
+             <widget class="QLineEdit" name="ledit_btlo_channel">\r
+              <property name="placeholderText">\r
+               <string>channel(0-78)</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="4">\r
+             <widget class="QPushButton" name="pbtn_btpwr_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string>功率调整</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="0">\r
+             <widget class="QPushButton" name="pbtn_btlo_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <property name="text">\r
+               <string>单音测试</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="5">\r
+             <widget class="QComboBox" name="cbox_btpwr_on_or_off_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>ON</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>OFF</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="1">\r
+             <widget class="QComboBox" name="cbox_btlo_on_or_off_board">\r
+              <property name="sizePolicy">\r
+               <sizepolicy hsizetype="Expanding" vsizetype="Fixed">\r
+                <horstretch>0</horstretch>\r
+                <verstretch>0</verstretch>\r
+               </sizepolicy>\r
+              </property>\r
+              <item>\r
+               <property name="text">\r
+                <string>ON</string>\r
+               </property>\r
+              </item>\r
+              <item>\r
+               <property name="text">\r
+                <string>OFF</string>\r
+               </property>\r
+              </item>\r
+             </widget>\r
+            </item>\r
+            <item row="0" column="3">\r
+             <spacer name="horizontalSpacer_2">\r
+              <property name="orientation">\r
+               <enum>Qt::Horizontal</enum>\r
+              </property>\r
+              <property name="sizeHint" stdset="0">\r
+               <size>\r
+                <width>40</width>\r
+                <height>20</height>\r
+               </size>\r
+              </property>\r
+             </spacer>\r
+            </item>\r
+            <item row="0" column="6">\r
+             <widget class="QLineEdit" name="ledit_btpwr_powerchip">\r
+              <property name="placeholderText">\r
+               <string>power chip(2-14)</string>\r
+              </property>\r
+             </widget>\r
+            </item>\r
+           </layout>\r
+          </widget>\r
+         </widget>\r
+         <widget class="QGroupBox" name="groupBox_8">\r
+          <property name="geometry">\r
+           <rect>\r
+            <x>20</x>\r
+            <y>140</y>\r
+            <width>791</width>\r
+            <height>111</height>\r
+           </rect>\r
+          </property>\r
+          <property name="title">\r
+           <string>BT_UART</string>\r
+          </property>\r
+          <widget class="QPushButton" name="pushButton_3">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>30</x>\r
+             <y>40</y>\r
+             <width>75</width>\r
+             <height>23</height>\r
+            </rect>\r
+           </property>\r
+           <property name="text">\r
+            <string>唤醒</string>\r
+           </property>\r
+          </widget>\r
+          <widget class="QPushButton" name="pushButton_4">\r
+           <property name="geometry">\r
+            <rect>\r
+             <x>150</x>\r
+             <y>40</y>\r
+             <width>75</width>\r
+             <height>23</height>\r
+            </rect>\r
+           </property>\r
+           <property name="text">\r
+            <string>睡眠</string>\r
+           </property>\r
+          </widget>\r
+         </widget>\r
+        </widget>\r
+       </widget>\r
+      </widget>\r
+     </widget>\r
+    </widget>\r
+   </widget>\r
+   <widget class="QWidget" name="layoutWidget">\r
+    <property name="geometry">\r
+     <rect>\r
+      <x>650</x>\r
+      <y>0</y>\r
+      <width>224</width>\r
+      <height>389</height>\r
+     </rect>\r
+    </property>\r
+    <layout class="QGridLayout" name="gridLayout">\r
+     <property name="leftMargin">\r
+      <number>5</number>\r
+     </property>\r
+     <property name="topMargin">\r
+      <number>20</number>\r
+     </property>\r
+     <property name="rightMargin">\r
+      <number>5</number>\r
+     </property>\r
+     <property name="bottomMargin">\r
+      <number>20</number>\r
+     </property>\r
+     <property name="spacing">\r
+      <number>20</number>\r
+     </property>\r
+     <item row="1" column="0" colspan="3">\r
+      <widget class="QComboBox" name="cbox_uart_baud_select">\r
+       <property name="sizePolicy">\r
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">\r
+         <horstretch>0</horstretch>\r
+         <verstretch>0</verstretch>\r
+        </sizepolicy>\r
+       </property>\r
+       <property name="font">\r
+        <font>\r
+         <family>黑体</family>\r
+         <pointsize>9</pointsize>\r
+         <weight>50</weight>\r
+         <bold>false</bold>\r
+        </font>\r
+       </property>\r
+       <property name="cursor">\r
+        <cursorShape>ArrowCursor</cursorShape>\r
+       </property>\r
+       <property name="editable">\r
+        <bool>false</bool>\r
+       </property>\r
+       <property name="currentText">\r
+        <string>115200</string>\r
+       </property>\r
+       <property name="currentIndex">\r
+        <number>6</number>\r
+       </property>\r
+       <property name="duplicatesEnabled">\r
+        <bool>true</bool>\r
+       </property>\r
+       <item>\r
+        <property name="text">\r
+         <string>4800</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>9600</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>14400</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>19200</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>38400</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>57600</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>115200</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>128000</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>230400</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>256000</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>460800</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>500000</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>512000</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>600000</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>750000</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>921600</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>1000000</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>1500000</string>\r
+        </property>\r
+       </item>\r
+       <item>\r
+        <property name="text">\r
+         <string>2000000</string>\r
+        </property>\r
+       </item>\r
+      </widget>\r
+     </item>\r
+     <item row="3" column="0" colspan="3">\r
+      <widget class="QLineEdit" name="ledit_spp_addr">\r
+       <property name="sizePolicy">\r
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">\r
+         <horstretch>0</horstretch>\r
+         <verstretch>0</verstretch>\r
+        </sizepolicy>\r
+       </property>\r
+       <property name="font">\r
+        <font>\r
+         <family>黑体</family>\r
+         <pointsize>9</pointsize>\r
+         <weight>50</weight>\r
+         <bold>false</bold>\r
+        </font>\r
+       </property>\r
+       <property name="whatsThis">\r
+        <string/>\r
+       </property>\r
+       <property name="placeholderText">\r
+        <string>         MAC地址</string>\r
+       </property>\r
+      </widget>\r
+     </item>\r
+     <item row="2" column="0">\r
+      <widget class="QLabel" name="label_3">\r
+       <property name="sizePolicy">\r
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">\r
+         <horstretch>0</horstretch>\r
+         <verstretch>0</verstretch>\r
+        </sizepolicy>\r
+       </property>\r
+       <property name="text">\r
+        <string>串口操作</string>\r
+       </property>\r
+      </widget>\r
+     </item>\r
+     <item row="6" column="0">\r
+      <widget class="QCheckBox" name="ckbox_rts">\r
+       <property name="sizePolicy">\r
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">\r
+         <horstretch>0</horstretch>\r
+         <verstretch>0</verstretch>\r
+        </sizepolicy>\r
+       </property>\r
+       <property name="font">\r
+        <font>\r
+         <family>黑体</family>\r
+         <pointsize>9</pointsize>\r
+         <weight>50</weight>\r
+         <bold>false</bold>\r
+        </font>\r
+       </property>\r
+       <property name="text">\r
+        <string>RTS</string>\r
+       </property>\r
+      </widget>\r
+     </item>\r
+     <item row="5" column="0">\r
+      <widget class="QPushButton" name="pushButton">\r
+       <property name="sizePolicy">\r
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">\r
+         <horstretch>0</horstretch>\r
+         <verstretch>0</verstretch>\r
+        </sizepolicy>\r
+       </property>\r
+       <property name="font">\r
+        <font>\r
+         <family>黑体</family>\r
+         <pointsize>9</pointsize>\r
+         <weight>50</weight>\r
+         <bold>false</bold>\r
+        </font>\r
+       </property>\r
+       <property name="text">\r
+        <string>保存窗口</string>\r
+       </property>\r
+      </widget>\r
+     </item>\r
+     <item row="6" column="1">\r
+      <widget class="QCheckBox" name="ckbox_dtr">\r
+       <property name="sizePolicy">\r
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">\r
+         <horstretch>0</horstretch>\r
+         <verstretch>0</verstretch>\r
+        </sizepolicy>\r
+       </property>\r
+       <property name="font">\r
+        <font>\r
+         <family>黑体</family>\r
+         <pointsize>9</pointsize>\r
+         <weight>50</weight>\r
+         <bold>false</bold>\r
+        </font>\r
+       </property>\r
+       <property name="text">\r
+        <string>DTR</string>\r
+       </property>\r
+      </widget>\r
+     </item>\r
+     <item row="7" column="0">\r
+      <widget class="QCheckBox" name="ckbox_Hex_Display">\r
+       <property name="sizePolicy">\r
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">\r
+         <horstretch>0</horstretch>\r
+         <verstretch>0</verstretch>\r
+        </sizepolicy>\r
+       </property>\r
+       <property name="font">\r
+        <font>\r
+         <family>黑体</family>\r
+         <pointsize>9</pointsize>\r
+         <weight>50</weight>\r
+         <bold>false</bold>\r
+        </font>\r
+       </property>\r
+       <property name="text">\r
+        <string>16进制显示</string>\r
+       </property>\r
+      </widget>\r
+     </item>\r
+     <item row="2" column="1" colspan="2">\r
+      <widget class="QPushButton" name="pbtn_open_uart">\r
+       <property name="sizePolicy">\r
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">\r
+         <horstretch>0</horstretch>\r
+         <verstretch>0</verstretch>\r
+        </sizepolicy>\r
+       </property>\r
+       <property name="font">\r
+        <font>\r
+         <family>黑体</family>\r
+         <pointsize>9</pointsize>\r
+         <weight>50</weight>\r
+         <bold>false</bold>\r
+        </font>\r
+       </property>\r
+       <property name="text">\r
+        <string>打开串口</string>\r
+       </property>\r
+       <property name="checkable">\r
+        <bool>true</bool>\r
+       </property>\r
+       <property name="autoDefault">\r
+        <bool>false</bool>\r
+       </property>\r
+       <property name="default">\r
+        <bool>false</bool>\r
+       </property>\r
+       <property name="flat">\r
+        <bool>false</bool>\r
+       </property>\r
+      </widget>\r
+     </item>\r
+     <item row="4" column="0" colspan="2">\r
+      <widget class="QPushButton" name="pbtn_spp_connect">\r
+       <property name="enabled">\r
+        <bool>false</bool>\r
+       </property>\r
+       <property name="sizePolicy">\r
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">\r
+         <horstretch>0</horstretch>\r
+         <verstretch>0</verstretch>\r
+        </sizepolicy>\r
+       </property>\r
+       <property name="font">\r
+        <font>\r
+         <family>黑体</family>\r
+         <pointsize>9</pointsize>\r
+         <weight>50</weight>\r
+         <bold>false</bold>\r
+        </font>\r
+       </property>\r
+       <property name="text">\r
+        <string>连接设备</string>\r
+       </property>\r
+       <property name="checkable">\r
+        <bool>false</bool>\r
+       </property>\r
+      </widget>\r
+     </item>\r
+     <item row="7" column="1" colspan="2">\r
+      <widget class="QCheckBox" name="ckbox_hex_send">\r
+       <property name="sizePolicy">\r
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">\r
+         <horstretch>0</horstretch>\r
+         <verstretch>0</verstretch>\r
+        </sizepolicy>\r
+       </property>\r
+       <property name="font">\r
+        <font>\r
+         <family>黑体</family>\r
+         <pointsize>9</pointsize>\r
+         <weight>50</weight>\r
+         <bold>false</bold>\r
+        </font>\r
+       </property>\r
+       <property name="text">\r
+        <string>16进制发送</string>\r
+       </property>\r
+      </widget>\r
+     </item>\r
+     <item row="0" column="0" colspan="3">\r
+      <widget class="MyComboBox" name="cbox_uart_com_select">\r
+       <property name="sizePolicy">\r
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">\r
+         <horstretch>0</horstretch>\r
+         <verstretch>0</verstretch>\r
+        </sizepolicy>\r
+       </property>\r
+       <property name="font">\r
+        <font>\r
+         <family>黑体</family>\r
+         <pointsize>9</pointsize>\r
+         <weight>50</weight>\r
+         <bold>false</bold>\r
+        </font>\r
+       </property>\r
+       <item>\r
+        <property name="text">\r
+         <string>COM1</string>\r
+        </property>\r
+       </item>\r
+      </widget>\r
+     </item>\r
+     <item row="5" column="1" colspan="2">\r
+      <widget class="QPushButton" name="pbtn_clear_display">\r
+       <property name="sizePolicy">\r
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">\r
+         <horstretch>0</horstretch>\r
+         <verstretch>0</verstretch>\r
+        </sizepolicy>\r
+       </property>\r
+       <property name="font">\r
+        <font>\r
+         <family>黑体</family>\r
+         <pointsize>9</pointsize>\r
+         <weight>50</weight>\r
+         <bold>false</bold>\r
+        </font>\r
+       </property>\r
+       <property name="text">\r
+        <string>清除接收</string>\r
+       </property>\r
+      </widget>\r
+     </item>\r
+     <item row="4" column="2">\r
+      <widget class="QPushButton" name="connected_flag">\r
+       <property name="maximumSize">\r
+        <size>\r
+         <width>20</width>\r
+         <height>20</height>\r
+        </size>\r
+       </property>\r
+       <property name="styleSheet">\r
+        <string notr="true">QPushButton{background-color: rgb(255, 0, 0);}</string>\r
+       </property>\r
+       <property name="text">\r
+        <string/>\r
+       </property>\r
+      </widget>\r
+     </item>\r
+    </layout>\r
+   </widget>\r
+  </widget>\r
+  <widget class="QMenuBar" name="menubar">\r
+   <property name="geometry">\r
+    <rect>\r
+     <x>0</x>\r
+     <y>0</y>\r
+     <width>890</width>\r
+     <height>22</height>\r
+    </rect>\r
+   </property>\r
+   <property name="font">\r
+    <font>\r
+     <family>黑体</family>\r
+     <pointsize>12</pointsize>\r
+     <weight>50</weight>\r
+     <bold>false</bold>\r
+    </font>\r
+   </property>\r
+   <widget class="QMenu" name="menu">\r
+    <property name="font">\r
+     <font>\r
+      <pointsize>12</pointsize>\r
+     </font>\r
+    </property>\r
+    <property name="title">\r
+     <string>菜单</string>\r
+    </property>\r
+    <addaction name="action_complete"/>\r
+    <addaction name="separator"/>\r
+    <addaction name="action_board"/>\r
+   </widget>\r
+   <addaction name="menu"/>\r
+  </widget>\r
+  <widget class="QStatusBar" name="statusbar">\r
+   <property name="enabled">\r
+    <bool>true</bool>\r
+   </property>\r
+   <property name="sizeGripEnabled">\r
+    <bool>true</bool>\r
+   </property>\r
+  </widget>\r
+  <action name="action_complete">\r
+   <property name="checkable">\r
+    <bool>true</bool>\r
+   </property>\r
+   <property name="checked">\r
+    <bool>true</bool>\r
+   </property>\r
+   <property name="text">\r
+    <string>整机</string>\r
+   </property>\r
+   <property name="font">\r
+    <font>\r
+     <family>黑体</family>\r
+     <pointsize>12</pointsize>\r
+    </font>\r
+   </property>\r
+  </action>\r
+  <action name="action_board">\r
+   <property name="checkable">\r
+    <bool>true</bool>\r
+   </property>\r
+   <property name="checked">\r
+    <bool>false</bool>\r
+   </property>\r
+   <property name="text">\r
+    <string>单板</string>\r
+   </property>\r
+   <property name="font">\r
+    <font>\r
+     <pointsize>12</pointsize>\r
+    </font>\r
+   </property>\r
+  </action>\r
+  <action name="actiondongle">\r
+   <property name="text">\r
+    <string>dongle调试</string>\r
+   </property>\r
+   <property name="font">\r
+    <font>\r
+     <pointsize>12</pointsize>\r
+    </font>\r
+   </property>\r
+  </action>\r
+ </widget>\r
+ <customwidgets>\r
+  <customwidget>\r
+   <class>MyComboBox</class>\r
+   <extends>QComboBox</extends>\r
+   <header location="global">custom.h</header>\r
+   <slots>\r
+    <signal>mouse_clicked(bool)</signal>\r
+   </slots>\r
+  </customwidget>\r
+  <customwidget>\r
+   <class>MyLineEdit</class>\r
+   <extends>QLineEdit</extends>\r
+   <header location="global">custom.h</header>\r
+  </customwidget>\r
+ </customwidgets>\r
+ <resources>\r
+  <include location="Demoqrc.qrc"/>\r
+ </resources>\r
+ <connections>\r
+  <connection>\r
+   <sender>pbtn_open_uart</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>uart_process()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>849</x>\r
+     <y>154</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>838</x>\r
+     <y>261</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_clear_display</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>txtb_dispaly</receiver>\r
+   <slot>clear()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>849</x>\r
+     <y>293</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>614</x>\r
+     <y>380</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>ckbox_dtr</sender>\r
+   <signal>stateChanged(int)</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>uart_check_dtr_rts()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>815</x>\r
+     <y>334</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>882</x>\r
+     <y>371</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>ckbox_rts</sender>\r
+   <signal>stateChanged(int)</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>uart_check_dtr_rts()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>711</x>\r
+     <y>334</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>758</x>\r
+     <y>373</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>cbox_uart_com_select</sender>\r
+   <signal>mouse_clicked(bool)</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>uart_com_select()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>719</x>\r
+     <y>61</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>888</x>\r
+     <y>100</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_spp_connect</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>spp_connect()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>811</x>\r
+     <y>245</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>888</x>\r
+     <y>267</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_toboard_stop</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>transmit_toboard_stop()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>810</x>\r
+     <y>559</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>739</x>\r
+     <y>294</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_toboard_Upload</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>transmit_toboard_upload()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>715</x>\r
+     <y>559</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>665</x>\r
+     <y>296</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_fromboard_getfilelist</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>transmit_fromboard_getfilelist()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>670</x>\r
+     <y>609</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>654</x>\r
+     <y>408</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_send_data</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>uart_send_data()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>844</x>\r
+     <y>469</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>865</x>\r
+     <y>411</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_fromboard_download</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>transmit_fromboard_download()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>830</x>\r
+     <y>489</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>849</x>\r
+     <y>420</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_fromboard_selectfilepath</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>transmit_fromboard_selectfilepath()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>665</x>\r
+     <y>489</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>673</x>\r
+     <y>417</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_clear_senddata</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>tedit_input_data</receiver>\r
+   <slot>clear()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>866</x>\r
+     <y>522</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>700</x>\r
+     <y>591</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_fromboard_stop</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>transmit_fromboard_stop()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>855</x>\r
+     <y>605</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>676</x>\r
+     <y>315</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_fromboard_delete</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>transmit_fromboard_delete()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>855</x>\r
+     <y>547</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>671</x>\r
+     <y>351</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>ledit_formboad_bordpath</sender>\r
+   <signal>textEdited(QString)</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>transmit_fromboard_name_change()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>499</x>\r
+     <y>566</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>688</x>\r
+     <y>273</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_toboard_choosefile</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>transmit_toboard_choosefile()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>736</x>\r
+     <y>499</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>660</x>\r
+     <y>343</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>action_complete</sender>\r
+   <signal>triggered(bool)</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>ui_tab_mainwindow_complete()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>-1</x>\r
+     <y>-1</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>468</x>\r
+     <y>363</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>action_board</sender>\r
+   <signal>triggered(bool)</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>ui_tab_mainwindow_board()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>-1</x>\r
+     <y>-1</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>539</x>\r
+     <y>363</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_board</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>tedit_input_data_board</receiver>\r
+   <slot>clear()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>822</x>\r
+     <y>522</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>767</x>\r
+     <y>568</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_send_data_board</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>uart_send_data()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>842</x>\r
+     <y>469</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>888</x>\r
+     <y>484</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_at_mediaaudiorecord</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_mediaaudiorecord_send()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>646</x>\r
+     <y>535</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>643</x>\r
+     <y>285</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_at_stackinfo</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_stackinfo_send()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>160</x>\r
+     <y>485</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>654</x>\r
+     <y>412</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_at_fsrm</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_fsrm_send()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>428</x>\r
+     <y>544</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>655</x>\r
+     <y>254</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_at_mediamusicstop</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_mediamusicstop_send()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>646</x>\r
+     <y>485</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>656</x>\r
+     <y>381</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_at_mediamusicplay</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_mediamusicplay_send()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>545</x>\r
+     <y>485</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>654</x>\r
+     <y>330</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_br_tx_complete</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_bt_tx_complete()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>156</x>\r
+     <y>481</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>636</x>\r
+     <y>372</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_br_rx_complete</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_bt_rx_complete()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>156</x>\r
+     <y>519</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>637</x>\r
+     <y>335</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_ble_tx_complete</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_ble_tx_complete()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>149</x>\r
+     <y>603</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>639</x>\r
+     <y>361</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_ble_rx_complete</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_ble_rx_complete()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>141</x>\r
+     <y>652</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>444</x>\r
+     <y>354</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_br_tx_board</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_bt_tx_board()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>156</x>\r
+     <y>481</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>639</x>\r
+     <y>325</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_br_rx_board</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_bt_rx_board()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>156</x>\r
+     <y>519</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>646</x>\r
+     <y>169</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_btdutmode_board</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_bt_dutmode_board()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>265</x>\r
+     <y>484</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>646</x>\r
+     <y>210</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_ble_tx_board</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_ble_tx_board()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>139</x>\r
+     <y>581</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>633</x>\r
+     <y>248</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_ble_rx_board</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_ble_rx_board()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>139</x>\r
+     <y>630</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>643</x>\r
+     <y>204</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_get_rx_count</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_get_rx_count_complete()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>674</x>\r
+     <y>652</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>647</x>\r
+     <y>134</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_delay_time</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_bt_delay_ms_complete()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>134</x>\r
+     <y>492</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>637</x>\r
+     <y>161</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_donglemac</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_set_dongle_addr_complete()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>581</x>\r
+     <y>492</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>653</x>\r
+     <y>126</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>cbox_uart_com_select</sender>\r
+   <signal>activated(QString)</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>uart_com_switch(QString)</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>702</x>\r
+     <y>55</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>764</x>\r
+     <y>76</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>cbox_uart_baud_select</sender>\r
+   <signal>activated(QString)</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>uart_baud_switch(QString)</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>712</x>\r
+     <y>103</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>744</x>\r
+     <y>133</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>cbox_br_tx_PacketType_complete</sender>\r
+   <signal>activated(int)</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_check_bt_len(int)</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>514</x>\r
+     <y>479</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>649</x>\r
+     <y>73</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>cbox_br_rx_PacketType_complete</sender>\r
+   <signal>activated(int)</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_check_bt_len(int)</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>514</x>\r
+     <y>517</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>647</x>\r
+     <y>55</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>cbox_br_tx_PacketType_board</sender>\r
+   <signal>activated(int)</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_check_bt_len(int)</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>514</x>\r
+     <y>479</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>639</x>\r
+     <y>116</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>cbox_br_rx_PacketType_board</sender>\r
+   <signal>activated(int)</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_check_bt_len(int)</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>514</x>\r
+     <y>517</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>638</x>\r
+     <y>85</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pushButton</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>ui_save_windows()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>702</x>\r
+     <y>285</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>647</x>\r
+     <y>236</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_btlo_board</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_bt_btlo_board()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>144</x>\r
+     <y>502</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>642</x>\r
+     <y>200</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_btpwr_board</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_bt_btpwr_board()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>589</x>\r
+     <y>502</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>684</x>\r
+     <y>304</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pbtn_at_custom_send</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_custom_send()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>169</x>\r
+     <y>602</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>661</x>\r
+     <y>190</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pushButton_3</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_bt_wakeup()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>122</x>\r
+     <y>615</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>957</x>\r
+     <y>601</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+  <connection>\r
+   <sender>pushButton_4</sender>\r
+   <signal>clicked()</signal>\r
+   <receiver>MainWindow</receiver>\r
+   <slot>at_bt_sleep()</slot>\r
+   <hints>\r
+    <hint type="sourcelabel">\r
+     <x>244</x>\r
+     <y>615</y>\r
+    </hint>\r
+    <hint type="destinationlabel">\r
+     <x>970</x>\r
+     <y>548</y>\r
+    </hint>\r
+   </hints>\r
+  </connection>\r
+ </connections>\r
+ <slots>\r
+  <slot>transmit_toboard_choosefile()</slot>\r
+  <slot>uart_send_data()</slot>\r
+  <slot>uart_process()</slot>\r
+  <slot>check_word_wrap()</slot>\r
+  <slot>check_hex_display()</slot>\r
+  <slot>at_stackinfo_send()</slot>\r
+  <slot>uart_check_dtr_rts()</slot>\r
+  <slot>uart_com_select()</slot>\r
+  <slot>transmit_fromboard_selectfilepath()</slot>\r
+  <slot>transmit_fromboard_getfilelist()</slot>\r
+  <slot>transmit_fromboard_download()</slot>\r
+  <slot>transmit_toboard_upload()</slot>\r
+  <slot>transmit_toboard_stop()</slot>\r
+  <slot>transmit_fromboard_delete()</slot>\r
+  <slot>transmit_fromboard_stop()</slot>\r
+  <slot>spp_connect()</slot>\r
+  <slot>transmit_fromboard_name_change()</slot>\r
+  <slot>at_fsrm_send()</slot>\r
+  <slot>at_mediamusicplay_send()</slot>\r
+  <slot>at_mediamusicstop_send()</slot>\r
+  <slot>at_mediaaudiorecord_send()</slot>\r
+  <slot>ui_tab_mainwindow_complete()</slot>\r
+  <slot>ui_tab_mainwindow_board()</slot>\r
+  <slot>at_bt_tx_complete()</slot>\r
+  <slot>at_bt_rx_complete()</slot>\r
+  <slot>at_ble_tx_complete()</slot>\r
+  <slot>at_ble_rx_complete()</slot>\r
+  <slot>at_bt_rx_board()</slot>\r
+  <slot>at_bt_tx_board()</slot>\r
+  <slot>at_ble_tx_board()</slot>\r
+  <slot>at_ble_rx_board()</slot>\r
+  <slot>at_bt_dutmode_board()</slot>\r
+  <slot>at_bt_delay_ms_complete()</slot>\r
+  <slot>at_set_dongle_addr_complete()</slot>\r
+  <slot>at_get_rx_count_complete()</slot>\r
+  <slot>uart_com_switch(QString)</slot>\r
+  <slot>uart_baud_switch(QString)</slot>\r
+  <slot>at_check_bt_len(int)</slot>\r
+  <slot>ui_save_windows()</slot>\r
+  <slot>at_bt_btlo_board()</slot>\r
+  <slot>at_bt_btpwr_board()</slot>\r
+  <slot>at_custom_send()</slot>\r
+  <slot>at_bt_wakeup()</slot>\r
+  <slot>at_bt_sleep()</slot>\r
+ </slots>\r
+</ui>\r
diff --git a/mythread.cpp b/mythread.cpp
new file mode 100644 (file)
index 0000000..6d0a5db
--- /dev/null
@@ -0,0 +1,61 @@
+#include "mythread.h"\r
+\r
+MyThread::MyThread()\r
+{\r
+    stopped = false;\r
+    pauseFlag = false;\r
+}\r
+\r
+MyThread::~MyThread()\r
+{\r
+}\r
+\r
+void MyThread::process()\r
+{\r
+}\r
+\r
+void MyThread::run()\r
+{\r
+    while (true) {\r
+        QMutexLocker locker(&m_lock_stop);\r
+        if (stopped) {\r
+            stopped = false;\r
+            qDebug() << "线程终止";\r
+            return;\r
+        }\r
+        if (pauseFlag) {\r
+            m_lock_Pause.lock();\r
+            condition.wait(&m_lock_Pause);\r
+            m_lock_Pause.unlock();\r
+        }\r
+        process();\r
+    }\r
+    stopped = false;\r
+    pauseFlag = false;\r
+}\r
+\r
+void MyThread::pause()\r
+{\r
+    if (this->isRunning() && !pauseFlag) {\r
+        pauseFlag = true;\r
+    }\r
+}\r
+\r
+void MyThread::resume()\r
+{\r
+    if (this->isRunning() && pauseFlag) {\r
+        pauseFlag = false;\r
+        condition.wakeAll();\r
+    }\r
+}\r
+\r
+void MyThread::stop()\r
+{\r
+    if (this->isRunning()) {\r
+        if (pauseFlag) {\r
+            this->resume();\r
+        }\r
+        QMutexLocker locker(&m_lock_stop);\r
+        stopped = true;\r
+    }\r
+}\r
diff --git a/mythread.h b/mythread.h
new file mode 100644 (file)
index 0000000..20bce24
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef MYTHREAD_H\r
+#define MYTHREAD_H\r
+\r
+#include <QWaitCondition.h>\r
+#include <QMutex>\r
+#include <QThread>\r
+#include <header.h>\r
+#include <qdebug.h>\r
+#include <QString>\r
+ /*-----------------------rx回调函数线程-------------------------------*/\r
+ // 当回调函数执行时,会唤醒此线程。 根据回调函数返回值执行对应函数。\r
+class MyThread : public QThread\r
+{\r
+   public:\r
+    explicit MyThread();\r
+    ~MyThread();\r
+    void stop();\r
+\r
+   protected:\r
+    void run() override final;\r
+    virtual void process();\r
+   public slots:\r
+    void pause();\r
+    void resume();\r
+\r
+   private:\r
+    QMutex m_lock_stop;\r
+    volatile bool stopped;\r
+    QMutex m_lock_Pause;\r
+    std::atomic_bool pauseFlag;\r
+    QWaitCondition condition;\r
+};\r
+#endif // MYTHREAD_H\r
diff --git a/readme.txt b/readme.txt
new file mode 100644 (file)
index 0000000..15e8891
--- /dev/null
@@ -0,0 +1 @@
+本软件使用QT库进行UI界面设计。
\ No newline at end of file
diff --git a/result_thread.cpp b/result_thread.cpp
new file mode 100644 (file)
index 0000000..30a8ca3
--- /dev/null
@@ -0,0 +1,102 @@
+#include "result_thread.h"\r
+\r
+struct result_info g_result_info={0,NULL,0,NULL,false,NONE_DATA,0,NULL};\r
+QMutex g_result_thread_mlock;\r
+QWaitCondition g_result_thread_condition;\r
+\r
+\r
+\r
+Result_Thread::Result_Thread(QObject *parent)\r
+{\r
+    obj=parent;\r
+}\r
+\r
+Result_Thread::~Result_Thread()\r
+{\r
+}\r
+\r
+// 给 UI 线程发送消息\r
+void Result_Thread::process()\r
+{\r
+    g_result_thread_mlock.lock();\r
+    g_result_thread_condition.wait(&g_result_thread_mlock, MLOCK_TIMEOUT);\r
+    switch (g_result_info.result_thread_flag) {\r
+        case UART_RX_DATA:\r
+            QMetaObject::invokeMethod(obj, "uart_rx_dispaly", Q_ARG(int, g_result_info.uart_rx_buf_len),Q_ARG(u8Piont,g_result_info.uart_rx_buf)); // 让UI线程执行 Uart_Rx_Dispaly 槽函数\r
+            g_result_info.result_thread_flag = NONE_DATA;\r
+            break;\r
+        case LS_RESULT_DATA:\r
+            QMetaObject::invokeMethod(obj, "transmit_ls_rx_diaplay",Q_ARG(int , g_result_info.transmit_ls_size),Q_ARG(vPiont,g_result_info.transmit_ls_buff));\r
+            g_result_info.result_thread_flag = NONE_DATA;\r
+            break;\r
+        case TRANSMIT_FILE_DATA:\r
+            QMetaObject::invokeMethod(obj, "transmit_rx_display",Q_ARG(bool, g_result_info.transmit_result_flag));\r
+            g_result_info.transmit_result_flag = false;\r
+            g_result_info.result_thread_flag = NONE_DATA;\r
+            break;\r
+        case AT_RESULT_DATA:\r
+            QMetaObject::invokeMethod(obj, "at_rx_display",Q_ARG(int, g_result_info.at_result_len),Q_ARG(u8Piont,g_result_info.at_result_buf));\r
+            g_result_info.result_thread_flag = NONE_DATA;\r
+            break;\r
+        default:\r
+            break;\r
+    }\r
+    g_result_thread_mlock.unlock();\r
+}\r
+\r
+uint32_t uart_callback(void *buf, uint32_t buf_len)\r
+{\r
+    g_result_info.uart_rx_buf_len = (int)buf_len;\r
+    // rx的数据不包含\0,所以多分配1字节。\r
+    g_result_info.uart_rx_buf=(uint8_t *)malloc(buf_len);\r
+    memset(g_result_info.uart_rx_buf,0,buf_len);\r
+    memcpy_s(g_result_info.uart_rx_buf, buf_len, (uint8_t *)buf, buf_len);\r
+    g_result_info.result_thread_flag = UART_RX_DATA;\r
+    g_result_thread_mlock.lock();\r
+    g_result_thread_condition.wakeAll();\r
+    g_result_thread_mlock.unlock();\r
+    return 0;\r
+}\r
+\r
+uint32_t ls_callback(uint32_t size, void *buff)\r
+{\r
+    g_result_info.transmit_ls_buff = (uapi_ls_info_t *)malloc(size * sizeof(uapi_ls_info_t)+1);\r
+    memcpy_s(g_result_info.transmit_ls_buff, size * sizeof(uapi_ls_info_t), (uapi_ls_info_t *)buff, size * sizeof(uapi_ls_info_t));\r
+    g_result_info.transmit_ls_size = static_cast<int>(size);\r
+    g_result_info.result_thread_flag = LS_RESULT_DATA;\r
+    g_result_thread_mlock.lock();\r
+    g_result_thread_condition.wakeAll();\r
+    g_result_thread_mlock.unlock();\r
+    return 0;\r
+}\r
+\r
+uint32_t transmit_callback(bool is_finished, uintptr_t usr_data)\r
+{\r
+    g_result_info.transmit_result_flag = is_finished;\r
+    Q_UNUSED(usr_data);\r
+    g_result_info.result_thread_flag = TRANSMIT_FILE_DATA;\r
+    g_result_thread_mlock.lock();\r
+    g_result_thread_condition.wakeAll();\r
+    g_result_thread_mlock.unlock();\r
+    return 0;\r
+}\r
+\r
+uint32_t at_callback(void *buf, uint32_t len)\r
+{\r
+    uint8_t * at_buff = (uint8_t *)malloc(len);\r
+    memcpy_s(at_buff, len , buf, len);\r
+    g_result_info.at_result_buf = (uint8_t *)at_buff;\r
+    g_result_info.at_result_len = len;\r
+    g_result_info.result_thread_flag = AT_RESULT_DATA;\r
+    g_result_thread_mlock.lock();\r
+    g_result_thread_condition.wakeAll();\r
+    g_result_thread_mlock.unlock();\r
+    return 0;\r
+}\r
+void transmit_get_data_count(uint32_t *total_size, uint32_t *current_size)\r
+{\r
+    uapi_transmit_progress transmint_data_count;\r
+    uapi_transmit_process(&transmint_data_count);\r
+    *total_size=transmint_data_count.total_size;\r
+    *current_size=transmint_data_count.transmited_size;\r
+}\r
diff --git a/result_thread.h b/result_thread.h
new file mode 100644 (file)
index 0000000..5a1671d
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef RESULT_THREAD_H\r
+#define RESULT_THREAD_H\r
+#include "mythread.h"\r
+#include "common.h"\r
+#include <header.h>\r
+#include <stdint.h>\r
+#include <QMutex>\r
+#include <QWaitCondition>\r
+#include <qdebug.h>\r
+\r
+#define BUF_SIZE 4096\r
+#define MLOCK_TIMEOUT 2000\r
+enum get_data_flag\r
+{\r
+    NONE_DATA = -1,\r
+    UART_RX_DATA = 0,\r
+    LS_RESULT_DATA,\r
+    TRANSMIT_FILE_DATA,\r
+    AT_RESULT_DATA,\r
+};\r
+\r
+struct result_info{\r
+    // uart收到的数据\r
+    int uart_rx_buf_len;\r
+    uint8_t *uart_rx_buf;\r
+\r
+    // ls数据大小和内容\r
+    int transmit_ls_size;\r
+    uapi_ls_info_t *transmit_ls_buff;\r
+\r
+    // 传输文件是否成功\r
+    bool transmit_result_flag;\r
+\r
+    // 当前回调函数标记\r
+    int result_thread_flag;\r
+\r
+    // at调用返回\r
+    int at_result_len;\r
+    uint8_t *at_result_buf;\r
+};\r
+\r
+class Result_Thread : public MyThread\r
+{\r
+public:\r
+    Result_Thread(QObject *parent = 0);\r
+    ~Result_Thread();\r
+protected:\r
+     void process() override final;\r
+private:\r
+     QObject *obj;\r
+};\r
+\r
+uint32_t uart_callback(void *buf, uint32_t buf_len);\r
+uint32_t ls_callback(uint32_t size, void *buff);\r
+uint32_t transmit_callback(bool is_finished, uintptr_t usr_data);\r
+uint32_t at_callback(void *buf, uint32_t len);\r
+void transmit_get_data_count(uint32_t *total_size, uint32_t *current_size);\r
+#endif // RESULT_THREAD_H\r
diff --git a/src/header.h b/src/header.h
new file mode 100644 (file)
index 0000000..f49da08
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef HEADER_H\r
+#define HEADER_H\r
+#include <stdint.h>\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+/*-----------------------业务处理-------------------------------*/\r
+typedef struct {\r
+    uint32_t total_size;\r
+    uint32_t transmited_size;\r
+} uapi_transmit_progress;\r
+\r
+typedef enum {\r
+    FAIL = 0x0,\r
+    SUCC = 0x1,\r
+} uapi_errcode;\r
+\r
+typedef struct {\r
+    uint16_t sn;\r
+    uint8_t name_len;\r
+    uint8_t is_dir;\r
+    uint32_t file_size;\r
+    uint8_t name[0xFF];\r
+} uapi_ls_info_t;\r
+\r
+\r
+\r
+typedef uint32_t (*uart_rx_function)(void *buf, uint32_t len);\r
+typedef uint32_t (*at_result_callback)(void *buf, uint32_t len);\r
+typedef uint32_t (*transmit_ls_result)(uint32_t size,void *buff);\r
+typedef uint32_t (*transmit_result_hook)(bool is_finished, uintptr_t usr_data);\r
+\r
+\r
+uapi_errcode uapi_at_send(uint8_t module_id, uint8_t cmd_id, uint8_t *pkt, uint32_t pkt_size,at_result_callback callback);\r
+uapi_errcode uapi_file_download(char* board_file_path,char* local_file_path,transmit_result_hook handler);\r
+uapi_errcode uapi_file_upload(char* board_file_path,char* local_file_path,transmit_result_hook handler);\r
+uapi_errcode uapi_ls_send(char *path, uint32_t path_len,transmit_ls_result callback); // ls\r
+uapi_errcode uapi_file_delete(char *board_file_path, uint32_t board_file_path_len);\r
+uapi_errcode uapi_file_transmit_stop(void);\r
+uapi_errcode uapi_transmit_process(uapi_transmit_progress *data);\r
+/*----------------------------------------------------------*/\r
+uapi_errcode uapi_uart_open(const char *com,  uint32_t baud);\r
+uapi_errcode uapi_uart_tx_data(void *buf, uint32_t buf_len);\r
+uapi_errcode uapi_uart_callback_register(uart_rx_function callback);\r
+uapi_errcode uapi_uart_close(void);\r
+uapi_errcode uapi_uart_set_rts_dtr(int rts_flag, int dtr_flag);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif\r
diff --git a/untitled_zh_CN.ts b/untitled_zh_CN.ts
new file mode 100644 (file)
index 0000000..806770f
--- /dev/null
@@ -0,0 +1,844 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="zh_CN">
+<context>
+    <name>MainWindow</name>
+    <message>
+        <location filename="mainwindow.ui" line="2771"/>
+        <source>打开串口</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="636"/>
+        <source>AT命令</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="147"/>
+        <location filename="mainwindow.ui" line="768"/>
+        <location filename="mainwindow.ui" line="1607"/>
+        <source>发送</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="117"/>
+        <location filename="mainwindow.ui" line="681"/>
+        <location filename="mainwindow.ui" line="1577"/>
+        <source>Debug</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="168"/>
+        <location filename="mainwindow.ui" line="1628"/>
+        <source>清除发送</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="368"/>
+        <source>From Board</source>
+        <oldsource>From Boad</oldsource>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="388"/>
+        <source>File Storage</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="254"/>
+        <location filename="mainwindow.ui" line="408"/>
+        <source>Local File Path:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="21"/>
+        <source>Factory_Tools</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="198"/>
+        <source>To Board</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="234"/>
+        <source>Upload File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="275"/>
+        <source>Board File Path:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="327"/>
+        <source>Choose File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="439"/>
+        <source>....</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="461"/>
+        <source>File Selector</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="481"/>
+        <source>File Path:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="522"/>
+        <source>Get file List</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="543"/>
+        <source>File Name:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="594"/>
+        <source>Download</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="612"/>
+        <source>Delete</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="627"/>
+        <source>Stop</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="669"/>
+        <location filename="mainwindow.ui" line="1658"/>
+        <source>MCU</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="706"/>
+        <location filename="mainwindow.ui" line="713"/>
+        <location filename="mainwindow.ui" line="720"/>
+        <location filename="mainwindow.ui" line="727"/>
+        <source>待开发</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="749"/>
+        <source>FSRM</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="799"/>
+        <source>module id</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="814"/>
+        <source>cmd id</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="821"/>
+        <source>payload</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="831"/>
+        <source>MEDIA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="843"/>
+        <source>Media</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="873"/>
+        <source>Music Play</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="880"/>
+        <source>Music Stop</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="914"/>
+        <source>Audio Record</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="924"/>
+        <location filename="mainwindow.ui" line="1663"/>
+        <source>BT</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1207"/>
+        <location filename="mainwindow.ui" line="1229"/>
+        <location filename="mainwindow.ui" line="2039"/>
+        <location filename="mainwindow.ui" line="2201"/>
+        <source>Channel(0-78)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1369"/>
+        <location filename="mainwindow.ui" line="1452"/>
+        <location filename="mainwindow.ui" line="1762"/>
+        <location filename="mainwindow.ui" line="1859"/>
+        <source>Channel(0-39)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1484"/>
+        <location filename="mainwindow.ui" line="1794"/>
+        <source>Length(0-255)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2256"/>
+        <source>BTDUTMODE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2269"/>
+        <source>信令测试:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2312"/>
+        <source>其他</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2324"/>
+        <source>单音测试与功率调整</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2342"/>
+        <source>channel(0-78)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2355"/>
+        <source>功率调整</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2368"/>
+        <source>单音测试</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2428"/>
+        <source>power chip(2-14)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2445"/>
+        <source>BT_UART</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2457"/>
+        <source>唤醒</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2470"/>
+        <source>睡眠</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2973"/>
+        <source>dongle调试</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1751"/>
+        <location filename="mainwindow.ui" line="1851"/>
+        <location filename="mainwindow.ui" line="1939"/>
+        <location filename="mainwindow.ui" line="2106"/>
+        <location filename="mainwindow.ui" line="2288"/>
+        <location filename="mainwindow.ui" line="2387"/>
+        <location filename="mainwindow.ui" line="2407"/>
+        <source>OFF</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="936"/>
+        <source>耦合测试设置</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="957"/>
+        <source>延时时间</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="970"/>
+        <source>ms</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="996"/>
+        <source>DongleMAC</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1016"/>
+        <source>耦合测试</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1028"/>
+        <location filename="mainwindow.ui" line="1912"/>
+        <source>BR EDR</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1078"/>
+        <location filename="mainwindow.ui" line="1271"/>
+        <location filename="mainwindow.ui" line="2007"/>
+        <location filename="mainwindow.ui" line="2169"/>
+        <source>2-DH5</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1101"/>
+        <location filename="mainwindow.ui" line="1319"/>
+        <location filename="mainwindow.ui" line="2084"/>
+        <location filename="mainwindow.ui" line="2114"/>
+        <source>Length(0-27)</source>
+        <oldsource>Length</oldsource>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1053"/>
+        <location filename="mainwindow.ui" line="1246"/>
+        <location filename="mainwindow.ui" line="1982"/>
+        <location filename="mainwindow.ui" line="2144"/>
+        <source>DH1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1115"/>
+        <location filename="mainwindow.ui" line="1171"/>
+        <location filename="mainwindow.ui" line="1361"/>
+        <location filename="mainwindow.ui" line="1444"/>
+        <location filename="mainwindow.ui" line="1746"/>
+        <location filename="mainwindow.ui" line="1846"/>
+        <location filename="mainwindow.ui" line="1934"/>
+        <location filename="mainwindow.ui" line="2101"/>
+        <location filename="mainwindow.ui" line="2283"/>
+        <location filename="mainwindow.ui" line="2382"/>
+        <location filename="mainwindow.ui" line="2402"/>
+        <source>ON</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1185"/>
+        <location filename="mainwindow.ui" line="2127"/>
+        <source>BR TX</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1130"/>
+        <location filename="mainwindow.ui" line="1301"/>
+        <location filename="mainwindow.ui" line="1466"/>
+        <location filename="mainwindow.ui" line="1776"/>
+        <location filename="mainwindow.ui" line="1954"/>
+        <location filename="mainwindow.ui" line="2053"/>
+        <source>10101010</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1135"/>
+        <location filename="mainwindow.ui" line="1306"/>
+        <location filename="mainwindow.ui" line="1471"/>
+        <location filename="mainwindow.ui" line="1781"/>
+        <location filename="mainwindow.ui" line="1959"/>
+        <location filename="mainwindow.ui" line="2058"/>
+        <source>PRBS9</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1140"/>
+        <location filename="mainwindow.ui" line="1311"/>
+        <location filename="mainwindow.ui" line="1476"/>
+        <location filename="mainwindow.ui" line="1786"/>
+        <location filename="mainwindow.ui" line="1964"/>
+        <location filename="mainwindow.ui" line="2063"/>
+        <source>11110000</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1058"/>
+        <location filename="mainwindow.ui" line="1251"/>
+        <location filename="mainwindow.ui" line="1987"/>
+        <location filename="mainwindow.ui" line="2149"/>
+        <source>DH3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1063"/>
+        <location filename="mainwindow.ui" line="1256"/>
+        <location filename="mainwindow.ui" line="1992"/>
+        <location filename="mainwindow.ui" line="2154"/>
+        <source>DH5</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1068"/>
+        <location filename="mainwindow.ui" line="1261"/>
+        <location filename="mainwindow.ui" line="1997"/>
+        <location filename="mainwindow.ui" line="2159"/>
+        <source>2-DH1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1073"/>
+        <location filename="mainwindow.ui" line="1266"/>
+        <location filename="mainwindow.ui" line="2002"/>
+        <location filename="mainwindow.ui" line="2164"/>
+        <source>2-DH3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1083"/>
+        <location filename="mainwindow.ui" line="1276"/>
+        <location filename="mainwindow.ui" line="2012"/>
+        <location filename="mainwindow.ui" line="2174"/>
+        <source>3-DH1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1088"/>
+        <location filename="mainwindow.ui" line="1281"/>
+        <location filename="mainwindow.ui" line="2017"/>
+        <location filename="mainwindow.ui" line="2179"/>
+        <source>3-DH3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1093"/>
+        <location filename="mainwindow.ui" line="1286"/>
+        <location filename="mainwindow.ui" line="2022"/>
+        <location filename="mainwindow.ui" line="2184"/>
+        <source>3-DH5</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1154"/>
+        <location filename="mainwindow.ui" line="2077"/>
+        <source>BR RX</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1336"/>
+        <location filename="mainwindow.ui" line="1711"/>
+        <source>BLE</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1430"/>
+        <location filename="mainwindow.ui" line="1732"/>
+        <source>BLE TX</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1386"/>
+        <location filename="mainwindow.ui" line="1501"/>
+        <location filename="mainwindow.ui" line="1811"/>
+        <location filename="mainwindow.ui" line="1876"/>
+        <source>BLE 1M</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1391"/>
+        <location filename="mainwindow.ui" line="1506"/>
+        <location filename="mainwindow.ui" line="1816"/>
+        <location filename="mainwindow.ui" line="1881"/>
+        <source>BLE 2M</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1405"/>
+        <location filename="mainwindow.ui" line="1895"/>
+        <source>BLE RX</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1699"/>
+        <source>非信令测试</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2211"/>
+        <source>信令测试</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2922"/>
+        <source>菜单</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2963"/>
+        <source>单板</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2946"/>
+        <source>整机</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2538"/>
+        <source>4800</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2543"/>
+        <source>9600</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2548"/>
+        <source>14400</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2553"/>
+        <source>19200</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2558"/>
+        <source>38400</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2563"/>
+        <source>57600</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2528"/>
+        <location filename="mainwindow.ui" line="2568"/>
+        <source>115200</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="1526"/>
+        <source>获取RX Count</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2223"/>
+        <source>信令</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2573"/>
+        <source>128000</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2578"/>
+        <source>230400</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2583"/>
+        <source>256000</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2588"/>
+        <source>460800</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2593"/>
+        <source>500000</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2598"/>
+        <source>512000</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2603"/>
+        <source>600000</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2608"/>
+        <source>750000</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2613"/>
+        <source>921600</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2618"/>
+        <source>1000000</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2623"/>
+        <source>1500000</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2628"/>
+        <source>2000000</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2807"/>
+        <source>连接设备</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2653"/>
+        <source>         MAC地址</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="189"/>
+        <location filename="mainwindow.ui" line="1649"/>
+        <source>加回车换行</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="348"/>
+        <location filename="mainwindow.cpp" line="645"/>
+        <source>Upload</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="296"/>
+        <source>stop</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="699"/>
+        <source>StackInfo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="556"/>
+        <source>PushButton</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2666"/>
+        <source>串口操作</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2875"/>
+        <source>清除接收</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2708"/>
+        <source>保存窗口</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2750"/>
+        <source>16进制显示</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2831"/>
+        <source>16进制发送</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2687"/>
+        <source>RTS</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2729"/>
+        <source>DTR</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.ui" line="2853"/>
+        <source>COM1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="223"/>
+        <source>串口</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="223"/>
+        <source>打开串口失败!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="352"/>
+        <source>注册表</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="352"/>
+        <source>无法打开注册表!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="539"/>
+        <source>ls fail!<byte value="xd"/>
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="563"/>
+        <source>文件大小为0!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="576"/>
+        <source>文件下载启动失败!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="701"/>
+        <location filename="mainwindow.cpp" line="895"/>
+        <location filename="mainwindow.cpp" line="911"/>
+        <location filename="mainwindow.cpp" line="964"/>
+        <location filename="mainwindow.cpp" line="981"/>
+        <source>AT</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="701"/>
+        <source>AT send fail!<byte value="xd"/>
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="539"/>
+        <source>ls</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="532"/>
+        <location filename="mainwindow.cpp" line="554"/>
+        <location filename="mainwindow.cpp" line="596"/>
+        <location filename="mainwindow.cpp" line="638"/>
+        <location filename="mainwindow.cpp" line="765"/>
+        <location filename="mainwindow.cpp" line="776"/>
+        <location filename="mainwindow.cpp" line="804"/>
+        <location filename="mainwindow.cpp" line="827"/>
+        <source>File Path</source>
+        <oldsource>File</oldsource>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="532"/>
+        <location filename="mainwindow.cpp" line="554"/>
+        <location filename="mainwindow.cpp" line="596"/>
+        <location filename="mainwindow.cpp" line="765"/>
+        <location filename="mainwindow.cpp" line="776"/>
+        <location filename="mainwindow.cpp" line="804"/>
+        <source>文件路径为空!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="558"/>
+        <location filename="mainwindow.cpp" line="563"/>
+        <source>Board File Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="576"/>
+        <source>Downloade</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="608"/>
+        <source>delete</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="608"/>
+        <source>delete file fail!<byte value="xd"/>
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="638"/>
+        <source>文件路径为空!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="645"/>
+        <source>文件上传启动失败!<byte value="xd"/>
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="827"/>
+        <source>MAC地址为空!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="895"/>
+        <location filename="mainwindow.cpp" line="911"/>
+        <location filename="mainwindow.cpp" line="964"/>
+        <location filename="mainwindow.cpp" line="981"/>
+        <source>length错误!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="955"/>
+        <location filename="mainwindow.cpp" line="972"/>
+        <location filename="mainwindow.cpp" line="989"/>
+        <location filename="mainwindow.cpp" line="1003"/>
+        <location filename="mainwindow.cpp" line="1016"/>
+        <source>操作错误</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="955"/>
+        <location filename="mainwindow.cpp" line="972"/>
+        <location filename="mainwindow.cpp" line="989"/>
+        <location filename="mainwindow.cpp" line="1003"/>
+        <location filename="mainwindow.cpp" line="1016"/>
+        <source>应先关闭射频测试项!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="558"/>
+        <source>请选择正确的文件!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>QObject</name>
+    <message>
+        <location filename="mainwindow.cpp" line="387"/>
+        <source>HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>