--- /dev/null
+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
--- /dev/null
+<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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+IDI_ICON1 ICON DISCARDABLE "icon/windows.ico"\r
--- /dev/null
+#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
--- /dev/null
+#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,¤t_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,¤t_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
--- /dev/null
+#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
--- /dev/null
+<?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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+本软件使用QT库进行UI界面设计。
\ No newline at end of file
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+<?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>