From: penglei <1624952103@qq.com>
Date: Wed, 26 Nov 2025 12:46:17 +0000 (+0800)
Subject: ln产测工具 初始版本
X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/code/MouseSdk-iOS/Document/static/gitweb.css?a=commitdiff_plain;p=mirrors%2Ffactory_tool.git
ln产测工具 初始版本
---
diff --git a/CMakeLists.txt b/CMakeLists.txt
deleted file mode 100644
index b893ae5..0000000
--- a/CMakeLists.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-cmake_minimum_required(VERSION 3.5)
-
-project(LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOUIC ON)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-
-set(CMAKE_CXX_STANDARD 11)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(RC_ICONS windows.ico)
-# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
-# Check http://doc.qt.io/qt-5/deployment-android.html for more information.
-# They need to be set before the find_package(Qt5 ...) call.
-
-#if(ANDROID)
-# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
-# if (ANDROID_ABI STREQUAL "armeabi-v7a")
-# set(ANDROID_EXTRA_LIBS
-# ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
-# ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
-# endif()
-#endif()
-
-find_package(Qt5 COMPONENTS Widgets LinguistTools REQUIRED)
-
-set(TS_FILES untitled_zh_CN.ts)
-include_directories(${CMAKE_SOURCE_DIR})
-if(ANDROID)
- add_library(SHARED
- main.cpp
- mainwindow.cpp
- mainwindow.h
- mainwindow.ui
- ${TS_FILES}
- )
-else()
- add_executable(
- WIN32
- main.cpp
- mainwindow.cpp
- mainwindow.h
- mainwindow.ui
- mythread.h
- mythread.cpp
- custom.h
- custom.cpp
- Demoqrc.qrc
- demopng.rc
- at_data.cpp
- at_data.h
- result_thread.cpp
- result_thread.h
- common.h
- ${TS_FILES}
- )
-endif()
-
-target_link_libraries( PRIVATE
- Qt5::Widgets
- ${CMAKE_SOURCE_DIR}/lib/libwireless_tools.dll)
-target_link_libraries( PRIVATE
- Qt5::Widgets
- ${CMAKE_SOURCE_DIR}/lib/libsecurec.a)
-
-qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
diff --git a/Demoqrc.qrc b/Demoqrc.qrc
deleted file mode 100644
index 7f18d42..0000000
--- a/Demoqrc.qrc
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- icon/windows.png
- icon/windows.ico
- icon/FAIL.ico
- icon/succ.ico
-
-
diff --git a/Library_global.h b/Library_global.h
deleted file mode 100644
index b110ebe..0000000
--- a/Library_global.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
- */
-#ifndef LIBRARY_GLOBAL_H
-#define LIBRARY_GLOBAL_H
-
-#if defined(_MSC_VER) || defined(WIN64) || defined(_WIN64) || defined(__WIN64__) || defined(WIN32) || \
- defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
-
-#define Q_DECL_EXPORT __declspec(dllexport)
-#define Q_DECL_IMPORT __declspec(dllimport)
-#else
-#define Q_DECL_EXPORT __attribute__((visibility("default")))
-#define Q_DECL_IMPORT __attribute__((visibility("default")))
-#endif
-
-#if defined(LIBRARY_LIBRARY)
-#define LIBRARY_EXPORT Q_DECL_EXPORT
-#else
-#define LIBRARY_EXPORT Q_DECL_IMPORT
-#endif
-
-namespace uapi {
-struct FileInfo {
- unsigned short sn;
- unsigned char name_len;
- unsigned char is_dir;
- unsigned int file_size;
- char name[0xFF];
-};
-
-struct FileListResult {
- unsigned int lsInfoNumber;
- FileInfo lsInfo[0];
-};
-
-struct FileTransmitDataCount {
- unsigned int total_size;
- unsigned int transmited_size;
-};
-
-struct TransmitResult {
- bool finishResult;
-};
-
-struct AtReceiveData {
- unsigned int dataLength;
- unsigned char *data;
-};
-
-struct SerialPortReceiveData {
- unsigned int dataLength;
- unsigned char *data;
-};
-enum InfoType {
- INFO_SERIALPORT, // åæ¿æ®µæ°æ®
- INFO_FILE_TRANSMIT_RESULT,
- INFO_FILE_LIST_RESULT,
- INFO_AT_RECEIVE,
-};
-enum ConnectMode {
- MODE_SERIALPORT,
- MODE_BLUETOOTH
-};
-enum ErrorCode{
- ERROR_FAIL = -1,
- ERROR_SUCC = 0x0,
-};
-}
-
-#endif // LIBRARY_GLOBAL_H
diff --git a/README.md b/README.md
deleted file mode 100644
index 4bd4606..0000000
--- a/README.md
+++ /dev/null
@@ -1,32 +0,0 @@
-## 项ç®åç§°
-> 请ä»ç»ä¸ä¸ä½ ç项ç®å§
-
-
-
-## è¿è¡æ¡ä»¶
-> ååºè¿è¡è¯¥é¡¹ç®æå¿
é¡»çæ¡ä»¶åç¸å
³ä¾èµ
-* æ¡ä»¶ä¸
-* æ¡ä»¶äº
-* æ¡ä»¶ä¸
-
-
-
-## è¿è¡è¯´æ
-> 说æå¦ä½è¿è¡å使ç¨ä½ ç项ç®ï¼å»ºè®®ç»åºå
·ä½çæ¥éª¤è¯´æ
-* æä½ä¸
-* æä½äº
-* æä½ä¸
-
-
-
-## æµè¯è¯´æ
-> å¦æææµè¯ç¸å
³å
容éè¦è¯´æï¼è¯·å¡«åå¨è¿é
-
-
-
-## ææ¯æ¶æ
-> 使ç¨çææ¯æ¡æ¶æç³»ç»æ¶æå¾çç¸å
³è¯´æï¼è¯·å¡«åå¨è¿é
-
-
-## åä½è
-> 髿çåä½ä¼æ¿åæ å°½çåé åï¼å°ä»ä»¬çååè®°å½å¨è¿éå§
diff --git a/Setting.ini b/Setting.ini
deleted file mode 100644
index e3f6e21..0000000
--- a/Setting.ini
+++ /dev/null
@@ -1,22 +0,0 @@
-[Uart_setting]
-uart_com=COM41
-uart_baud=18
-spp_addr=
-
-[Download_Setting]
-download_board_path=/user/
-download_local_path=
-
-[Upload_Setting]
-upload_board_path=
-upload_local_path=
-
-[At_Setting]
-at_mediamusicplay=
-at_mediaaudiorecord=
-at_fsrm=
-at_delay_ms=
-at_spp_addr=
-custom_module_id=
-custom_cmd_id=
-custom_payload=
diff --git a/at_data.cpp b/at_data.cpp
deleted file mode 100644
index 1d76e0d..0000000
--- a/at_data.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-#include
-
-At_Process::At_Process(QObject *parent)
-{
- Q_UNUSED(parent);
- phy_type_list<<"01"<<"02";
- ble_pattern_type_list<<"02 "<<"00 "<<"01 ";
- br_pattern_type_list<<"03 "<<"04 "<<"09 ";
- packet_type_list<<"04 01 "<<"0B 01 "<<"0F 01 "<<"04 00 "<<"0A 00 "<<"0E 00 "<<"08 00 "<<"0B 00 "<<"0F 00 ";
- br_len_array<<27<<183<<339<<54<<367<<679<<83<<552<<1021;
- board_cmd_map.insert(BT_MODE_BR_TX,"AT^BTTX=");
- board_cmd_map.insert(BT_MODE_BR_RX,"AT^BTRX=");
- board_cmd_map.insert(BT_MODE_BLE_TX,"AT^BLETX=");
- board_cmd_map.insert(BT_MODE_BLE_RX,"AT^BLERX=");
- board_cmd_map.insert(BT_MODE_BTDUTMODE, "AT^BTDUTMODE=");
- board_cmd_map.insert(DONGLE_MODE_SPPCONN,"AT+SPPCONN=");
- board_cmd_map.insert(DONGLE_MODE_AT,"AT");
- board_cmd_map.insert(DONGLE_MODE_ADDR,"AT+ADDR");
- board_cmd_map.insert(BT_MODE_BTLO,"AT^BTLO=");
- board_cmd_map.insert(BT_MODE_BTPWR,"AT^BTPWR=");
-
-}
-At_Process::~At_Process(){}
-QString At_Process::at_get_packet_type(int packet_type_index)
-{
- return packet_type_list.at(packet_type_index);
-}
-int At_Process::at_get_packet_len(int packet_type_index)
-{
- return br_len_array.at(packet_type_index);
-}
-QString At_Process::at_get_br_pattern_type(int pattern_type_index)
-{
- return br_pattern_type_list.at(pattern_type_index);
-}
-QString At_Process::at_get_ble_pattern_type(int pattern_type_index)
-{
- return ble_pattern_type_list.at(pattern_type_index);
-}
-
-QString At_Process::at_get_ble_phy_type(int phy_type_index)
-{
- return phy_type_list.at(phy_type_index);
-}
-QString At_Process::at_get_cmd_board(at_mode_board mode)
-{
- return board_cmd_map[mode];
-}
-QString At_Process::at_get_switch_format(QString br_switch)
-{
- QString str;
- if(br_switch.contains("OFF")){
- str="00";
- }else if(br_switch.contains("ON")){
- str="01 ";
- }
- return str;
-}
-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)
-{
- QString str;
- str += at_get_switch_format(br_switch);
- if(br_switch.contains("ON")){
- str += QString("%1 ").arg(channel.toUInt(), 2, 16, QLatin1Char('0'));
- str += at_get_packet_type(packet_type_index);
- QString str_temp = QString("%1").arg(payload_len.toUInt(), 4, 16, QLatin1Char('0'));
- str.insert(9, str_temp.mid(0, 2)+" ");
- str.insert(9, str_temp.mid(2, 2)+" ");
- str += at_get_br_pattern_type(pattern_type);
- if(mode==BT_MODE_BR_TX){
- str.insert(3, "02 ");
- }
- }
- return str;
-}
-
-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)
-{
- QString str=NULL;
- str += at_get_switch_format(br_switch);
- if(br_switch.contains("ON")){
- str += QString("%1 ").arg(channel.toUInt(), 2, 16, QLatin1Char('0'));
- if(mode==BT_MODE_BLE_TX){
- str+= at_get_ble_pattern_type(pattern_type_index);
- str+= QString("%1 ").arg(payload_len.toUInt(), 2, 16, QLatin1Char('0'));
- }
- str+=at_get_ble_phy_type(phy_index);
- }
- return str;
-}
-
-
-bool At_Process::at_send_cmd_board(at_mode_board mode,QString format)
-{
-// char *buf=nullptr;
- uint32_t buf_len=0;
- bool ret=false;
- QString str=at_get_cmd_board(mode);
- str+=format;
- str+="\r\n";
- std::string bufstr = str.toStdString();
- const char* buf = bufstr.c_str();
- buf_len = strlen(buf);
- if(uapi_uart_tx_data((void*)buf, buf_len)){
- ret=true;
- }
- return ret;
-}
-
-bool At_Process::at_send_cmd_string(at_module_id module_id, at_cmd_id cmd_id,QString format)
-{
- char *buf = nullptr;
- uint32_t buf_len=0;
- bool ret=false;
- QByteArray arr = format.toLatin1();
- buf = arr.data();
- buf_len = arr.size();
- if (uapi_at_send(module_id, cmd_id, (uint8_t *)buf, buf_len, at_callback) == SUCC) {
- at_set_id(module_id, cmd_id);
- ret=true;
- }
- return ret;
-}
-
-void At_Process::at_set_id(at_module_id at_module_id_temp, at_cmd_id at_cmd_id_temp)
-{
- at_module_id_save = at_module_id_temp;
- at_cmd_id_save = at_cmd_id_temp;
-}
-
-void At_Process::at_get_id(at_module_id *at_module_id, at_cmd_id *at_cmd_id)
-{
- *at_module_id = at_module_id_save;
- *at_cmd_id = at_cmd_id_save;
-}
diff --git a/at_data.h b/at_data.h
deleted file mode 100644
index 8323390..0000000
--- a/at_data.h
+++ /dev/null
@@ -1,112 +0,0 @@
-#ifndef AT_DATA_H
-#define AT_DATA_H
-
-#include
-#include
-#include
-#include
-#include
-
-struct at_media_command {
- uint8_t cmd[2];
- uint8_t payload[0];
-};
-
-enum at_br_packet_type
-{
- PACKET_DH1,
- PACKET_DH3,
- PACKET_DH5,
- PACKET_2DH1,
- PACKET_2DH3,
- PACKET_2DH5,
- PACKET_3DH1,
- PACKET_3DH3,
- PACKET_3DH5,
-};
-
-enum at_ble_phy
-{
- PHY_1M,
- PHY_2M,
-};
-
-enum at_pattern_type
-{
- PATTERN_TYPE_1,
- PATTERN_TYPE_2,
- PATTERN_TYPE_3,
-};
-
-enum at_mode_board
-{
- BT_MODE_BR_TX,
- BT_MODE_BR_RX,
- BT_MODE_BLE_TX,
- BT_MODE_BLE_RX,
- BT_MODE_BTDUTMODE,
- BT_MODE_BTLO,
- BT_MODE_BTPWR,
- DONGLE_MODE_SPPCONN,
- DONGLE_MODE_AT,
- DONGLE_MODE_ADDR,
- MODE_MAX,
-};
-
-enum at_module_id
-{
- MODULE_MCU =0x08,
- MODULE_BT =0x09,
- MODULE_AUDIO =0x0A,
-};
-
-enum at_cmd_id
-{
- AUDIO_CMD = 0x00,
- MCU_CMD_FSRM = 0x09,
- MCU_CMD_STACKINFO = 0x0D,
- MCU_CMD_CHECK_CONNECTED=0x40,
- MCU_CMD_RETURN_VALUE=0x41,
- BT_CMD_SETTXPOWER = 0x7A,
- BT_CMD_DUTMODE = 0x7D,
- BT_CMD_GET_RX = 0x83,
- BT_CMD_BR_TX,
- BT_CMD_BR_RX,
- BT_CMD_BLE_TX,
- BT_CMD_BLE_RX,
- BT_CMD_DELAY_MS,
- BT_CMD_DONGLE_MAC,
- BT_CMD_RX_RESULT = 0xFF,
-};
-
-
-class At_Process
-{
-public:
- At_Process(QObject *parent = 0);
- ~At_Process();
- QString at_get_br_format(at_mode_board bt_mode,QString br_switch,QString channel, int packet_type, QString payload_len, int pattern_type);
- 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);
- bool at_send_cmd_string(at_module_id module_id, at_cmd_id cmd_id,QString format);
- bool at_send_cmd_board(at_mode_board bt_mode,QString format);
- void at_get_id(at_module_id *at_module_id, at_cmd_id *at_cmd_id);
- int at_get_packet_len(int packet_type);
- QString at_get_switch_format(QString br_switch);
-private:
- at_module_id at_module_id_save;
- at_cmd_id at_cmd_id_save;
- QStringList phy_type_list;
- QStringList ble_pattern_type_list;
- QStringList br_pattern_type_list;
- QStringList packet_type_list;
- QVector br_len_array;
- QMap board_cmd_map;
-private:
- QString at_get_cmd_board(at_mode_board bt_mode);
- QString at_get_ble_phy_type(int phy_type_index);
- QString at_get_ble_pattern_type(int pattern_type);
- QString at_get_br_pattern_type(int pattern_type);
- QString at_get_packet_type(int packet_type);
- void at_set_id(at_module_id at_module_id, at_cmd_id at_cmd_id);
-};
-#endif // AT_DATA_H
diff --git a/common.h b/common.h
deleted file mode 100644
index c9ed230..0000000
--- a/common.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef COMMON_H
-#define COMMON_H
-
-#include
-#include
-
-typedef uint8_t* u8Piont;
-typedef void* vPiont;
-
-Q_DECLARE_METATYPE(u8Piont);
-Q_DECLARE_METATYPE(vPiont);
-
-#define MESSAGE_INFO_COLOR(STRING) "" STRING "" " "
-#define CHECK_DONGLE_CONNECTED
-
-#endif // COMMON_H
diff --git a/custom.cpp b/custom.cpp
deleted file mode 100644
index 542ed25..0000000
--- a/custom.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-#include
-
-MyComboBox::MyComboBox(QWidget *paraent) : QComboBox(paraent) {}
-MyComboBox::~MyComboBox() {}
-
-void MyComboBox::mousePressEvent(QMouseEvent *e)
-{
- if (e->button() == Qt::LeftButton) {
- emit mouse_clicked(true);
- }
- QComboBox::mousePressEvent(e);
-}
-
-void MyComboBox::ChangeItem(QString str)
-{
- for(int i=0;icount();i++ ){
- if(this->itemText(i).contains(str)){
- this->setCurrentIndex(i);
- break;
- }
- }
-}
-
-MyLineEdit::MyLineEdit(QWidget *parent):QLineEdit(parent)
-{
-
-}
-
-void MyLineEdit::keyPressEvent(QKeyEvent *event)
-{
- qDebug()<key();
- if(event->key()==Qt::Key_Up){
- int current_data=this->text().toInt()+1;
- const QIntValidator *validator=(QIntValidator *)this->validator();
- if(current_data <= validator->top()){
- this->setText(QString::number(current_data,10));
- }
- }else if(event->key()==Qt::Key_Down){
- int current_data=this->text().toInt()-1;
- const QIntValidator *validator=(QIntValidator *)this->validator();
- if(current_data >= validator->bottom()){
- this->setText(QString::number(current_data,10));
- }
- }else{
- QLineEdit::keyPressEvent(event);//æ§è¡
- }
- event->ignore();//è¾åºåï¼æå°ç»§ç»æ§è¡ä¸»çªå£çkeypressEventäºä»¶
-}
diff --git a/custom.h b/custom.h
deleted file mode 100644
index dca637f..0000000
--- a/custom.h
+++ /dev/null
@@ -1,70 +0,0 @@
-#ifndef MYCOMBOBOX_H
-#define MYCOMBOBOX_H
-#include
-#include
-#include
-#include
-#include
-#include
-
-// èªå®ä¹ QComboBox ç±»ï¼å®ç° clicked ä¿¡å·
-class MyComboBox : public QComboBox
-{
- Q_OBJECT
- public:
- explicit MyComboBox(QWidget *paraent = 0);
- ~MyComboBox();
- void ChangeItem(QString str);
- protected:
- virtual void mousePressEvent(QMouseEvent *e) override;
- signals:
- void mouse_clicked(bool);
-};
-
-// èªå®ä¹MyLineEditç±»ï¼å®ç° up downæé®èªå¨å åå¼
-class MyLineEdit : public QLineEdit
-{
- Q_OBJECT
-public:
- explicit MyLineEdit(QWidget *parent=0);
-protected:
- void keyPressEvent(QKeyEvent *event);
-};
-
-class MyValidator : public QIntValidator
-{
- Q_OBJECT
-public:
- explicit MyValidator(QObject * parent = 0):QIntValidator(parent)
- {
- }
- MyValidator(int bottom, int top, QObject * parent):QIntValidator(bottom, top, parent)
- {
- }
- virtual void setRange(int bottom, int top)
- {
- QIntValidator::setRange(bottom, top);
- }
- ~MyValidator()
- {
- }
- virtual State validate(QString &str, int &n) const
- {
- if(str.contains("+")){
- return Invalid;
- }
- if(n > 1 && str.startsWith("0")){
- return Invalid;
- }
- if(str.toInt()top()){
- return Invalid;
- }
- return QIntValidator::validate(str, n);
- }
-// virtual void fixup(QString &s) const
-// {
-// s = QString("%1").arg(bottom());
-// }
-};
-
-#endif // MYCOMBOBOX_H
diff --git a/debug/at_data.obj b/debug/at_data.obj
deleted file mode 100644
index 2b32fa7..0000000
Binary files a/debug/at_data.obj and /dev/null differ
diff --git a/debug/custom.obj b/debug/custom.obj
deleted file mode 100644
index 1df2882..0000000
Binary files a/debug/custom.obj and /dev/null differ
diff --git a/debug/factory_tool.exe b/debug/factory_tool.exe
deleted file mode 100644
index 9e8ace8..0000000
Binary files a/debug/factory_tool.exe and /dev/null differ
diff --git a/debug/factory_tool.ilk b/debug/factory_tool.ilk
deleted file mode 100644
index b647048..0000000
Binary files a/debug/factory_tool.ilk and /dev/null differ
diff --git a/debug/factory_tool.pdb b/debug/factory_tool.pdb
deleted file mode 100644
index c21528e..0000000
Binary files a/debug/factory_tool.pdb and /dev/null differ
diff --git a/debug/factory_tool.vc.pdb b/debug/factory_tool.vc.pdb
deleted file mode 100644
index 192ebff..0000000
Binary files a/debug/factory_tool.vc.pdb and /dev/null differ
diff --git a/debug/main.obj b/debug/main.obj
deleted file mode 100644
index c684f34..0000000
Binary files a/debug/main.obj and /dev/null differ
diff --git a/debug/mainwindow.obj b/debug/mainwindow.obj
deleted file mode 100644
index 3fe4735..0000000
Binary files a/debug/mainwindow.obj and /dev/null differ
diff --git a/debug/moc_custom.obj b/debug/moc_custom.obj
deleted file mode 100644
index 7bf1955..0000000
Binary files a/debug/moc_custom.obj and /dev/null differ
diff --git a/debug/moc_mainwindow.obj b/debug/moc_mainwindow.obj
deleted file mode 100644
index a37458f..0000000
Binary files a/debug/moc_mainwindow.obj and /dev/null differ
diff --git a/debug/mythread.obj b/debug/mythread.obj
deleted file mode 100644
index 74e3a86..0000000
Binary files a/debug/mythread.obj and /dev/null differ
diff --git a/debug/result_thread.obj b/debug/result_thread.obj
deleted file mode 100644
index 5cedc10..0000000
Binary files a/debug/result_thread.obj and /dev/null differ
diff --git a/debug/wrtm_class.obj b/debug/wrtm_class.obj
deleted file mode 100644
index dd9534d..0000000
Binary files a/debug/wrtm_class.obj and /dev/null differ
diff --git a/demopng.rc b/demopng.rc
deleted file mode 100644
index 4b0ae81..0000000
--- a/demopng.rc
+++ /dev/null
@@ -1 +0,0 @@
-IDI_ICON1 ICON DISCARDABLE "icon/windows.ico"
diff --git a/factory_tool.pro b/factory_tool.pro
index 4b23984..b9290e6 100644
--- a/factory_tool.pro
+++ b/factory_tool.pro
@@ -1,52 +1,29 @@
-#-------------------------------------------------
-#
-# Project created by QtCreator 2024-03-04T16:59:50
-#
-#-------------------------------------------------
-
-QT += core gui
-
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-
-TARGET = factory_tool
-TEMPLATE = app
-
-
-SOURCES += main.cpp\
- mainwindow.cpp \
- at_data.cpp \
- custom.cpp \
- mythread.cpp \
- result_thread.cpp \
- wrtm_class.cpp
-
-HEADERS += mainwindow.h \
- Library_global.h \
- at_data.h \
- common.h \
- custom.h \
- info.h \
- interface.h \
- mythread.h \
- result_thread.h \
- header.h
-
-FORMS += mainwindow.ui
-
-DISTFILES += \
- CMakeLists.txt \
- readme.txt \
- untitled_zh_CN.ts
-
-INCLUDEPATH += $$PWD/.
-DEPENDPATH += $$PWD/.
-
-
-LIBS += -L$$PWD/lib/
-LIBS += libsecurec.a
-LIBS += -ldiag
-LIBS += -lAdvapi32
-
-
-INCLUDEPATH += $$PWD/lib
-DEPENDPATH += $$PWD/lib
+QT += core gui serialport
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = LeiNiaoFactoryTool
+TEMPLATE = app
+
+# 设置ç¼ç 为UTF-8
+QMAKE_CXXFLAGS += -finput-charset=UTF-8 -fexec-charset=UTF-8
+CONFIG += utf8_source
+CODECFORTR = UTF-8
+CODECFORSRC = UTF-8
+
+# æºæä»¶å表
+SOURCES += \
+ main.cpp \
+ mainwindow.cpp
+
+# 头æä»¶å表
+HEADERS += \
+ mainwindow.h
+
+# UI æä»¶å表ï¼å
³é®ï¼å¿
é¡»å
å« mainwindow.uiï¼
+FORMS += \
+ mainwindow.ui
+
+# ç¡®ä¿ MOC æ£ç¡®å¤ç Qt å
对象系ç»
+MOC_DIR += moc
+UI_DIR += ui # æå® UI çææä»¶çè¾åºç®å½
diff --git a/header.h b/header.h
deleted file mode 100644
index e70123a..0000000
--- a/header.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef HEADER_H
-#define HEADER_H
-#include
-
-//#ifdef __cplusplus
-//extern "C" {
-//#endif
-/*-----------------------ä¸å¡å¤ç-------------------------------*/
-typedef enum {
- FAIL = 0x0,
- SUCC = 0x1,
-} uapi_errcode;
-
-typedef struct {
- uint32_t total_size; // å½åä¼ è¾æä»¶æ»å¤§å°
- uint32_t transmited_size; // å½åæä»¶å·²ä¼ è¾å¤§å°
-} uapi_transmit_progress;
-
-typedef struct {
- uint16_t sn; // åºå·
- uint8_t name_len; // æä»¶ï¼å¤¹ï¼åé¿åº¦
- uint8_t is_dir; // æ¯å¦æ¯æä»¶å¤¹
- uint32_t file_size; // æä»¶å¤§å°
- uint8_t name[0xFF]; // æä»¶ï¼å¤¹ï¼å
-} uapi_ls_info_t;
-
-typedef uint32_t (*uart_rx_function)(void *buf, uint32_t len); // uart RX åè°å½æ°
-typedef uint32_t (*at_result_callback)(void *buf, uint32_t len); // AT å½ä»¤è¿åå¼åè°å½æ°ï¼å
¥åbufå
æ¬ mould_id + cmd_id + payload
-typedef uint32_t (*transmit_ls_result)(uint32_t size, uapi_ls_info_t *buff); // transmit get liståè°å½æ°ï¼å
¥å size 为æä»¶ï¼å¤¹ï¼çæ°éï¼buff 为æä»¶ï¼å¤¹ï¼çä¿¡æ¯
-typedef uint32_t (*transmit_result_hook)(bool is_finished, uintptr_t usr_data); // ä¼ è¾ç»æåè°å½æ°ï¼is_finished ä¸ºä¼ è¾ç»ææ å¿ï¼usr_data é¢çæ¥å£ï¼ç®å为NULL
-
-uapi_errcode uapi_uart_open(const char *com, uint32_t baud); // æå¼uartå£ï¼ com æ ¼å¼ä¸º "\\\\.\\COM47"ï¼ baud 为波ç¹ç
-uapi_errcode uapi_uart_tx_data(void *buf, uint32_t buf_len); // uart TX åéæ°æ®buf
-uapi_errcode uapi_uart_set_rts_dtr(int rts_flag, int dtr_flag); // uart 设置rtsådtrå¼å
³
-uapi_errcode uapi_uart_callback_register(uart_rx_function callback); // uart 注ååè°å½æ°
-uapi_errcode uapi_uart_close(void); // å
³éuartå£
-uapi_errcode uapi_uart_set_currentMode(int mode); //0 SERIALPORTï¼åæ¿ï¼ 1 BLUETOOTHï¼æ´æºï¼
-
-
-uapi_errcode uapi_at_send(uint8_t module_id, uint8_t cmd_id, uint8_t *pkt, uint32_t pkt_size, at_result_callback callback); // atå½ä»¤å鿥å£ï¼module_idåcmd_id请åèãSparta 产线 æµè¯æåã10.2ç«
-uapi_errcode uapi_file_download(char* board_file_path, char* local_file_path, transmit_result_hook handler); // æä»¶ä¸è½½æ¥å£ï¼åæ°åå«ä¸ºæ¿ç«¯æä»¶å°åï¼è¯¦ç»å°æä»¶åç¼ï¼ï¼pc端åå¨è·¯å¾ï¼è¯¦ç»å°æä»¶å¤¹ï¼ï¼ä¼ è¾ç»æåè°å½æ°
-uapi_errcode uapi_file_upload(char* board_file_path,char* local_file_path, transmit_result_hook handler); // æä»¶ä¸ä¼ æ¥å£ï¼åæ°åå«ä¸ºæ¿ç«¯æä»¶å°åï¼è¯¦ç»å°æä»¶åç¼ï¼ï¼pc端åå¨è·¯å¾ï¼è¯¦ç»å°æä»¶åç¼ï¼ï¼ä¼ è¾ç»æåè°å½æ°
-uapi_errcode uapi_ls_send(char *path, uint32_t path_len, transmit_ls_result callback); // æ¥è¯¢æä»¶å表æ¥å£ï¼åæ°ä¸ºæ¿ç«¯æä»¶è·¯å¾ï¼è¯¦ç»å°æä»¶å¤¹ï¼ï¼è·¯å¾é¿åº¦ï¼get liståè°å½æ°
-uapi_errcode uapi_file_delete(char *board_file_path, uint32_t board_file_path_len); // å 餿宿件æ¥å£ï¼åæ°ä¸ºæ¿ç«¯æä»¶å°åï¼è¯¦ç»å°æä»¶åç¼ï¼ï¼æä»¶è·¯å¾é¿åº¦
-uapi_errcode uapi_file_transmit_stop(void); // 忢æä»¶ä¸è½½æ¥å£
-uapi_errcode uapi_transmit_process(uapi_transmit_progress *data); // è·åæä»¶ä¼ è¾è¿åº¦ï¼å
¥å data æ´æ°ä¸ºæ£å¨ä¼ è¾çæä»¶çæ»å¤§å°åå·²ä¼ è¾å¤§å°
-
-//#ifdef __cplusplus
-//}
-//#endif
-#endif
diff --git a/icon/FAIL.ico b/icon/FAIL.ico
deleted file mode 100644
index abdb54e..0000000
Binary files a/icon/FAIL.ico and /dev/null differ
diff --git a/icon/succ.ico b/icon/succ.ico
deleted file mode 100644
index 61fb14f..0000000
Binary files a/icon/succ.ico and /dev/null differ
diff --git a/icon/windows.ico b/icon/windows.ico
deleted file mode 100644
index 4bb7bc8..0000000
Binary files a/icon/windows.ico and /dev/null differ
diff --git a/icon/windows.png b/icon/windows.png
deleted file mode 100644
index f0cc3a0..0000000
Binary files a/icon/windows.png and /dev/null differ
diff --git a/info.h b/info.h
deleted file mode 100644
index d1152e3..0000000
--- a/info.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
- */
-#ifndef INFO_H
-#define INFO_H
-
-namespace uapi {
-class Info {
-public:
- virtual ~Info() {};
- virtual void onReadEvent(int eventType, void *data) = 0;
-};
-}
-#endif // INFO_H
diff --git a/interface.h b/interface.h
deleted file mode 100644
index 404bc43..0000000
--- a/interface.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef INTERFACE_H
-#define INTERFACE_H
-#include "info.h"
-#include "Library_global.h"
-
-class Application;
-
-class LIBRARY_EXPORT Interface
-{
-public:
- Interface();
- ~Interface();
- int SerialPortInit(int byteSize, int parity, int stopBits);
- int SerialPortSetRtsDtr(bool rtsFlag, bool DtrFlag);
- int SerialPortOpen(const char *portName,int baud);
- int SerialPortClose(void);
- int SerialPortWrite(const unsigned char *data,unsigned int len);
- int FileDownload(const char *boardFilePath, const char *localFilePath);
- int FileGetList(const char *boardPath, unsigned int boardPathLen);
- int FileUpload(const char *boardFilePath, char *localFilePath); // boardFilePathå
嫿件å+åç¼
- int FileDelete(const char *boardFilePath, unsigned int boardFilePathLen);
- int FileTransmitStop(void);
- int FileTransmitProgress(uapi::FileTransmitDataCount *data); // è·åæä»¶æ»å¤§å°åå·²ä¼ è¾å¤§å°å°dataä¸
- int AtMessageSend(unsigned char moduleId, unsigned char cmdId, const unsigned char *data, unsigned int dataLen);
- int InfoEventConnect(uapi::Info *event); // è¿æ¥è¯»åäºä»¶ï¼è¿åevent typeådata
- int SetCurrentMode(uapi::ConnectMode mode); // 设置å½åè¿æ¥ç±»åï¼åæ¿æ®µoræ´æºæ®µï¼
-private:
- Application *applicationHandle;
-};
-
-#endif // INTERFACE_H
diff --git a/lib/advapi32.dll b/lib/advapi32.dll
deleted file mode 100644
index e3234fc..0000000
Binary files a/lib/advapi32.dll and /dev/null differ
diff --git a/lib/diag.dll b/lib/diag.dll
deleted file mode 100644
index 94d923f..0000000
Binary files a/lib/diag.dll and /dev/null differ
diff --git a/lib/diag.lib b/lib/diag.lib
deleted file mode 100644
index ea31049..0000000
Binary files a/lib/diag.lib and /dev/null differ
diff --git a/lib/libsecurec.a b/lib/libsecurec.a
deleted file mode 100644
index 94ff990..0000000
Binary files a/lib/libsecurec.a and /dev/null differ
diff --git a/main.cpp b/main.cpp
index 177bfa0..c264415 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,10 +1,35 @@
-#include "mainwindow.h"
-#include
-
-int main(int argc, char *argv[])
-{
- QApplication a(argc, argv);
- MainWindow w;
- w.show();
- return a.exec();
-}
+#include "mainwindow.h"
+
+#include
+#include
+#ifdef _WIN32
+#include
+#include
+#include
+#endif
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+
+#ifdef _WIN32
+ // Windowsç¹å®çæ§å¶å°ç¼ç 设置
+ SetConsoleOutputCP(CP_UTF8);
+ SetConsoleCP(CP_UTF8);
+ // 设置æ åè¾åºä¸ºUTF-8模å¼
+ _setmode(_fileno(stdout), _O_U8TEXT);
+ _setmode(_fileno(stderr), _O_U8TEXT);
+#endif
+
+ // 设置å符ç¼ç 为UTF-8ï¼è§£å³ä¸æä¹±ç é®é¢
+ QTextCodec *codec = QTextCodec::codecForName("UTF-8");
+ QTextCodec::setCodecForLocale(codec);
+ #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
+ QTextCodec::setCodecForCStrings(codec);
+ QTextCodec::setCodecForTr(codec);
+ #endif
+
+ MainWindow w;
+ w.show();
+ return a.exec();
+}
diff --git a/mainwindow.cpp b/mainwindow.cpp
index 0ccf2cf..15c091b 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -1,1085 +1,4687 @@
-#include "mainwindow.h"
-#include "./ui_mainwindow.h"
-// åå§å线ç¨ãç¶æå¯åå¨ãé
置信æ¯
-MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
-{
- ui->setupUi(this);
- result_thread = new Result_Thread(this);
- result_thread->start();
- result_thread->pause();
- at_handler = new At_Process(this);
- ui_setting_read();
- at_set_bt_format();
-}
-
-// ç»æçº¿ç¨
-MainWindow::~MainWindow()
-{
- if (spp_timer_handle != NULL) {
- spp_timer_handle->stop();
- spp_timer_handle = NULL;
- }
- if (spp_connected_handle != NULL) {
- spp_connected_handle->stop();
- spp_connected_handle = NULL;
- }
- ui_setting_save();
- result_thread->stop();
- result_thread->wait();
- if (transmit_timer_handle != NULL) {
- transmit_timer_handle->stop();
- transmit_timer_handle = NULL;
- }
- if (ui->pbtn_open_uart->isChecked()) {
- if (uapi_uart_close() == TRUE) {
- }
- }
- delete result_thread;
- delete at_handler;
- delete ui;
-}
-
-void MainWindow::ui_display(QString str,bool inOrOut)
-{
-// QTime Time= QTime::currentTime();//è·åç³»ç»å½åçæ¶é´
-// QString str_time = Time.toString("[hh:mm:ss ");//æ ¼å¼åæ¶é´
- ui->txtb_dispaly->moveCursor(QTextCursor::End);
- if(inOrOut){
- ui->txtb_dispaly->setTextColor(QColor(127, 255, 0));
- }else{
- ui->txtb_dispaly->setTextColor(Qt::red);
- }
-// if(inOrOut){
-// str_time.append("IN] : ");
-// }else{
-// str_time.append("OUT] : ");
-// }
-// str.prepend(str_time);
-// str+="\r\n";
- ui->txtb_dispaly->insertPlainText(str);
- ui->txtb_dispaly->moveCursor(QTextCursor::End);
-}
-
-void MainWindow::ui_tab_mainwindow_complete()
-{
- if (ui->stkw_stage->currentIndex() == PAGE_COMPLETE) {
- ui->action_complete->setChecked(true);
- return;
- }
- ui->stkw_stage->setCurrentIndex(PAGE_COMPLETE);
- ui->ledit_spp_addr->setEnabled(true);
- ui->connected_flag->setStyleSheet("QPushButton{background-color: rgb(255, 0, 0);}");
- if (spp_connected_handle != NULL) {
- spp_connected_handle->start(1500);
- }
- if (ui->action_board->isChecked()) {
- ui->action_board->setChecked(false);
- }
- if(ui->pbtn_open_uart->isChecked()){
- uart_close();
- }
-}
-void MainWindow::ui_tab_mainwindow_board()
-{
- if (ui->stkw_stage->currentIndex() == PAGE_BOARD) {
- ui->action_board->setChecked(true);
- return;
- }
- ui->stkw_stage->setCurrentIndex(PAGE_BOARD);
- ui->ledit_spp_addr->setEnabled(false);
- ui->connected_flag->setStyleSheet("QPushButton{background-color: rgb(240, 240, 240);}");
- if (spp_connected_handle != NULL) {
- spp_connected_handle->stop();
- }
- dongle_is_connected = false;
- if (ui->action_complete->isChecked()) {
- ui->action_complete->setChecked(false);
- }
- if(ui->pbtn_open_uart->isChecked()){
- uart_close();
- }
-
-}
-void MainWindow::ui_save_windows()
-{
- QString fname = QFileDialog::getExistingDirectory(this, "è¯·éæ©æä»¶");
- QFile file(fname+"/save.txt");
- if (!file.open(QFile::WriteOnly | QFile::Text)) //æ£æµæä»¶æ¯å¦æå¼
- {
- QMessageBox::information(this, "Error Message", "Please Select a Text File!");
- return;
- }
-
- QTextStream out(&file); //åè¡åå
¥æä»¶
- out << ui->txtb_dispaly->toPlainText(); //è¿éçFile_editå°±æ¯ä¹å声æçTexteditæ§ä»¶çåå
-}
-// åå¨configé
ç½®æä»¶
-void MainWindow::ui_setting_save()
-{
- QSettings *settings = new QSettings("Setting.ini", QSettings::IniFormat);
-
- // åå
¥ç¬¬ä¸ç»æ°æ®
- settings->beginGroup("Uart_setting");
- settings->setValue("uart_com", ui->cbox_uart_com_select->currentText());
- settings->setValue("uart_baud", ui->cbox_uart_baud_select->currentIndex());
- settings->setValue("spp_addr", ui->ledit_spp_addr->text());
- settings->sync();
- settings->endGroup();
- // åå
¥ç¬¬äºç»æ°æ®
- settings->beginGroup("Download_Setting");
- settings->setValue("download_board_path", ui->ledit_formboad_bordpath->text());
- settings->setValue("download_local_path", ui->ledit_frombord_savefilepath->text());
- settings->sync();
- settings->endGroup();
-
- settings->beginGroup("Upload_Setting");
- settings->setValue("upload_board_path", ui->ledit_toboard_boardpath->text());
- settings->setValue("upload_local_path", ui->ledit_toboard_filepath->text());
- settings->sync();
- settings->endGroup();
-
- settings->beginGroup("At_Setting");
- settings->setValue("at_mediamusicplay", ui->ledit_at_mediamusicplay->text());
- settings->setValue("at_mediaaudiorecord", ui->ledit_at_mediaaudiorecord->text());
- settings->setValue("at_fsrm", ui->ledit_at_fsrm->text());
- settings->setValue("at_delay_ms", ui->ledit_delay_ms->text());
- settings->setValue("at_spp_addr", ui->ledit_dongle_mac->text());
- settings->setValue("custom_module_id", ui->ledit_at_custom_moduleId->text());
- settings->setValue("custom_cmd_id", ui->ledit_at_custom_CmdId->text());
- settings->setValue("custom_payload", ui->ledit_at_custom_Payload->text());
- settings->sync();
- settings->endGroup();
-
- delete settings;
- settings = nullptr;
-}
-// 读åconfigé
ç½®
-void MainWindow::ui_setting_read()
-{
- uart_com_select();
- QSettings *settings = new QSettings("Setting.ini", QSettings::IniFormat);
- ui->cbox_uart_com_select->ChangeItem(settings->value("Uart_setting/uart_com").toString());
- ui->cbox_uart_baud_select->setCurrentIndex(settings->value("Uart_setting/uart_baud").toInt());
- ui->ledit_spp_addr->setText(settings->value("Uart_setting/spp_addr").toString());
- ui->tbw_stage_complete->setEnabled(true);
- ui->ledit_formboad_bordpath->setText(settings->value("Download_Setting/download_board_path").toString());
- ui->ledit_frombord_savefilepath->setText(settings->value("Download_Setting/download_local_path").toString());
- ui->ledit_toboard_boardpath->setText(settings->value("Upload_Setting/upload_board_path").toString());
- ui->ledit_toboard_filepath->setText(settings->value("Upload_Setting/upload_local_path").toString());
- ui->ledit_at_mediamusicplay->setText(settings->value("At_Setting/at_mediamusicplay").toString());
- ui->ledit_at_mediaaudiorecord->setText(settings->value("At_Setting/at_mediaaudiorecord").toString());
- ui->ledit_at_fsrm->setText(settings->value("At_Setting/at_fsrm").toString());
- ui->ledit_delay_ms->setText(settings->value("At_Setting/at_delay_ms").toString());
- ui->ledit_dongle_mac->setText(settings->value("At_Setting/at_spp_addr").toString());
- ui->ledit_at_custom_moduleId->setText(settings->value("At_Setting/custom_module_id").toString());
- ui->ledit_at_custom_CmdId->setText(settings->value("At_Setting/custom_cmd_id").toString());
- ui->ledit_at_custom_Payload->setText(settings->value("At_Setting/custom_payload").toString());
- ui->tbw_stage_complete->setEnabled(false);
- ui->ledit_btlo_channel->setText("0");
- ui->ledit_btpwr_powerchip->setText("2");
-}
-
-
-/* --------------------------------uartæä½--------------------------- */
-void MainWindow::uart_process()
-{
- if (ui->pbtn_open_uart->isChecked()) {
- QString str_com = ui->cbox_uart_com_select->currentText();
- QString str_uart_baud = ui->cbox_uart_baud_select->currentText();
- uart_open(str_com,str_uart_baud);
- } else {
- uart_close();
- }
-}
-void MainWindow::uart_open(QString com,QString com_baud)
-{
- char buf[15] = {0};
- uint32_t band = com_baud.toUInt();
- com.replace("COM", "");
- int comNumber = com.toInt();
- if (comNumber < COM_NUMBER) {
- (void)sprintf_s(buf, "COM%d", comNumber);
- } else {
- (void)sprintf_s(buf, "\\\\.\\COM%d", comNumber);
- }
- if (uapi_uart_open(buf, band)) {
- uapi_uart_callback_register(uart_callback);
- result_thread->resume();
-
- if(ui->stkw_stage->currentIndex() == PAGE_COMPLETE){
- ui->tbw_stage_complete->setEnabled(true);
- ui->pbtn_spp_connect->setEnabled(true);
-// uapi_uart_set_currentMode(1);
- }else if(ui->stkw_stage->currentIndex() == PAGE_BOARD){
- ui->tbw_stage_board->setEnabled(true);
-// uapi_uart_set_currentMode(0);
- }
-
- ui->pbtn_open_uart->setText("å
³é串å£");
- ui_display("open uart success.\r\n",false);
- if(!ui->pbtn_open_uart->isChecked()){
- ui->pbtn_open_uart->setChecked(true);
- }
- } else {
- ui_display("open uart fail.\r\n",false);
- QMessageBox::warning(this, tr("SerialPort"), tr("Open SerialPort failed"), QMessageBox::Ok);
- ui->pbtn_open_uart->setChecked(false);
- }
-}
-void MainWindow::uart_close()
-{
- if (uapi_uart_close() == TRUE) {
- result_thread->pause();
-// ui_display("close uart success.\r\n",false);
- ui->tbw_stage_complete->setEnabled(false);
- ui->tbw_stage_board->setEnabled(false);
- ui->pbtn_spp_connect->setEnabled(false);
- ui->pbtn_open_uart->setText("æå¼ä¸²å£");
- if(ui->pbtn_open_uart->isChecked()){
- ui->pbtn_open_uart->setChecked(false);
- }
- if (spp_connected_handle != NULL) {
- spp_connected_handle->stop();
- spp_connected_handle = NULL;
- }
- if (spp_timer_handle != NULL) {
- spp_timer_handle->stop();
- spp_timer_handle = NULL;
- }
- } else {
-// ui_display("close uart fail.\r\n",false);
- }
-}
-void MainWindow::uart_send_data()
-{
- QString str;
- int buf_len = 0;
- char* buf = nullptr;
- if(ui->stkw_stage->currentIndex() == PAGE_COMPLETE){
- str = ui->tedit_input_data->toPlainText();
- }else{
- str = ui->tedit_input_data_board->toPlainText();
- }
- uapi_uart_callback_register(uart_callback);
- if (ui->ckbox_hex_send->isChecked()) {
- QByteArray array = str.toLatin1();
- QByteArray hex_bytes = QByteArray::fromHex(array.data());
- buf_len = hex_bytes.size();
- buf = hex_bytes.data();
- str=str.toUpper();
- uapi_uart_tx_data(buf, buf_len);
- } else {
- if ((ui->stkw_stage->currentIndex() == PAGE_COMPLETE &&ui->ckbox_word_wrap->isChecked())||
- (ui->stkw_stage->currentIndex() ==PAGE_BOARD && ui->ckbox_word_wrap_board->isChecked())) {
- str+="\r\n";
- }
- std::string bufstr = str.toStdString();
- buf =(char*) bufstr.c_str();
- buf_len = strlen(buf);
- uapi_uart_tx_data(buf, buf_len);
- }
-
-
-
- ui_display(str,false);
-}
-
-// uartæ¶å°çæ°æ®è¿è¡åæ¾å°æ¾ç¤ºæ
-void MainWindow::uart_rx_dispaly(int buf_len, u8Piont buf)
-{
- uart_rx_flag = true;
- if (uart_rx_Ignoring_display) {
- QString str((char *)buf);
- if(str.contains("ADDR")){
- ui->ledit_dongle_mac->setText(str.mid(str.indexOf("=",0)+1,12));
- }
- return;
- }
- QString str;
- QByteArray data((const char*)buf, buf_len);
- if (ui->ckbox_Hex_Display->isChecked()) {
- for (int i = 0; i < data.size(); i++) {
- str += QString("%1 ").arg((quint8)data.at(i), 2, 16, QChar('0'));
- }
- str=str.toUpper();
- } else {
- for (int i = 0; i < data.size(); i++) {
- str += QString(data.at(i));
- }
- }
- ui_display(str,true);
- free(buf);
-}
-
-void MainWindow::uart_check_dtr_rts()
-{
- bool rts = false, dtr = false;
- if (ui->ckbox_rts->isChecked()) {
- rts = true;
- }
- if (ui->ckbox_dtr->isChecked()) {
- dtr = true;
- }
- if (uapi_uart_set_rts_dtr(rts, dtr) == TRUE) {
-// ui_display("set rts dtr success.\r\n",false);
- }
-}
-
-void MainWindow::uart_com_select()
-{
- ui->cbox_uart_com_select->clear();
- QStringList strlist = uart_get_enable_comm_or_port();
- qSort(strlist.begin(), strlist.end(),[](const QString& s1, const QString& s2){
- QString a1=s1;QString a2=s2;
- return a1.replace("COM","").toInt() < a2.replace("COM","").toInt(); });
- ui->cbox_uart_com_select->addItems(strlist);
-}
-void MainWindow::uart_com_switch(QString com)
-{
- QString str_uart_baud = ui->cbox_uart_baud_select->currentText();
- if(ui->pbtn_open_uart->isChecked()){
- uart_close();
- uart_open(com,str_uart_baud);
- }
-}
-void MainWindow::uart_baud_switch(QString baud)
-{
- QString str_com = ui->cbox_uart_com_select->currentText();
- if(ui->pbtn_open_uart->isChecked()){
- uart_close();
- uart_open(str_com,baud);
- }
-}
-// nIndex为索å¼å· bValueéæ©è¿åå¼ä¸ºkeyè¿æ¯valueï¼é»è®¤ä¸ºvalue
-QString MainWindow::uart_get_comm_or_port(int nIndex, bool bValue)
-{
- QString strCommRet = QObject::tr("");
- HKEY hKey;
- if (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM"), 0, KEY_READ, &hKey) != 0) {
- QMessageBox::warning(this, tr("Register"), tr("can't open register"),QMessageBox::Ok);
- return QObject::tr(""); // æ æ³æå¼æ³¨å表
- }
- QString strKeyMsg; // é®å
- QString strValueMsg; // é®å¼
- TCHAR portName[256]; // é®åæ°ç»
- TCHAR commName[256]; // é®å¼æ°ç»
- ulong nKeySize = sizeof(portName);
- ulong nValueSize = sizeof(commName);
- ulong nType;
- memset(commName,0,sizeof(commName));
- memset(portName,0,sizeof(portName));
- if (::RegEnumValue(hKey, nIndex, portName, &nKeySize, 0, &nType, (BYTE *)commName, &nValueSize) == 0) { // å举é®å
- // 读åé®å
- for (uint i = 0; i < nKeySize; i++) {
- if (portName[i] != 0x00)
- strKeyMsg.append(portName[i]);
- }
- // 读åé®å¼
- for (uint j = 0; j < nValueSize; j++) {
- if (commName[j] != 0x00)
- strValueMsg.append(commName[j]);
- }
- if (bValue)
- strCommRet = strValueMsg;
- else
- strCommRet = strKeyMsg;
- } else {
- ::RegCloseKey(hKey); // å
³é注å表
- return QObject::tr(""); // æ å¯ç¨ä¸²å£
- }
- return strCommRet;
-}
-
-QStringList MainWindow::uart_get_enable_comm_or_port()
-{
- QStringList CommPortList;
- QString strCommPath = QObject::tr("HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM");
- QSettings *settings = new QSettings(strCommPath, QSettings::NativeFormat);
- QStringList keyList = settings->allKeys();
- if (!keyList.isEmpty()) {
- for (int i = 0; i < keyList.count(); i++)
- CommPortList.append(uart_get_comm_or_port(i, true));
- }
- return CommPortList;
-}
-
-/* ------------------------------------------------------------------- */
-void MainWindow::spp_connected_callback()
-{
- at_handler->at_send_cmd_string(MODULE_MCU,MCU_CMD_CHECK_CONNECTED,NULL);
- dongle_connected_times++;
- if (dongle_connected_times > 5) {
- ui_display("Dongle has been disconnected.\r\n",false);
- dongle_is_connected = false;
- }
- if (dongle_is_connected == true) {
- ui->connected_flag->setStyleSheet("QPushButton{background-color: rgb(0, 255, 64);}");
- uapi_uart_set_currentMode(1);//è®¾ç½®æ´æºæ¨¡å¼ï¼éè¿èçéä¼ æä»¤
- } else {
- ui->connected_flag->setStyleSheet("QPushButton{background-color: rgb(255, 0, 0);}");
- }
-}
-
-void MainWindow::spp_timer_callback()
-{
- bool final_ret = false;
- if (dongle_try_count > 5) {
- ui_display("\r\nNo device, check the dongle is connected.\r\n",false);
- final_ret = true;
- }
- if (uart_rx_flag == false) {
- at_handler->at_send_cmd_string(MODULE_MCU,MCU_CMD_CHECK_CONNECTED,NULL);
- dongle_try_count++;
- } else if (spp_try_count % 3 == 0) { // æ¯3æ¬¡éæ°åé䏿¬¡è¿æ¥ATå½ä»¤
- QString str = ui->ledit_spp_addr->text();
- at_handler->at_send_cmd_board(DONGLE_MODE_SPPCONN,str);
- } else if (spp_try_count > 10) { // 循ç¯10æ¬¡è¿ææ°æ®ä¸æ¥åè¡¨ç¤ºè¿æ¥å¤±è´¥
- ui_display("\r\nconnect fail.\r\n",false);
- final_ret = true;
- }
- if (dongle_is_connected == true) {
- final_ret = true;
- ui_display("\r\nDongle has been connected.\r\n",false);
- if (spp_connected_handle == NULL) {
- spp_connected_handle = new QTimer(this);
- connect(spp_connected_handle, SIGNAL(timeout()), this, SLOT(spp_connected_callback()));
- spp_connected_handle->start(1500);
- }
- }
- if (final_ret == false) {
- at_handler->at_send_cmd_board(DONGLE_MODE_AT,NULL);
- spp_try_count++;
- uart_rx_flag = false;
- ui_display(".",false);
- } else {
- spp_timer_handle->stop();
- spp_timer_handle = NULL;
- uart_rx_Ignoring_display = false;
- ui->pbtn_spp_connect->setEnabled(true);
- }
-}
-
-void MainWindow::spp_connect()
-{
- uart_rx_Ignoring_display = true;
- dongle_is_connected = false;
- dongle_try_count = 0;
- spp_try_count = 0;
- uapi_uart_callback_register(uart_callback);
- at_handler->at_send_cmd_board(DONGLE_MODE_ADDR,NULL);
- ui_display("spp connectting...",false);
- spp_timer_handle = new QTimer(this);
- connect(spp_timer_handle, SIGNAL(timeout()), this, SLOT(spp_timer_callback()));
- // sppæ¥è¯¢å®æ¶å¨å¨æä¸º1500ms
- spp_timer_handle->start(1500);
- ui->pbtn_spp_connect->setEnabled(false);
-}
-
-/* ------------------------------------------------------------------------ */
-/* -------------------------ä¸å¡å¤çé¨å------------------------------------- */
-
-void MainWindow::transmit_ls_rx_diaplay(int transmit_ls_size, vPiont transmit_ls_buff)
-{
- if(transmit_ls_size>0){
- ui_display("æä»¶å 大å°\r\n",true);
- }
- uapi_ls_info_t *transmit_ls_buff_temp = (uapi_ls_info_t *)transmit_ls_buff;
- for (int i = 0; i < transmit_ls_size; i++) {
- QString strName = QString::fromUtf8((char *)(transmit_ls_buff_temp[i].name));
- QString strFileLen = QString::number(transmit_ls_buff_temp[i].file_size,10);
- if (transmit_ls_buff_temp[i].is_dir) {
- strName.append("/");
- }
- ui_display(strName+" "+strFileLen+"\r\n",true);
- ui->cbox_fromborad_filelist->addItem(strName,strFileLen);
- }
- free(transmit_ls_buff);
-}
-
-void MainWindow::transmit_rx_display(bool transmit_result_flag)
-{
- uint32_t total_size=0;
- uint32_t current_size=0;
- transmit_get_data_count(&total_size,¤t_size);
- uint32_t value = transmit_result_flag ? total_size : 0;
- if (transmit_timer_handle) {
- transmit_timer_handle->stop();
- transmit_timer_handle = NULL;
- }
- if (transmit_download_or_upload == TRANSMIT_UPLOAD) {
- ui->pbar_toboard->setValue(value);
- ui->pbtn_toboard_Upload->setEnabled(true);
- }
- if (transmit_download_or_upload == TRANSMIT_DOWNLOAD) {
- ui->pbar_fromboard->setValue(value);
- ui->pbtn_fromboard_download->setEnabled(true);
- }
- if (transmit_result_flag) {
- ui_display("download or upload file success.\r\n",false);
- } else {
- ui_display("download or upload file fail.\r\n",false);
- }
- transmit_download_or_upload = TRANSMIT_IDLE;
- ui->pbtn_fromboard_delete->setEnabled(true);
- ui->pbtn_fromboard_getfilelist->setEnabled(true);
-}
-
-void MainWindow::transmit_fromboard_name_change()
-{
- ui->cbox_fromborad_filelist->clear();
-}
-
-void MainWindow::transmit_fromboard_selectfilepath()
-{
- QString fname = QFileDialog::getExistingDirectory(this, "è¯·éæ©æä»¶");
- ui->ledit_frombord_savefilepath->setText(fname);
-}
-
-void MainWindow::transmit_fromboard_getfilelist()
-{
- QString str = ui->ledit_formboad_bordpath->text();
- if (str.isEmpty()) {
- QMessageBox::warning(this, tr("File Path"), tr("æä»¶è·¯å¾ä¸ºç©º!"), QMessageBox::Ok);
- return;
- }
- ui->cbox_fromborad_filelist->clear();
-
- std::string bufstr = str.toStdString();
- char* buf =(char*) bufstr.c_str();
-
- int ret = uapi_ls_send(buf, strlen(buf), ls_callback);
- if (ret == FAIL) {
- QMessageBox::warning(this, tr("ls"), tr("ls fail!\r\n"), QMessageBox::Ok);
- }
- tansmit_fromborad_borad_list.push_back(str);
- QCompleter *com = new QCompleter(tansmit_fromborad_borad_list, this);
- com->setCaseSensitivity(Qt::CaseInsensitive);
- delete ui->ledit_formboad_bordpath->completer();
- ui->ledit_formboad_bordpath->setCompleter(com);
-}
-
-void MainWindow::transmit_fromboard_download()
-{
- QString str_savepath = ui->ledit_frombord_savefilepath->text();
- QString str_file_path = ui->ledit_formboad_bordpath->text();
- QString str_file_name = ui->cbox_fromborad_filelist->currentText();
- if (str_savepath.isEmpty() || str_file_path.isEmpty() || str_file_name.isEmpty()) {
- QMessageBox::warning(this, tr("File Path"), tr("æä»¶è·¯å¾ä¸ºç©º!"), QMessageBox::Ok);
- return;
- }
- if (str_file_name.contains("/")) {
- QMessageBox::warning(this, tr("Board File Name"), tr("è¯·éæ©æ£ç¡®çæä»¶ï¼"), QMessageBox::Ok);
- return;
- }
- qDebug()<cbox_fromborad_filelist->currentData().toInt();
- if(ui->cbox_fromborad_filelist->currentData().toInt()==0){
- QMessageBox::warning(this, tr("Board File Name"), tr("filesize 0"), QMessageBox::Ok);
- return;
- }
- if(!str_file_path.endsWith("/")){
- str_file_path.append("/");
- }
- str_file_path.append(str_file_name);
- std::string buf_temp = str_file_path.toStdString();
-// QByteArray buf_temp = str_file_path.toUtf8() ;
- char *str_file_buff = (char *)buf_temp.c_str();
- std::string buf_temp2 = str_savepath.toStdString();
-// QByteArray buf_temp2 = str_file_path.toUtf8();
- char *str_save_buff = (char *)buf_temp2.c_str();
- int ret = uapi_file_download(str_file_buff, str_save_buff, transmit_callback);
- if (ret == FAIL) {
- QMessageBox::warning(this, tr("Downloade"), tr("æä»¶ä¸è½½å¯å¨å¤±è´¥!"), QMessageBox::Ok);
- return;
- }
- transmit_progress_start();
- transmit_download_or_upload = TRANSMIT_DOWNLOAD;
- transmit_fromborad_local_list.push_back(str_savepath);
- QCompleter *com = new QCompleter(transmit_fromborad_local_list, this);
- com->setCaseSensitivity(Qt::CaseInsensitive);
- delete ui->ledit_frombord_savefilepath->completer();
- ui->ledit_frombord_savefilepath->setCompleter(com);
- ui->pbtn_fromboard_download->setEnabled(false);
- ui->pbtn_fromboard_delete->setEnabled(false);
- ui->pbtn_fromboard_getfilelist->setEnabled(false);
-}
-
-void MainWindow::transmit_fromboard_delete()
-{
- QString str_file_path = ui->ledit_formboad_bordpath->text();
- QString str_file_name = ui->cbox_fromborad_filelist->currentText();
- if (str_file_path.isEmpty() || str_file_name.isEmpty()) {
- QMessageBox::warning(this, tr("File Path"), tr("æä»¶è·¯å¾ä¸ºç©º!"), QMessageBox::Ok);
- return;
- }
- if (str_file_name.contains("/")) {
- str_file_name.chop(1);
- } else {
- str_file_path.append("/");
- }
- str_file_path.append(str_file_name);
-
- std::string bufstr = str_file_path.toStdString();
- char* str_file_buff =(char*) bufstr.c_str();
-
-// char *str_file_buff = (char *)str_file_path.toUtf8().data();//.toStdString().c_str();
- int buflen = strlen(str_file_buff);
- int ret = uapi_file_delete(str_file_buff, buflen); // ls
- if (ret == FAIL) {
- QMessageBox::warning(this, tr("delete"), tr("delete file fail!\r\n"), QMessageBox::Ok);
- }
- ui->cbox_fromborad_filelist->removeItem(ui->cbox_fromborad_filelist->currentIndex());
-}
-
-void MainWindow::transmit_fromboard_stop()
-{
- if (transmit_timer_handle) {
- transmit_timer_handle->stop();
- transmit_timer_handle = NULL;
- }
- transmit_download_or_upload = TRANSMIT_IDLE;
- ui->pbar_fromboard->setValue(0);
- ui->pbtn_fromboard_download->setEnabled(true);
- ui->pbtn_fromboard_delete->setEnabled(true);
- ui->pbtn_fromboard_getfilelist->setEnabled(true);
- uapi_file_transmit_stop();
-}
-
-void MainWindow::transmit_toboard_choosefile()
-{
- QString fname = QFileDialog::getOpenFileName(this, "è¯·éæ©æä»¶");
- ui->ledit_toboard_filepath->setText(fname);
-}
-
-void MainWindow::transmit_toboard_upload()
-{
- QString board_file_path = ui->ledit_toboard_boardpath->text();
- QString local_file_path = ui->ledit_toboard_filepath->text();
- if (board_file_path.isEmpty() || local_file_path.isEmpty()) {
- QMessageBox::warning(this, tr("File Path"), tr("File Path Empty!"), QMessageBox::Ok);
- return;
- }
-
- std::string bufboard_file_path = board_file_path.toStdString();
- char* buf_board_file_path =(char*) bufboard_file_path.c_str();
-
- std::string buflocal_file_path = local_file_path.toStdString();
- char* buf_local_file_path =(char*) buflocal_file_path.c_str();
-
-// char *buf_board_file_path = (char *)board_file_path.toUtf8().data();//.toStdString().c_str();
-// char *buf_local_file_path = (char *)local_file_path.toUtf8().data();//.toStdString().c_str();
- int ret = uapi_file_upload(buf_board_file_path, buf_local_file_path, transmit_callback);
- if (ret == FAIL) {
- QMessageBox::warning(this, tr("Upload"), tr("æä»¶ä¸ä¼ å¯å¨å¤±è´¥!\r\n"), QMessageBox::Ok);
- return;
- }
- transmit_progress_start();
- transmit_download_or_upload = TRANSMIT_UPLOAD;
- transmit_toboard_local_list.push_back(local_file_path);
- transmit_toboard_borad_list.push_back(board_file_path);
- QCompleter *com1 = new QCompleter(transmit_toboard_local_list, this);
- com1->setCaseSensitivity(Qt::CaseInsensitive);
- delete ui->ledit_toboard_filepath->completer();
- ui->ledit_toboard_filepath->setCompleter(com1);
- QCompleter *com2 = new QCompleter(transmit_toboard_borad_list, this);
- com2->setCaseSensitivity(Qt::CaseInsensitive);
- delete ui->ledit_toboard_boardpath->completer();
- ui->ledit_toboard_boardpath->setCompleter(com2);
- ui->pbtn_toboard_Upload->setEnabled(false);
-}
-
-void MainWindow::transmit_toboard_stop()
-{
- if (transmit_timer_handle) {
- transmit_timer_handle->stop();
- transmit_timer_handle = NULL;
- }
- transmit_download_or_upload = TRANSMIT_IDLE;
- ui->pbar_toboard->setValue(0);
- ui->pbtn_toboard_Upload->setEnabled(true);
- uapi_file_transmit_stop();
-}
-
-void MainWindow::transmit_update_progress()
-{
- uint32_t total_size=0;
- uint32_t current_size=0;
- transmit_get_data_count(&total_size,¤t_size);
- if (transmit_download_or_upload == TRANSMIT_UPLOAD) {
- ui->pbar_toboard->setMaximum(total_size);
- ui->pbar_toboard->setValue(current_size);
- }
- if (transmit_download_or_upload == TRANSMIT_DOWNLOAD) {
- ui->pbar_fromboard->setMaximum(total_size);
- ui->pbar_fromboard->setValue(current_size);
- }
-}
-void MainWindow::transmit_progress_start()
-{
- transmit_timer_handle = new QTimer(this);
- connect(transmit_timer_handle, SIGNAL(timeout()), this, SLOT(transmit_update_progress()));
- // è¿åº¦æ¡æ´æ°æ¶é´ä¸º60ms
- transmit_timer_handle->start(60);
-}
-void MainWindow::at_check_send_status(bool flag)
-{
- if(flag){
- ui_display("at cmd send success.\r\n",false);
- }else{
- QMessageBox::warning(this, tr("AT"), tr("AT send fail!\r\n"), QMessageBox::Ok);
- ui_display("at cmd send fail.\r\n",false);
- }
-}
-
-void MainWindow::dongle_suspend()
-{
- if(ui->stkw_stage->currentIndex() == PAGE_COMPLETE){
- ui->tbw_stage_complete->setEnabled(false);
- ui->pbtn_spp_connect->setEnabled(true);
- }else if(ui->stkw_stage->currentIndex() == PAGE_BOARD){
- ui->tbw_stage_board->setEnabled(false);
- }
-}
-
-void MainWindow::dongle_resume()
-{
- if(ui->stkw_stage->currentIndex() == PAGE_COMPLETE){
- ui->tbw_stage_complete->setEnabled(true);
- ui->pbtn_spp_connect->setEnabled(true);
- }else if(ui->stkw_stage->currentIndex() == PAGE_BOARD){
- ui->tbw_stage_board->setEnabled(true);
- }
-}
-
-void MainWindow::at_rx_display(int at_buf_len, u8Piont at_buf)
-{
- Q_UNUSED(at_buf_len);
- at_module_id at_module_id_temp;
- at_cmd_id at_cmd_id_temp;
- at_handler->at_get_id(&at_module_id_temp, &at_cmd_id_temp);
- if (at_buf[0] == MODULE_BT && at_buf[1] == BT_CMD_RX_RESULT) { // è¦åæµè¯RxCount
- uint32_t rx_count = at_buf[2] + (at_buf[3] << 8);
- ui->ledit_display_rx_count->setText(QString::number(rx_count));
- } else if (at_buf[0] == MODULE_MCU && at_buf[1] == MCU_CMD_CHECK_CONNECTED) { // Dongleæ¯å¦å·²è¿æ¥
- dongle_is_connected = true;
- dongle_connected_times = 0;
- dongle_resume();
- } else if (at_buf[0] == MODULE_MCU && at_buf[1] == MCU_CMD_RETURN_VALUE) {
- for (int i = 0; i < 40; i++) {
- qDebug("buf[%d] is %d.\r\n", i, at_buf[i]);
- }
- ui_display("cmd executed " + (QString)(at_buf[2] == 0 ? "Succ!" : "Fail!") + "\r\n",false);
- if (at_buf[3] != 0) {
- QByteArray data((const char*)&at_buf[4], at_buf[3]);
- ui_display(QString(data),false);
- }
- } else if (at_buf[0] == at_module_id_temp && at_buf[1] == at_cmd_id_temp) {
- ui_display("at receive success.\r\n",false);
- } else {
- ui_display("at receive fail.\r\n",false);
- }
- free(at_buf);
-}
-
-void MainWindow::at_stackinfo_send()
-{
- at_check_send_status(at_handler->at_send_cmd_string(MODULE_MCU,MCU_CMD_STACKINFO,NULL));
-}
-
-void MainWindow::at_fsrm_send()
-{
- QString str = ui->ledit_at_fsrm->text();
- if (str.isEmpty()) {
- QMessageBox::warning(this, tr("File Path"), tr("æä»¶è·¯å¾ä¸ºç©º!"), QMessageBox::Ok);
- return;
- }
- at_check_send_status(at_handler->at_send_cmd_string(MODULE_MCU,MCU_CMD_FSRM,str));
-}
-
-void MainWindow::at_mediamusicplay_send()
-{
- uint8_t media_buf_cmd[2] = {0x00, 0x00};
- QString str = ui->ledit_at_mediamusicplay->text();
- if (str.isEmpty()) {
- QMessageBox::warning(this, tr("File Path"), tr("æä»¶è·¯å¾ä¸ºç©º!"), QMessageBox::Ok);
- return;
- }
- QString media_sub_str;
- QByteArray data((const char*)media_buf_cmd, 2);
- for (int i = 0; i < data.size(); i++) {
- media_sub_str += QString(data.at(i));
- }
- str.prepend(media_sub_str);
- at_check_send_status(at_handler->at_send_cmd_string(MODULE_AUDIO,AUDIO_CMD,str));
-}
-
-void MainWindow::at_mediamusicstop_send()
-{
- uint8_t media_buf_cmd[2] = {0x00, 0x03};
- QString media_sub_str;
- QByteArray data((const char*)media_buf_cmd, 2);
- for (int i = 0; i < data.size(); i++) {
- media_sub_str += QString(data.at(i));
- }
- at_check_send_status(at_handler->at_send_cmd_string(MODULE_AUDIO,AUDIO_CMD,media_sub_str));
-}
-
-void MainWindow::at_mediaaudiorecord_send()
-{
- uint8_t media_buf_cmd[2] = {0x01, 0x00};
- QString str = ui->ledit_at_mediaaudiorecord->text();
- if (str.isEmpty()) {
- QMessageBox::warning(this, tr("File Path"), tr("æä»¶è·¯å¾ä¸ºç©º!"), QMessageBox::Ok);
- return;
- }
- QString media_sub_str;
- QByteArray data((const char*)media_buf_cmd, 2);
- for (int i = 0; i < data.size(); i++) {
- media_sub_str += QString(data.at(i));
- }
- str.prepend(media_sub_str);
- at_check_send_status(at_handler->at_send_cmd_string(MODULE_AUDIO,AUDIO_CMD,str));
-}
-
-/* ----------------------- è¦åæµè¯è®¾ç½® ------------------------------------------------- */
-void MainWindow::at_bt_delay_ms_complete()
-{
- QString str = ui->ledit_delay_ms->text();
- at_check_send_status(at_handler->at_send_cmd_string(MODULE_BT,BT_CMD_DELAY_MS,str));
-}
-
-void MainWindow::at_set_dongle_addr_complete()
-{
- QString str = ui->ledit_dongle_mac->text();
- if (str.isEmpty() || str.size() != 12) {
- QMessageBox::warning(this, tr("File Path"), tr("MACå°å为空!"), QMessageBox::Ok);
- return;
- }
- at_check_send_status(at_handler->at_send_cmd_string(MODULE_BT,BT_CMD_DONGLE_MAC,str));
-}
-void MainWindow::at_set_bt_format()
-{
- ui->ledit_br_rx_channel_complete->setValidator(new MyValidator(0,78,this));
- ui->ledit_br_tx_channel_complete->setValidator(new MyValidator(0,78,this));
- ui->ledit_ble_rx_channel_complete->setValidator(new MyValidator(0,39,this));
- ui->ledit_ble_tx_channel_complete->setValidator(new MyValidator(0,39,this));
- ui->ledit_br_rx_PayloadLen_complete->setValidator(new MyValidator(0,27,this));
- ui->ledit_br_tx_PayloadLen_complete->setValidator(new MyValidator(0,27,this));
- ui->ledit_ble_tx_PayloadLen_complete->setValidator(new MyValidator(0,255,this));
-
- ui->ledit_br_rx_channel_board->setValidator(new MyValidator(0,78,this));
- ui->ledit_br_tx_channel_board->setValidator(new MyValidator(0,78,this));
- ui->ledit_ble_rx_channel_board->setValidator(new MyValidator(0,39,this));
- ui->ledit_ble_tx_channel_board->setValidator(new MyValidator(0,39,this));
- ui->ledit_br_rx_PayloadLen_board->setValidator(new MyValidator(0,27,this));
- ui->ledit_br_tx_PayloadLen_board->setValidator(new MyValidator(0,27,this));
- ui->ledit_ble_tx_PayloadLen_board->setValidator(new MyValidator(0,255,this));
- ui->ledit_btlo_channel->setValidator(new MyValidator(0,78,this));
-}
-
-void MainWindow::at_check_bt_len(int packtype_index)
-{
- QComboBox *cbox = qobject_cast(sender());
- int len=at_handler->at_get_packet_len(packtype_index);
- QString name = cbox->objectName();
- if(name == "cbox_br_tx_PacketType_complete"){
- const MyValidator *validator=(MyValidator *)ui->ledit_br_tx_PayloadLen_complete->validator();
- delete validator;
- ui->ledit_br_tx_PayloadLen_complete->setPlaceholderText("Length(0-"+QString::number(len)+")");
- ui->ledit_br_tx_PayloadLen_complete->setValidator(new MyValidator(0,len,this));
- }else if(name == "cbox_br_rx_PacketType_complete"){
- const MyValidator *validator=(MyValidator *)ui->ledit_br_rx_PayloadLen_complete->validator();
- delete validator;
- ui->ledit_br_rx_PayloadLen_complete->setPlaceholderText("Length(0-"+QString::number(len)+")");
- ui->ledit_br_rx_PayloadLen_complete->setValidator(new MyValidator(0,len,this));
- }else if(name == "cbox_br_tx_PacketType_board"){
- const MyValidator *validator=(MyValidator *)ui->ledit_br_tx_PayloadLen_board->validator();
- delete validator;
- ui->ledit_br_tx_PayloadLen_board->setPlaceholderText("Length(0-"+QString::number(len)+")");
- ui->ledit_br_tx_PayloadLen_board->setValidator(new MyValidator(0,len,this));
- }else if(name == "cbox_br_rx_PacketType_board"){
- const MyValidator *validator=(MyValidator *)ui->ledit_br_rx_PayloadLen_board->validator();
- delete validator;
- ui->ledit_br_rx_PayloadLen_board->setPlaceholderText("Length(0-"+QString::number(len)+")");
- ui->ledit_br_rx_PayloadLen_board->setValidator(new MyValidator(0,len,this));
- }
-}
-
-/* -----------------------è¦åæµè¯-æ´æºæ®µ------------------------------------------------ */
-void MainWindow::at_get_rx_count_complete()
-{
- at_check_send_status(at_handler->at_send_cmd_string(MODULE_BT,BT_CMD_GET_RX, NULL));
-}
-
-void MainWindow::at_bt_tx_complete()
-{
- QString br_tx_switch = ui->cbox_br_tx_on_or_off_complete->currentText();
- QString channel = ui->ledit_br_tx_channel_complete->text();
- int packet_type_index = ui->cbox_br_tx_PacketType_complete->currentIndex();
- QString payload_len = ui->ledit_br_tx_PayloadLen_complete->text();
- int pattern_type_index = ui->cbox_br_tx_pattern_type_complete->currentIndex();
- QString format=at_handler->at_get_br_format(BT_MODE_BR_TX,br_tx_switch,channel,packet_type_index,payload_len,pattern_type_index);
- if(format==NULL){
- QMessageBox::warning(this, tr("AT"), tr("lengthé误!"), QMessageBox::Ok);
- }
- at_check_send_status(at_handler->at_send_cmd_string(MODULE_BT,BT_CMD_BR_TX,format));
- dongle_is_connected = false;
- dongle_suspend();
-}
-
-void MainWindow::at_bt_rx_complete()
-{
- QString br_tx_switch = ui->cbox_br_tx_on_or_off_complete->currentText();
- QString channel = ui->ledit_br_rx_channel_complete->text();
- int packet_type_index = ui->cbox_br_rx_PacketType_complete->currentIndex();
- QString payload_len = ui->ledit_br_rx_PayloadLen_complete->text();
- int pattern_type_index = ui->cbox_br_rx_pattern_type_complete->currentIndex();
- QString format=at_handler->at_get_br_format(BT_MODE_BR_RX,br_tx_switch,channel,packet_type_index,payload_len,pattern_type_index);
- if(format==NULL){
- QMessageBox::warning(this, tr("AT"), tr("lengthé误!"), QMessageBox::Ok);
- }
- at_check_send_status(at_handler->at_send_cmd_string(MODULE_BT,BT_CMD_BR_RX,format));
- dongle_is_connected = false;
- dongle_suspend();
-}
-
-void MainWindow::at_ble_tx_complete()
-{
- QString br_tx_switch = ui->cbox_ble_tx_on_or_off_complete->currentText();
- QString channel = ui->ledit_ble_tx_channel_complete->text();
- int pattern_type_index = ui->cbox_ble_tx_pattern_type_complete->currentIndex();
- QString payload_len = ui->ledit_ble_tx_PayloadLen_complete->text();
- int phy_type_index = ui->cbox_ble_tx_PacketType_complete->currentIndex();
- QString format=at_handler->at_get_ble_format(BT_MODE_BLE_TX,br_tx_switch,channel,pattern_type_index,payload_len,phy_type_index);
- at_check_send_status(at_handler->at_send_cmd_string(MODULE_BT,BT_CMD_BLE_TX,format));
- dongle_is_connected = false;
- dongle_suspend();
-}
-
-void MainWindow::at_ble_rx_complete()
-{
- QString br_tx_switch = ui->cbox_ble_rx_on_or_off_complete->currentText();
- QString channel = ui->ledit_ble_rx_channel_complete->text();
- int phy_type_index = ui->cbox_ble_rx_PacketType_complete->currentIndex();
- QString format=at_handler->at_get_ble_format(BT_MODE_BLE_RX,br_tx_switch,channel,0,0,phy_type_index);
- at_check_send_status(at_handler->at_send_cmd_string(MODULE_BT,BT_CMD_BLE_RX,format));
- dongle_is_connected = false;
- dongle_suspend();
-}
-
-void MainWindow::at_custom_send()
-{
- QString moduleId = ui->ledit_at_custom_moduleId->text();
- QString cmdId = ui->ledit_at_custom_CmdId->text();
- QString payload = ui->ledit_at_custom_Payload->text();
- bool ok;
- 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));
-}
-/* -----------------------ä¼ å¯¼æµè¯-åæ¿æ®µ------------------------------------------------ */
-void MainWindow::at_bt_tx_board()
-{
- QString br_tx_switch = ui->cbox_br_tx_on_or_off_board->currentText();
- if (br_tx_switch.contains("ON") && bt_test_switch == true) {
- QMessageBox::warning(this, tr("æä½é误"), tr("åºå
å
³éå°é¢æµè¯é¡¹!"), QMessageBox::Ok);
- }
- bt_test_switch = br_tx_switch.contains("ON") ? true : false;
- QString channel = ui->ledit_br_tx_channel_board->text();
- int packet_type_index = ui->cbox_br_tx_PacketType_board->currentIndex();
- QString payload_len = ui->ledit_br_tx_PayloadLen_board->text();
- int pattern_type_index = ui->cbox_br_tx_pattern_type_board->currentIndex();
- QString format=at_handler->at_get_br_format(BT_MODE_BR_TX,br_tx_switch,channel,packet_type_index,payload_len,pattern_type_index);
- if(format==NULL){
- QMessageBox::warning(this, tr("AT"), tr("lengthé误!"), QMessageBox::Ok);
- }
- at_check_send_status(at_handler->at_send_cmd_board(BT_MODE_BR_TX,format));
-}
-void MainWindow::at_bt_rx_board()
-{
- QString br_rx_switch = ui->cbox_br_rx_on_or_off_board->currentText();
- if (br_rx_switch.contains("ON") && bt_test_switch == true) {
- QMessageBox::warning(this, tr("æä½é误"), tr("åºå
å
³éå°é¢æµè¯é¡¹!"), QMessageBox::Ok);
- }
- bt_test_switch = br_rx_switch.contains("ON") ? true : false;
- QString channel = ui->ledit_br_rx_channel_board->text();
- int packet_type_index = ui->cbox_br_rx_PacketType_board->currentIndex();
- QString payload_len = ui->ledit_br_rx_PayloadLen_board->text();
- int pattern_type_index = ui->cbox_br_rx_pattern_type_board->currentIndex();
- QString format=at_handler->at_get_br_format(BT_MODE_BR_RX,br_rx_switch,channel,packet_type_index,payload_len,pattern_type_index);
- if(format==NULL){
- QMessageBox::warning(this, tr("AT"), tr("lengthé误!"), QMessageBox::Ok);
- }
- at_check_send_status(at_handler->at_send_cmd_board(BT_MODE_BR_RX,format));
-}
-void MainWindow::at_ble_tx_board()
-{
- QString ble_tx_switch = ui->cbox_ble_tx_on_or_off_board->currentText();
- if (ble_tx_switch.contains("ON") && bt_test_switch == true) {
- QMessageBox::warning(this, tr("æä½é误"), tr("åºå
å
³éå°é¢æµè¯é¡¹!"), QMessageBox::Ok);
- }
- bt_test_switch = ble_tx_switch.contains("ON") ? true : false;
- QString channel = ui->ledit_ble_tx_channel_board->text();
- int pattern_type_index = ui->cbox_ble_tx_pattern_type_board->currentIndex();
- QString payload_len = ui->ledit_ble_tx_PayloadLen_board->text();
- int phy_type_index = ui->cbox_ble_tx_PacketType_board->currentIndex();
- QString format=at_handler->at_get_ble_format(BT_MODE_BLE_TX,ble_tx_switch,channel,pattern_type_index,payload_len,phy_type_index);
- at_check_send_status(at_handler->at_send_cmd_board(BT_MODE_BLE_TX,format));
-}
-void MainWindow::at_ble_rx_board()
-{
- QString ble_rx_switch = ui->cbox_ble_rx_on_or_off_board->currentText();
- if (ble_rx_switch.contains("ON") && bt_test_switch == true) {
- QMessageBox::warning(this, tr("æä½é误"), tr("åºå
å
³éå°é¢æµè¯é¡¹!"), QMessageBox::Ok);
- }
- bt_test_switch = ble_rx_switch.contains("ON") ? true : false;
- QString channel = ui->ledit_ble_rx_channel_board->text();
- int phy_type_index = ui->cbox_ble_rx_PacketType_board->currentIndex();
- QString format=at_handler->at_get_ble_format(BT_MODE_BLE_RX,ble_rx_switch,channel,0,0,phy_type_index);
- at_check_send_status(at_handler->at_send_cmd_board(BT_MODE_BLE_RX,format));
-}
-
-void MainWindow::at_bt_dutmode_board()
-{
- QString bt_dutmode_switch = ui->cbox_btdutmode_on_or_off_board->currentText();
- if (bt_dutmode_switch.contains("ON") && bt_test_switch == true) {
- QMessageBox::warning(this, tr("æä½é误"), tr("åºå
å
³éå°é¢æµè¯é¡¹!"), QMessageBox::Ok);
- }
- bt_test_switch = bt_dutmode_switch.contains("ON") ? true : false;
- QString format=at_handler->at_get_switch_format(bt_dutmode_switch);
- at_check_send_status(at_handler->at_send_cmd_board(BT_MODE_BTDUTMODE,format));
-}
-void MainWindow::at_bt_btlo_board()
-{
- QString format;
- format += ui->ledit_btlo_channel->text()+",";
- format += "7,";
- if(ui->cbox_btlo_on_or_off_board->currentText().contains("ON")){
- format+="1";
- }else{
- format+="2";
- }
- at_check_send_status(at_handler->at_send_cmd_board(BT_MODE_BTLO,format));
-}
-
-void MainWindow::at_bt_btpwr_board()
-{
- QString format;
- format += ui->ledit_btpwr_powerchip->text()+",";
- if(ui->cbox_btpwr_on_or_off_board->currentText().contains("ON")){
- format+="1";
- }else{
- format+="0";
- }
- at_check_send_status(at_handler->at_send_cmd_board(BT_MODE_BTPWR,format));
-}
-
-void MainWindow::at_bt_wakeup()
-{
- QString format= "012345678901234567890123456789";
- at_check_send_status(at_handler->at_send_cmd_board(MODE_MAX,format));
-}
-
-void MainWindow::at_bt_sleep()
-{
- QString format= "AT^RMVO";
- at_check_send_status(at_handler->at_send_cmd_board(MODE_MAX,format));
-}
-/* ----------------------------------------------------------------------------------- */
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+MainWindow::MainWindow(QWidget *parent)
+ : QMainWindow(parent)
+ , ui(new Ui::MainWindow)
+{
+ ui->setupUi(this);
+ setWindowTitle("é·é¸äº§æµå·¥å
·");
+
+ // ç¡®ä¿æ§å¶å°è¾åºä½¿ç¨UTF-8ç¼ç
+ QTextCodec *utf8Codec = QTextCodec::codecForName("UTF-8");
+ QTextCodec::setCodecForLocale(utf8Codec);
+ #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
+ QTextCodec::setCodecForCStrings(utf8Codec);
+ QTextCodec::setCodecForTr(utf8Codec);
+ #endif
+
+ // åå§å串å£å¯¹è±¡
+ serial = new QSerialPort(this);
+ connect(serial, &QSerialPort::readyRead, this, &MainWindow::readSerialData);
+
+ // åå§å·æ°ä¸²å£å表
+ updateSerialPorts();
+
+ // åå§åæé®æ ·å¼ï¼å¯éï¼è®¾ç½®é»è®¤æ ·å¼ï¼
+ ui->openButton->setStyleSheet("QPushButton { padding: 5px 10px; }");
+
+ // è®¾ç½®äº§æµæé®é»è®¤èè²æ ·å¼
+ ui->openButton_2->setStyleSheet("QPushButton { background-color: #4A90E2; color: white; padding: 5px 10px; border: none; border-radius: 3px; }");
+
+ // åå§å产æµç¸å
³åé
+ lcdTestTimer = new QTimer(this);
+ motorTestTimer = new QTimer(this);
+ test4GTimer = new QTimer(this);
+ signal4GTimer = new QTimer(this);
+ cat1SignalTimer = new QTimer(this);
+ testTimeoutTimer = new QTimer(this);
+ currentLcdColor = 0;
+ initRetry4GCount = 0;
+ signalTest4GCount = 0;
+ signalReceived4GCount = 0;
+ signalGood4GCount = 0;
+ pppCommandCount = 0;
+ hasReceivedSignalSim = false;
+ hasReceivedFirstSignal = false;
+ cat1SignalTestCount = 0;
+ cat1SignalReceivedCount = 0;
+ cat1SignalGoodCount = 0;
+ cat1Signal99Count = 0;
+ cat1SignalTotalValue = 0;
+ hasReceivedPppInfo = false;
+ isProductionTestRunning = false;
+ currentTestStep = TEST_IDLE;
+ lcdTestPopupShown = false;
+ motorTestPopupShown = false;
+ isWaitingForUserConfirm = false;
+ keyTestStarted = false;
+ keyTestDialog = nullptr;
+ audioTestPopupShown = false;
+ audioPlaybackPopupShown = false;
+ audioRecordTimer = new QTimer(this);
+ audioTestDialog = nullptr;
+ audioDialogLabel = nullptr;
+ audioDialogInfo = nullptr;
+ audioStartButton = nullptr;
+ audioPassButton = nullptr;
+ audioFailButton = nullptr;
+ audioRetestButton = nullptr;
+ currentAudioStep = AUDIO_PLAYING_1KHZ;
+ currentModemVersion = "";
+ currentSimStatus = -1;
+
+ // åå§åæé®æµè¯ç¶æ
+ for (int i = 0; i < 4; i++) {
+ keyTestStatus[i] = 0;
+ keyButtons[i] = nullptr;
+ }
+
+ // è¿æ¥å®æ¶å¨ä¿¡å·
+ connect(lcdTestTimer, &QTimer::timeout, this, &MainWindow::onLcdTestTimer);
+ connect(motorTestTimer, &QTimer::timeout, this, &MainWindow::onMotorTestTimer);
+ connect(test4GTimer, &QTimer::timeout, this, &MainWindow::on4GTestTimeout);
+ connect(signal4GTimer, &QTimer::timeout, this, &MainWindow::on4GSignalTimer);
+ connect(cat1SignalTimer, &QTimer::timeout, this, &MainWindow::onCat1SignalTimer);
+ connect(testTimeoutTimer, &QTimer::timeout, this, &MainWindow::onTestTimeout);
+ connect(audioRecordTimer, &QTimer::timeout, this, &MainWindow::onAudioRecordTimer);
+}
+
+MainWindow::~MainWindow()
+{
+ delete ui;
+ if (serial->isOpen()) {
+ serial->close();
+ }
+ delete serial;
+}
+
+// å·æ°ä¸²å£å表
+void MainWindow::on_refreshButton_clicked()
+{
+ updateSerialPorts();
+}
+
+// æ´æ°å¯ç¨ä¸²å£
+void MainWindow::updateSerialPorts()
+{
+ ui->portNameBox->clear();
+ // è·åææå¯ç¨ä¸²å£
+ const auto infos = QSerialPortInfo::availablePorts();
+ for (const QSerialPortInfo &info : infos) {
+ ui->portNameBox->addItem(info.portName() + " (" + info.description() + ")");
+ }
+}
+
+// æå¼/å
³é串å£ï¼å¸¦æé®åè²ææï¼
+void MainWindow::on_openButton_clicked()
+{
+ if (serial->isOpen()) {
+ // å
³é串å£
+ serial->close();
+ ui->openButton->setText("æå¼ä¸²å£");
+ // æ¢å¤æé®é»è®¤æ ·å¼
+ ui->openButton->setStyleSheet("QPushButton { padding: 5px 10px; }");
+ return;
+ }
+
+ // æ£æ¥æ¯å¦éæ©äºä¸²å£
+ if (ui->portNameBox->currentText().isEmpty()) {
+ QMessageBox::warning(this, "è¦å", "请å
鿩䏲å£");
+ return;
+ }
+
+ // é
置串å£åæ°ï¼åºå®å¼ï¼
+ QString portText = ui->portNameBox->currentText();
+ QString portName = portText.left(portText.indexOf(" ("));
+ serial->setPortName(portName);
+
+ // åºå®åæ°é
ç½®
+ serial->setBaudRate(500000); // æ³¢ç¹ç500000
+ serial->setDataBits(QSerialPort::Data8); // 8æ°æ®ä½
+ serial->setParity(QSerialPort::NoParity); // æ æ ¡éªä½
+ serial->setStopBits(QSerialPort::OneStop); // 1忢ä½
+ serial->setFlowControl(QSerialPort::NoFlowControl);
+
+ // æå¼ä¸²å£
+ if (serial->open(QIODevice::ReadWrite)) {
+ ui->openButton->setText("å
³é串å£");
+ // 设置æé®ä¸ºç»¿è²ï¼æå¼ç¶æï¼
+ ui->openButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #4CAF50; " // 绿è²èæ¯
+ "color: white; " // ç½è²æå
+ "padding: 5px 10px; " // å
è¾¹è·
+ "border-radius: 3px; " // åè§
+ "}"
+ "QPushButton:hover { "
+ "background-color: #45a049; " // hoveræ¶å æ·±é¢è²
+ "}"
+ );
+ } else {
+ QMessageBox::critical(this, "é误", "æ æ³æå¼ä¸²å£ï¼" + serial->errorString());
+ }
+}
+
+// åéæ°æ®
+void MainWindow::on_sendButton_clicked()
+{
+ if (!serial->isOpen()) {
+ QMessageBox::warning(this, "è¦å", "请å
æå¼ä¸²å£");
+ return;
+ }
+
+ // è·ååéåºææ¬
+ QString sendStr = ui->sendTextEdit->toPlainText();
+ if (sendStr.isEmpty()) return;
+
+ // å¨åéå
容æ«å°¾æ·»å \r\nï¼å车æ¢è¡ï¼
+ sendStr += "\r\n";
+
+ // åéæ°æ®ï¼é»è®¤ASCII模å¼ï¼å
å«èªå¨æ·»å çæ¢è¡ï¼
+ QByteArray sendData = sendStr.toUtf8();
+ serial->write(sendData);
+}
+
+
+// æ¸
ç©ºæ¥æ¶åº
+void MainWindow::on_clearRecvButton_clicked()
+{
+ ui->recvTextEdit->clear();
+}
+
+// æ¸
空åéåº
+void MainWindow::on_clearSendButton_clicked()
+{
+ ui->sendTextEdit->clear();
+}
+
+
+void MainWindow::ShowSoftVer(const QString& data)
+{
+ // æ¥æ¾"BuildVer:"çèµ·å§ä½ç½®ï¼å¤§å°å䏿æï¼
+ int verStart = data.indexOf("BuildVer:", 0, Qt::CaseInsensitive);
+
+ if (verStart == -1) {
+ return; // æªæ¾å°BuildVer:ï¼ç´æ¥è¿å
+ }
+
+ // 计ç®çæ¬ä¿¡æ¯çèµ·å§ä½ç½®ï¼è·³è¿"BuildVer:"ï¼
+ const QString key = "BuildVer:";
+ verStart += key.length();
+
+
+ // æ¥æ¾ç»å°¾çæ¢è¡ç¬¦\nï¼çæ¬ä¿¡æ¯ç»ææ å¿ï¼
+ int verEnd = data.indexOf('\n', verStart);
+
+ if (verEnd == -1) {
+ return; // æªæ¾å°æ¢è¡ç¬¦ï¼æ°æ®ä¸å®æ´ï¼è¿å
+ }
+
+ // æåä»BuildVer:ä¹åå°æ¢è¡ç¬¦ä¹åçå
容ï¼å³çæ¬ä¿¡æ¯ï¼
+ QString verInfo = data.mid(verStart, verEnd - verStart);
+
+ // å»é¤å¯è½çåå空ç½å符ï¼å¦ç©ºæ ¼ãå¶è¡¨ç¬¦ï¼
+ verInfo = verInfo.trimmed();
+
+ // æ¾ç¤ºå°ææ¬æ¡
+ ui->VerlineEdit->setText(verInfo);
+
+ // æ ¡éªææVER
+ QString expectedVer = ui->expectedVerLineEdit ? ui->expectedVerLineEdit->text().trimmed() : QString();
+ if (!expectedVer.isEmpty() && verInfo != expectedVer) {
+ ui->statusbar->showMessage("çæ¬ä¸ä¸è´: å®é
VER=" + verInfo + " ææVER=" + expectedVer, 5000);
+ QMessageBox::critical(this, "çæ¬æ ¡éªå¤±è´¥", "VERä¸ä¸è´ï¼æµè¯å¤±è´¥!\nå®é
: " + verInfo + "\nææ: " + expectedVer);
+ isProductionTestRunning = false;
+ currentTestStep = TEST_COMPLETED;
+ showFinalTestResult();
+ return;
+ }
+}
+
+
+
+
+// æ£æµg_VibratorFunc彿°ï¼å¤æé©¬è¾¾å¼å¯æ¯å¦éè¿
+void MainWindow::CheckVibratorFunc(const QString& data)
+{
+ // æ¥æ¾"g_VibratorFunc"çä½ç½®ï¼å¹¶ä¸åªå¨é©¬è¾¾æµè¯é¶æ®µä¸æªæ¾ç¤ºè¿å¼¹çªæ¶å¼¹åº
+ if (data.indexOf("g_VibratorFunc") != -1 && currentTestStep == TEST_MOTOR &&
+ !motorTestPopupShown && isProductionTestRunning) {
+
+ qDebug() << "æ£æµå°g_VibratorFuncï¼é©¬è¾¾å¼å¯éè¿";
+ qDebug() << "å夿¾ç¤ºé©¬è¾¾æµè¯ç¡®è®¤å¼¹çª";
+
+ // æ è®°å¼¹çªå·²æ¾ç¤ºï¼é¿å
éå¤å¼¹åº
+ motorTestPopupShown = true;
+ isWaitingForUserConfirm = true;
+
+ // 忢è¶
æ¶æ£æµï¼å ä¸ºå·²ç»æ¶å°ååº
+ if (testTimeoutTimer->isActive()) {
+ testTimeoutTimer->stop();
+ qDebug() << "马达æµè¯æ¶å°ååºï¼åæ¢è¶
æ¶æ£æµ";
+ }
+
+ // æåé©¬è¾¾å®æ¶å¨ï¼çå¾
ç¨æ·ç¡®è®¤
+ if (motorTestTimer->isActive()) {
+ motorTestTimer->stop();
+ qDebug() << "æå马达æµè¯å®æ¶å¨ï¼çå¾
ç¨æ·ç¡®è®¤";
+ }
+
+ // å¼¹åºç¡®è®¤å¯¹è¯æ¡è®©æµè¯äººå确认马达æ¯å¦éå¨
+ QMessageBox msgBox(this);
+ msgBox.setWindowTitle("马达æµè¯ç¡®è®¤");
+ msgBox.setText("马达æµè¯å·²å¼å¯ï¼è¯·æµè¯äººåæ£æ¥é©¬è¾¾æ¯å¦éå¨ã");
+ msgBox.setInformativeText("è¯·éæ©é©¬è¾¾æµè¯ç»æï¼");
+ msgBox.setIcon(QMessageBox::Question);
+
+ // 设置弹çªå°ºå¯¸æ´å¤§
+ msgBox.resize(400, 200);
+
+ // æ·»å èªå®ä¹æé®
+ QPushButton *successButton = msgBox.addButton("â æµè¯éè¿", QMessageBox::AcceptRole);
+ QPushButton *failButton = msgBox.addButton("â æµè¯å¤±è´¥", QMessageBox::RejectRole);
+ QPushButton *retestButton = msgBox.addButton("ð éæ°æµè¯", QMessageBox::ResetRole);
+
+ // 设置æé®æ ·å¼
+ successButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #4CAF50; " // 绿è²èæ¯
+ "color: white; " // ç½è²æå
+ "padding: 12px 20px; " // å¢å¤§å
è¾¹è·
+ "border-radius: 4px; " // åè§
+ "font-weight: bold; " // ç²ä½
+ "font-size: 16px; " // å¢å¤§åä½
+ "}"
+ "QPushButton:hover { "
+ "background-color: #45a049; " // hoveræ¶å æ·±é¢è²
+ "}"
+ );
+
+ failButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #f44336; " // 红è²èæ¯
+ "color: white; " // ç½è²æå
+ "padding: 12px 20px; " // å¢å¤§å
è¾¹è·
+ "border-radius: 4px; " // åè§
+ "font-weight: bold; " // ç²ä½
+ "font-size: 16px; " // å¢å¤§åä½
+ "}"
+ "QPushButton:hover { "
+ "background-color: #da190b; " // hoveræ¶å æ·±é¢è²
+ "}"
+ );
+
+ retestButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #FF9800; " // æ©è²èæ¯
+ "color: white; " // ç½è²æå
+ "padding: 12px 20px; " // å¢å¤§å
è¾¹è·
+ "border-radius: 4px; " // åè§
+ "font-weight: bold; " // ç²ä½
+ "font-size: 16px; " // å¢å¤§åä½
+ "}"
+ "QPushButton:hover { "
+ "background-color: #F57C00; " // hoveræ¶å æ·±é¢è²
+ "}"
+ );
+
+ // æ¾ç¤ºå¯¹è¯æ¡å¹¶çå¾
ç¨æ·éæ©
+ msgBox.exec();
+
+ // ç¨æ·å·²ååºéæ©ï¼åæ¶çå¾
ç¶æ
+ isWaitingForUserConfirm = false;
+
+ // æ è®ºç¨æ·éæ©ä»ä¹ï¼é½å
åæ¢é©¬è¾¾
+ serial->write("AT^VIBRATORTIMER=0\r\n");
+ qDebug() << "åéé©¬è¾¾åæ¢æä»¤: AT^VIBRATORTIMER=0";
+
+ // æ ¹æ®ç¨æ·éæ©å¤çç»æ
+ if (msgBox.clickedButton() == successButton) {
+ // æµè¯äººå确认马达é卿£å¸¸
+ qDebug() << "æµè¯äººå确认ï¼é©¬è¾¾é卿£å¸¸";
+
+ ui->statusbar->showMessage("马达æµè¯éè¿ - é卿£å¸¸ï¼", 3000);
+ updateTestStatus("motor", STATUS_SUCCESS);
+
+ } else if (msgBox.clickedButton() == failButton) {
+ // æµè¯äººå确认马达éå¨å¼å¸¸
+ qDebug() << "æµè¯äººå确认ï¼é©¬è¾¾éå¨å¼å¸¸";
+
+ ui->statusbar->showMessage("马达æµè¯å¤±è´¥ - éå¨å¼å¸¸ï¼", 3000);
+ updateTestStatus("motor", STATUS_FAILED);
+
+ } else if (msgBox.clickedButton() == retestButton) {
+ // éæ°æµè¯é©¬è¾¾
+ qDebug() << "ç¨æ·éæ©éæ°æµè¯é©¬è¾¾";
+ ui->statusbar->showMessage("åæ¢é©¬è¾¾éå¨ï¼åå¤éæ°æµè¯...", 2000);
+
+ // å
åéåæ¢é©¬è¾¾é卿令
+ serial->write("AT^VIBRATORTIMER=0\r\n");
+ qDebug() << "åéåæ¢é©¬è¾¾æä»¤: AT^VIBRATORTIMER=0";
+
+ // é置马达æµè¯ç¶æ
+ motorTestPopupShown = false;
+ isWaitingForUserConfirm = false;
+
+ // å»¶è¿1ç§åéæ°å¼å§é©¬è¾¾æµè¯
+ QTimer::singleShot(1000, this, [this]() {
+ if (!isProductionTestRunning) return; // ç¡®ä¿äº§æµè¿å¨è¿è¡
+
+ qDebug() << "1ç§å»¶è¿åå¼å§éæ°æµè¯é©¬è¾¾";
+ ui->statusbar->showMessage("éæ°å¼å§é©¬è¾¾æµè¯", 2000);
+ currentTestStep = TEST_MOTOR;
+ performMotorTest();
+ });
+ return; // ç´æ¥è¿åï¼ä¸ç»§ç»åç»æµç¨
+ }
+
+ // ç¨æ·ç¡®è®¤å®æï¼é©¬è¾¾æµè¯ç»æï¼å¼å§æé®æµè¯
+ if (isProductionTestRunning && currentTestStep == TEST_MOTOR) {
+ qDebug() << "马达æµè¯ç¡®è®¤å®æï¼å¼å§æé®æµè¯";
+ currentTestStep = TEST_KEY;
+ performKeyTest();
+ }
+ }
+}
+
+// æåIMEIä¿¡æ¯ï¼æ¯æå¤ç§æ ¼å¼ï¼
+void MainWindow::ShowPppInfoIMEI(const QString& data)
+{
+ QString imeiInfo;
+
+ qDebug() << "å¼å§æåIMEIï¼åå§æ°æ®:" << data.trimmed();
+
+ // ä¼å
å¤çç´æ¥ä»¥æ°åå¼å¤´çæ ¼å¼ï¼æå¸¸è§çæ°æ ¼å¼ï¼
+ QRegExp imeiPattern("^(\\d{15})");
+ if (imeiPattern.indexIn(data.trimmed()) == 0) {
+ imeiInfo = imeiPattern.cap(1);
+ qDebug() << "ä½¿ç¨æ°åå¼å¤´æ ¼å¼æåIMEI:" << imeiInfo;
+ }
+ // æ¹æ³2ï¼æ¥æ¾"IMEI:"æ è¯çæ ¼å¼ï¼ä¼ ç»æ ¼å¼ï¼
+ else {
+ int start = data.indexOf("IMEI:", 0, Qt::CaseInsensitive);
+ if (start != -1) {
+ // 计ç®IMEIå·ç çèµ·å§ä½ç½®ï¼è·³è¿"IMEI: "ï¼
+ const QString key = "IMEI:";
+ start += key.length();
+
+ // è·³è¿å¯è½çç©ºæ ¼
+ while (start < data.length() && data.at(start) == ' ') {
+ start++;
+ }
+
+ // æ¥æ¾è¡ç»ææ å¿ï¼æ¢è¡ç¬¦æåç¬¦ä¸²ç»æï¼
+ int end = data.indexOf('\n', start);
+ if (end == -1) {
+ end = data.indexOf('\r', start);
+ if (end == -1) {
+ end = data.length();
+ }
+ }
+
+ // æåIMEIä¿¡æ¯
+ imeiInfo = data.mid(start, end - start).trimmed();
+ qDebug() << "使ç¨IMEI:æ ¼å¼æåIMEI:" << imeiInfo;
+ }
+ // æ¹æ³3ï¼æ¥æ¾"imei:"æ è¯çæ ¼å¼
+ else {
+ start = data.indexOf("imei:", 0, Qt::CaseInsensitive);
+ if (start != -1) {
+ // 计ç®IMEIå·ç çèµ·å§ä½ç½®ï¼è·³è¿"imei:"ï¼
+ const QString key = "imei:";
+ start += key.length();
+
+ // æ¥æ¾@符å·ä½ä¸ºç»ææ å¿
+ int end = data.indexOf('@', start);
+ if (end == -1) {
+ // å¦ææ²¡æ@符å·ï¼æ¥æ¾è¡ç»ææ å¿
+ end = data.indexOf('\n', start);
+ if (end == -1) {
+ end = data.indexOf('\r', start);
+ if (end == -1) {
+ end = data.length();
+ }
+ }
+ }
+
+ // æåIMEIä¿¡æ¯
+ imeiInfo = data.mid(start, end - start).trimmed();
+ qDebug() << "使ç¨imei:æ ¼å¼æåIMEI:" << imeiInfo;
+ } else {
+ qDebug() << "æªæ¾å°ä»»ä½IMEIæ ¼å¼ï¼æ°æ®:" << data.trimmed();
+ return;
+ }
+ }
+ }
+
+ // éªè¯IMEIæ ¼å¼æ¯å¦ææ
+ if (!imeiInfo.isEmpty() && isValidIMEI(imeiInfo)) {
+ // æ¾ç¤ºå°IMEIææ¬æ¡
+ ui->IMEIlineEdit->setText(imeiInfo);
+ qDebug() << "æç»æåçIMEI:" << imeiInfo;
+ } else {
+ if (imeiInfo.isEmpty()) {
+ qDebug() << "IMEIä¿¡æ¯ä¸ºç©ºï¼æ°æ®:" << data.trimmed();
+ } else {
+ qDebug() << "IMEIæ ¼å¼ä¸æ£ç¡®ï¼ä¸æ¾ç¤ºå°çé¢ï¼IMEI:" << imeiInfo;
+ ui->statusbar->showMessage("IMEIæ ¼å¼ä¸æ£ç¡®: " + imeiInfo, 3000);
+ }
+ }
+}
+
+// æåICCIDä¿¡æ¯ï¼æ¯æå¤ç§æ ¼å¼ï¼
+void MainWindow::ShowPppInfoICCID(const QString& data)
+{
+ QString iccidInfo;
+
+ // æ¹æ³1ï¼ä½¿ç¨æ£åè¡¨è¾¾å¼æå@iccid:åé¢çæ°å忝ç»å
+ QRegExp iccidRegex("@?iccid:([0-9A-Fa-f]{19,20})(?:@|\\s|$)", Qt::CaseInsensitive);
+ if (iccidRegex.indexIn(data) != -1) {
+ iccidInfo = iccidRegex.cap(1);
+ qDebug() << "ä½¿ç¨æ£åè¡¨è¾¾å¼æåICCID:" << iccidInfo;
+ } else {
+ // æ¹æ³2ï¼ä¼ ç»æ¹å¼æ¥æ¾"ICCID:"
+ int start = data.indexOf("ICCID:", 0, Qt::CaseInsensitive);
+ if (start == -1) {
+ qDebug() << "æªæ¾å°ICCID:æ è¯";
+ return;
+ }
+
+ // 计ç®ICCIDå·ç çèµ·å§ä½ç½®ï¼è·³è¿"ICCID:"ï¼
+ start += 6; // "ICCID:"çé¿åº¦
+
+ // è·³è¿å¯è½çç©ºæ ¼
+ while (start < data.length() && data.at(start) == ' ') {
+ start++;
+ }
+
+ // æ¥æ¾ICCIDç»ææ å¿ï¼@符å·ãæ¢è¡ç¬¦æåç¬¦ä¸²ç»æï¼
+ int end = data.indexOf('@', start);
+ if (end == -1) {
+ end = data.indexOf('\n', start);
+ if (end == -1) {
+ end = data.indexOf('\r', start);
+ if (end == -1) {
+ end = data.length();
+ }
+ }
+ }
+
+ // æåICCIDä¿¡æ¯
+ iccidInfo = data.mid(start, end - start).trimmed();
+ qDebug() << "使ç¨ä¼ ç»æ¹å¼æåICCID:" << iccidInfo;
+ }
+
+ // éªè¯ICCIDæ ¼å¼æ¯å¦ææ
+ if (isValidICCID(iccidInfo)) {
+ // æ¾ç¤ºå°ICCIDææ¬æ¡
+ ui->ICCIDlineEdit->setText(iccidInfo);
+ qDebug() << "æåçICCID:" << iccidInfo;
+ } else {
+ qDebug() << "ICCIDæ ¼å¼ä¸æ£ç¡®ï¼ä¸æ¾ç¤ºå°çé¢ï¼ICCID:" << iccidInfo;
+ ui->statusbar->showMessage("ICCIDæ ¼å¼ä¸æ£ç¡®: " + iccidInfo, 3000);
+ }
+}
+
+// æåModem Versionä¿¡æ¯ï¼æ¯æå¤ç§æ ¼å¼ï¼
+void MainWindow::ShowPppInfoModemVer(const QString& data)
+{
+ QString modemVerInfo;
+ int start;
+
+ // æ¹æ³1ï¼æ¥æ¾"Modem Version:"æ è¯çæ ¼å¼ï¼ä¼ ç»æ ¼å¼ï¼
+ start = data.indexOf("Modem Version:", 0, Qt::CaseInsensitive);
+ if (start != -1) {
+ // 计ç®çæ¬ä¿¡æ¯çèµ·å§ä½ç½®ï¼è·³è¿"Modem Version: "ï¼
+ const QString key = "Modem Version:";
+ start += key.length();
+
+ // è·³è¿å¯è½çç©ºæ ¼
+ while (start < data.length() && data.at(start) == ' ') {
+ start++;
+ }
+
+ // æ¥æ¾è¡ç»ææ å¿ï¼æ¢è¡ç¬¦æåç¬¦ä¸²ç»æï¼
+ int end = data.indexOf('\n', start);
+ if (end == -1) {
+ end = data.indexOf('\r', start);
+ if (end == -1) {
+ end = data.length();
+ }
+ }
+
+ // æåModemçæ¬ä¿¡æ¯
+ modemVerInfo = data.mid(start, end - start).trimmed();
+ }
+ // æ¹æ³2ï¼æ¥æ¾"@modemVer:"æ è¯çæ ¼å¼ï¼æ°æ ¼å¼ï¼
+ else {
+ start = data.indexOf("@modemVer:", 0, Qt::CaseInsensitive);
+ if (start != -1) {
+ // 计ç®çæ¬ä¿¡æ¯çèµ·å§ä½ç½®ï¼è·³è¿"@modemVer:"ï¼
+ const QString key = "@modemVer:";
+ start += key.length();
+
+ // æ¥æ¾è¡ç»ææ å¿ï¼æ¢è¡ç¬¦æåç¬¦ä¸²ç»æï¼
+ int end = data.indexOf('\n', start);
+ if (end == -1) {
+ end = data.indexOf('\r', start);
+ if (end == -1) {
+ end = data.length();
+ }
+ }
+
+ // æåModemçæ¬ä¿¡æ¯
+ modemVerInfo = data.mid(start, end - start).trimmed();
+ qDebug() << "使ç¨@modemVer:æ ¼å¼æåModem Version:" << modemVerInfo;
+ }
+ // æ¹æ³3ï¼æ¥æ¾"modemver(...)"æ¬å·æ ¼å¼
+ else {
+ // ä½¿ç¨æ£åè¡¨è¾¾å¼æåæ¬å·å
çå
容
+ QRegExp modemPattern("modemver\\(([^)]+)\\)", Qt::CaseInsensitive);
+ if (modemPattern.indexIn(data) != -1) {
+ modemVerInfo = modemPattern.cap(1);
+ qDebug() << "ä½¿ç¨æ¬å·æ ¼å¼æåModem Version:" << modemVerInfo;
+ } else {
+ qDebug() << "æªæ¾å°Modem Versionä¿¡æ¯ï¼æ°æ®æ ¼å¼:" << data.trimmed();
+ return;
+ }
+ }
+ }
+
+ // éªè¯Modem Versionæ¯å¦ææï¼ä¸ä¸ºç©ºå³å¯ï¼
+ if (!modemVerInfo.isEmpty()) {
+ // ä¿åå°æååé
+ currentModemVersion = modemVerInfo;
+ // æ¾ç¤ºå°ModemVerææ¬æ¡
+ ui->ModemVerlineEdit->setText(modemVerInfo);
+ qDebug() << "æåçModem Version:" << modemVerInfo;
+ qDebug() << "MODEMç±»å夿: " << (isEGModem() ? "EGç³»å" : "éEGç³»å");
+
+ modemVerInfo = modemVerInfo.replace("!", "");
+ currentModemVersion = modemVerInfo;
+ ui->ModemVerlineEdit->setText(modemVerInfo);
+
+ // æ ¡éªææMODEM_VER
+ QString expectedModem = ui->expectedModemVerLineEdit ? ui->expectedModemVerLineEdit->text().trimmed() : QString();
+ qDebug() << "æåçModem Version:" << modemVerInfo;
+ qDebug() << "ææçModem Version:" << expectedModem;
+ if (!expectedModem.isEmpty() && modemVerInfo.compare(expectedModem, Qt::CaseSensitive) != 0) {
+ ui->statusbar->showMessage("MODEMçæ¬ä¸ä¸è´: å®é
=" + modemVerInfo + " ææ=" + expectedModem, 5000);
+ QMessageBox::critical(this, "çæ¬æ ¡éªå¤±è´¥", "MODEM_VERä¸ä¸è´ï¼æµè¯å¤±è´¥!\nå®é
: " + modemVerInfo + "\nææ: " + expectedModem);
+ isProductionTestRunning = false;
+ currentTestStep = TEST_COMPLETED;
+ showFinalTestResult();
+ return;
+ }
+ } else {
+ qDebug() << "Modem Versionä¿¡æ¯ä¸ºç©ºï¼æ°æ®:" << data.trimmed();
+ }
+}
+
+// æåPYVER Versionä¿¡æ¯ï¼æ¯æå¤ç§æ ¼å¼ï¼
+void MainWindow::ShowPppInfoPYVer(const QString& data)
+{
+ QString PYVerInfo;
+ int start;
+
+ // æ¹æ³1ï¼æ¥æ¾"Modem Version:"æ è¯çæ ¼å¼ï¼ä¼ ç»æ ¼å¼ï¼
+ start = data.indexOf("PYVER Version:", 0, Qt::CaseInsensitive);
+ if (start != -1) {
+ // 计ç®çæ¬ä¿¡æ¯çèµ·å§ä½ç½®ï¼è·³è¿"Modem Version: "ï¼
+ const QString key = "PYVER Version:";
+ start += key.length();
+
+ // è·³è¿å¯è½çç©ºæ ¼
+ while (start < data.length() && data.at(start) == ' ') {
+ start++;
+ }
+
+ // æ¥æ¾è¡ç»ææ å¿ï¼æ¢è¡ç¬¦æåç¬¦ä¸²ç»æï¼
+ int end = data.indexOf('\n', start);
+ if (end == -1) {
+ end = data.indexOf('\r', start);
+ if (end == -1) {
+ end = data.length();
+ }
+ }
+
+ // æåModemçæ¬ä¿¡æ¯
+ PYVerInfo = data.mid(start, end - start).trimmed();
+ }
+ // æ¹æ³2ï¼æ¥æ¾"@modemVer:"æ è¯çæ ¼å¼ï¼æ°æ ¼å¼ï¼
+ else {
+ start = data.indexOf("@pyver:", 0, Qt::CaseInsensitive);
+ if (start != -1) {
+ // 计ç®çæ¬ä¿¡æ¯çèµ·å§ä½ç½®ï¼è·³è¿"@modemVer:"ï¼
+ const QString key = "@pyver:";
+ start += key.length();
+
+ // æ¥æ¾è¡ç»ææ å¿ï¼æ¢è¡ç¬¦æåç¬¦ä¸²ç»æï¼
+ int end = data.indexOf('\n', start);
+ if (end == -1) {
+ end = data.indexOf('\r', start);
+ if (end == -1) {
+ end = data.length();
+ }
+ }
+
+ // æåModemçæ¬ä¿¡æ¯
+ PYVerInfo = data.mid(start, end - start).trimmed();
+ qDebug() << "使ç¨@pyver:æ ¼å¼æåpyver:" << PYVerInfo;
+ }
+ // æ¹æ³3ï¼æ¥æ¾"modemver(...)"æ¬å·æ ¼å¼
+ else {
+ // ä½¿ç¨æ£åè¡¨è¾¾å¼æåæ¬å·å
çå
容
+ QRegExp PYPattern("pyver\\(([^)]+)\\)", Qt::CaseInsensitive);
+ if (PYPattern.indexIn(data) != -1) {
+ PYVerInfo = PYPattern.cap(1);
+ qDebug() << "ä½¿ç¨æ¬å·æ ¼å¼æåpvver :" << PYVerInfo;
+ } else {
+ qDebug() << "ä½¿ç¨æ¬å·æ ¼å¼æåpvver :" << data.trimmed();
+ return;
+ }
+ }
+ }
+
+ // éªè¯Modem Versionæ¯å¦ææï¼ä¸ä¸ºç©ºå³å¯ï¼
+ if (!PYVerInfo.isEmpty()) {
+ // ä¿åå°æååé
+ currentPYVerVersion = PYVerInfo;
+ // æ¾ç¤ºå°ModemVerææ¬æ¡
+ ui->PYVerlineEdit->setText(PYVerInfo);
+ qDebug() << "æåçPYVER Version:" << PYVerInfo;
+ qDebug() << "MODEMç±»å夿: " << (isEGModem() ? "EGç³»å" : "éEGç³»å");
+
+ // æ ¡éªææMODEM_VER
+ QString expectedPYVER = ui->expectedPYVerLineEdit ? ui->expectedPYVerLineEdit->text().trimmed() : QString();
+ if (!expectedPYVER.isEmpty() && PYVerInfo.compare(expectedPYVER, Qt::CaseSensitive) != 0) {
+ ui->statusbar->showMessage("PYVERçæ¬ä¸ä¸è´: å®é
=" + PYVerInfo + " ææ=" + expectedPYVER, 5000);
+ QMessageBox::critical(this, "çæ¬æ ¡éªå¤±è´¥", "PYVERä¸ä¸è´ï¼æµè¯å¤±è´¥!\nå®é
: " + PYVerInfo + "\nææ: " + expectedPYVER);
+ isProductionTestRunning = false;
+ currentTestStep = TEST_COMPLETED;
+ showFinalTestResult();
+ return;
+ }
+ } else {
+ qDebug() << "PYVER Versionä¿¡æ¯ä¸ºç©ºï¼æ°æ®:" << data.trimmed();
+ }
+}
+
+// IMEIæ ¼å¼éªè¯å½æ° - IMEIåºä¸º15使°å
+bool MainWindow::isValidIMEI(const QString& imei)
+{
+ // æ£æ¥æ¯å¦ä¸ºç©º
+ if (imei.isEmpty()) {
+ return false;
+ }
+
+ // æ£æ¥é¿åº¦æ¯å¦ä¸º15ä½
+ if (imei.length() != 15) {
+ qDebug() << "IMEIé¿åº¦ä¸æ£ç¡®ï¼åºä¸º15ä½ï¼å®é
为:" << imei.length() << "ä½ï¼IMEI:" << imei;
+ return false;
+ }
+
+ // æ£æ¥æ¯å¦å
¨ä¸ºæ°å
+ for (int i = 0; i < imei.length(); i++) {
+ if (!imei.at(i).isDigit()) {
+ qDebug() << "IMEIå
å«éæ°åå符ï¼IMEI:" << imei;
+ return false;
+ }
+ }
+
+ qDebug() << "IMEIæ ¼å¼éªè¯éè¿:" << imei;
+ return true;
+}
+
+// ICCIDæ ¼å¼éªè¯å½æ° - ICCIDåºä¸º19-20ä½åæ¯æ°åç»å
+bool MainWindow::isValidICCID(const QString& iccid)
+{
+ // æ£æ¥æ¯å¦ä¸ºç©º
+ if (iccid.isEmpty()) {
+ return false;
+ }
+
+ // æ£æ¥é¿åº¦æ¯å¦ä¸º19-20ä½
+ if (iccid.length() < 19 || iccid.length() > 20) {
+ qDebug() << "ICCIDé¿åº¦ä¸æ£ç¡®ï¼åºä¸º19-20ä½ï¼å®é
为:" << iccid.length() << "ä½ï¼ICCID:" << iccid;
+ return false;
+ }
+
+ // æ£æ¥æ¯å¦ä¸ºåæ¯æ°åç»åï¼å
许æ°åå忝ï¼
+ for (int i = 0; i < iccid.length(); i++) {
+ QChar ch = iccid.at(i);
+ if (!ch.isDigit() && !ch.isLetter()) {
+ qDebug() << "ICCIDå
å«éæ³å符ï¼åªå
许æ°åå忝ï¼ï¼ICCID:" << iccid;
+ return false;
+ }
+ }
+
+ qDebug() << "ICCIDæ ¼å¼éªè¯éè¿:" << iccid;
+ return true;
+}
+
+// MODEMç±»å夿彿° - 夿æ¯å¦ä¸ºEGç³»åMODEM
+bool MainWindow::isEGModem() const
+{
+ bool result = currentModemVersion.startsWith("EG", Qt::CaseInsensitive);
+
+ if(!ui->PYVerlineEdit->text().isEmpty())
+ {
+ qDebug() << "åå¨PYVERçæ¬ï¼å¤æä¸ºEGçæ¬" << currentPYVerVersion;
+ return true;
+ }
+ // else {
+ // qDebug() << "ä¸åå¨PYVERçæ¬ï¼å¤æä¸ºéEGçæ¬" << PYVerInfo;
+ // return false;
+ // }
+
+ qDebug() << "isEGModem() è°ç¨ - MODEMçæ¬:" << currentModemVersion << "ï¼ç»æ:" << (result ? "EGç³»å" : "éEGç³»å");
+ return result;
+}
+
+// è§£æMESSAGE_4G_NETWORK_STAT_CHANGEDæ ¼å¼æ°æ®
+void MainWindow::parseNetworkStatChanged(const QString& data)
+{
+ qDebug() << "å¼å§è§£æMESSAGE_4G_NETWORK_STAT_CHANGEDæ°æ®:" << data.trimmed();
+
+ // ä½¿ç¨æ£å表达å¼è§£æåä¸ªåæ®µ
+ // æ ¼å¼ï¼netstat(0),signal(99),sim(1),network(GSM),imei(860132064650112),iccid(898604B7192590313291),operator(-1)
+
+ // è§£ænetstat
+ QRegExp netstatRegex("netstat\\((\\d+)\\)");
+ if (netstatRegex.indexIn(data) != -1) {
+ int netstat = netstatRegex.cap(1).toInt();
+ qDebug() << "è§£æå°netstatå¼:" << netstat;
+ }
+
+ // è§£æsignalå¼
+ QRegExp signalRegex("signal\\((\\d+)\\)");
+ if (signalRegex.indexIn(data) != -1) {
+ int signalValue = signalRegex.cap(1).toInt();
+ qDebug() << "è§£æå°signalå¼:" << signalValue;
+
+ // å°signal弿¾ç¤ºå°çé¢
+ ui->recvTextEdit->append(QString("Network Stat Signalå¼: %1").arg(signalValue));
+ ui->statusbar->showMessage(QString("æ£æµå°Network Stat Signalå¼: %1").arg(signalValue), 2000);
+
+ // 妿æ£å¨è¿è¡4Gæµè¯ï¼å¤çsignalå¼
+ if (isProductionTestRunning && (currentTestStep == TEST_PPP_INIT || currentTestStep == TEST_PPP_SIGNAL)) {
+ // æé 类似@sim:@signal:æ ¼å¼çæ°æ®ä¾ç°æé»è¾å¤ç
+ QString simulatedData = QString("@sim:%1@signal:%2@").arg(1).arg(signalValue); // å设sim为1
+
+ // è§£æsimå¼ï¼ä»æ°æ®ä¸æåå®é
å¼ï¼
+ QRegExp simRegex("sim\\((\\d+)\\)");
+ if (simRegex.indexIn(data) != -1) {
+ int simValue = simRegex.cap(1).toInt();
+ simulatedData = QString("@sim:%1@signal:%2@").arg(simValue).arg(signalValue);
+ qDebug() << "è§£æå°simå¼:" << simValue;
+
+ // ä¿åSIMå¡ç¶æ
+ currentSimStatus = simValue;
+ qDebug() << "æ´æ°SIMå¡ç¶æ:" << (currentSimStatus == 1 ? "å·²æå
¥" : "æªæå
¥");
+ }
+
+ qDebug() << "æé æ¨¡ææ°æ®ä¾ç°æé»è¾å¤ç:" << simulatedData;
+ checkSignalAndSimValues(simulatedData);
+ }
+ }
+
+ // è§£æsimå¼
+ QRegExp simRegex("sim\\((\\d+)\\)");
+ if (simRegex.indexIn(data) != -1) {
+ int simValue = simRegex.cap(1).toInt();
+ qDebug() << "è§£æå°simå¼:" << simValue;
+
+ // ä¿åSIMå¡ç¶æ
+ currentSimStatus = simValue;
+ qDebug() << "æ´æ°SIMå¡ç¶æ:" << (currentSimStatus == 1 ? "å·²æå
¥" : "æªæå
¥");
+ }
+
+ // è§£ænetworkç±»å
+ QRegExp networkRegex("network\\(([^)]+)\\)");
+ if (networkRegex.indexIn(data) != -1) {
+ QString networkType = networkRegex.cap(1);
+ qDebug() << "è§£æå°networkç±»å:" << networkType;
+ }
+
+ // è§£æIMEI
+ QRegExp imeiRegex("imei\\((\\d{15})\\)");
+ if (imeiRegex.indexIn(data) != -1) {
+ QString imei = imeiRegex.cap(1);
+ qDebug() << "è§£æå°IMEI:" << imei;
+
+ // éªè¯IMEIæ ¼å¼
+ if (isValidIMEI(imei)) {
+ ui->IMEIlineEdit->setText(imei);
+ qDebug() << "IMEIæ ¼å¼éªè¯éè¿ï¼å·²æ´æ°å°çé¢:" << imei;
+ } else {
+ qDebug() << "IMEIæ ¼å¼éªè¯å¤±è´¥:" << imei;
+ }
+ }
+
+ // è§£æICCID
+ QRegExp iccidRegex("iccid\\(([0-9A-Fa-f]{19,20})\\)");
+ if (iccidRegex.indexIn(data) != -1) {
+ QString iccid = iccidRegex.cap(1);
+ qDebug() << "è§£æå°ICCID:" << iccid;
+
+ // éªè¯ICCIDæ ¼å¼
+ if (isValidICCID(iccid)) {
+ ui->ICCIDlineEdit->setText(iccid);
+ qDebug() << "ICCIDæ ¼å¼éªè¯éè¿ï¼å·²æ´æ°å°çé¢:" << iccid;
+ } else {
+ qDebug() << "ICCIDæ ¼å¼éªè¯å¤±è´¥:" << iccid;
+ }
+ }
+
+ // è§£æoperator
+ QRegExp operatorRegex("operator\\(([^)]+)\\)");
+ if (operatorRegex.indexIn(data) != -1) {
+ QString operatorValue = operatorRegex.cap(1);
+ qDebug() << "è§£æå°operatorå¼:" << operatorValue;
+ }
+}
+
+// 䏲壿°æ®æ¥æ¶å¤ç彿°
+void MainWindow::readSerialData()
+{
+ QByteArray recvData = serial->readAll();
+ if (recvData.isEmpty()) {
+ return;
+ }
+
+ // å°æ°æ¥æ¶çæ°æ®è¿½å å°ç¼å
+ recvBuffer += QString::fromUtf8(recvData);
+
+ // 循ç¯å¤çç¼å䏿æå®æ´çè¡ï¼ä»¥\nä¸ºç»ææ å¿ï¼
+ while (recvBuffer.contains('\n')) {
+ int newlineIndex = recvBuffer.indexOf('\n');
+ QString line = recvBuffer.left(newlineIndex + 1);
+ recvBuffer = recvBuffer.mid(newlineIndex + 1);
+
+ QString processLine = line;
+
+ // å¤çfac:å¼å¤´çè¡
+ if (line.startsWith("fac:")) {
+ processLine = line.mid(4); // ç§»é¤"fac:"åç¼
+ }
+
+ // æ¾ç¤ºå°æ¥æ¶åºï¼å¦ææ¯fac:å¼å¤´çè¡ï¼
+ if (line.startsWith("fac:")) {
+ ui->recvTextEdit->insertPlainText(processLine);
+ ui->recvTextEdit->moveCursor(QTextCursor::End);
+ }
+
+ // å¤çæææ°æ®æåï¼ä¸ç®¡æ¯å¦ä»¥fac:å¼å¤´ï¼ï¼å¤§å°å䏿æï¼
+ if (processLine.indexOf("BuildVer:", 0, Qt::CaseInsensitive) != -1) {
+ ShowSoftVer(processLine);
+ }
+
+ // æ£æµg_VibratorFuncï¼å¤æé©¬è¾¾å¼å¯æ¯å¦éè¿
+ if (processLine.indexOf("g_VibratorFunc") != -1) {
+ CheckVibratorFunc(processLine);
+ }
+
+ // æ£æµwstp_printæ ¼å¼çBTMACåCyweeChipInfoæ°æ®ï¼ä¸éè¦fac:å¼å¤´ï¼
+ if (line.contains("^^^^ BTMAC=") && line.contains("^^^^ CyweeChipInfo=")) {
+ // æ¾ç¤ºå°æ¥æ¶åº
+ ui->recvTextEdit->insertPlainText(line);
+ ui->recvTextEdit->moveCursor(QTextCursor::End);
+
+ parseWstpPrintData(line);
+ }
+
+ // æ£æµè®¾å¤ä¿¡æ¯æ°æ®ï¼å»æ[PPP_INFO]éå¶ï¼æ¯æå¤ç§æ ¼å¼ï¼ï¼å¤§å°å䏿æï¼
+ // æ£æµå
å«@sim:çæ°æ®ï¼å¯è½æ¯IMEIæ°æ®å4Gä¿¡å·æ°æ®ï¼
+ if (line.contains("@sim:") || processLine.contains("@sim:")) {
+ qDebug() << "æ£æµå°å
å«@sim:çæ°æ®:";
+ qDebug() << " åå§line:" << line.trimmed();
+ qDebug() << " processLine:" << processLine.trimmed();
+
+ // ä¼å
å¤çprocessLine
+ QString dataToProcess = processLine.contains("@sim:") ? processLine : line;
+
+ // æåIMEIï¼15使°åï¼
+ QRegExp imeiRegex("(\\d{15})");
+ if (imeiRegex.indexIn(dataToProcess) != -1) {
+ QString extractedImei = imeiRegex.cap(1);
+ qDebug() << "ä»@sim:æ°æ®ä¸æåå°IMEI:" << extractedImei;
+ // éªè¯IMEIæ ¼å¼
+ if (isValidIMEI(extractedImei)) {
+ ui->IMEIlineEdit->setText(extractedImei);
+ } else {
+ qDebug() << "ä»@sim:æ°æ®ä¸æåçIMEIæ ¼å¼ä¸æ£ç¡®:" << extractedImei;
+ ui->statusbar->showMessage("IMEIæ ¼å¼ä¸æ£ç¡®: " + extractedImei, 3000);
+ }
+ } else {
+ qDebug() << "å¨@sim:æ°æ®ä¸æªæ¾å°15使°å";
+ ShowPppInfoIMEI(dataToProcess);
+ }
+
+ // æ£æ¥æ¯å¦æ£å¨è¿è¡4Gæµè¯ï¼å¦ææ¯åè§£æsignalåsimå¼è¿è¡å¤æ
+ if (isProductionTestRunning && (currentTestStep == TEST_PPP_INIT || currentTestStep == TEST_PPP_SIGNAL)) {
+ checkSignalAndSimValues(dataToProcess);
+ }
+ }
+ // æ£æµä¼ ç»æ ¼å¼çIMEIæ°æ®ï¼IMEI:å¼å¤´çæ ¼å¼
+ else if (line.indexOf("IMEI:", 0, Qt::CaseInsensitive) != -1 || processLine.indexOf("IMEI:", 0, Qt::CaseInsensitive) != -1) {
+ qDebug() << "æ¥æ¶å°IMEIæ°æ®:" << line.trimmed();
+ qDebug() << "åå§æ°æ®é¿åº¦:" << line.length() << "å
容:" << line.toUtf8().toHex();
+ if (processLine.indexOf("IMEI:", 0, Qt::CaseInsensitive) != -1) {
+ ShowPppInfoIMEI(processLine);
+ } else {
+ ShowPppInfoIMEI(line);
+ }
+ }
+ // æ£æµæ°æ ¼å¼çIMEIæ°æ®ï¼imei:å¼å¤´çæ ¼å¼
+ else if (line.indexOf("imei:", 0, Qt::CaseInsensitive) != -1 || processLine.indexOf("imei:", 0, Qt::CaseInsensitive) != -1) {
+ qDebug() << "æ¥æ¶å°æ°æ ¼å¼IMEIæ°æ®:" << line.trimmed();
+ if (processLine.indexOf("imei:", 0, Qt::CaseInsensitive) != -1) {
+ ShowPppInfoIMEI(processLine);
+ } else {
+ ShowPppInfoIMEI(line);
+ }
+ }
+
+ if (line.indexOf("ICCID:", 0, Qt::CaseInsensitive) != -1) {
+ qDebug() << "æ¥æ¶å°ICCIDæ°æ®:" << line.trimmed();
+ ShowPppInfoICCID(line);
+ }
+
+ if (line.indexOf("Modem Version:", 0, Qt::CaseInsensitive) != -1) {
+ qDebug() << "æ¥æ¶å°Modem Versionæ°æ®:" << line.trimmed();
+ ShowPppInfoModemVer(line);
+ }
+ // æ£æµæ°æ ¼å¼çModem Versionæ°æ®ï¼@modemVer:å¼å¤´çæ ¼å¼
+ else if (line.indexOf("@modemVer:", 0, Qt::CaseInsensitive) != -1) {
+ qDebug() << "æ¥æ¶å°æ°æ ¼å¼Modem Versionæ°æ®:" << line.trimmed();
+ ShowPppInfoModemVer(line);
+ }
+ // æ£æµæ¬å·æ ¼å¼çModem Versionæ°æ®ï¼modemver(...)æ ¼å¼
+ else if (line.indexOf("modemver(", 0, Qt::CaseInsensitive) != -1) {
+ qDebug() << "æ¥æ¶å°æ¬å·æ ¼å¼Modem Versionæ°æ®:" << line.trimmed();
+ ShowPppInfoModemVer(line);
+ }
+
+ if (line.indexOf("pyver:", 0, Qt::CaseInsensitive) != -1) {
+ qDebug() << "æ¥æ¶å°pyveræ°æ®:" << line.trimmed();
+ ShowPppInfoPYVer(line);
+ }
+ // æ£æµæ°æ ¼å¼çModem Versionæ°æ®ï¼@modemVer:å¼å¤´çæ ¼å¼
+ else if (line.indexOf("@pyVer:", 0, Qt::CaseInsensitive) != -1) {
+ qDebug() << "æ¥æ¶å°æ°æ ¼å¼æ¥æ¶å°æ¬å·æ ¼å¼pyveræ°æ®æ°æ®:" << line.trimmed();
+ ShowPppInfoPYVer(line);
+ }
+ // æ£æµæ¬å·æ ¼å¼çModem Versionæ°æ®ï¼modemver(...)æ ¼å¼
+ else if (line.indexOf("pyver(", 0, Qt::CaseInsensitive) != -1) {
+ qDebug() << "æ¥æ¶å°æ¬å·æ ¼å¼pyveræ°æ®:" << line.trimmed();
+ ShowPppInfoPYVer(line);
+ }
+
+ // æ£æµMESSAGE_4G_NETWORK_STAT_CHANGEDæ ¼å¼æ°æ®
+ if (line.contains("MESSAGE_4G_NETWORK_STAT_CHANGED")) {
+ qDebug() << "æ¥æ¶å°MESSAGE_4G_NETWORK_STAT_CHANGEDæ°æ®:" << line.trimmed();
+ parseNetworkStatChanged(line);
+ }
+
+ // æ£æµå·¥å模å¼è¿å
¥ç¡®è®¤ï¼ç¨äºäº§æµï¼
+ if (line.contains("fac:enter or exit facotry mode")) {
+ checkFactoryModeResult(line);
+ }
+
+ // æ£æµPPPåå§åç»æï¼ç¨äºäº§æµï¼
+ if (line.contains("PPP environment initialized successfully") ||
+ line.contains("PPP init failed")) {
+ check4GInitResult(line);
+ }
+
+ // æ£æµ4Gä¿¡å·è´¨éç»æï¼ç¨äºäº§æµï¼
+ if (line.contains("Overall LTE Quality") || line.contains("LTE Signal Quality") ||
+ line.contains("RSRQ:") || line.contains("RSRP:") || line.contains("æ»ä½è¯çº§")) {
+ check4GSignalResult(line);
+ }
+
+ // æ£æµLCDæµè¯ç»æï¼ç¨äºäº§æµï¼
+ if (line.contains("LCD test")) {
+ checkLcdTestResult(line);
+ }
+
+ // æ£æµBuildVerå¯å¨å®æï¼ç¨äºäº§æµï¼ï¼å¤§å°å䏿æï¼
+ if (line.contains("BuildVer", Qt::CaseInsensitive)) {
+ checkBuildVerResult(line);
+ }
+
+ // æ£æµæé®æµè¯ç»æï¼ç¨äºäº§æµï¼
+ if (line.contains("fac:id")) {
+ checkKeyTestResult(line);
+ }
+
+ // æ£æµå½é³æµè¯ç»æï¼ç¨äºäº§æµï¼
+ if (line.contains("MEDIAAUDIORECORD") || line.contains("MEDIAMUSICPLAY") ||
+ line.contains("Start Audio Capturer SUCCESS")) {
+ qDebug() << "å½é³æµè¯ç¸å
³æ°æ®å¹é
:" << line.trimmed();
+ checkAudioTestResult(line);
+ }
+
+ // æ£æµçµæ± æµè¯ç»æï¼ç¨äºäº§æµï¼
+ if (line.contains("GETPOWER") || line.contains("Battery") || line.contains("fac:voltage")) {
+ checkBatteryTestResult(line);
+ }
+
+ // æ£æµG-sensoræµè¯ç»æï¼ç¨äºäº§æµï¼
+ if (line.contains("gsensor") || line.contains("GSENSOR") || line.contains("fac:gsensor")) {
+ qDebug() << "æ£æµå°gsensorç¸å
³æ°æ®ï¼è°ç¨checkGsensorTestResult:" << line.trimmed();
+ checkGsensorTestResult(line);
+ }
+
+ // æ£æµCAT1ä¿¡å·æµè¯ç»æ - åªå¨CAT1æµè¯æé´ä¸å
å«ç¹å®æ ¼å¼æ¶å¤ç
+ if (hasReceivedFirstSignal && isProductionTestRunning && line.contains("signal:")) {
+ // æ ¹æ®MODEMç±»åè¿æ»¤ç¹å®æ ¼å¼çæ°æ®
+ bool shouldProcess = false;
+ if (isEGModem()) {
+ // EGç³»åï¼åªå¤çrx_bufferæ ¼å¼ï¼è·³è¿cmdæ ¼å¼
+ shouldProcess = line.contains("rx_buffer:") && !line.contains("cmd ") && !line.contains("bufferlen");
+ } else {
+ // N7ç³»åï¼å¤çPPPSIGNALINFOç¸å
³æ ¼å¼
+ shouldProcess = line.contains("RSRP:") || line.contains("signal:");
+ }
+
+ if (shouldProcess) {
+ qDebug() << "æ£æµå°CAT1ä¿¡å·ç¸å
³æ°æ®:" << line.trimmed();
+ checkCat1SignalResult(line);
+ } else {
+ qDebug() << "è·³è¿CAT1ä¿¡å·æ°æ®ï¼æ ¼å¼ä¸å¹é
ï¼:" << line.left(50) + "...";
+ }
+ }
+ }
+
+ // éå¶ç¼åæå¤§é¿åº¦
+ if (recvBuffer.length() > 2000) {
+ recvBuffer.clear();
+ }
+}
+
+
+// åå
è¿å¶è½¬æ¢å½æ°ï¼é¢çï¼å¦éå¯å¯ç¨ï¼
+QByteArray MainWindow::hexStringToByteArray(const QString &hexString)
+{
+ QByteArray byteArray;
+ bool ok;
+ for (int i = 0; i < hexString.size(); i += 2) {
+ QString hex = hexString.mid(i, 2);
+ char c = hex.toUInt(&ok, 16) & 0xFF;
+ if (ok) byteArray.append(c);
+ }
+ return byteArray;
+}
+
+QString MainWindow::byteArrayToHexString(const QByteArray &byteArray)
+{
+ QString hexString;
+ for (char c : byteArray) {
+ hexString += QString("%1 ").arg((unsigned char)c, 2, 16, QChar('0')).toUpper();
+ }
+ return hexString;
+}
+
+// 产æµä¸»å½æ°
+void MainWindow::on_ProductionTestButton_clicked()
+{
+ // æ£æ¥ä¸²å£æ¯å¦å·²æå¼
+ if (!serial->isOpen()) {
+ QMessageBox::warning(this, "è¦å", "请å
æå¼ä¸²å£è¿æ¥");
+ return;
+ }
+
+ if (isProductionTestRunning) {
+ // 妿æ£å¨æµè¯ï¼å忢æµè¯
+ lcdTestTimer->stop();
+ motorTestTimer->stop();
+ isProductionTestRunning = false;
+ currentTestStep = TEST_IDLE;
+ ui->statusbar->showMessage("产æµå·²åæ¢", 2000);
+
+ // æ¢å¤äº§æµæé®ç¶æ - ååèè²å¹¶å¯ç¨
+ ui->openButton_2->setStyleSheet("QPushButton { background-color: #4A90E2; color: white; padding: 5px 10px; border: none; border-radius: 3px; }");
+ ui->openButton_2->setEnabled(true);
+ qDebug() << "产æµåæ¢ - æé®å·²æ¢å¤èè²å¹¶å¯ç¨";
+
+ return;
+ }
+
+ // å¼å§äº§æµæµç¨
+ isProductionTestRunning = true;
+ currentTestStep = TEST_LCD;
+ currentLcdColor = 1; // ä»çº¢è²å¼å§
+ initRetry4GCount = 0;
+
+ ui->statusbar->showMessage("å¼å§äº§æµæµç¨...", 2000);
+ qDebug() << "å¼å§äº§æµæµç¨";
+
+ // ui->ProductionTestButton->setText("åæ¢äº§æµ");
+
+ // å¼å§LCDæµè¯
+ performLcdTest();
+}
+
+// LCDæµè¯å½æ°
+void MainWindow::performLcdTest()
+{
+ if (!isProductionTestRunning || currentTestStep != TEST_LCD) {
+ qDebug() << "LCDæµè¯è·³è¿ - 产æµè¿è¡:" << isProductionTestRunning << "å½åæ¥éª¤:" << currentTestStep;
+ return;
+ }
+
+ // ç¬¬ä¸æ¬¡è¿å
¥LCDæµè¯æ¶æ´æ°ç¶æå¹¶åéè¿å
¥LCDæµè¯æ¨¡å¼æä»¤
+ if (currentLcdColor == 1) {
+ updateTestStatus("lcd", STATUS_TESTING);
+
+ // åéè¿å
¥LCDæµè¯æ¨¡å¼æä»¤
+ serial->write("AT^LCDTEST=1\r\n");
+ qDebug() << "åéè¿å
¥LCDæµè¯æ¨¡å¼æä»¤: AT^LCDTEST=1";
+ ui->statusbar->showMessage("è¿å
¥LCDæµè¯æ¨¡å¼ï¼1ç§åå¼å§é¢è²æµè¯...", 1000);
+
+ // å»¶è¿1ç§åå¼å§é¢è²æµè¯ï¼ç¡®ä¿è®¾å¤å®å
¨è¿å
¥LCDæµè¯æ¨¡å¼
+ QTimer::singleShot(1000, this, [this]() {
+ if (isProductionTestRunning && currentTestStep == TEST_LCD) {
+ qDebug() << "LCDæµè¯æ¨¡å¼åå§å宿ï¼å¼å§é¢è²æµè¯";
+ performLcdColorTest();
+ }
+ });
+ return;
+ }
+
+ // ç´æ¥æ§è¡é¢è²æµè¯
+ performLcdColorTest();
+}
+
+// LCDé¢è²æµè¯å½æ°
+void MainWindow::performLcdColorTest()
+{
+ if (!isProductionTestRunning || currentTestStep != TEST_LCD) {
+ qDebug() << "LCDé¢è²æµè¯è·³è¿ - 产æµè¿è¡:" << isProductionTestRunning << "å½åæ¥éª¤:" << currentTestStep;
+ return;
+ }
+
+ qDebug() << "LCDæµè¯ - æµè¯æ¥éª¤:" << currentLcdColor << "宿¶å¨ç¶æ:" << lcdTestTimer->isActive();
+
+ // å¨ç¬¬ä¸ä¸ªé¢è²ï¼çº¢è²ï¼å¼å§æ¶å°±æ¾ç¤ºç¡®è®¤å¼¹çª
+ if (currentLcdColor == 1 && !lcdTestPopupShown) {
+ qDebug() << "LCDæµè¯å¼å§ï¼æ¾ç¤ºç¡®è®¤å¼¹çª";
+ // å»¶è¿ä¸ç¹æ¾ç¤ºå¼¹çªï¼è®©çº¢è²å
æ¾ç¤º
+ QTimer::singleShot(500, this, [this]() {
+ if (isProductionTestRunning && currentTestStep == TEST_LCD && !lcdTestPopupShown) {
+ showLcdTestConfirmDialog();
+ }
+ });
+ }
+
+ QString colorName;
+ int colorCommand;
+ switch (currentLcdColor) {
+ case 1:
+ colorName = "红è²";
+ colorCommand = 6; // AT^LCDTEST=6 红è²
+ break;
+ case 2:
+ colorName = "绿è²";
+ colorCommand = 3; // AT^LCDTEST=3 绿è²
+ break;
+ case 3:
+ colorName = "èè²";
+ colorCommand = 4; // AT^LCDTEST=4 èè²
+ break;
+ default:
+ colorName = "æªç¥";
+ colorCommand = 6;
+ break;
+ }
+
+ ui->statusbar->showMessage("LCDæµè¯ä¸ - " + colorName + " (1ç§)", 1000);
+
+ // åéLCDæµè¯æä»¤ï¼ä½¿ç¨æ£ç¡®çé¢è²æ å°
+ QString command = QString("AT^LCDTEST=%1\r\n").arg(colorCommand);
+ serial->write(command.toUtf8());
+ qDebug() << "åéLCDæä»¤:" << command.trimmed() << "(" << colorName << ")";
+
+ // 设置1ç§å®æ¶å¨
+ lcdTestTimer->start(1000);
+}
+
+// LCDæµè¯å®æ¶å¨æ§½å½æ°
+void MainWindow::onLcdTestTimer()
+{
+ lcdTestTimer->stop();
+ qDebug() << "LCD宿¶å¨è§¦åï¼å½åé¢è²:" << currentLcdColor;
+
+ if (!isProductionTestRunning) {
+ qDebug() << "äº§æµæªè¿è¡ï¼éåºå®æ¶å¨";
+ return;
+ }
+
+ currentLcdColor++;
+ qDebug() << "忢å°ä¸ä¸ä¸ªé¢è²:" << currentLcdColor;
+
+ if (currentLcdColor <= 3) {
+ // ç»§ç»ä¸ä¸ä¸ªé¢è²æµè¯
+ qDebug() << "ç»§ç»ä¸ä¸ä¸ªé¢è²æµè¯";
+ performLcdColorTest();
+ } else {
+ // LCDæµè¯å®æï¼åééåºLCDæµè¯æä»¤
+ qDebug() << "LCDæµè¯å®æï¼éåºLCDæµè¯çé¢";
+ ui->statusbar->showMessage("LCDæµè¯å®æï¼éåºæµè¯çé¢", 1000);
+
+ // åééåºLCDæµè¯æä»¤
+ serial->write("AT^LCDTEST=2\r\n");
+ qDebug() << "åéLCDéåºæä»¤: AT^LCDTEST=2";
+
+ // LCDé¢è²æµè¯å®æï¼æ£æ¥ç¨æ·æ¯å¦å·²ç¡®è®¤
+ if (!isWaitingForUserConfirm) {
+ // ç¨æ·å·²ç¡®è®¤ï¼å¯ä»¥ç»§ç»é©¬è¾¾æµè¯
+ QTimer::singleShot(1000, this, [this]() {
+ if (isProductionTestRunning) {
+ qDebug() << "ç¨æ·å·²ç¡®è®¤LCDç»æï¼å¼å§é©¬è¾¾æµè¯";
+ currentTestStep = TEST_MOTOR;
+ performMotorTest();
+ }
+ });
+ } else {
+ // ç¨æ·è¿æªç¡®è®¤ï¼çå¾
ç¨æ·ç¡®è®¤ååç»§ç»
+ qDebug() << "LCDé¢è²æµè¯å®æï¼çå¾
ç¨æ·ç¡®è®¤ç»æ";
+ ui->statusbar->showMessage("LCDæµè¯å®æï¼çå¾
ç¨æ·ç¡®è®¤ç»æ", 3000);
+ }
+ }
+}
+
+// 马达æµè¯å½æ°
+void MainWindow::performMotorTest()
+{
+ qDebug() << "performMotorTest() 被è°ç¨";
+ qDebug() << "产æµè¿è¡ç¶æ:" << isProductionTestRunning;
+ qDebug() << "å½åæµè¯æ¥éª¤:" << currentTestStep << "(TEST_MOTOR=" << TEST_MOTOR << ")";
+
+ if (!isProductionTestRunning || currentTestStep != TEST_MOTOR) {
+ qDebug() << "马达æµè¯æ¡ä»¶ä¸æ»¡è¶³ï¼éåºå½æ°";
+ qDebug() << "isProductionTestRunning:" << isProductionTestRunning;
+ qDebug() << "currentTestStep:" << currentTestStep << "ææ:" << TEST_MOTOR;
+ return;
+ }
+
+ qDebug() << "å¼å§é©¬è¾¾æµè¯";
+
+ // é置马达æµè¯ç¶æ
+ motorTestPopupShown = false;
+
+ updateTestStatus("motor", STATUS_TESTING);
+ ui->statusbar->showMessage("马达æµè¯ä¸ - å¼å¯2ç§", 2000);
+
+ // åé马达å¼å¯æä»¤
+ serial->write("AT^VIBRATORTIMER=1\r\n");
+ qDebug() << "åé马达å¼å¯æä»¤: AT^VIBRATORTIMER=1";
+
+ // å
忢å¯è½æ£å¨è¿è¡ç宿¶å¨
+ if (motorTestTimer->isActive()) {
+ motorTestTimer->stop();
+ qDebug() << "è¦åï¼é©¬è¾¾å®æ¶å¨å·²å¨è¿è¡ï¼å
忢";
+ }
+
+ // 设置2ç§å®æ¶å¨
+ qDebug() << "å¯å¨é©¬è¾¾å®æ¶å¨ï¼2ç§åå
³é马达";
+ motorTestTimer->start(2000);
+
+ // å¯å¨10ç§è¶
æ¶æ£æµ
+ testTimeoutTimer->start(10000);
+}
+
+// 马达æµè¯å®æ¶å¨æ§½å½æ°
+void MainWindow::onMotorTestTimer()
+{
+ motorTestTimer->stop();
+
+ if (!isProductionTestRunning) {
+ return;
+ }
+
+ qDebug() << "马达æµè¯æ¶é´å°ï¼å
³é马达";
+ ui->statusbar->showMessage("马达æµè¯ä¸ - å
³é", 1000);
+
+ // åé马达å
³éæä»¤
+ serial->write("AT^VIBRATORTIMER=0\r\n");
+ qDebug() << "åé马达å
³éæä»¤: AT^VIBRATORTIMER=0";
+
+ // 马达æµè¯å®æï¼æ¾ç¤ºç¡®è®¤å¼¹çª
+ qDebug() << "马达æµè¯å®æï¼æ¾ç¤ºç¡®è®¤å¼¹çª";
+
+ // 妿弹çªè¿æ²¡ææ¾ç¤ºè¿ï¼åæ¾ç¤ºç¡®è®¤å¼¹çª
+ if (!motorTestPopupShown) {
+ showMotorTestConfirmDialog();
+ } else {
+ // 妿弹çªå·²ç»æ¾ç¤ºè¿ï¼ç´æ¥å¼å§æé®æµè¯
+ qDebug() << "马达确认弹çªå·²æ¾ç¤ºè¿ï¼å¼å§æé®æµè¯";
+ currentTestStep = TEST_KEY;
+ performKeyTest();
+ }
+}
+
+// 4Gæµè¯å½æ°
+void MainWindow::perform4GTest()
+{
+ if (!isProductionTestRunning) {
+ qDebug() << "4Gæµè¯è·³è¿ - äº§æµæªè¿è¡";
+ return;
+ }
+
+ initRetry4GCount++;
+ qDebug() << "4Gæµè¯ - åå§åå°è¯æ¬¡æ°:" << initRetry4GCount;
+
+ // ç¬¬ä¸æ¬¡4Gæµè¯æ¶æ´æ°ç¶æå¹¶è¿è¡CAT1çµæºæ§å¶
+ if (initRetry4GCount == 1) {
+ updateTestStatus("ppp", STATUS_TESTING);
+
+ // å
åéAT^CAT1POWER=0å
³éCAT1çµæº
+ serial->write("AT^CAT1POWER=0\r\n");
+ qDebug() << "åéCAT1çµæºå
³éæä»¤: AT^CAT1POWER=0";
+ ui->statusbar->showMessage("4Gæµè¯ä¸ - éç½®CAT1çµæº...", 2000);
+
+ // å»¶è¿1ç§ååéAT^CAT1POWER=1å¼å¯CAT1çµæº
+ QTimer::singleShot(1000, this, [this]() {
+ if (isProductionTestRunning && serial->isOpen()) {
+ serial->write("AT^CAT1POWER=1\r\n");
+ qDebug() << "åéCAT1çµæºå¼å¯æä»¤: AT^CAT1POWER=1";
+ ui->statusbar->showMessage("4Gæµè¯ä¸ - å¯å¨CAT1çµæº...", 2000);
+
+ // å»¶è¿1ç§ååéAT^CAT1LOGLEVEL=4æä»¤
+ QTimer::singleShot(1000, this, [this]() {
+ if (isProductionTestRunning && serial->isOpen()) {
+ serial->write("AT^CAT1LOGLEVEL=4\r\n");
+ qDebug() << "åéCAT1æ¥å¿çº§å«è®¾ç½®æä»¤: AT^CAT1LOGLEVEL=4";
+ ui->statusbar->showMessage("4Gæµè¯ä¸ - 设置CAT1æ¥å¿çº§å«...", 2000);
+
+ // å»¶è¿1ç§ååéAT^PPPSTOPDIALæä»¤
+ QTimer::singleShot(1000, this, [this]() {
+ if (isProductionTestRunning && serial->isOpen()) {
+ serial->write("AT^PPPSTOPDIAL\r\n");
+ qDebug() << "åéPPP忢æ¨å·æä»¤: AT^PPPSTOPDIAL";
+ ui->statusbar->showMessage("4Gæµè¯ä¸ - 忢PPPæ¨å·...", 3000);
+
+ // å»¶è¿5ç§åéç½®æ å¿å¹¶å¼å§4Gä¿¡å·æ£æµ
+ QTimer::singleShot(5000, this, [this]() {
+ if (isProductionTestRunning) {
+ // éç½®æ å¿
+ hasReceivedSignalSim = false;
+ hasReceivedPppInfo = true; // æ 记为已æ¶å°ï¼è·³è¿PPPçå¾
+ pppCommandCount = 0;
+
+ // ç´æ¥å¼å§4Gä¿¡å·è´¨éæ£æµ
+ qDebug() << "PPPSTOPDIALå»¶æ¶å®æï¼ç´æ¥å¼å§4Gä¿¡å·è´¨éæ£æµ";
+ currentTestStep = TEST_PPP_SIGNAL;
+ perform4GSignalTest();
+ }
+ });
+ }
+ });
+ }
+ });
+ }
+ });
+ return; // ç¬¬ä¸æ¬¡è°ç¨æ¶ç´æ¥è¿åï¼çå¾
宿¶å¨æ§è¡åç»æ¥éª¤
+ }
+
+ // éç¬¬ä¸æ¬¡è°ç¨ï¼ç´æ¥è¿è¡4Gç¯å¢åå§åï¼éè¯æ¶ï¼
+ ui->statusbar->showMessage(QString("4Gæµè¯ä¸ - åå§åä¸...(%1/10)").arg(initRetry4GCount), 5000);
+
+ // ä¸ååéPPPENVINITæä»¤ï¼ç´æ¥å¯å¨å®æ¶å¨çå¾
åç»å¤ç
+
+ // å¯å¨5ç§è¶
æ¶å®æ¶å¨ï¼å¦ææ²¡æ¶å°åå¤å°±éè¯
+ test4GTimer->start(5000);
+ qDebug() << "å¯å¨4Gæµè¯è¶
æ¶å®æ¶å¨(5ç§)";
+}
+
+// æ£æ¥4Gåå§åç»æ
+// æ£æ¥å·¥å模å¼è¿å
¥ç»æ
+void MainWindow::checkFactoryModeResult(const QString& data)
+{
+ if (!isProductionTestRunning || currentTestStep != TEST_RESET) {
+ return;
+ }
+
+ qDebug() << "工忍¡å¼ç¡®è®¤æ¶å°æ°æ®:" << data.trimmed();
+
+ // è§£ææ°æ ¼å¼ï¼fac:enter or exit facotry mode :1 æ fac:enter or exit facotry mode :0
+ if (data.contains("fac:enter or exit facotry mode")) {
+ // ä½¿ç¨æ£åè¡¨è¾¾å¼æåcmdå¼
+ QRegExp factoryModePattern("fac:enter or exit facotry mode\\s*:\\s*(\\d+)");
+ if (factoryModePattern.indexIn(data) != -1) {
+ QString cmdStr = factoryModePattern.cap(1);
+ int cmd = cmdStr.toInt();
+
+ qDebug() << "è§£æå°å·¥å模å¼å½ä»¤:" << cmd << "(1=è¿å
¥äº§æµ, 0=éåºäº§æµ)";
+
+ if (cmd == 1) {
+ // cmd=1 表示æåè¿å
¥äº§æµæ¨¡å¼
+ // 忢è¶
æ¶æ£æµï¼å ä¸ºå·²ç»æ¶å°ç¡®è®¤
+ if (testTimeoutTimer->isActive()) {
+ testTimeoutTimer->stop();
+ qDebug() << "工忍¡å¼è¿å
¥ç¡®è®¤æ¶å°ï¼åæ¢è¶
æ¶æ£æµ";
+ }
+
+ qDebug() << "工忍¡å¼è¿å
¥æå确认 (cmd=1)";
+ ui->statusbar->showMessage("工忍¡å¼è¿å
¥æåï¼åå¤éå¯è®¾å¤...", 2000);
+
+ // 产æµå¼å§ç¡®è®¤ - æé®å绿è²å¹¶ç¦ç¨
+ ui->openButton_2->setStyleSheet("QPushButton { background-color: #28A745; color: white; padding: 5px 10px; border: none; border-radius: 3px; }");
+ ui->openButton_2->setEnabled(false);
+ qDebug() << "产æµå¼å§ç¡®è®¤ - æé®å·²å绿è²å¹¶ç¦ç¨";
+
+ // å»¶è¿2ç§ååéé坿令
+ QTimer::singleShot(2000, this, [this]() {
+ if (isProductionTestRunning && currentTestStep == TEST_RESET) {
+ ui->statusbar->showMessage("äº§æµæ¨¡å¼å·²å¼å¯ - éå¯è®¾å¤ä¸...", 3000);
+ qDebug() << "工忍¡å¼ç¡®è®¤ååé设å¤é坿令";
+ serial->write("AT^RESET\r\n");
+ qDebug() << "åé设å¤é坿令: AT^RESET";
+
+ // 忢å°çå¾
BuildVerç¶æ
+ currentTestStep = TEST_WAIT_BUILDVER;
+ qDebug() << "çå¾
设å¤éå¯å®æï¼å¯»æ¾BuildVeræ å¿...";
+ }
+ });
+
+ } else if (cmd == 0) {
+ // cmd=0 表示éåºäº§æµæ¨¡å¼
+ qDebug() << "工忍¡å¼éåºç¡®è®¤ (cmd=0)";
+ ui->statusbar->showMessage("工忍¡å¼å·²éåº", 2000);
+
+ } else {
+ // æªç¥çcmdå¼
+ qDebug() << "æªç¥ç工忍¡å¼å½ä»¤å¼:" << cmd;
+ ui->statusbar->showMessage("æ¶å°æªç¥ç工忍¡å¼å½ä»¤", 2000);
+ }
+ } else {
+ // æ æ³è§£æcmdå¼ï¼ä½¿ç¨æ§çé»è¾ä½ä¸ºå¤ç¨
+ qDebug() << "æ æ³è§£æå·¥å模å¼å½ä»¤å¼ï¼ä½¿ç¨æ§é»è¾";
+
+ // 忢è¶
æ¶æ£æµï¼å ä¸ºå·²ç»æ¶å°ç¡®è®¤
+ if (testTimeoutTimer->isActive()) {
+ testTimeoutTimer->stop();
+ qDebug() << "工忍¡å¼ç¡®è®¤æ¶å°ï¼åæ¢è¶
æ¶æ£æµ";
+ }
+
+ qDebug() << "工忍¡å¼è¿å
¥æå确认 (å¤ç¨é»è¾)";
+ ui->statusbar->showMessage("工忍¡å¼è¿å
¥æåï¼åå¤éå¯è®¾å¤...", 2000);
+
+ // å»¶è¿2ç§ååéé坿令
+ QTimer::singleShot(2000, this, [this]() {
+ if (isProductionTestRunning && currentTestStep == TEST_RESET) {
+ ui->statusbar->showMessage("äº§æµæ¨¡å¼å·²å¼å¯ - éå¯è®¾å¤ä¸...", 3000);
+ qDebug() << "工忍¡å¼ç¡®è®¤ååé设å¤é坿令";
+ serial->write("AT^RESET\r\n");
+ qDebug() << "åé设å¤é坿令: AT^RESET";
+
+ // 忢å°çå¾
BuildVerç¶æ
+ currentTestStep = TEST_WAIT_BUILDVER;
+ qDebug() << "çå¾
设å¤éå¯å®æï¼å¯»æ¾BuildVeræ å¿...";
+ }
+ });
+ }
+ }
+}
+
+void MainWindow::check4GInitResult(const QString& data)
+{
+ if (!isProductionTestRunning || currentTestStep != TEST_PPP_INIT) {
+ return;
+ }
+
+ // æ¶å°åå¤ï¼åæ¢è¶
æ¶å®æ¶å¨
+ if (test4GTimer->isActive()) {
+ test4GTimer->stop();
+ qDebug() << "æ¶å°4Gåå¤ï¼åæ¢è¶
æ¶å®æ¶å¨";
+ }
+
+ if (data.contains("PPP environment initialized successfully")) {
+ qDebug() << "4Gåå§åéè¿";
+ ui->statusbar->showMessage("4Gåå§åéè¿ï¼åéè¿è¡æ¶æ´æ°æä»¤", 2000);
+
+ // æ è®°å·²æ¶å°PPPINFOç¸å
³æå°
+ hasReceivedPppInfo = true;
+
+ // 4Gåå§åéè¿ï¼åéè¿è¡æ¶æ´æ°æä»¤
+ currentTestStep = TEST_PPP_UPDATE;
+ serial->write("AT^PPPRUNTIMEUPDATE\r\n");
+ qDebug() << "åé4Gè¿è¡æ¶æ´æ°æä»¤: AT^PPPRUNTIMEUPDATE";
+
+ // å»¶è¿2ç§åå¼å§4Gä¿¡å·è´¨éæ£æµ
+ QTimer::singleShot(2000, this, [this]() {
+ if (isProductionTestRunning) {
+ qDebug() << "å¼å§4Gä¿¡å·è´¨éæ£æµ";
+ currentTestStep = TEST_PPP_SIGNAL;
+ perform4GSignalTest();
+ }
+ });
+ // ui->ProductionTestButton->setText("å¼å§äº§æµ");
+
+ } else if (data.contains("PPP init failed")) {
+ qDebug() << "4Gåå§å失败ï¼éè¯ä¸...";
+ ui->statusbar->showMessage("4Gåå§å失败ï¼éè¯ä¸...", 2000);
+
+ // 妿éè¯æ¬¡æ°è¿å¤ï¼å¯ä»¥è®¾ç½®ä¸é
+ if (initRetry4GCount >= 10) {
+ qDebug() << "4Gåå§åéè¯æ¬¡æ°è¿å¤ï¼åæ¢æµè¯";
+ ui->statusbar->showMessage("4Gåå§å失败次æ°è¿å¤ï¼æµè¯åæ¢", 5000);
+ updateTestStatus("ppp", STATUS_FAILED);
+ isProductionTestRunning = false;
+ currentTestStep = TEST_IDLE;
+
+ // ä¿åæµè¯è®°å½å°Excelï¼å¤±è´¥è®°å½ï¼
+ QString fileName = saveTestRecord();
+
+ // æ¾ç¤ºæç»æµè¯ç»æå¼¹çª
+ showFinalTestResult();
+ // ui->ProductionTestButton->setText("å¼å§äº§æµ");
+ return;
+ }
+
+ // å
åé忢æä»¤ï¼ç¶åå»¶è¿éè¯
+ qDebug() << "4G失败éè¯ååé忢æä»¤";
+ serial->write("AT^VIBRATORTIMER=0\r\n"); // åæ¢é©¬è¾¾
+ serial->write("AT^LCDTEST=2\r\n"); // éåºLCDæµè¯
+
+ QTimer::singleShot(1000, this, [this]() {
+ qDebug() << "忢æä»¤å·²åéï¼å¼å§4G失败éè¯";
+ perform4GTest();
+ });
+ }
+}
+
+// 4Gæµè¯è¶
æ¶å¤ç
+void MainWindow::on4GTestTimeout()
+{
+ test4GTimer->stop();
+
+ if (!isProductionTestRunning || currentTestStep != TEST_PPP_INIT) {
+ qDebug() << "4Gè¶
æ¶ä½æµè¯ç¶æå·²æ¹åï¼å¿½ç¥";
+ return;
+ }
+
+ // æ£æ¥å½åæ¯å¨çå¾
PPPåå¤è¿æ¯çå¾
signalåsimæ°æ®
+ if (pppCommandCount <= 3) {
+ // å3次ï¼çå¾
PPPæ°æ®è¶
æ¶
+ if (hasReceivedPppInfo) {
+ qDebug() << "PPPæ°æ®çå¾
è¶
æ¶ï¼ä½å·²æ¶å°PPPINFOï¼ç»§ç»æ£å¸¸æµç¨";
+ return;
+ }
+
+ qDebug() << "PPPæ°æ®ç¬¬" << pppCommandCount << "次çå¾
è¶
æ¶ï¼åå¤éè¯";
+
+ // éæ°çå¾
PPPæ°æ®
+ QTimer::singleShot(1000, this, [this]() {
+ if (isProductionTestRunning) {
+ sendPppCommand();
+ }
+ });
+ return;
+ } else {
+ // è¶
è¿3次åï¼çå¾
signalåsimæ°æ®è¶
æ¶
+ if (hasReceivedSignalSim) {
+ qDebug() << "4Gæµè¯è¶
æ¶ï¼ä½å·²æ¶å°signalåsimæ°æ®ï¼æµè¯å·²å®æ";
+ return; // å·²ç»å¨checkSignalAndSimValuesä¸å¤çäºç»æ
+ }
+
+ qDebug() << "4Gæµè¯è¶
æ¶ï¼5ç§å
æªæ¶å°signalåsimæ°æ®ï¼å¤æä¸ºå¤±è´¥";
+ ui->statusbar->showMessage("4Gæµè¯å¤±è´¥ - 5ç§å
æªæ¶å°signalåsimæ°æ®", 3000);
+ }
+
+ // ç´æ¥å¤æä¸ºå¤±è´¥ï¼ä¸åéè¯
+ updateTestStatus("ppp", STATUS_FAILED);
+ isProductionTestRunning = false;
+ currentTestStep = TEST_COMPLETED;
+
+ // ä¿åæµè¯è®°å½
+ QString fileName = saveTestRecord();
+
+ // æ¾ç¤ºæç»æµè¯ç»æå¼¹çª
+ showFinalTestResult();
+ return;
+
+ // æ£æ¥éè¯æ¬¡æ°ï¼è¿é¨å代ç ç°å¨ä¸ä¼æ§è¡å°ï¼
+ if (initRetry4GCount >= 10) {
+ qDebug() << "4Gåå§åéè¯æ¬¡æ°è¿å¤ï¼åæ¢æµè¯";
+ ui->statusbar->showMessage("4Gåå§å失败次æ°è¿å¤ï¼æµè¯åæ¢", 5000);
+ updateTestStatus("ppp", STATUS_FAILED);
+ isProductionTestRunning = false;
+ currentTestStep = TEST_IDLE;
+
+ // ä¿åæµè¯è®°å½å°Excelï¼å¤±è´¥è®°å½ï¼
+ QString fileName = saveTestRecord();
+
+ // æ¾ç¤ºæç»æµè¯ç»æå¼¹çª
+ showFinalTestResult();
+ return;
+ }
+
+ // å
åé忢æä»¤ï¼ç¶åå»¶è¿éè¯
+ qDebug() << "PPPéè¯ååé忢æä»¤";
+ serial->write("AT^VIBRATORTIMER=0\r\n"); // åæ¢é©¬è¾¾
+ // serial->write("AT^LCDTEST=2\r\n"); // éåºLCDæµè¯ - å·²å±è½
+
+ QTimer::singleShot(1000, this, [this]() {
+ if (isProductionTestRunning && currentTestStep == TEST_PPP_INIT) {
+ qDebug() << "忢æä»¤å·²åéï¼å¼å§PPPéè¯";
+ perform4GTest();
+ }
+ });
+}
+
+// æ£æ¥LCDæµè¯ç»æ
+void MainWindow::checkLcdTestResult(const QString& data)
+{
+ // æ£æµLCDæµè¯åå¤ä¿¡æ¯ï¼å¹¶ä¸åªå¨LCDæµè¯é¶æ®µä¸æªæ¾ç¤ºè¿å¼¹çªæ¶å¼¹åº
+ // ä¿®æ¹ï¼å¨æåä¸ä¸ªé¢è²ï¼èè²ï¼æ¾ç¤ºæ¶æå¼¹çªï¼è®©ç¨æ·è§å¯å®æ´è¿ç¨
+ if (data.contains("LCD test") && currentTestStep == TEST_LCD &&
+ !lcdTestPopupShown && isProductionTestRunning && currentLcdColor >= 3) {
+
+ qDebug() << "æ£æµå°LCDæµè¯åå¤:" << data.trimmed();
+ qDebug() << "å夿¾ç¤ºLCDæµè¯ç¡®è®¤å¼¹çª";
+
+ // æ è®°å¼¹çªå·²æ¾ç¤ºï¼é¿å
éå¤å¼¹åº
+ lcdTestPopupShown = true;
+ isWaitingForUserConfirm = true;
+
+ // 注æï¼ä¸æåLCD宿¶å¨ï¼è®©é¢è²åæ¢ç»§ç»è¿è¡
+ // LCDé¢è²åæ¢åºè¯¥ç¬ç«äºç¨æ·ç¡®è®¤è¿ç¨
+ qDebug() << "æ¾ç¤ºLCD确认弹çªï¼ä½é¢è²åæ¢ç»§ç»è¿è¡";
+
+ // LCDæµè¯åå¤å·²æ£æµå°ï¼å¼¹çªå¤çç±performLcdTestä¸ç宿¶å¨å¤ç
+
+ // ä¸éè¦å¨è¿éå¤çå¼¹çªï¼ç±performLcdTestä¸ç宿¶å¨å¤ç
+ }
+}
+
+// æ¾ç¤ºLCDæµè¯ç¡®è®¤å¼¹çª
+void MainWindow::showLcdTestConfirmDialog()
+{
+ if (lcdTestPopupShown) {
+ qDebug() << "LCD确认弹çªå·²æ¾ç¤ºè¿ï¼è·³è¿";
+ return;
+ }
+
+ qDebug() << "æ¾ç¤ºLCDæµè¯ç¡®è®¤å¼¹çª";
+
+ // æ è®°å¼¹çªå·²æ¾ç¤ºï¼é¿å
éå¤å¼¹åº
+ lcdTestPopupShown = true;
+ isWaitingForUserConfirm = true;
+
+ // å¼¹åºç¡®è®¤å¯¹è¯æ¡è®©æµè¯äººå确认LCDæ¾ç¤ºæ¯å¦æ£å¸¸
+ QMessageBox msgBox(this);
+ msgBox.setWindowTitle("LCDæµè¯ç¡®è®¤");
+ msgBox.setText("LCDæµè¯æ£å¨è¿è¡ï¼è¯·è§å¯LCDæ¯å¦æ£å¸¸æ¾ç¤ºçº¢ã绿ãèè²åæ¢");
+ msgBox.setInformativeText("è§å¯å®æåè¯·éæ©LCDæ¾ç¤ºç»æï¼");
+ msgBox.setIcon(QMessageBox::Question);
+
+ // 设置弹çªå°ºå¯¸æ´å¤§
+ msgBox.resize(400, 200);
+
+ // æ·»å èªå®ä¹æé®
+ QPushButton *successButton = msgBox.addButton("â æµè¯éè¿", QMessageBox::AcceptRole);
+ QPushButton *failButton = msgBox.addButton("â æµè¯å¤±è´¥", QMessageBox::RejectRole);
+ QPushButton *retestButton = msgBox.addButton("ð éæ°æµè¯", QMessageBox::ResetRole);
+
+ // 设置æé®æ ·å¼
+ successButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #4CAF50; " // 绿è²èæ¯
+ "color: white; " // ç½è²æå
+ "padding: 12px 20px; " // å¢å¤§å
è¾¹è·
+ "border-radius: 4px; " // åè§
+ "font-weight: bold; " // ç²ä½
+ "font-size: 16px; " // å¢å¤§åä½
+ "}"
+ "QPushButton:hover { "
+ "background-color: #45a049; " // hoveræ¶å æ·±é¢è²
+ "}"
+ );
+
+ failButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #f44336; " // 红è²èæ¯
+ "color: white; " // ç½è²æå
+ "padding: 12px 20px; " // å¢å¤§å
è¾¹è·
+ "border-radius: 4px; " // åè§
+ "font-weight: bold; " // ç²ä½
+ "font-size: 16px; " // å¢å¤§åä½
+ "}"
+ "QPushButton:hover { "
+ "background-color: #da190b; " // hoveræ¶å æ·±é¢è²
+ "}"
+ );
+
+ retestButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #FF9800; " // æ©è²èæ¯
+ "color: white; " // ç½è²æå
+ "padding: 12px 20px; " // å¢å¤§å
è¾¹è·
+ "border-radius: 4px; " // åè§
+ "font-weight: bold; " // ç²ä½
+ "font-size: 16px; " // å¢å¤§åä½
+ "}"
+ "QPushButton:hover { "
+ "background-color: #F57C00; " // hoveræ¶å æ·±é¢è²
+ "}"
+ );
+
+ // æ¾ç¤ºå¯¹è¯æ¡å¹¶çå¾
ç¨æ·éæ©
+ msgBox.exec();
+
+ // ç¨æ·å·²ååºéæ©ï¼åæ¶çå¾
ç¶æ
+ isWaitingForUserConfirm = false;
+
+ // æ ¹æ®ç¨æ·éæ©å¤çç»æ
+ if (msgBox.clickedButton() == successButton) {
+ // æµè¯äººå确认LCDæ¾ç¤ºæ£å¸¸
+ qDebug() << "æµè¯äººå确认ï¼LCDæ¾ç¤ºæ£å¸¸";
+ ui->statusbar->showMessage("LCDæ¾ç¤ºæ£å¸¸", 2000);
+ updateTestStatus("lcd", STATUS_SUCCESS);
+
+ // åé忢LCDæµè¯æä»¤
+ serial->write("AT^LCDTEST=2\r\n");
+ qDebug() << "LCDæµè¯éè¿ï¼åé忢LCDæµè¯æä»¤: AT^LCDTEST=2";
+
+ // 忢LCD宿¶å¨ï¼é²æ¢ç»§ç»åæ¢é¢è²åéå¤è°ç¨é©¬è¾¾æµè¯
+ if (lcdTestTimer->isActive()) {
+ lcdTestTimer->stop();
+ qDebug() << "忢LCD宿¶å¨ï¼é²æ¢ç»§ç»åæ¢é¢è²åéå¤è°ç¨é©¬è¾¾æµè¯";
+ }
+
+ // ç´æ¥å¯å¨é©¬è¾¾æµè¯
+ if (isProductionTestRunning) {
+ qDebug() << "LCDæµè¯éè¿ç¡®è®¤ï¼ç´æ¥å¯å¨é©¬è¾¾æµè¯";
+ qDebug() << "å½å产æµç¶æ:" << isProductionTestRunning << "å½åæµè¯æ¥éª¤:" << currentTestStep;
+ currentTestStep = TEST_MOTOR;
+ qDebug() << "设置æµè¯æ¥éª¤ä¸ºTEST_MOTORï¼åå¤è°ç¨performMotorTest()";
+
+ // å»¶è¿ä¸ç¹å¯å¨é©¬è¾¾æµè¯ï¼ç¡®ä¿LCD宿¶å¨å®å
¨åæ¢
+ QTimer::singleShot(100, this, [this]() {
+ if (isProductionTestRunning && currentTestStep == TEST_MOTOR) {
+ performMotorTest();
+ }
+ });
+ } else {
+ qDebug() << "äº§æµæªè¿è¡ï¼æ æ³å¯å¨é©¬è¾¾æµè¯";
+ }
+
+ } else if (msgBox.clickedButton() == failButton) {
+ // æµè¯äººå确认LCDæ¾ç¤ºå¼å¸¸
+ qDebug() << "æµè¯äººå确认ï¼LCDæ¾ç¤ºå¼å¸¸";
+ ui->statusbar->showMessage("LCDæ¾ç¤ºå¼å¸¸ï¼", 2000);
+ updateTestStatus("lcd", STATUS_FAILED);
+
+ // åé忢LCDæµè¯æä»¤
+ serial->write("AT^LCDTEST=2\r\n");
+ qDebug() << "LCDæµè¯å¤±è´¥ï¼åé忢LCDæµè¯æä»¤: AT^LCDTEST=2";
+
+ // 忢LCD宿¶å¨ï¼é²æ¢éå¤è°ç¨é©¬è¾¾æµè¯
+ if (lcdTestTimer->isActive()) {
+ lcdTestTimer->stop();
+ qDebug() << "忢LCD宿¶å¨ï¼é²æ¢éå¤è°ç¨é©¬è¾¾æµè¯";
+ }
+
+ // å³ä½¿å¤±è´¥ä¹ç»§ç»é©¬è¾¾æµè¯
+ if (isProductionTestRunning) {
+ qDebug() << "LCDæµè¯å¤±è´¥ç¡®è®¤ï¼ç»§ç»é©¬è¾¾æµè¯";
+ qDebug() << "å½å产æµç¶æ:" << isProductionTestRunning << "å½åæµè¯æ¥éª¤:" << currentTestStep;
+ currentTestStep = TEST_MOTOR;
+ qDebug() << "设置æµè¯æ¥éª¤ä¸ºTEST_MOTORï¼åå¤è°ç¨performMotorTest()";
+
+ // å»¶è¿ä¸ç¹å¯å¨é©¬è¾¾æµè¯ï¼ç¡®ä¿LCD宿¶å¨å®å
¨åæ¢
+ QTimer::singleShot(100, this, [this]() {
+ if (isProductionTestRunning && currentTestStep == TEST_MOTOR) {
+ performMotorTest();
+ }
+ });
+ } else {
+ qDebug() << "äº§æµæªè¿è¡ï¼æ æ³å¯å¨é©¬è¾¾æµè¯";
+ }
+
+ } else if (msgBox.clickedButton() == retestButton) {
+ // éæ°æµè¯LCD
+ qDebug() << "ç¨æ·éæ©éæ°æµè¯LCD";
+ ui->statusbar->showMessage("éæ°å¼å§LCDæµè¯", 2000);
+
+ // éç½®LCDæµè¯ç¶æ
+ lcdTestPopupShown = false;
+ isWaitingForUserConfirm = false;
+ currentLcdColor = 1; // 设置为1ï¼ä»çº¢è²å¼å§éæ°æµè¯
+
+ // éæ°å¼å§LCDæµè¯
+ currentTestStep = TEST_LCD;
+ performLcdTest();
+ return; // ç´æ¥è¿åï¼ä¸ç»§ç»åç»æµç¨
+ }
+
+ // ç¨æ·ç¡®è®¤å®æï¼é©¬è¾¾æµè¯å·²å¨ä¸é¢çæé®å¤çä¸å¯å¨
+ qDebug() << "ç¨æ·ç¡®è®¤å®æï¼é©¬è¾¾æµè¯å·²å¯å¨";
+}
+
+// æ¾ç¤ºé©¬è¾¾æµè¯ç¡®è®¤å¼¹çª
+void MainWindow::showMotorTestConfirmDialog()
+{
+ if (motorTestPopupShown) {
+ qDebug() << "马达确认弹çªå·²æ¾ç¤ºè¿ï¼è·³è¿";
+ return;
+ }
+
+ qDebug() << "æ¾ç¤ºé©¬è¾¾æµè¯ç¡®è®¤å¼¹çª";
+
+ // æ è®°å¼¹çªå·²æ¾ç¤ºï¼é¿å
éå¤å¼¹åº
+ motorTestPopupShown = true;
+ isWaitingForUserConfirm = true;
+
+ // 忢è¶
æ¶æ£æµï¼å 为马达æµè¯å·²å®æ
+ if (testTimeoutTimer->isActive()) {
+ testTimeoutTimer->stop();
+ qDebug() << "马达æµè¯å®æï¼åæ¢è¶
æ¶æ£æµ";
+ }
+
+ // å¼¹åºç¡®è®¤å¯¹è¯æ¡è®©æµè¯äººå确认马达æ¯å¦éå¨
+ QMessageBox msgBox(this);
+ msgBox.setWindowTitle("马达æµè¯ç¡®è®¤");
+ msgBox.setText("马达æµè¯å·²å®æï¼è¯·æµè¯äººå确认马达æ¯å¦æ£å¸¸éå¨ã");
+ msgBox.setInformativeText("è¯·éæ©é©¬è¾¾æµè¯ç»æï¼");
+ msgBox.setIcon(QMessageBox::Question);
+
+ // 设置弹çªå°ºå¯¸æ´å¤§
+ msgBox.resize(400, 200);
+
+ // æ·»å èªå®ä¹æé®
+ QPushButton *successButton = msgBox.addButton("â æµè¯éè¿", QMessageBox::AcceptRole);
+ QPushButton *failButton = msgBox.addButton("â æµè¯å¤±è´¥", QMessageBox::RejectRole);
+ QPushButton *retestButton = msgBox.addButton("ð éæ°æµè¯", QMessageBox::ResetRole);
+
+ // 设置æé®æ ·å¼
+ successButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #4CAF50; " // 绿è²èæ¯
+ "color: white; " // ç½è²æå
+ "padding: 12px 20px; " // å¢å¤§å
è¾¹è·
+ "border-radius: 4px; " // åè§
+ "font-weight: bold; " // ç²ä½
+ "font-size: 16px; " // å¢å¤§åä½
+ "}"
+ "QPushButton:hover { "
+ "background-color: #45a049; " // hoveræ¶å æ·±é¢è²
+ "}"
+ );
+
+ failButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #f44336; " // 红è²èæ¯
+ "color: white; " // ç½è²æå
+ "padding: 12px 20px; " // å¢å¤§å
è¾¹è·
+ "border-radius: 4px; " // åè§
+ "font-weight: bold; " // ç²ä½
+ "font-size: 16px; " // å¢å¤§åä½
+ "}"
+ "QPushButton:hover { "
+ "background-color: #da190b; " // hoveræ¶å æ·±é¢è²
+ "}"
+ );
+
+ retestButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #FF9800; " // æ©è²èæ¯
+ "color: white; " // ç½è²æå
+ "padding: 12px 20px; " // å¢å¤§å
è¾¹è·
+ "border-radius: 4px; " // åè§
+ "font-weight: bold; " // ç²ä½
+ "font-size: 16px; " // å¢å¤§åä½
+ "}"
+ "QPushButton:hover { "
+ "background-color: #F57C00; " // hoveræ¶å æ·±é¢è²
+ "}"
+ );
+
+ // æ¾ç¤ºå¯¹è¯æ¡å¹¶çå¾
ç¨æ·éæ©
+ msgBox.exec();
+
+ // ç¨æ·å·²ååºéæ©ï¼åæ¶çå¾
ç¶æ
+ isWaitingForUserConfirm = false;
+
+ // æ ¹æ®ç¨æ·éæ©å¤çç»æ
+ if (msgBox.clickedButton() == successButton) {
+ // æµè¯äººå确认马达é卿£å¸¸
+ qDebug() << "æµè¯äººå确认ï¼é©¬è¾¾é卿£å¸¸";
+ ui->statusbar->showMessage("马达æµè¯éè¿ - é卿£å¸¸ï¼", 3000);
+ updateTestStatus("motor", STATUS_SUCCESS);
+
+ } else if (msgBox.clickedButton() == failButton) {
+ // æµè¯äººå确认马达éå¨å¼å¸¸
+ qDebug() << "æµè¯äººå确认ï¼é©¬è¾¾éå¨å¼å¸¸";
+ ui->statusbar->showMessage("马达æµè¯å¤±è´¥ - éå¨å¼å¸¸ï¼", 3000);
+ updateTestStatus("motor", STATUS_FAILED);
+
+ } else if (msgBox.clickedButton() == retestButton) {
+ // éæ°æµè¯é©¬è¾¾
+ qDebug() << "ç¨æ·éæ©éæ°æµè¯é©¬è¾¾";
+ ui->statusbar->showMessage("åæ¢é©¬è¾¾éå¨ï¼åå¤éæ°æµè¯...", 2000);
+
+ // å
åéåæ¢é©¬è¾¾é卿令
+ serial->write("AT^VIBRATORTIMER=0\r\n");
+ qDebug() << "åéåæ¢é©¬è¾¾æä»¤: AT^VIBRATORTIMER=0";
+
+ // é置马达æµè¯ç¶æ
+ motorTestPopupShown = false;
+ isWaitingForUserConfirm = false;
+
+ // å»¶è¿1ç§åéæ°å¼å§é©¬è¾¾æµè¯
+ QTimer::singleShot(1000, this, [this]() {
+ if (!isProductionTestRunning) return; // ç¡®ä¿äº§æµè¿å¨è¿è¡
+
+ qDebug() << "1ç§å»¶è¿åå¼å§éæ°æµè¯é©¬è¾¾";
+ ui->statusbar->showMessage("éæ°å¼å§é©¬è¾¾æµè¯", 2000);
+ currentTestStep = TEST_MOTOR;
+ performMotorTest();
+ });
+ return; // ç´æ¥è¿åï¼ä¸ç»§ç»åç»æµç¨
+ }
+
+ // ç¨æ·ç¡®è®¤å®æï¼é©¬è¾¾æµè¯ç»æï¼å¼å§æé®æµè¯
+ if (isProductionTestRunning && currentTestStep == TEST_MOTOR) {
+ qDebug() << "马达æµè¯ç¡®è®¤å®æï¼å¼å§æé®æµè¯";
+ currentTestStep = TEST_KEY;
+ performKeyTest();
+ }
+}
+
+// æ§è¡æé®æµè¯
+void MainWindow::performKeyTest()
+{
+ if (!isProductionTestRunning || currentTestStep != TEST_KEY) {
+ return;
+ }
+
+ qDebug() << "å¼å§æé®æµè¯";
+ updateTestStatus("key", STATUS_TESTING);
+ ui->statusbar->showMessage("æé®æµè¯ä¸ï¼è¯·æä¸è®¾å¤ä¸çæé®", 10000);
+
+ // éç½®æé®æµè¯ç¶æ
+ keyTestStarted = true;
+ for (int i = 0; i < 4; i++) {
+ keyTestStatus[i] = 0;
+ }
+
+ // å建æé®æµè¯å¼¹çª
+ keyTestDialog = new QDialog(this);
+ keyTestDialog->setWindowTitle("æé®æµè¯");
+ keyTestDialog->setFixedSize(450, 280); // è°å¤§å°ºå¯¸
+ keyTestDialog->setModal(true);
+
+ // 设置å¸å±
+ QVBoxLayout *layout = new QVBoxLayout(keyTestDialog);
+ QLabel *instructionLabel = new QLabel("请æä¸è®¾å¤ä¸çæé®ï¼æé®ä¼åè²è¡¨ç¤ºæ£æµå°");
+ layout->addWidget(instructionLabel);
+
+ // å建æé®æé®ç½æ ¼
+ QGridLayout *gridLayout = new QGridLayout();
+
+ // å建4个æé®æé®
+ for (int i = 0; i < 4; i++) {
+ keyButtons[i] = new QPushButton(QString("æé® %1").arg(i));
+ keyButtons[i]->setFixedSize(60, 40);
+ keyButtons[i]->setStyleSheet(
+ "QPushButton { "
+ "background-color: #f0f0f0; "
+ "border: 2px solid #888888; "
+ "border-radius: 5px; "
+ "font-weight: bold; "
+ "}"
+ );
+
+ // 尿鮿·»å å°ç½æ ¼å¸å±ï¼2x2ï¼
+ gridLayout->addWidget(keyButtons[i], i / 2, i % 2);
+ }
+
+ layout->addLayout(gridLayout);
+
+ // æ·»å æµè¯ç»ææé®
+ QHBoxLayout *buttonLayout = new QHBoxLayout();
+
+ QPushButton *passButton = new QPushButton("â æµè¯éè¿");
+ passButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #4CAF50; "
+ "color: white; "
+ "padding: 12px 20px; "
+ "border-radius: 4px; "
+ "font-weight: bold; "
+ "font-size: 16px; "
+ "}"
+ );
+
+ QPushButton *failButton = new QPushButton("â æµè¯å¤±è´¥");
+ failButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #f44336; "
+ "color: white; "
+ "padding: 12px 20px; "
+ "border-radius: 4px; "
+ "font-weight: bold; "
+ "font-size: 16px; "
+ "}"
+ );
+
+ QPushButton *retestButton = new QPushButton("ð éæ°æµè¯");
+ retestButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #FF9800; "
+ "color: white; "
+ "padding: 12px 20px; "
+ "border-radius: 4px; "
+ "font-weight: bold; "
+ "font-size: 16px; "
+ "}"
+ );
+
+ buttonLayout->addWidget(passButton);
+ buttonLayout->addWidget(failButton);
+ buttonLayout->addWidget(retestButton);
+
+ // è¿æ¥æé®äºä»¶
+ connect(passButton, &QPushButton::clicked, [this]() {
+ if (keyTestDialog && isProductionTestRunning && currentTestStep == TEST_KEY) {
+ keyTestDialog->accept();
+ qDebug() << "ç¨æ·éæ©ï¼æé®æµè¯éè¿";
+ ui->statusbar->showMessage("æé®æµè¯éè¿", 2000);
+ updateTestStatus("key", STATUS_SUCCESS);
+
+ // ç»§ç»å½é³æµè¯
+ qDebug() << "=== æé®æµè¯å®æï¼å¼å§å½é³æµè¯ ===";
+ keyTestStarted = false;
+ currentTestStep = TEST_AUDIO;
+ qDebug() << "设置currentTestStep为TEST_AUDIO:" << TEST_AUDIO;
+ performAudioTest();
+ }
+ });
+
+ connect(failButton, &QPushButton::clicked, [this]() {
+ if (keyTestDialog && isProductionTestRunning && currentTestStep == TEST_KEY) {
+ keyTestDialog->accept();
+ qDebug() << "ç¨æ·éæ©ï¼æé®æµè¯å¤±è´¥";
+ ui->statusbar->showMessage("æé®æµè¯å¤±è´¥", 2000);
+ updateTestStatus("key", STATUS_FAILED);
+
+ // ç»§ç»å½é³æµè¯
+ keyTestStarted = false;
+ currentTestStep = TEST_AUDIO;
+ performAudioTest();
+ }
+ });
+
+ connect(retestButton, &QPushButton::clicked, [this]() {
+ if (keyTestDialog) {
+ keyTestDialog->accept();
+ qDebug() << "ç¨æ·éæ©ï¼éæ°æµè¯æé®";
+ ui->statusbar->showMessage("éæ°å¼å§æé®æµè¯", 2000);
+
+ // éç½®æé®æµè¯ç¶æ
+ keyTestStarted = false;
+
+ // éæ°å¼å§æé®æµè¯
+ currentTestStep = TEST_KEY;
+ performKeyTest();
+ }
+ });
+
+ layout->addLayout(buttonLayout);
+
+ // æ¾ç¤ºå¼¹çª
+ keyTestDialog->show();
+}
+
+// æ£æ¥æé®æµè¯ç»æ
+void MainWindow::checkKeyTestResult(const QString& data)
+{
+ if (!keyTestStarted || !keyTestDialog) {
+ return;
+ }
+
+ // æ£æµæé®IDæå°æ ¼å¼: "fac:id : X"
+ QRegExp keyPattern("fac:id\\s*:\\s*(\\d+)");
+ if (keyPattern.indexIn(data) != -1) {
+ int keyId = keyPattern.cap(1).toInt();
+
+ if (keyId >= 0 && keyId <= 3) {
+ qDebug() << "æ£æµå°æé®æä¸: ID =" << keyId;
+
+ // æ 记该æé®å·²æµè¯
+ keyTestStatus[keyId] = 1;
+
+ // æ´æ°æé®é¢è²
+ if (keyButtons[keyId]) {
+ keyButtons[keyId]->setStyleSheet(
+ "QPushButton { "
+ "background-color: #4CAF50; " // 绿è²è¡¨ç¤ºå·²æµè¯
+ "color: white; "
+ "border: 2px solid #45a049; "
+ "border-radius: 5px; "
+ "font-weight: bold; "
+ "}"
+ );
+ keyButtons[keyId]->setText(QString("æé® %1 â").arg(keyId));
+ }
+
+ ui->statusbar->showMessage(QString("æ£æµå°æé® %1").arg(keyId), 1000);
+
+ // æ£æ¥æ¯å¦æææé®é½å·²æµè¯
+ bool allKeysTested = true;
+ for (int i = 0; i < 4; i++) {
+ if (keyTestStatus[i] == 0) {
+ allKeysTested = false;
+ break;
+ }
+ }
+
+ if (allKeysTested) {
+ qDebug() << "æææé®é½å·²æ£æµå°ï¼èªå¨éè¿æé®æµè¯";
+ ui->statusbar->showMessage("æææé®æ£æµå®æï¼èªå¨éè¿æµè¯", 2000);
+
+ // å»¶è¿1ç§åèªå¨å
³éå¼¹çªå¹¶æ 记为éè¿
+ QTimer::singleShot(1000, [this]() {
+ if (keyTestDialog && isProductionTestRunning && currentTestStep == TEST_KEY) {
+ keyTestDialog->accept();
+ qDebug() << "æé®æµè¯èªå¨éè¿";
+ updateTestStatus("key", STATUS_SUCCESS);
+
+ // ç»§ç»å½é³æµè¯
+ qDebug() << "=== æé®æµè¯èªå¨å®æï¼å¼å§å½é³æµè¯ ===";
+ keyTestStarted = false;
+ currentTestStep = TEST_AUDIO;
+ qDebug() << "设置currentTestStep为TEST_AUDIO(èªå¨):" << TEST_AUDIO;
+ performAudioTest();
+ }
+ });
+ } else {
+ qDebug() << "æé® " << keyId << " æ£æµå®æï¼çå¾
å
¶ä»æé®æç¨æ·éæ©";
+ }
+ }
+ }
+}
+
+// æ¾ç¤ºæé®æµè¯ç¡®è®¤å¯¹è¯æ¡
+void MainWindow::showKeyTestConfirmDialog(bool allKeysTested)
+{
+ qDebug() << "æ¾ç¤ºæé®æµè¯ç¡®è®¤å¼¹çªï¼æææé®å·²æµè¯:" << allKeysTested;
+
+ // å¼¹åºç¡®è®¤å¯¹è¯æ¡è®©æµè¯äººå确认æé®æµè¯ç»æ
+ QMessageBox msgBox(this);
+ msgBox.setWindowTitle("æé®æµè¯ç¡®è®¤");
+
+ if (allKeysTested) {
+ msgBox.setText("æææé®æµè¯å®æï¼è¯·ç¡®è®¤æé®åè½æ¯å¦æ£å¸¸");
+ msgBox.setInformativeText("ææ4个æé®é½å·²æ£æµå°æä¸ï¼è¯·éæ©æé®æµè¯ç»æï¼");
+ } else {
+ msgBox.setText("æé®æµè¯æªå®å
¨å®æ");
+ msgBox.setInformativeText("é¨åæé®æªæ£æµå°æä¸ï¼è¯·éæ©æé®æµè¯ç»æï¼");
+ }
+
+ msgBox.setIcon(QMessageBox::Question);
+
+ // æ·»å èªå®ä¹æé®
+ QPushButton *successButton = msgBox.addButton("â æµè¯éè¿", QMessageBox::AcceptRole);
+ QPushButton *failButton = msgBox.addButton("â æµè¯å¤±è´¥", QMessageBox::RejectRole);
+
+ // 设置æé®æ ·å¼
+ successButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #4CAF50; " // 绿è²èæ¯
+ "color: white; " // ç½è²æå
+ "padding: 12px 20px; " // å¢å¤§å
è¾¹è·
+ "border-radius: 4px; " // åè§
+ "font-weight: bold; " // ç²ä½
+ "font-size: 16px; " // å¢å¤§åä½
+ "}"
+ "QPushButton:hover { "
+ "background-color: #45a049; " // hoveræ¶å æ·±é¢è²
+ "}"
+ );
+
+ failButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #f44336; " // 红è²èæ¯
+ "color: white; " // ç½è²æå
+ "padding: 12px 20px; " // å¢å¤§å
è¾¹è·
+ "border-radius: 4px; " // åè§
+ "font-weight: bold; " // ç²ä½
+ "font-size: 16px; " // å¢å¤§åä½
+ "}"
+ "QPushButton:hover { "
+ "background-color: #da190b; " // hoveræ¶å æ·±é¢è²
+ "}"
+ );
+
+ // æ¾ç¤ºå¯¹è¯æ¡å¹¶çå¾
ç¨æ·éæ©
+ msgBox.exec();
+
+ // æ ¹æ®ç¨æ·éæ©å¤çç»æ
+ if (msgBox.clickedButton() == successButton) {
+ // æµè¯äººå确认æé®æ£å¸¸
+ qDebug() << "æµè¯äººåç¡®è®¤ï¼æé®æµè¯éè¿";
+ ui->statusbar->showMessage("æé®æµè¯éè¿", 2000);
+ updateTestStatus("key", STATUS_SUCCESS);
+
+ } else if (msgBox.clickedButton() == failButton) {
+ // æµè¯äººå确认æé®å¼å¸¸
+ qDebug() << "æµè¯äººåç¡®è®¤ï¼æé®æµè¯å¤±è´¥";
+ ui->statusbar->showMessage("æé®æµè¯å¤±è´¥", 2000);
+ updateTestStatus("key", STATUS_FAILED);
+ }
+
+ // æé®æµè¯å®æï¼å¼å§å½é³æµè¯
+ if (isProductionTestRunning) {
+ keyTestStarted = false;
+ currentTestStep = TEST_AUDIO;
+ performAudioTest();
+ }
+}
+
+// æ£æ¥BuildVerå¯å¨å®æ
+void MainWindow::checkBuildVerResult(const QString& data)
+{
+ // æ£æµè®¾å¤å¯å¨å®ææ å¿ï¼åªå¨çå¾
BuildVeré¶æ®µæ£æµï¼å¤§å°å䏿æï¼
+ if (data.contains("BuildVer", Qt::CaseInsensitive) && currentTestStep == TEST_WAIT_BUILDVER &&
+ isProductionTestRunning) {
+
+ qDebug() << "æ£æµå°BuildVerå¯å¨å®ææ å¿:" << data.trimmed();
+ qDebug() << "设å¤éå¯å®æï¼åéAT^PMADDVOTEæä»¤";
+
+ ui->statusbar->showMessage("设å¤éå¯å®æï¼åéåå§åæä»¤...", 2000);
+
+ // åéç¬¬ä¸æ¬¡AT^PMADDVOTEæä»¤
+ serial->write("AT^PMADDVOTE\r\n");
+ qDebug() << "åéAT^PMADDVOTEæä»¤(第1次): AT^PMADDVOTE";
+
+ // å»¶è¿0.5ç§ååéç¬¬äºæ¬¡AT^PMADDVOTEæä»¤
+ QTimer::singleShot(500, this, [this]() {
+ if (isProductionTestRunning && serial->isOpen()) {
+ serial->write("AT^PMADDVOTE\r\n");
+ qDebug() << "åéAT^PMADDVOTEæä»¤(第2次): AT^PMADDVOTE";
+
+ // åå»¶è¿1ç§å忢å°LCDæµè¯é¶æ®µ
+ QTimer::singleShot(1000, this, [this]() {
+ if (isProductionTestRunning) {
+ qDebug() << "AT^PMADDVOTEæä»¤åé宿ï¼å¼å§LCDæµè¯";
+ ui->statusbar->showMessage("åå§å宿ï¼å¼å§LCDæµè¯", 2000);
+
+ // 忢å°LCDæµè¯é¶æ®µ
+ currentTestStep = TEST_LCD;
+
+ // å»¶è¿1ç§åå¼å§LCDæµè¯
+ QTimer::singleShot(1000, this, [this]() {
+ if (isProductionTestRunning && currentTestStep == TEST_LCD) {
+ qDebug() << "å¼å§LCDæµè¯æµç¨";
+ performLcdTest();
+ }
+ });
+ }
+ });
+ }
+ });
+ }
+}
+
+// æ´æ°æµè¯ç¶ææç¤ºå¨
+void MainWindow::updateTestStatus(const QString& testName, TestStatus status)
+{
+ QString iconText, statusText, iconColor, textColor;
+
+ switch (status) {
+ case STATUS_UNTESTED:
+ iconText = "â";
+ statusText = "æªæµè¯";
+ iconColor = "#888888";
+ textColor = "#888888";
+ break;
+ case STATUS_TESTING:
+ iconText = "â";
+ statusText = "æµè¯ä¸";
+ iconColor = "#FFA500"; // æ©è²
+ textColor = "#FFA500";
+ break;
+ case STATUS_SUCCESS:
+ iconText = "â";
+ statusText = "éè¿";
+ iconColor = "#4CAF50"; // 绿è²
+ textColor = "#4CAF50";
+ break;
+ case STATUS_FAILED:
+ iconText = "â";
+ statusText = "失败";
+ iconColor = "#F44336"; // 红è²
+ textColor = "#F44336";
+ break;
+ }
+
+ QString iconStyle = QString("color: %1; font-size: 18px; font-weight: bold;").arg(iconColor);
+ QString textStyle = QString("color: %1;").arg(textColor);
+
+ if (testName == "lcd") {
+ ui->lcdStatusIcon->setText(iconText);
+ ui->lcdStatusIcon->setStyleSheet(iconStyle);
+ ui->lcdStatusText->setText(statusText);
+ ui->lcdStatusText->setStyleSheet(textStyle);
+ } else if (testName == "motor") {
+ ui->motorStatusIcon->setText(iconText);
+ ui->motorStatusIcon->setStyleSheet(iconStyle);
+ ui->motorStatusText->setText(statusText);
+ ui->motorStatusText->setStyleSheet(textStyle);
+ } else if (testName == "key") {
+ ui->keyStatusIcon->setText(iconText);
+ ui->keyStatusIcon->setStyleSheet(iconStyle);
+ ui->keyStatusText->setText(statusText);
+ ui->keyStatusText->setStyleSheet(textStyle);
+ } else if (testName == "audio") {
+ ui->audioStatusIcon->setText(iconText);
+ ui->audioStatusIcon->setStyleSheet(iconStyle);
+ ui->audioStatusText->setText(statusText);
+ ui->audioStatusText->setStyleSheet(textStyle);
+ } else if (testName == "battery") {
+ ui->batteryStatusIcon->setText(iconText);
+ ui->batteryStatusIcon->setStyleSheet(iconStyle);
+ ui->batteryStatusText->setText(statusText);
+ ui->batteryStatusText->setStyleSheet(textStyle);
+ } else if (testName == "gsensor") {
+ ui->gsensorStatusIcon->setText(iconText);
+ ui->gsensorStatusIcon->setStyleSheet(iconStyle);
+ ui->gsensorStatusText->setText(statusText);
+ ui->gsensorStatusText->setStyleSheet(textStyle);
+ } else if (testName == "ppp") {
+ ui->pppStatusIcon->setText(iconText);
+ ui->pppStatusIcon->setStyleSheet(iconStyle);
+ ui->pppStatusText->setText(statusText);
+ ui->pppStatusText->setStyleSheet(textStyle);
+ }
+
+ // æ´æ°æ´ä½ç¶æ
+ updateOverallStatus();
+}
+
+// æ´æ°æ´ä½ç¶æ
+void MainWindow::updateOverallStatus()
+{
+ // æ£æ¥å项æµè¯ç¶æï¼åªæ£æ¥æåç¶æï¼ç®åé»è¾ï¼
+ bool lcdSuccess = ui->lcdStatusText->text() == "éè¿";
+ bool motorSuccess = ui->motorStatusText->text() == "éè¿";
+ bool keySuccess = ui->keyStatusText->text() == "éè¿";
+ bool audioSuccess = ui->audioStatusText->text() == "éè¿";
+ bool batterySuccess = ui->batteryStatusText->text() == "éè¿";
+ bool gsensorSuccess = ui->gsensorStatusText->text() == "éè¿";
+ bool pppSuccess = ui->pppStatusText->text() == "éè¿";
+
+ QString overallIcon, overallText, overallColor;
+
+ if (lcdSuccess && motorSuccess && keySuccess && audioSuccess && batterySuccess && gsensorSuccess && pppSuccess) {
+ // æææµè¯é½éè¿
+ overallIcon = "â";
+ overallText = "éè¿";
+ overallColor = "#4CAF50";
+ } else {
+ // ä»»ä½å
¶ä»æ
åµï¼å¤±è´¥ãæµè¯ä¸ãçå¾
å¼å§çï¼é½æ¾ç¤ºä¸ºæªéè¿
+ overallIcon = "â";
+ overallText = "æªéè¿";
+ overallColor = "#F44336";
+ }
+
+ QString overallStyle = QString("color: %1; font-size: 18px; font-weight: bold;").arg(overallColor);
+ QString textStyle = QString("color: %1;").arg(overallColor);
+
+ ui->overallStatusIcon->setText(overallIcon);
+ ui->overallStatusIcon->setStyleSheet(overallStyle);
+ ui->overallStatusText->setText(overallText);
+ ui->overallStatusText->setStyleSheet(textStyle);
+}
+
+// ä¿åæµè¯è®°å½å°CSVæä»¶ï¼å¯ç¨Excelæå¼ï¼
+QString MainWindow::saveTestRecord()
+{
+ QDateTime endTime = QDateTime::currentDateTime();
+ QString startTimeStr = testStartTime.toString("yyyy-MM-dd hh:mm:ss");
+ QString endTimeStr = endTime.toString("yyyy-MM-dd hh:mm:ss");
+
+ // è®¡ç®æµè¯æ»èæ¶
+ qint64 totalSeconds = testStartTime.secsTo(endTime);
+ int minutes = totalSeconds / 60;
+ int seconds = totalSeconds % 60;
+ QString durationStr = QString("%1å%2ç§").arg(minutes).arg(seconds);
+
+ QString date = endTime.toString("yyyy-MM-dd");
+
+ // è·åå½åæµè¯æ°æ®
+ QString ver = ui->VerlineEdit->text().trimmed();
+ QString imei = ui->IMEIlineEdit->text().trimmed();
+ QString iccid = ui->ICCIDlineEdit->text().trimmed();
+ QString modem = ui->ModemVerlineEdit->text().trimmed();
+ QString pyver = ui->PYVerlineEdit->text().trimmed();
+
+ // æ£æ¥ICCIDæ¯å¦ææï¼å¦ææ æåä¸åå
¥è®°å½
+ if (iccid.isEmpty() || iccid == "æªè·å") {
+ qDebug() << "ICCIDä¸ºç©ºææªè·åï¼è·³è¿ä¿åæµè¯è®°å½";
+ ui->statusbar->showMessage("ICCIDæªè·åï¼æµè¯è®°å½æªä¿å", 3000);
+ return QString(); // è¿å空å符串表示æªä¿å
+ }
+
+ // æ£æ¥ICCIDæ ¼å¼æ¯å¦æ£ç¡®
+ if (!isValidICCID(iccid)) {
+ qDebug() << "ICCIDæ ¼å¼ä¸æ£ç¡®ï¼è·³è¿ä¿åæµè¯è®°å½ï¼ICCID:" << iccid;
+ ui->statusbar->showMessage("ICCIDæ ¼å¼ä¸æ£ç¡®ï¼æµè¯è®°å½æªä¿å: " + iccid, 3000);
+ return QString(); // è¿å空å符串表示æªä¿å
+ }
+
+ // æ£æ¥IMEIæ ¼å¼æ¯å¦æ£ç¡®ï¼å¦æIMEIä¸ä¸ºç©ºï¼
+ if (!imei.isEmpty() && !isValidIMEI(imei)) {
+ qDebug() << "IMEIæ ¼å¼ä¸æ£ç¡®ï¼è·³è¿ä¿åæµè¯è®°å½ï¼IMEI:" << imei;
+ ui->statusbar->showMessage("IMEIæ ¼å¼ä¸æ£ç¡®ï¼æµè¯è®°å½æªä¿å: " + imei, 3000);
+ return QString(); // è¿å空å符串表示æªä¿å
+ }
+
+ // è°è¯ä¿¡æ¯ï¼è¾åºè·åå°çå¼
+ qDebug() << "ä¿åæ¶è·åçæ°æ®:";
+ qDebug() << " Ver:" << (ver.isEmpty() ? "空" : ver);
+ qDebug() << " IMEI:" << (imei.isEmpty() ? "空" : imei);
+ qDebug() << " ICCID:" << iccid;
+ qDebug() << " Modem:" << (modem.isEmpty() ? "空" : modem);
+ qDebug() << " PYVER:" << (pyver.isEmpty() ? "空" : pyver);
+
+ // è·åå项æµè¯ç»æ
+ QString lcdResult = ui->lcdStatusText->text();
+ QString motorResult = ui->motorStatusText->text();
+ QString keyResult = ui->keyStatusText->text();
+ QString audioResult = ui->audioStatusText->text();
+ QString batteryResult = ui->batteryStatusText->text();
+ QString gsensorResult = ui->gsensorStatusText->text();
+ QString pppResult = ui->pppStatusText->text();
+ QString overallResult = ui->overallStatusText->text();
+
+ // å建ä¿åç®å½ï¼å¨æºç åä¸è·¯å¾ä¸ï¼
+ QString appPath = QCoreApplication::applicationDirPath();
+ QString saveDir = appPath + "/产æµè®°å½";
+ QDir dir;
+ if (!dir.exists(saveDir)) {
+ dir.mkpath(saveDir);
+ }
+
+ // CSVæä»¶è·¯å¾ï¼ç»ä¸å½åï¼
+ QString csvFileName = "产æµè®°å½.csv";
+ QString csvFilePath = saveDir + "/" + csvFileName;
+
+ // æ£æ¥æ¯å¦æ¯æ°æä»¶ï¼éè¦åå
¥è¡¨å¤´ï¼
+ bool isNewFile = !QFile::exists(csvFilePath);
+
+ // æå»ºæ°çæµè¯æ°æ®è¡
+ QString newDataLine = QString("%1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12,%13,%14,%15\n")
+ .arg(startTimeStr)
+ .arg(endTimeStr)
+ .arg(durationStr)
+ .arg(ver.isEmpty() ? "æªè·å" : ver)
+ .arg(imei.isEmpty() ? "æªè·å" : imei)
+ .arg(iccid.isEmpty() ? "æªè·å" : iccid)
+ .arg(modem.isEmpty() ? "æªè·å" : modem)
+ .arg(pyver.isEmpty() ? "æªè·å" : pyver)
+ .arg(lcdResult)
+ .arg(motorResult)
+ .arg(keyResult)
+ .arg(audioResult)
+ .arg(batteryResult)
+ .arg(gsensorResult)
+ .arg(pppResult)
+ .arg(overallResult);
+
+ QString finalContent;
+
+ if (isNewFile) {
+ // æ°æä»¶ï¼åå
¥è¡¨å¤´åæ°æ®
+ finalContent += "å¼å§æ¶é´,ç»ææ¶é´,æµè¯èæ¶,è½¯ä»¶çæ¬,IMEI,ICCID,Modemçæ¬,PYVERçæ¬,LCDæµè¯,马达æµè¯,æé®æµè¯,å½é³æµè¯,çµæ± æµè¯,G-sensoræµè¯,4Gæµè¯,æ´ä½ç»æ\n";
+ finalContent += newDataLine;
+ qDebug() << "å建æ°çCSVæä»¶:" << csvFilePath;
+ } else {
+ // ç°ææä»¶ï¼éè¦æ£æ¥ICCIDæ¯å¦éå¤
+ QFile existingFile(csvFilePath);
+ if (!existingFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ QMessageBox::warning(this, "读å失败",
+ QString("æ æ³è¯»åç°ææµè¯è®°å½æä»¶ï¼\n%1").arg(csvFilePath));
+ return QString();
+ }
+
+ // è¯»åææç°ææ°æ®
+ QStringList existingLines;
+ QTextStream readStream(&existingFile);
+ while (!readStream.atEnd()) {
+ existingLines << readStream.readLine();
+ }
+ existingFile.close();
+
+ // æå»ºæç»å
容
+ if (!existingLines.isEmpty()) {
+ finalContent = existingLines[0] + "\n"; // 表头
+
+ bool iccidFound = false;
+
+ // æ£æ¥æ¯ä¸è¡æ°æ®ï¼æ¥æ¾ç¸åICCID
+ for (int i = 1; i < existingLines.size(); i++) {
+ QString line = existingLines[i];
+ if (line.trimmed().isEmpty()) continue;
+
+ // åå²CSVè¡ï¼è·åICCIDåæ®µï¼ç¬¬6åï¼ç´¢å¼ä¸º5ï¼
+ QStringList fields = line.split(",");
+ if (fields.size() >= 6) {
+ QString existingIccid = fields[5].trimmed();
+
+ if (existingIccid == iccid) {
+ // æ¾å°ç¸åICCIDï¼æ¿æ¢ä¸ºæ°è®°å½
+ finalContent += newDataLine;
+ iccidFound = true;
+ qDebug() << "æ¾å°ç¸åICCIDï¼æ¿æ¢è®°å½:" << iccid;
+ } else {
+ // ä¿çä¸åICCIDçè®°å½
+ finalContent += line + "\n";
+ }
+ } else {
+ // æ ¼å¼ä¸æ£ç¡®çè¡ï¼ä¿ç
+ finalContent += line + "\n";
+ }
+ }
+
+ // å¦ææ²¡ææ¾å°ç¸åICCIDï¼è¿½å æ°è®°å½
+ if (!iccidFound) {
+ finalContent += newDataLine;
+ qDebug() << "æªæ¾å°ç¸åICCIDï¼è¿½å æ°è®°å½:" << iccid;
+ }
+ } else {
+ // æä»¶ä¸ºç©ºï¼é建
+ finalContent = "å¼å§æ¶é´,ç»ææ¶é´,æµè¯èæ¶,è½¯ä»¶çæ¬,IMEI,ICCID,Modemçæ¬,LCDæµè¯,马达æµè¯,æé®æµè¯,å½é³æµè¯,çµæ± æµè¯,G-sensoræµè¯,4Gæµè¯,æ´ä½ç»æ\n";
+ finalContent += newDataLine;
+ }
+ }
+
+ // åå
¥æç»å
容尿件
+ QFile csvFile(csvFilePath);
+ if (!csvFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
+ QMessageBox::warning(this, "ä¿å失败",
+ QString("æ æ³å建æµè¯è®°å½æä»¶ï¼\n%1\né误ï¼%2")
+ .arg(csvFilePath)
+ .arg(csvFile.errorString()));
+ return QString(); // è¿å空å符串表示ä¿å失败
+ }
+
+ // 使ç¨ç³»ç»æ¬å°ç¼ç åå
¥æ°æ®ï¼Windowsä¸é常æ¯GBKï¼
+ QByteArray localData = finalContent.toLocal8Bit();
+ csvFile.write(localData);
+ qDebug() << "ä½¿ç¨æ¬å°ç¼ç åå
¥æ°æ®ï¼å¤§å°:" << localData.size() << "åè";
+
+ csvFile.close();
+
+ qDebug() << "æµè¯è®°å½å·²ä¿åå°:" << csvFilePath;
+ qDebug() << "è®°å½å
容: å¼å§æ¶é´=" << startTimeStr << ", ç»ææ¶é´=" << endTimeStr << ", èæ¶=" << durationStr
+ << ", Ver=" << ver << ", IMEI=" << imei << ", ICCID=" << iccid << ", Modem=" << modem
+ << ", PYVER=" << pyver << ", LCD=" << lcdResult << ", 马达=" << motorResult
+ << ", æé®=" << keyResult << ", PPP=" << pppResult
+ << ", æ´ä½=" << overallResult;
+
+ // æ¾ç¤ºä¿åæåæ¶æ¯
+ ui->statusbar->showMessage(QString("æµè¯è®°å½å·²ä¿å: %1").arg(csvFileName), 3000);
+
+ // è¿åæä»¶åä¾å¤é¨ä½¿ç¨
+ return csvFileName;
+}
+
+
+// æ£æ¥signalåsimå¼è¿è¡4Gæµè¯å¤æ
+void MainWindow::checkSignalAndSimValues(const QString& data)
+{
+ qDebug() << "å¼å§æ£æ¥signalåsimå¼ï¼æ°æ®:" << data.trimmed();
+
+ // æ è®°å·²æ¶å°signalåsimæ°æ®
+ hasReceivedSignalSim = true;
+
+ // 忢è¶
æ¶æ£æµï¼å ä¸ºå·²ç»æ¶å°æ°æ®
+ if (test4GTimer->isActive()) {
+ test4GTimer->stop();
+ qDebug() << "æ¶å°signalåsimæ°æ®ï¼åæ¢4Gæµè¯è¶
æ¶æ£æµ";
+ }
+
+ // è§£æsimå¼ï¼@sim:1@
+ QRegExp simRegex("@sim:(\\d+)@");
+ int simValue = -1;
+ if (simRegex.indexIn(data) != -1) {
+ simValue = simRegex.cap(1).toInt();
+ qDebug() << "è§£æå°simå¼:" << simValue;
+
+ // ä¿åSIMå¡ç¶æ
+ currentSimStatus = simValue;
+ qDebug() << "æ´æ°SIMå¡ç¶æ:" << (currentSimStatus == 1 ? "å·²æå
¥" : "æªæå
¥");
+ } else {
+ qDebug() << "æªæ¾å°simå¼";
+ return;
+ }
+
+ // è§£æsignalå¼ï¼@signal:31@
+ QRegExp signalRegex("@signal:(\\d+)@");
+ int signalValue = -1;
+ if (signalRegex.indexIn(data) != -1) {
+ signalValue = signalRegex.cap(1).toInt();
+ qDebug() << "è§£æå°signalå¼:" << signalValue;
+
+ // å°signal弿¾ç¤ºå°çé¢
+ ui->recvTextEdit->append(QString("Signalå¼: %1").arg(signalValue));
+ ui->statusbar->showMessage(QString("æ£æµå°Signalå¼: %1").arg(signalValue), 2000);
+ } else {
+ qDebug() << "æªæ¾å°signalå¼";
+ return;
+ }
+
+ // ç§»é¤signal=99çç«å³å¤±è´¥é»è¾ï¼æ¹ä¸ºå¨CAT1æµè¯ä¸ç»è®¡å¤ç
+
+ // 妿æ¯ç¬¬ä¸æ¬¡æ¶å°signalå¼ï¼å¯å¨CAT1ä¿¡å·æµè¯
+ if (!hasReceivedFirstSignal) {
+ hasReceivedFirstSignal = true;
+ qDebug() << "æ¶å°ç¬¬ä¸æ¬¡signalå¼:" << signalValue << "ï¼å¯å¨CAT1ä¿¡å·æµè¯";
+
+ // 忢signal4GTimerï¼é¿å
ä¸CAT1æµè¯å²çªå¯¼è´éå¤å¼¹çª
+ if (signal4GTimer->isActive()) {
+ signal4GTimer->stop();
+ qDebug() << "忢signal4GTimerï¼æ¹ç¨CAT1ä¿¡å·æµè¯";
+ }
+
+ // åå§åCAT1ä¿¡å·æµè¯è®¡æ°å¨
+ cat1SignalTestCount = 0;
+ cat1SignalReceivedCount = 0;
+ cat1SignalGoodCount = 0;
+ cat1Signal99Count = 0;
+ cat1SignalTotalValue = 0;
+ // ç§»é¤äºcat1ProcessedSignalsçæ¸
çï¼æ¹ç¨æ¶é´æ³æ¹å¼
+
+ // å¯å¨CAT1ä¿¡å·æµè¯å®æ¶å¨ï¼æ¯2ç§åé䏿¬¡
+ cat1SignalTimer->start(2000);
+ ui->statusbar->showMessage("å¼å§CAT1ä¿¡å·æµè¯ï¼æ¯2ç§æ£æµä¸æ¬¡...", 3000);
+
+ // ç«å³åéç¬¬ä¸æ¬¡CAT1ä¿¡å·æ£æµæä»¤
+ serial->write("AT^CAT1GETSIGNAL\r\n");
+ cat1SignalTestCount++;
+ qDebug() << "åé第" << cat1SignalTestCount << "次CAT1ä¿¡å·æ£æµæä»¤: AT^CAT1GETSIGNAL";
+ return;
+ }
+
+ // 妿已ç»å¯å¨äºCAT1ä¿¡å·æµè¯ï¼ä¸åæ§è¡æ§ç夿é»è¾
+ if (hasReceivedFirstSignal) {
+ qDebug() << "å·²å¯å¨CAT1ä¿¡å·æµè¯ï¼è·³è¿æ§çsignal夿é»è¾";
+ return;
+ }
+
+ // 夿4Gæµè¯æ¯å¦éè¿ï¼è¿æ®µä»£ç ç论ä¸ä¸ä¼æ§è¡å°ï¼
+ bool simOk = (simValue == 1);
+ bool signalOk = (signalValue > 25);
+ bool testPassed = simOk && signalOk;
+
+ qDebug() << "4Gæµè¯å¤æç»æ:";
+ qDebug() << " simå¼:" << simValue << "(ææ: 1)" << "æ£æ¥ç»æ:" << (simOk ? "éè¿" : "失败");
+ qDebug() << " signalå¼:" << signalValue << "(ææ: >25)" << "æ£æ¥ç»æ:" << (signalOk ? "éè¿" : "失败");
+ qDebug() << " æç»æµè¯ç»æ:" << (testPassed ? "éè¿" : "失败");
+ qDebug() << " è¦åï¼æ¤ä»£ç ä¸åºè¯¥æ§è¡å°ï¼å 为已å¯å¨CAT1æµè¯";
+
+ if (testPassed) {
+ // æµè¯éè¿
+ ui->statusbar->showMessage(QString("4Gæµè¯éè¿ - SIM: %1, Signal: %2").arg(simValue).arg(signalValue), 3000);
+ updateTestStatus("ppp", STATUS_SUCCESS);
+
+ // å®æäº§æµ
+ if (isProductionTestRunning) {
+ currentTestStep = TEST_COMPLETED;
+ isProductionTestRunning = false;
+ qDebug() << "4Gæµè¯éè¿ï¼äº§æµæµç¨å®æ";
+
+ // ä¿åæµè¯è®°å½
+ QString fileName = saveTestRecord();
+
+ // æ¾ç¤ºæç»æµè¯ç»æå¼¹çª
+ showFinalTestResult();
+ }
+ } else {
+ // æµè¯å¤±è´¥
+ QString failReason;
+ if (simValue != 1) {
+ failReason += QString("SIMå¡ç¶æå¼å¸¸(å¼:%1,ææ:1) ").arg(simValue);
+ }
+ if (signalValue == 99) {
+ failReason += QString("æ æä¿¡å·å¼(å¼:%1)").arg(signalValue);
+ } else if (signalValue <= 25) {
+ failReason += QString("ä¿¡å·å¼ºåº¦ä¸è¶³(å¼:%1,ææ:>25)").arg(signalValue);
+ }
+
+ ui->statusbar->showMessage(QString("4Gæµè¯å¤±è´¥ - %1").arg(failReason), 3000);
+ updateTestStatus("ppp", STATUS_FAILED);
+
+ // å®æäº§æµï¼å¤±è´¥ï¼
+ if (isProductionTestRunning) {
+ currentTestStep = TEST_COMPLETED;
+ isProductionTestRunning = false;
+ qDebug() << "4Gæµè¯å¤±è´¥ï¼äº§æµæµç¨å®æ";
+
+ // ä¿åæµè¯è®°å½
+ QString fileName = saveTestRecord();
+
+ // æ¾ç¤ºæç»æµè¯ç»æå¼¹çª
+ showFinalTestResult();
+ }
+ }
+}
+
+// è§£æwstp_printæ ¼å¼çBTMACåCyweeChipInfoæ°æ®
+void MainWindow::parseWstpPrintData(const QString& data)
+{
+ qDebug() << "æ£æµå°wstp_printæ ¼å¼æ°æ®:" << data.trimmed();
+
+ // è§£æBTMACå°å
+ // æ ¼å¼ï¼^^^^ BTMAC=XX:XX:XX:XX:XX:XX ^^^^
+ QRegExp btmacPattern("\\^\\^\\^\\^ BTMAC=([0-9A-Fa-f:]{17}) \\^\\^\\^\\^");
+ if (btmacPattern.indexIn(data) != -1) {
+ QString btmac = btmacPattern.cap(1);
+ qDebug() << "è§£æå°BTMACå°å:" << btmac;
+
+ // è¿éå¯ä»¥å°BTMACå°åå¡«å
å°ç¸åºçææ¬æ¡
+ // 妿æä¸é¨çBTMACææ¬æ¡ï¼å¯ä»¥è¿æ ·è®¾ç½®ï¼
+ // ui->btmacLineEdit->setText(btmac);
+
+ // ææ¶æ¾ç¤ºå¨ç¶ææ
+ ui->statusbar->showMessage(QString("æ£æµå°èçMACå°å: %1").arg(btmac), 3000);
+ }
+
+ // è§£æCyweeChipInfo
+ // æ ¼å¼ï¼^^^^ CyweeChipInfo=XXXXXX ^^^^
+ QRegExp chipinfoPattern("\\^\\^\\^\\^ CyweeChipInfo=([^\\s\\^]+)");
+ if (chipinfoPattern.indexIn(data) != -1) {
+ QString chipinfo = chipinfoPattern.cap(1);
+ qDebug() << "è§£æå°CyweeChipInfo:" << chipinfo;
+
+ // è¿éå¯ä»¥å°è¯çä¿¡æ¯å¡«å
å°ç¸åºçææ¬æ¡
+ // 妿æä¸é¨çè¯çä¿¡æ¯ææ¬æ¡ï¼å¯ä»¥è¿æ ·è®¾ç½®ï¼
+ // ui->chipinfoLineEdit->setText(chipinfo);
+
+ // ææ¶æ¾ç¤ºå¨ç¶ææ
+ ui->statusbar->showMessage(QString("æ£æµå°è¯çä¿¡æ¯: %1").arg(chipinfo), 3000);
+ }
+
+ // 宿´çæ°æ®æ ¼å¼ç¤ºä¾ï¼
+ // wstp_print("^^^^ BTMAC=%s ^^^^ CyweeChipInfo=%s\n",btaddr_str,chipinfo);
+ // å®é
è¾åºå¯è½æ¯ï¼^^^^ BTMAC=AA:BB:CC:DD:EE:FF ^^^^ CyweeChipInfo=MSA310
+
+ // 妿éè¦åæ¶è§£æä¸¤ä¸ªå¼ç宿´æ ¼å¼
+ QRegExp fullPattern("\\^\\^\\^\\^ BTMAC=([0-9A-Fa-f:]{17}) \\^\\^\\^\\^ CyweeChipInfo=([^\\s\\^\\n]+)");
+ if (fullPattern.indexIn(data) != -1) {
+ QString btmac = fullPattern.cap(1);
+ QString chipinfo = fullPattern.cap(2);
+
+ qDebug() << "宿´è§£æ - BTMAC:" << btmac << ", CyweeChipInfo:" << chipinfo;
+
+ // å¯ä»¥å¨è¿éå°ä¿¡æ¯å¡«å
å°å¯¹åºçUIæ§ä»¶
+ // ä¾å¦ï¼
+ // ui->btmacLineEdit->setText(btmac);
+ // ui->chipinfoLineEdit->setText(chipinfo);
+
+ ui->statusbar->showMessage(QString("设å¤ä¿¡æ¯ - MAC: %1, è¯ç: %2").arg(btmac, chipinfo), 5000);
+ }
+}
+
+// åéPPPæä»¤
+void MainWindow::sendPppCommand()
+{
+ if (!isProductionTestRunning || currentTestStep != TEST_PPP_INIT) {
+ qDebug() << "PPPæ°æ®çå¾
è·³è¿ - æµè¯ç¶æä¸æ£ç¡®";
+ return;
+ }
+
+ pppCommandCount++;
+ qDebug() << "çå¾
PPPæ°æ®ï¼ç¬¬" << pppCommandCount << "次";
+
+ if (pppCommandCount <= 3) {
+ // å3次çå¾
PPPç¸å
³æ°æ®
+ ui->statusbar->showMessage(QString("4Gæµè¯ä¸ - çå¾
PPPæ°æ®(%1/3)").arg(pppCommandCount), 3000);
+
+ // ä¸ååéPPPENVINITæä»¤ï¼ç´æ¥çå¾
设å¤èªå¨åéPPPINFO
+
+ // å¯å¨5ç§è¶
æ¶å®æ¶å¨ï¼çå¾
PPPINFOåå¤
+ test4GTimer->start(5000);
+ qDebug() << "å¯å¨5ç§è¶
æ¶å®æ¶å¨ï¼çå¾
PPPINFOåå¤";
+ } else {
+ // è¶
è¿3次åï¼æ¹ä¸ºçå¾
signalåsimæ°æ®
+ qDebug() << "PPPæ°æ®å·²çå¾
3æ¬¡ï¼æ¹ä¸ºçå¾
signalåsimæ°æ®";
+ ui->statusbar->showMessage("4Gæµè¯ä¸ - çå¾
signalåsimæ°æ®...", 5000);
+
+ // å¯å¨5ç§è¶
æ¶æ£æµï¼çå¾
signalåsimæ°æ®
+ test4GTimer->start(5000);
+ qDebug() << "å¯å¨5ç§è¶
æ¶æ£æµï¼çå¾
signalåsimæ°æ®";
+ }
+}
+
+// æå¼è®°å½æä»¶å¤¹
+void MainWindow::on_openRecordsFolderButton_clicked()
+{
+ QString appPath = QCoreApplication::applicationDirPath();
+ QString saveDir = appPath + "/产æµè®°å½";
+
+ // 妿æä»¶å¤¹ä¸åå¨ï¼å
å建å®
+ QDir dir;
+ if (!dir.exists(saveDir)) {
+ dir.mkpath(saveDir);
+ qDebug() << "å建产æµè®°å½æä»¶å¤¹:" << saveDir;
+ }
+
+ // æå¼æä»¶å¤¹
+ bool success = QDesktopServices::openUrl(QUrl::fromLocalFile(saveDir));
+
+ if (success) {
+ qDebug() << "æåæå¼æä»¶å¤¹:" << saveDir;
+ ui->statusbar->showMessage("å·²æå¼äº§æµè®°å½æä»¶å¤¹", 2000);
+ } else {
+ qDebug() << "æå¼æä»¶å¤¹å¤±è´¥:" << saveDir;
+ QMessageBox::warning(this, "æå¼å¤±è´¥",
+ QString("æ æ³æå¼æä»¶å¤¹ï¼\n%1\nè¯·æ£æ¥è·¯å¾æ¯å¦å卿æéæ¯å¦è¶³å¤").arg(saveDir));
+ }
+}
+
+void MainWindow::on_openButton_2_clicked()
+{
+ // æ£æ¥ä¸²å£æ¯å¦å·²æå¼
+ if (!serial->isOpen()) {
+ QMessageBox::warning(this, "è¦å", "请å
æå¼ä¸²å£è¿æ¥");
+ return;
+ }
+
+ if (isProductionTestRunning) {
+ // 妿æ£å¨æµè¯ï¼å忢æµè¯
+ lcdTestTimer->stop();
+ motorTestTimer->stop();
+ test4GTimer->stop();
+ signal4GTimer->stop();
+ testTimeoutTimer->stop();
+ isProductionTestRunning = false;
+ currentTestStep = TEST_IDLE;
+ ui->statusbar->showMessage("产æµå·²åæ¢", 2000);
+ qDebug() << "产æµè¢«ç¨æ·åæ¢";
+
+ // æ¢å¤äº§æµæé®ç¶æ - ååèè²å¹¶å¯ç¨
+ ui->openButton_2->setStyleSheet("QPushButton { background-color: #4A90E2; color: white; padding: 5px 10px; border: none; border-radius: 3px; }");
+ ui->openButton_2->setEnabled(true);
+ qDebug() << "产æµåæ¢ - æé®å·²æ¢å¤èè²å¹¶å¯ç¨";
+
+ return;
+ }
+
+ // å¼å§äº§æµæµç¨
+ isProductionTestRunning = true;
+ testStartTime = QDateTime::currentDateTime(); // è®°å½æµè¯å¼å§æ¶é´
+ currentTestStep = TEST_RESET;
+ currentLcdColor = 1; // ä»çº¢è²å¼å§
+ initRetry4GCount = 0;
+ signalTest4GCount = 0;
+ signalReceived4GCount = 0;
+ signalGood4GCount = 0;
+ pppCommandCount = 0;
+ hasReceivedSignalSim = false;
+ hasReceivedPppInfo = false;
+
+ // æ¸
空ææUIå
容
+ ui->recvTextEdit->clear(); // æ¸
ç©ºä¸²å£æ¥æ¶ææ¬æ¡
+ ui->sendTextEdit->clear(); // æ¸
空åéææ¬æ¡
+ ui->statusbar->clearMessage(); // æ¸
ç©ºç¶ææ
+
+ // æ¸
空设å¤ä¿¡æ¯
+ ui->VerlineEdit->clear(); // æ¸
ç©ºçæ¬ä¿¡æ¯
+ ui->IMEIlineEdit->clear(); // æ¸
空IMEI
+ ui->ICCIDlineEdit->clear(); // æ¸
空ICCID
+ ui->ModemVerlineEdit->clear(); // æ¸
空è°å¶è§£è°å¨çæ¬
+ ui->PYVerlineEdit->clear(); // æ¸
空pythonçæ¬
+
+ // é置弹çªç¶æ
+ lcdTestPopupShown = false;
+ motorTestPopupShown = false;
+ isWaitingForUserConfirm = false;
+ keyTestStarted = false;
+ audioTestPopupShown = false;
+ audioPlaybackPopupShown = false;
+
+ // éç½®ç¶ææç¤ºå¨
+ updateTestStatus("lcd", STATUS_UNTESTED);
+ updateTestStatus("motor", STATUS_UNTESTED);
+ updateTestStatus("key", STATUS_UNTESTED);
+ updateTestStatus("audio", STATUS_UNTESTED);
+ updateTestStatus("battery", STATUS_UNTESTED);
+ updateTestStatus("gsensor", STATUS_UNTESTED);
+ updateTestStatus("ppp", STATUS_UNTESTED);
+
+ qDebug() << "å·²æ¸
空ææUIå
容ï¼åå¤å¼å§æ°ç产æµ";
+
+ ui->statusbar->showMessage("å¼å§äº§æµæµç¨...", 2000);
+ qDebug() << "=== å¼å§äº§æµæµç¨ ===";
+ qDebug() << "æµç¨: 产æµå¼å¯(AT^FACTORY=1) â 设å¤éå¯ â çå¾
BuildVer â LCDæµè¯(红绿èå1s) â 马达æµè¯(å¼å¯2s) â æé®æµè¯ â å½é³æµè¯(å½é³3s+ææ¾) â çµæ± æµè¯(çµåæ£æµ) â G-sensoræµè¯ â 4Gæµè¯(åå§å+ä¿¡å·æ£æµ) â éåºäº§æµ(AT^FACTORY=0)";
+ qDebug() << "LCDæä»¤æ å°: è¿å
¥=AT^LCDTEST=1, 红è²=AT^LCDTEST=6, 绿è²=AT^LCDTEST=3, èè²=AT^LCDTEST=4, éåº=AT^LCDTEST=2";
+
+ // åé产æµå¼å¯æä»¤ï¼çå¾
工忍¡å¼ç¡®è®¤
+ qDebug() << "Step 1: åé产æµå¼å¯æä»¤";
+ ui->statusbar->showMessage("åé产æµå¼å¯æä»¤ï¼çå¾
设å¤ç¡®è®¤...", 3000);
+ serial->write("AT^FACTORY=1\r\n");
+ qDebug() << "åé产æµå¼å¯æä»¤(第1次): AT^FACTORY=1ï¼çå¾
æ¥æ¶ 'fac:enter or exit facotry mode' 确认";
+
+ // å»¶è¿0.5ç§åååé䏿¬¡ï¼ç¡®ä¿è®¾å¤æ¥æ¶å°æä»¤
+ QTimer::singleShot(500, this, [this]() {
+ if (isProductionTestRunning && serial->isOpen()) {
+ serial->write("AT^FACTORY=1\r\n");
+ qDebug() << "åé产æµå¼å¯æä»¤(第2次): AT^FACTORY=1";
+ }
+ });
+
+ // å¯å¨10ç§è¶
æ¶æ£æµï¼å¦ææ²¡ææ¶å°å·¥å模å¼ç¡®è®¤åæç¤º
+ testTimeoutTimer->start(10000);
+}
+
+// æ§è¡å½é³æµè¯
+void MainWindow::performAudioTest()
+{
+ qDebug() << "*** performAudioTest 被è°ç¨ ***";
+ qDebug() << "å½åç¶ææ£æ¥ - isProductionTestRunning:" << isProductionTestRunning;
+ qDebug() << "å½åç¶ææ£æ¥ - currentTestStep:" << currentTestStep;
+ qDebug() << "å½åç¶ææ£æ¥ - TEST_AUDIO:" << TEST_AUDIO;
+
+ if (!isProductionTestRunning || currentTestStep != TEST_AUDIO) {
+ qDebug() << "*** performAudioTest æ¡ä»¶ä¸æ»¡è¶³ï¼éåº ***";
+ return;
+ }
+
+ qDebug() << "å¼å§å½é³æµè¯";
+ updateTestStatus("audio", STATUS_TESTING);
+ ui->statusbar->showMessage("å½é³æµè¯åå¤å°±ç»ª", 3000);
+
+ // éç½®å½é³æµè¯ç¸å
³æ å¿
+ audioTestPopupShown = false;
+ audioPlaybackPopupShown = false;
+ currentAudioStep = AUDIO_STARTING_RECORD;
+
+ // æ¾ç¤ºå½é³æµè¯å¼¹çªï¼çå¾
ç¨æ·ç¹å»å¼å§å½é³
+ showAudioTestDialog();
+}
+
+// æ¾ç¤ºå½é³æµè¯å¼¹çª
+void MainWindow::showAudioTestDialog()
+{
+ if (audioTestPopupShown || !isProductionTestRunning || currentTestStep != TEST_AUDIO) {
+ qDebug() << "å½é³æµè¯å¼¹çªå·²æ¾ç¤ºææ¡ä»¶ä¸æ»¡è¶³ï¼è·³è¿æ¾ç¤º";
+ return;
+ }
+
+ // å¦æå·²ç»æå½é³æµè¯å¼¹çªåå¨ï¼å
å
³éå®
+ if (audioTestDialog) {
+ qDebug() << "æ£æµå°å·²åå¨çå½é³æµè¯å¼¹çªï¼å
å
³é";
+ audioTestDialog->close();
+ audioTestDialog->deleteLater();
+ audioTestDialog = nullptr;
+ }
+
+ // å建å½é³æµè¯å¯¹è¯æ¡
+ audioTestDialog = new QDialog(this);
+ audioTestDialog->setWindowTitle("å½é³æµè¯");
+ audioTestDialog->setFixedSize(520, 350);
+ audioTestDialog->setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint | Qt::WindowTitleHint);
+
+ // è®¾ç½®å¯¹è¯æ¡æ ·å¼
+ audioTestDialog->setStyleSheet(
+ "QDialog { "
+ "background-color: #f0f0f0; "
+ "border-radius: 8px; "
+ "}"
+ );
+
+ // 使ç¨åç´å¸å±ç®¡çå¨
+ QVBoxLayout *mainLayout = new QVBoxLayout(audioTestDialog);
+ mainLayout->setSpacing(15);
+ mainLayout->setContentsMargins(20, 20, 20, 20);
+
+ // å建主æ ç¾
+ audioDialogLabel = new QLabel("ð¤ å½é³æµè¯");
+ audioDialogLabel->setAlignment(Qt::AlignCenter);
+ audioDialogLabel->setStyleSheet(
+ "QLabel { "
+ "font-size: 18px; "
+ "font-weight: bold; "
+ "background-color: #4CAF50; "
+ "color: white; "
+ "border-radius: 4px; "
+ "padding: 12px; "
+ "}"
+ );
+ mainLayout->addWidget(audioDialogLabel);
+
+ // åå»ºä¿¡æ¯æ ç¾
+ audioDialogInfo = new QLabel("ð¤ 请ç¹å»ä¸æ¹æé®å¼å§å½é³æµè¯\næµç¨ï¼å¼å§å½é³â1såææ¾1kHzé³é¢â2sååæ¢ææ¾åå½é³â1såææ¾å½é³â3så忢");
+ audioDialogInfo->setAlignment(Qt::AlignCenter);
+ audioDialogInfo->setWordWrap(true);
+ audioDialogInfo->setMinimumHeight(80);
+ audioDialogInfo->setStyleSheet(
+ "QLabel { "
+ "font-size: 14px; "
+ "background-color: white; "
+ "border: 1px solid #ddd; "
+ "border-radius: 4px; "
+ "padding: 15px; "
+ "color: #333; "
+ "}"
+ );
+ mainLayout->addWidget(audioDialogInfo);
+
+ // å建å¼å§å½é³æé®å¸å±
+ QHBoxLayout *startLayout = new QHBoxLayout();
+ startLayout->setSpacing(10);
+
+ audioStartButton = new QPushButton("ð¤ å¼å§å½é³æµè¯");
+ audioStartButton->setMinimumHeight(50);
+ audioStartButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #2196F3; "
+ "color: white; "
+ "padding: 12px 20px; "
+ "border-radius: 4px; "
+ "font-weight: bold; "
+ "font-size: 16px; "
+ "}"
+ );
+ startLayout->addWidget(audioStartButton);
+ mainLayout->addLayout(startLayout);
+
+ // å建æµè¯ç»ææé®å¸å±
+ QHBoxLayout *resultLayout = new QHBoxLayout();
+ resultLayout->setSpacing(10);
+
+ // å建æé®
+ audioPassButton = new QPushButton("â å½é³æ£å¸¸");
+ audioPassButton->setMinimumHeight(45);
+ audioPassButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #4CAF50; "
+ "color: white; "
+ "padding: 10px 15px; "
+ "border-radius: 4px; "
+ "font-weight: bold; "
+ "font-size: 14px; "
+ "} "
+ "QPushButton:disabled { "
+ "background-color: #cccccc; "
+ "color: #666666; "
+ "}"
+ );
+ audioPassButton->setEnabled(true); // å
è®¸ç´æ¥ç¹å»éè¿
+
+ audioFailButton = new QPushButton("â å½é³å¼å¸¸");
+ audioFailButton->setMinimumHeight(45);
+ audioFailButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #f44336; "
+ "color: white; "
+ "padding: 10px 15px; "
+ "border-radius: 4px; "
+ "font-weight: bold; "
+ "font-size: 14px; "
+ "}"
+ );
+ audioFailButton->setEnabled(false); // åå§ç¦ç¨
+
+ audioRetestButton = new QPushButton("ð éæ°æµè¯");
+ audioRetestButton->setMinimumHeight(45);
+ audioRetestButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #FF9800; "
+ "color: white; "
+ "padding: 10px 15px; "
+ "border-radius: 4px; "
+ "font-weight: bold; "
+ "font-size: 14px; "
+ "}"
+ );
+ audioRetestButton->setEnabled(false); // åå§ç¦ç¨
+
+ resultLayout->addWidget(audioPassButton);
+ resultLayout->addWidget(audioFailButton);
+ resultLayout->addWidget(audioRetestButton);
+
+ // æ·»å æé®å¸å±å°ä¸»å¸å±
+ mainLayout->addLayout(resultLayout);
+
+ // è¿æ¥å¼å§å½é³æé®äºä»¶
+ connect(audioStartButton, &QPushButton::clicked, [this]() {
+ qDebug() << "ç¨æ·ç¹å»å¼å§å½é³æµè¯";
+
+ // ç¦ç¨å¼å§æé®ï¼æ´æ°çé¢ç¶æ
+ audioStartButton->setEnabled(false);
+ audioDialogInfo->setText("ð¤ æ£å¨å¼å§å½é³...\nè¯·ä¿æå®é");
+
+ // åéå¼å§å½é³æä»¤
+ QString recordCommand = "AT^MEDIAAUDIORECORD=xx,mp3,16000,1,16,/user/res/music/1.mp3\r\n";
+ serial->write(recordCommand.toUtf8());
+ qDebug() << "åéå½é³å¼å§æä»¤:" << recordCommand.trimmed();
+
+ // å»¶è¿1ç§ååéææ¾1kHzé³é¢æä»¤
+ QTimer::singleShot(1000, this, [this]() {
+ if (audioTestDialog && isProductionTestRunning) {
+ audioDialogInfo->setText("ð¢ æ£å¨ææ¾1kHzæµè¯é³é¢ï¼2ç§ï¼\nåæ¶è¿è¡å½é³ï¼è¯·æ³¨æå¬å£°é³...");
+
+ // åéææ¾1kHzé³é¢æä»¤
+ QString play1khzCommand = "AT^MEDIAMUSICPLAY=xx,/user/res/music/1khz.mp3,1,0\r\n";
+ serial->write(play1khzCommand.toUtf8());
+ qDebug() << "åéææ¾1kHzé³é¢æä»¤:" << play1khzCommand.trimmed();
+
+ // 设置å½åæ¥éª¤ä¸ºææ¾1kHzé³é¢ï¼å¯å¨2ç§å®æ¶å¨
+ currentAudioStep = AUDIO_PLAYING_1KHZ;
+ audioRecordTimer->start(2000);
+ }
+ });
+ });
+
+ // è¿æ¥æµè¯ç»ææé®äºä»¶
+ connect(audioPassButton, &QPushButton::clicked, [this]() {
+ if (audioTestDialog) {
+ audioTestDialog->accept();
+ qDebug() << "ç¨æ·ç¡®è®¤ï¼å½é³æµè¯éè¿";
+ ui->statusbar->showMessage("å½é³æµè¯éè¿", 2000);
+ updateTestStatus("audio", STATUS_SUCCESS);
+
+ // ç»§ç»çµæ± æµè¯
+ currentTestStep = TEST_BATTERY;
+ performBatteryTest();
+ }
+ });
+
+ connect(audioFailButton, &QPushButton::clicked, [this]() {
+ if (audioTestDialog) {
+ audioTestDialog->accept();
+ qDebug() << "ç¨æ·ç¡®è®¤ï¼å½é³æµè¯å¤±è´¥";
+ ui->statusbar->showMessage("å½é³æµè¯å¤±è´¥", 2000);
+ updateTestStatus("audio", STATUS_FAILED);
+
+ // ç»§ç»çµæ± æµè¯
+ currentTestStep = TEST_BATTERY;
+ performBatteryTest();
+ }
+ });
+
+ connect(audioRetestButton, &QPushButton::clicked, [this]() {
+ qDebug() << "ç¨æ·éæ©éæ°æµè¯å½é³";
+
+ // åé忢æä»¤
+ serial->write("AT^MEDIAMUSICSTOP\r\n");
+ serial->write("AT^MEDIAAUDIORECORDSTOP\r\n");
+
+ // éç½®çé¢ç¶æ
+ audioStartButton->setEnabled(true);
+ audioPassButton->setEnabled(false);
+ audioFailButton->setEnabled(false);
+ audioRetestButton->setEnabled(false);
+ audioDialogInfo->setText("ð¤ 请ç¹å»ä¸æ¹æé®å¼å§å½é³æµè¯\næµç¨ï¼å¼å§å½é³â1såææ¾1kHzé³é¢â2sååæ¢ææ¾åå½é³â1såææ¾å½é³â3så忢");
+
+ // éç½®å½é³æµè¯ç¶æ
+ currentAudioStep = AUDIO_STARTING_RECORD;
+ audioRecordTimer->stop();
+
+ qDebug() << "å½é³æµè¯å·²éç½®ï¼çå¾
ç¨æ·éæ°å¼å§";
+ });
+
+ // æ¾ç¤ºå¯¹è¯æ¡
+ audioTestPopupShown = true;
+ audioTestDialog->show();
+ qDebug() << "å½é³æµè¯å¼¹çªå·²æ¾ç¤º";
+}
+
+// å½é³æµè¯å®æ¶å¨ - å¤çå¤ä¸ªæ¥éª¤ç宿¶
+void MainWindow::onAudioRecordTimer()
+{
+ audioRecordTimer->stop();
+
+ if (!isProductionTestRunning || currentTestStep != TEST_AUDIO) {
+ return;
+ }
+
+ switch (currentAudioStep) {
+ case AUDIO_PLAYING_1KHZ:
+ {
+ // 2ç§ææ¾1kHzé³é¢å®æï¼åæ¢ææ¾
+ qDebug() << "1kHzé³é¢ææ¾2ç§å®æï¼åéåæ¢ææ¾æä»¤";
+ ui->statusbar->showMessage("忢1kHzé³é¢ææ¾...", 2000);
+
+ // æ´æ°å¼¹çªä¿¡æ¯
+ if (audioDialogInfo) {
+ audioDialogInfo->setText("â¹ï¸ åæ¢ææ¾1kHzé³é¢ï¼éå忢å½é³...\n请ç¨ççå»...");
+ }
+
+ // å
åéåæ¢ææ¾æä»¤
+ serial->write("AT^MEDIAMUSICSTOP\r\n");
+ qDebug() << "åéåæ¢ææ¾æä»¤: AT^MEDIAMUSICSTOP";
+
+ // éåç«å³åé忢å½é³æä»¤
+ serial->write("AT^MEDIAAUDIORECORDSTOP\r\n");
+ qDebug() << "åé忢å½é³æä»¤: AT^MEDIAAUDIORECORDSTOP";
+
+ // 设置ä¸ä¸æ¥éª¤ï¼1ç§åææ¾å½å¶çé³é¢
+ currentAudioStep = AUDIO_STOPPING_RECORD;
+ audioRecordTimer->start(1000);
+ break;
+ }
+
+ case AUDIO_STOPPING_RECORD:
+ {
+ // 1ç§å»¶è¿å®æï¼ææ¾å½å¶çé³é¢
+ qDebug() << "å¼å§ææ¾å½å¶çé³é¢";
+ ui->statusbar->showMessage("æ£å¨ææ¾å½å¶çé³é¢...", 3000);
+
+ // æ´æ°å¼¹çªä¿¡æ¯
+ if (audioDialogInfo) {
+ audioDialogInfo->setText("ð æ£å¨ææ¾åæå½å¶çé³é¢ï¼3ç§ï¼\n请ä»ç»èå¬é³è´¨æ¯å¦æ¸
æ°");
+ }
+
+ // åéææ¾å½å¶é³é¢æä»¤
+ QString playRecordedCommand = "AT^MEDIAMUSICPLAY=xx,/user/res/music/1.mp3,1,0\r\n";
+ serial->write(playRecordedCommand.toUtf8());
+ qDebug() << "åéææ¾å½å¶é³é¢æä»¤:" << playRecordedCommand.trimmed();
+
+ // 设置ä¸ä¸æ¥éª¤ï¼3ç§ååæ¢ææ¾å½å¶çé³é¢
+ currentAudioStep = AUDIO_PLAYING_RECORDED;
+ audioRecordTimer->start(3000);
+ break;
+ }
+
+ case AUDIO_PLAYING_RECORDED:
+ {
+ // 3ç§ææ¾å½å¶é³é¢å®æï¼èªå¨åæ¢ææ¾
+ qDebug() << "å½å¶é³é¢ææ¾3ç§å®æï¼åéåæ¢ææ¾æä»¤";
+ ui->statusbar->showMessage("å½é³æµè¯æµç¨å®æ", 2000);
+
+ // æ´æ°å¼¹çªä¿¡æ¯å¹¶å¯ç¨æµè¯æé®
+ if (audioDialogInfo) {
+ audioDialogInfo->setText("â
å½é³æµè¯æµç¨å®æï¼\nè¯·æ ¹æ®åæå¬å°çé³è´¨éæ©æµè¯ç»æ");
+ }
+ if (audioPassButton) {
+ audioPassButton->setEnabled(true);
+ }
+ if (audioFailButton) {
+ audioFailButton->setEnabled(true);
+ }
+ if (audioRetestButton) {
+ audioRetestButton->setEnabled(true);
+ }
+
+ // èªå¨åéåæ¢ææ¾æä»¤
+ serial->write("AT^MEDIAMUSICSTOP\r\n");
+ qDebug() << "åéåæ¢ææ¾æä»¤: AT^MEDIAMUSICSTOP";
+
+ // å½é³æµè¯æµç¨å®æ
+ currentAudioStep = AUDIO_STOPPING_PLAYBACK;
+ break;
+ }
+
+ default:
+ {
+ qDebug() << "æªç¥çå½é³æµè¯æ¥éª¤:" << currentAudioStep;
+ break;
+ }
+ }
+}
+
+// æ£æ¥å½é³æµè¯ç»æ
+void MainWindow::checkAudioTestResult(const QString& data)
+{
+ if (!isProductionTestRunning || currentTestStep != TEST_AUDIO) {
+ return;
+ }
+
+ qDebug() << "å½é³æµè¯æ¶å°æ°æ®:" << data.trimmed();
+
+ // å½é³æµè¯ç°å¨ç±ç¨æ·æå¨æ§å¶ï¼ä¸éè¦èªå¨æ£æµ
+ qDebug() << "å½é³æµè¯æ¶å°æ°æ®ï¼ç¨æ·æå¨æ§å¶æ¨¡å¼ï¼:" << data.trimmed();
+}
+
+// æ§è¡çµæ± æµè¯
+void MainWindow::performBatteryTest()
+{
+ if (!isProductionTestRunning || currentTestStep != TEST_BATTERY) {
+ return;
+ }
+
+ qDebug() << "å¼å§çµæ± æµè¯";
+ updateTestStatus("battery", STATUS_TESTING);
+ ui->statusbar->showMessage("çµæ± æµè¯ä¸ï¼æ£å¨è·åçµæ± çµå...", 3000);
+
+ // åéçµæ± çµéæ¥è¯¢æä»¤
+ serial->write("AT^GETPOWER\r\n");
+ qDebug() << "åéçµæ± æµè¯æä»¤: AT^GETPOWER";
+
+ // å¯å¨10ç§è¶
æ¶æ£æµ
+ testTimeoutTimer->start(10000);
+}
+
+// æ£æ¥çµæ± æµè¯ç»æ
+void MainWindow::checkBatteryTestResult(const QString& data)
+{
+ if (!isProductionTestRunning || currentTestStep != TEST_BATTERY) {
+ return;
+ }
+
+ qDebug() << "çµæ± æµè¯æ¶å°æ°æ®:" << data.trimmed();
+
+ // è§£æçµæ± çµåæ°æ®ï¼æ¯æå¤ç§æ ¼å¼ï¼
+ // 1. fac:voltage : 3.8 , percent 85 , charge : 1
+ // 2. Battery: 3.8V
+ // 3. 3.8V
+ QRegExp facVoltagePattern("fac:voltage\\s*:\\s*(\\d+\\.\\d+)\\s*,\\s*percent\\s*(\\d+)\\s*,\\s*charge\\s*:\\s*(\\d+)");
+ QRegExp batteryPattern("Battery.*?(\\d+\\.\\d+)V?");
+ QRegExp voltagePattern("(\\d+\\.\\d+)V");
+
+ double voltage = 0.0;
+ int percent = 0;
+ int charge = -1; // -1è¡¨ç¤ºæªæ£æµå°å
çµç¶æ
+ bool voltageFound = false;
+
+ if (facVoltagePattern.indexIn(data) != -1) {
+ // æ°æ ¼å¼ï¼fac:voltage : 3.8 , percent 85 , charge : 1
+ voltage = facVoltagePattern.cap(1).toDouble();
+ percent = facVoltagePattern.cap(2).toInt();
+ charge = facVoltagePattern.cap(3).toInt();
+ voltageFound = true;
+
+ qDebug() << "使ç¨fac:voltageæ ¼å¼è§£æå°çµå:" << voltage << "V, çµé:" << percent << "%, å
çµç¶æ:" << charge;
+ } else if (batteryPattern.indexIn(data) != -1) {
+ voltage = batteryPattern.cap(1).toDouble();
+ voltageFound = true;
+ qDebug() << "使ç¨Batteryæ ¼å¼è§£æå°çµå:" << voltage;
+ } else if (voltagePattern.indexIn(data) != -1) {
+ voltage = voltagePattern.cap(1).toDouble();
+ voltageFound = true;
+ qDebug() << "使ç¨éç¨çµåæ ¼å¼è§£æå°çµå:" << voltage;
+ }
+
+ if (voltageFound) {
+ // 忢è¶
æ¶æ£æµï¼å ä¸ºå·²ç»æ¶å°ååº
+ if (testTimeoutTimer->isActive()) {
+ testTimeoutTimer->stop();
+ qDebug() << "çµæ± æµè¯æ¶å°ååºï¼åæ¢è¶
æ¶æ£æµ";
+ }
+
+ qDebug() << "æ£æµå°çµæ± çµå:" << voltage << "V";
+
+ // é¦å
æ£æ¥å
çµç¶æï¼å¦ææå
çµç¶æä¿¡æ¯ï¼
+ if (charge == 0) {
+ qDebug() << "çµæ± æªå
çµï¼æµè¯å¤±è´¥";
+ ui->statusbar->showMessage("çµæ± æµè¯å¤±è´¥ - è®¾å¤æªå
çµ", 2000);
+ showBatteryChargeFailDialog();
+ return; // ä¸ç»§ç»åç»æµè¯ï¼çå¾
ç¨æ·æä½
+ } else if (charge == -1) {
+ qDebug() << "æªæ£æµå°å
çµç¶æä¿¡æ¯";
+ ui->statusbar->showMessage("çµæ± æµè¯ - æªæ£æµå°å
çµç¶æ", 2000);
+ // æ¾ç¤ºæéæ¡åç¥ç¨æ·æªæ£æµå°å
çµç¶æ
+ QMessageBox msgBox(this);
+ msgBox.setWindowTitle("å
çµç¶ææé");
+ msgBox.setText("æªæ£æµå°å
çµç¶æ");
+ msgBox.setInformativeText("ç³»ç»æªè½æ£æµå°è®¾å¤çå
çµç¶æä¿¡æ¯ï¼\nä½çµåæ£æµæ£å¸¸ï¼æ¯å¦ç»§ç»æµè¯ï¼");
+ msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
+ msgBox.setDefaultButton(QMessageBox::Yes);
+ msgBox.setIcon(QMessageBox::Warning);
+
+ int ret = msgBox.exec();
+ if (ret == QMessageBox::No) {
+ updateTestStatus("battery", STATUS_FAILED);
+ return;
+ }
+ }
+
+ // 夿çµåæ¯å¦å¨æ£å¸¸èå´å
(3.3V - 4.4V)
+ if (voltage >= 3.3 && voltage <= 4.4) {
+ if (charge == 1) {
+ qDebug() << "çµæ± çµåæ£å¸¸ä¸æ£å¨å
çµï¼æµè¯éè¿";
+ ui->statusbar->showMessage(QString("çµæ± æµè¯éè¿ - çµå: %1V, å
çµä¸").arg(voltage), 2000);
+ } else {
+ qDebug() << "çµæ± çµåæ£å¸¸ï¼æµè¯éè¿";
+ ui->statusbar->showMessage(QString("çµæ± æµè¯éè¿ - çµå: %1V").arg(voltage), 2000);
+ }
+ updateTestStatus("battery", STATUS_SUCCESS);
+ } else {
+ qDebug() << "çµæ± çµåå¼å¸¸ï¼æµè¯å¤±è´¥";
+ ui->statusbar->showMessage(QString("çµæ± æµè¯å¤±è´¥ - çµåå¼å¸¸: %1V").arg(voltage), 2000);
+ updateTestStatus("battery", STATUS_FAILED);
+ }
+
+ // çµæ± æµè¯å®æï¼å¼å§G-sensoræµè¯
+ if (isProductionTestRunning && currentTestStep == TEST_BATTERY) {
+ qDebug() << "çµæ± æµè¯å®æï¼å¼å§G-sensoræµè¯";
+ currentTestStep = TEST_GSENSOR;
+ performGsensorTest();
+ }
+ }
+}
+
+// æ§è¡G-sensoræµè¯
+void MainWindow::performGsensorTest()
+{
+ if (!isProductionTestRunning || currentTestStep != TEST_GSENSOR) {
+ return;
+ }
+
+ qDebug() << "å¼å§G-sensoræµè¯";
+ updateTestStatus("gsensor", STATUS_TESTING);
+ ui->statusbar->showMessage("G-sensoræµè¯ä¸ï¼æ£å¨è·åsensor ID...", 3000);
+
+ // åéG-sensoræ¥è¯¢æä»¤
+ serial->write("AT^GETCYWEEID\r\n");
+ qDebug() << "åéG-sensoræµè¯æä»¤: AT^GETCYWEEID";
+
+ // å¯å¨10ç§è¶
æ¶æ£æµ
+ testTimeoutTimer->start(10000);
+}
+
+// æ£æ¥G-sensoræµè¯ç»æ
+void MainWindow::checkGsensorTestResult(const QString& data)
+{
+ qDebug() << "=== checkGsensorTestResult 被è°ç¨ ===";
+ qDebug() << "isProductionTestRunning:" << isProductionTestRunning;
+ qDebug() << "currentTestStep:" << currentTestStep << "(TEST_GSENSOR=" << TEST_GSENSOR << ")";
+
+ if (!isProductionTestRunning || currentTestStep != TEST_GSENSOR) {
+ qDebug() << "G-sensoræµè¯æ¡ä»¶ä¸æ»¡è¶³ï¼è·³è¿å¤ç";
+ return;
+ }
+
+ qDebug() << "G-sensoræµè¯æ¶å°æ°æ®:" << data.trimmed();
+
+ // æ£æµG-sensor IDï¼æ ¼å¼å¯è½ä¸ºï¼fac:gsensor id : 0x13 æç±»ä¼¼
+ if (data.contains("gsensor") && data.contains("id")) {
+ QRegExp gsensorPattern("(?:fac:)?gsensor\\s+id\\s*[:]\\s*(0?[xX]?[0-9A-Fa-f]+)");
+ qDebug() << "å°è¯å¹é
G-sensor模å¼ï¼è¾å
¥æ°æ®:" << data.trimmed();
+ qDebug() << "æ£åè¡¨è¾¾å¼æ¨¡å¼:" << gsensorPattern.pattern();
+ if (gsensorPattern.indexIn(data) != -1) {
+ // 忢è¶
æ¶æ£æµï¼å ä¸ºå·²ç»æ¶å°ååº
+ if (testTimeoutTimer->isActive()) {
+ testTimeoutTimer->stop();
+ qDebug() << "G-sensoræµè¯æ¶å°ååºï¼åæ¢è¶
æ¶æ£æµ";
+ }
+
+ qDebug() << "G-sensoræ£å表达å¼å¹é
éè¿ï¼";
+ QString gsensorId = gsensorPattern.cap(1).toUpper(); // 转æ¢ä¸ºå¤§åä¾¿äºæ¯è¾
+ qDebug() << "æ£æµå°G-sensor ID:" << gsensorId;
+
+ // æ£æ¥G-sensor IDæ¯å¦ä¸ºææå¼ï¼ææå¼ä¸º0X13ï¼
+ // æ¯æå¤ç§æ ¼å¼: 0X13, 0x13, 13, 19 (åè¿å¶)
+ bool isValidId = false;
+ QString expectedId = "0X13";
+
+ // ç»ä¸è½¬æ¢ä¸ºå¤§åä¾¿äºæ¯è¾
+ QString upperGsensorId = gsensorId.toUpper();
+
+ if (upperGsensorId == "0X13" || upperGsensorId == "13") {
+ isValidId = true;
+ } else {
+ // å°è¯è§£ææ°å¼è¿è¡æ¯è¾
+ bool ok;
+ int decimalValue = 0;
+
+ // 妿以0Xæ0xå¼å¤´ï¼æåå
è¿å¶è§£æ
+ if (upperGsensorId.startsWith("0X")) {
+ decimalValue = upperGsensorId.mid(2).toInt(&ok, 16);
+ } else {
+ // å°è¯ç´æ¥æåå
è¿å¶è§£æ
+ decimalValue = upperGsensorId.toInt(&ok, 16);
+ // 妿åå
è¿å¶è§£æå¤±è´¥ï¼å°è¯åè¿å¶è§£æ
+ if (!ok) {
+ decimalValue = upperGsensorId.toInt(&ok, 10);
+ }
+ }
+
+ if (ok && decimalValue == 0x13) {
+ isValidId = true;
+ }
+ }
+
+ if (isValidId) {
+ qDebug() << "G-sensor IDææï¼æµè¯éè¿";
+ ui->statusbar->showMessage(QString("G-sensoræµè¯éè¿ - ID: %1").arg(gsensorId), 2000);
+ updateTestStatus("gsensor", STATUS_SUCCESS);
+ } else {
+ qDebug() << "G-sensor IDä¸å¹é
ææå¼ï¼æµè¯å¤±è´¥";
+ ui->statusbar->showMessage(QString("G-sensoræµè¯å¤±è´¥ - ID: %1 (ææ: 0X13)").arg(gsensorId), 2000);
+ updateTestStatus("gsensor", STATUS_FAILED);
+ }
+
+ // G-sensoræµè¯å®æï¼å¼å§4Gæµè¯
+ if (isProductionTestRunning && currentTestStep == TEST_GSENSOR) {
+ qDebug() << "G-sensoræµè¯å®æï¼å¼å§4Gæµè¯";
+
+ // å¼å§4Gæµè¯
+ currentTestStep = TEST_PPP_INIT;
+ perform4GTest();
+ }
+ } else {
+ qDebug() << "G-sensoræ£å表达å¼å¹é
å¤±è´¥ï¼æ°æ®:" << data.trimmed();
+
+ // æå¨æµè¯ç¹å®æ ¼å¼ï¼fac:gsensor id : 0x13
+ if (data.contains("gsensor id") && data.contains("0x13")) {
+ qDebug() << "æå¨æ£æµå° fac:gsensor id : 0x13 æ ¼å¼ï¼å¼ºå¶éè¿æµè¯";
+ ui->statusbar->showMessage("G-sensoræµè¯éè¿ - ID: 0x13 (æå¨æ£æµ)", 2000);
+ updateTestStatus("gsensor", STATUS_SUCCESS);
+
+ // G-sensoræµè¯å®æï¼å¼å§4Gæµè¯
+ if (isProductionTestRunning && currentTestStep == TEST_GSENSOR) {
+ qDebug() << "G-sensoræµè¯å®æ(æå¨)ï¼å¼å§4Gæµè¯";
+
+ // å¼å§4Gæµè¯
+ currentTestStep = TEST_PPP_INIT;
+ perform4GTest();
+ }
+ }
+ }
+ } else {
+ qDebug() << "æ°æ®ä¸å
å«gsensoråidå
³é®åï¼è·³è¿G-sensorå¤ç";
+ }
+
+ // åç¬æ£æ¥é误ååº
+ if (data.contains("ERROR") || data.contains("FAIL")) {
+ qDebug() << "G-sensoræµè¯å¤±è´¥ - 设å¤ååºé误";
+ ui->statusbar->showMessage("G-sensoræµè¯å¤±è´¥ - è®¾å¤æ ååº", 2000);
+ updateTestStatus("gsensor", STATUS_FAILED);
+
+ // G-sensoræµè¯å¤±è´¥ï¼ä»ç¶ç»§ç»4Gæµè¯
+ if (isProductionTestRunning && currentTestStep == TEST_GSENSOR) {
+ qDebug() << "G-sensoræµè¯å¤±è´¥ï¼ç»§ç»4Gæµè¯";
+
+ // å¼å§4Gæµè¯
+ currentTestStep = TEST_PPP_INIT;
+ perform4GTest();
+ }
+ }
+}
+
+// æ£æ¥CAT1ä¿¡å·æµè¯ç»æ
+void MainWindow::checkCat1SignalResult(const QString& data)
+{
+ if (!isProductionTestRunning || !hasReceivedFirstSignal) {
+ return;
+ }
+
+ qDebug() << "CAT1ä¿¡å·æµè¯æ¶å°æ°æ®:" << data.trimmed();
+ qDebug() << "å½åMODEMçæ¬:" << currentModemVersion << "ï¼ç±»å夿:" << (isEGModem() ? "EGç³»å" : "éEGç³»å");
+
+ // åªå¨CAT1æµè¯æé´ç»è®¡ä¿¡å·å¼
+ if (cat1SignalReceivedCount >= 5) {
+ qDebug() << "CAT1æµè¯å·²æ¥æ¶5次ååºï¼è·³è¿ç»è®¡";
+ return;
+ }
+
+ // æ ¼å¼è¿æ»¤å·²å¨è°ç¨å宿ï¼è¿éä¸éè¦åæ¬¡è¿æ»¤
+
+ // è§£æä¿¡å·å¼ï¼å¯è½çæ ¼å¼ï¼signal:31 æ CAT1GETSIGNAL OK signal:31
+ QRegExp signalRegex("signal:(\\d+)");
+ if (signalRegex.indexIn(data) != -1) {
+ int signalValue = signalRegex.cap(1).toInt();
+
+ // æ¹è¿çé夿£æ¥ï¼åºäºä¿¡å·å¼åæ¶é´æ³çç»åï¼é¿å
ç¸åä¿¡å·å¼è¢«è¯¯å¤ä¸ºéå¤
+ // åªæå¨çæ¶é´å
æ¶å°å®å
¨ç¸åçæ°æ®å
æè®¤ä¸ºæ¯éå¤
+ static QString lastProcessedData;
+ static qint64 lastProcessedTime = 0;
+ qint64 currentTime = QDateTime::currentMSecsSinceEpoch();
+
+ // 妿æ¯ç¸åçæ°æ®ä¸æ¶é´é´éå°äº100msï¼å认为æ¯é夿°æ®
+ if (data.trimmed() == lastProcessedData && (currentTime - lastProcessedTime) < 100) {
+ qDebug() << "è·³è¿éå¤çCAT1æ°æ®ï¼æ¶é´é´é:" << (currentTime - lastProcessedTime) << "msï¼";
+ return;
+ }
+
+ // æ´æ°æåå¤ççæ°æ®åæ¶é´
+ lastProcessedData = data.trimmed();
+ lastProcessedTime = currentTime;
+
+ // å¢å æ¥æ¶è®¡æ°å¨
+ cat1SignalReceivedCount++;
+
+ qDebug() << "CAT1ä¿¡å·æµè¯è§£æå°signalå¼:" << signalValue << "ï¼æ¥æ¶æ¬¡æ°:" << cat1SignalReceivedCount << "/5";
+
+ // å°CAT1 signal弿¾ç¤ºå°çé¢
+ ui->recvTextEdit->append(QString("CAT1 Signalå¼: %1 (%2/5)").arg(signalValue).arg(cat1SignalReceivedCount));
+
+ // ç»è®¡ä¿¡å·å¼ï¼ç¨äºè®¡ç®å¹³åå¼ï¼
+ if (signalValue == 99) {
+ cat1Signal99Count++;
+ // signal=99ä¸è®¡å
¥å¹³åå¼è®¡ç®
+ qDebug() << "CAT1ä¿¡å·å¼ä¸º99ï¼æ æä¿¡å·æ¬¡æ°:" << cat1Signal99Count << "/" << cat1SignalReceivedCount;
+ ui->statusbar->showMessage(QString("CAT1ä¿¡å·æµè¯ (%1/5) ä¿¡å·å¼:99 (æ æä¿¡å·)").arg(cat1SignalReceivedCount), 2000);
+ } else {
+ // ç´¯å ææä¿¡å·å¼ç¨äºè®¡ç®å¹³åå¼
+ cat1SignalTotalValue += signalValue;
+ if (signalValue > 25) {
+ cat1SignalGoodCount++;
+ }
+
+ // 计ç®å½åå¹³åå¼ï¼æé¤signal=99çå¼ï¼
+ int validCount = cat1SignalReceivedCount - cat1Signal99Count;
+ double averageSignal = validCount > 0 ? (double)cat1SignalTotalValue / validCount : 0;
+
+ qDebug() << "CAT1ä¿¡å·å¼" << signalValue << "ï¼ç´¯è®¡æ»å:" << cat1SignalTotalValue << "ï¼å½åå¹³åå¼:" << averageSignal << "ï¼æææ¬¡æ°:" << validCount << "/" << cat1SignalReceivedCount;
+ ui->statusbar->showMessage(QString("CAT1ä¿¡å·æµè¯ (%1/5) ä¿¡å·å¼:%2 å¹³åå¼:%3").arg(cat1SignalReceivedCount).arg(signalValue).arg(averageSignal, 0, 'f', 1), 2000);
+ }
+ } else {
+ qDebug() << "CAT1ä¿¡å·æµè¯æªè½è§£æsignalå¼ï¼æ°æ®:" << data.trimmed();
+ }
+}
+
+// æ§è¡4Gä¿¡å·è´¨éæµè¯
+void MainWindow::perform4GSignalTest()
+{
+ if (!isProductionTestRunning || currentTestStep != TEST_PPP_SIGNAL) {
+ return;
+ }
+
+ qDebug() << "å¼å§4Gä¿¡å·è´¨éæµè¯";
+ ui->statusbar->showMessage("4Gä¿¡å·è´¨éæµè¯ä¸...", 5000);
+
+ // æ ¹æ®MODEMç±»åéæ©ä¸åçæµè¯æ¹å¼
+ if (isEGModem()) {
+ qDebug() << "æ£æµå°EGç³»åMODEMï¼ä½¿ç¨CAT1ä¿¡å·æµè¯æ¹å¼";
+ // EGç³»åMODEMï¼çå¾
æ¥æ¶å°ç¬¬ä¸æ¬¡signalå¼åå¯å¨CAT1æµè¯
+ // è¿éä¸éè¦ä¸»å¨åéæä»¤ï¼çå¾
设å¤èªå¨åéå
å«signalçæ°æ®
+ ui->statusbar->showMessage("çå¾
CAT1ä¿¡å·æ°æ®...", 5000);
+
+ // å¯å¨è¶
æ¶æ£æµï¼å¦æé¿æ¶é´æ²¡ææ¶å°signalæ°æ®å失败
+ signal4GTimer->start(10000); // 10ç§è¶
æ¶
+ qDebug() << "å¯å¨CAT1ä¿¡å·çå¾
è¶
æ¶æ£æµ(10ç§)";
+ } else {
+ qDebug() << "æ£æµå°éEGç³»åMODEMï¼ä½¿ç¨ä¼ ç»PPPSIGNALINFOæµè¯æ¹å¼";
+ // é置计æ°å¨
+ signalTest4GCount = 0;
+ signalReceived4GCount = 0;
+ signalGood4GCount = 0;
+
+ // ç«å³åéç¬¬ä¸æ¬¡ä¿¡å·æ£æµæä»¤
+ serial->write("AT^PPPSIGNALINFO\r\n");
+ qDebug() << "åé4Gä¿¡å·æ£æµæä»¤: AT^PPPSIGNALINFO";
+ signalTest4GCount++;
+
+ // å¯å¨5ç§å®æ¶å¨ï¼å®ææ£æµä¿¡å·è´¨é
+ signal4GTimer->start(5000);
+ qDebug() << "å¯å¨4Gä¿¡å·æ£æµå®æ¶å¨(5ç§é´é)";
+ }
+}
+
+// 4Gä¿¡å·æ£æµå®æ¶å¨æ§½å½æ°
+void MainWindow::on4GSignalTimer()
+{
+ if (!isProductionTestRunning || currentTestStep != TEST_PPP_SIGNAL) {
+ signal4GTimer->stop();
+ return;
+ }
+
+ if (isEGModem()) {
+ // EGç³»åMODEMï¼è¶
æ¶å¤çï¼å¦æé¿æ¶é´æ²¡ææ¶å°CAT1ä¿¡å·æ°æ®å失败
+ signal4GTimer->stop();
+ qDebug() << "EGç³»åMODEMçå¾
CAT1ä¿¡å·æ°æ®è¶
æ¶ï¼æµè¯å¤±è´¥";
+ ui->statusbar->showMessage("çå¾
CAT1ä¿¡å·æ°æ®è¶
æ¶ï¼æµè¯å¤±è´¥", 5000);
+
+ // æ¾ç¤º4Gé夿µè¯å¼¹çª
+ if (isProductionTestRunning) {
+ show4GRetryDialog("çå¾
CAT1ä¿¡å·æ°æ®è¶
æ¶");
+ } else {
+ updateTestStatus("ppp", STATUS_FAILED);
+ }
+ } else {
+ // éEGç³»åMODEMï¼ç»§ç»åéPPPSIGNALINFOæä»¤
+ serial->write("AT^PPPSIGNALINFO\r\n");
+ qDebug() << "宿¶åé4Gä¿¡å·æ£æµæä»¤: AT^PPPSIGNALINFO (第" << (signalTest4GCount + 1) << "次)";
+ signalTest4GCount++;
+
+ // 妿å鿬¡æ°è¿å¤ï¼åæ¢æµè¯å¹¶å¤±è´¥
+ if (signalTest4GCount >= 10) { // æå¤åé10次æä»¤ (约30ç§)
+ signal4GTimer->stop();
+ qDebug() << "4Gä¿¡å·æ£æµåé10次æä»¤ï¼æªæ¶å°è¶³å¤æææ°æ®ï¼æµè¯å¤±è´¥";
+ ui->statusbar->showMessage("4Gä¿¡å·æ£æµè¶
æ¶ï¼æµè¯å¤±è´¥", 5000);
+
+ // æ¾ç¤º4Gé夿µè¯å¼¹çª
+ if (isProductionTestRunning) {
+ show4GRetryDialog("4Gä¿¡å·æ£æµè¶
æ¶");
+ } else {
+ updateTestStatus("ppp", STATUS_FAILED);
+ }
+ }
+ }
+}
+
+// CAT1ä¿¡å·æµè¯å®æ¶å¨æ§½å½æ°
+void MainWindow::onCat1SignalTimer()
+{
+ if (!isProductionTestRunning || !hasReceivedFirstSignal) {
+ cat1SignalTimer->stop();
+ return;
+ }
+
+ // æ£æ¥æ¯å¦å·²ç»æ¥æ¶å°5次ååº
+ if (cat1SignalReceivedCount >= 5) {
+ cat1SignalTimer->stop();
+
+ // 计ç®å¹³åä¿¡å·å¼å¹¶å¤ææµè¯ç»æ
+ int validCount = cat1SignalReceivedCount - cat1Signal99Count;
+ double averageSignal = validCount > 0 ? (double)cat1SignalTotalValue / validCount : 0;
+
+ qDebug() << "CAT1ä¿¡å·æµè¯å®æï¼ç»è®¡ç»æ:";
+ qDebug() << " åéæä»¤æ¬¡æ°:" << cat1SignalTestCount;
+ qDebug() << " æ¥æ¶ååºæ¬¡æ°:" << cat1SignalReceivedCount;
+ qDebug() << " ææä¿¡å·æ¬¡æ°:" << validCount;
+ qDebug() << " æ æä¿¡å·(99)次æ°:" << cat1Signal99Count;
+ qDebug() << " ä¿¡å·å¼æ»å:" << cat1SignalTotalValue;
+ qDebug() << " å¹³åä¿¡å·å¼:" << averageSignal;
+
+ if (cat1Signal99Count >= 5) {
+ // è¿ç»5æ¬¡é½æ¯99ï¼å¤å®ä¸ºå¤±è´¥
+ qDebug() << "CAT1ä¿¡å·æµè¯å¤±è´¥ï¼5次æµè¯åä¸ºæ æä¿¡å·å¼99";
+ ui->statusbar->showMessage("CAT1ä¿¡å·æµè¯å¤±è´¥ - è¿ç»5æ¬¡æ æä¿¡å·å¼(99)", 3000);
+
+ // 忢CAT1宿¶å¨
+ cat1SignalTimer->stop();
+
+ // æ¾ç¤º4Gé夿µè¯å¼¹çª
+ if (isProductionTestRunning) {
+ show4GRetryDialog("è¿ç»5æ¬¡æ æä¿¡å·å¼(99)");
+ } else {
+ updateTestStatus("ppp", STATUS_FAILED);
+ }
+ } else if (validCount > 0 && averageSignal >= 25.0) {
+ // å¹³åä¿¡å·å¼å¤§äºçäº25ï¼å¤å®ä¸ºéè¿
+ qDebug() << "CAT1ä¿¡å·æµè¯éè¿ï¼å¹³åä¿¡å·å¼" << averageSignal << "大äºçäº25";
+ ui->statusbar->showMessage(QString("CAT1ä¿¡å·æµè¯éè¿ - å¹³åä¿¡å·å¼:%1").arg(averageSignal, 0, 'f', 1), 3000);
+ updateTestStatus("ppp", STATUS_SUCCESS);
+
+ // å®æäº§æµ
+ if (isProductionTestRunning) {
+ currentTestStep = TEST_COMPLETED;
+ isProductionTestRunning = false;
+ qDebug() << "CAT1ä¿¡å·æµè¯éè¿ï¼äº§æµæµç¨å®æ";
+
+ // ä¿åæµè¯è®°å½
+ QString fileName = saveTestRecord();
+
+ // æ¾ç¤ºæç»æµè¯ç»æå¼¹çª
+ showFinalTestResult();
+ }
+ } else {
+ // å¹³åä¿¡å·å¼å°äº25ææ²¡ææææ°æ®ï¼å¤å®ä¸ºå¤±è´¥
+ QString failReason;
+ if (validCount == 0) {
+ failReason = "æ²¡æææä¿¡å·æ°æ®";
+ } else {
+ failReason = QString("å¹³åä¿¡å·å¼%1å°äº25").arg(averageSignal, 0, 'f', 1);
+ }
+
+ qDebug() << "CAT1ä¿¡å·æµè¯å¤±è´¥ï¼" << failReason;
+ ui->statusbar->showMessage(QString("CAT1ä¿¡å·æµè¯å¤±è´¥ - %1").arg(failReason), 3000);
+
+ // 忢CAT1宿¶å¨
+ cat1SignalTimer->stop();
+
+ // æ¾ç¤º4Gé夿µè¯å¼¹çª
+ if (isProductionTestRunning) {
+ show4GRetryDialog(failReason);
+ } else {
+ updateTestStatus("ppp", STATUS_FAILED);
+ }
+ }
+ return;
+ }
+
+ // æ ¹æ®MODEMç±»ååéä¸åçä¿¡å·æ£æµæä»¤
+ if (isEGModem()) {
+ // EGç³»åMODEM使ç¨CAT1GETSIGNALæä»¤
+ serial->write("AT^CAT1GETSIGNAL\r\n");
+ cat1SignalTestCount++;
+ qDebug() << "åé第" << cat1SignalTestCount << "次CAT1ä¿¡å·æ£æµæä»¤: AT^CAT1GETSIGNAL (EGç³»åMODEM)";
+ } else {
+ // N7ç³»åæå
¶ä»MODEM使ç¨PPPSIGNALINFOæä»¤
+ serial->write("AT^PPPSIGNALINFO\r\n");
+ cat1SignalTestCount++;
+ qDebug() << "åé第" << cat1SignalTestCount << "æ¬¡ä¿¡å·æ£æµæä»¤: AT^PPPSIGNALINFO (éEGç³»åMODEM)";
+ }
+}
+
+// æ£æ¥4Gä¿¡å·è´¨éç»æ
+void MainWindow::check4GSignalResult(const QString& data)
+{
+ if (!isProductionTestRunning || currentTestStep != TEST_PPP_SIGNAL) {
+ return;
+ }
+
+ // 妿已ç»å¯å¨äºCAT1ä¿¡å·æµè¯ï¼åä¸åä½¿ç¨æ§ç4Gä¿¡å·æµè¯é»è¾
+ if (hasReceivedFirstSignal) {
+ qDebug() << "å·²å¯å¨CAT1ä¿¡å·æµè¯ï¼è·³è¿æ§ç4Gä¿¡å·æµè¯é»è¾";
+ return;
+ }
+
+ qDebug() << "4Gä¿¡å·æ£æµæ¶å°æ°æ®:" << data.trimmed();
+
+ // ä¿åéæå鿥è·è¸ªRSRQåRSRPå¼
+ static double currentRsrq = -6.8; // é»è®¤ç¤ºä¾å¼
+ static double currentRsrp = -82; // é»è®¤ç¤ºä¾å¼
+ static int rsrqRaw = 26; // åå§RSRQå¼
+ static int rsrpRaw = 58; // åå§RSRPå¼
+ static bool rsrqReceived = false;
+ static bool rsrpReceived = false;
+
+ // è§£æAPP|[PPP] RSRQæ ¼å¼
+ QRegExp appRsrqPattern("APP\\|\\[PPP\\]\\s*RSRQ:\\s*(\\d+)\\s*\\(([\\d\\.-]+)\\s*dB\\)");
+ if (appRsrqPattern.indexIn(data) != -1) {
+ rsrqRaw = appRsrqPattern.cap(1).toInt();
+ currentRsrq = appRsrqPattern.cap(2).toDouble();
+ rsrqReceived = true;
+ qDebug() << "è§£æå°APP|[PPP] RSRQå¼:" << rsrqRaw << "(" << currentRsrq << "dB)";
+
+ // è¾åºRSRQè¯çº§ï¼æè¦æ±æ ¼å¼ï¼
+ QString rsrqGrade = getRsrqGrade(currentRsrq);
+ QString rsrqOutput = QString("RSRQ: %1 (%2 dBï¼%3)").arg(rsrqRaw).arg(currentRsrq).arg(rsrqGrade);
+ qDebug() << rsrqOutput;
+ ui->recvTextEdit->insertPlainText(rsrqOutput + "\n");
+ ui->recvTextEdit->moveCursor(QTextCursor::End);
+ return; // æ¯è¡åç¬å¤ç
+ }
+
+ // è§£æAPP|[PPP] RSRPæ ¼å¼
+ QRegExp appRsrpPattern("APP\\|\\[PPP\\]\\s*RSRP:\\s*(\\d+)\\s*\\(([\\d\\.-]+)\\s*dBm\\)");
+ if (appRsrpPattern.indexIn(data) != -1) {
+ rsrpRaw = appRsrpPattern.cap(1).toInt();
+ currentRsrp = appRsrpPattern.cap(2).toDouble();
+ rsrpReceived = true;
+ qDebug() << "è§£æå°APP|[PPP] RSRPå¼:" << rsrpRaw << "(" << currentRsrp << "dBm)";
+
+ // è¾åºRSRPè¯çº§ï¼æè¦æ±æ ¼å¼ï¼
+ QString rsrpGrade = getRsrpGrade(currentRsrp);
+ QString rsrpOutput = QString("RSRP: %1 (%2 dBmï¼%3)").arg(rsrpRaw).arg(currentRsrp).arg(rsrpGrade);
+ qDebug() << rsrpOutput;
+ ui->recvTextEdit->insertPlainText(rsrpOutput + "\n");
+ ui->recvTextEdit->moveCursor(QTextCursor::End);
+ return; // æ¯è¡åç¬å¤ç
+ }
+
+ // è§£æOverall LTE Qualityæ ¼å¼
+ if (data.contains("APP|[PPP] Overall LTE Quality:") || data.contains("æ»ä½è¯çº§ï¼")) {
+ // æ¶å°ä¸æ¬¡ææçä¿¡å·è´¨éæ°æ®
+ signalReceived4GCount++;
+ qDebug() << "æ¶å°ç¬¬" << signalReceived4GCount << "次ææ4Gä¿¡å·æ°æ®";
+
+ // å¦æè¿æ²¡æ¶å°RSRQåRSRPï¼ä½¿ç¨æ¨¡ææ°æ®è¿è¡ç¤ºä¾æ¾ç¤º
+ if (!rsrqReceived) {
+ QString rsrqGrade = getRsrqGrade(currentRsrq);
+ QString rsrqOutput = QString("RSRQ: %1 (%2 dBï¼%3)").arg(rsrqRaw).arg(currentRsrq).arg(rsrqGrade);
+ qDebug() << "模æRSRQè¾åº:" << rsrqOutput;
+ ui->recvTextEdit->insertPlainText(rsrqOutput + "\n");
+ ui->recvTextEdit->moveCursor(QTextCursor::End);
+ }
+
+ if (!rsrpReceived) {
+ QString rsrpGrade = getRsrpGrade(currentRsrp);
+ QString rsrpOutput = QString("RSRP: %1 (%2 dBmï¼%3)").arg(rsrpRaw).arg(currentRsrp).arg(rsrpGrade);
+ qDebug() << "模æRSRPè¾åº:" << rsrpOutput;
+ ui->recvTextEdit->insertPlainText(rsrpOutput + "\n");
+ ui->recvTextEdit->moveCursor(QTextCursor::End);
+ }
+
+ // è¾åºå®æ´çä¿¡å·è¯ä¼°
+ QString overallAssessment = getOverallSignalAssessment(currentRsrp, currentRsrq);
+ QString overallOutput = QString("æ»ä½è¯çº§ï¼%1").arg(overallAssessment);
+ qDebug() << overallOutput;
+ ui->recvTextEdit->insertPlainText(overallOutput + "\n");
+ ui->recvTextEdit->moveCursor(QTextCursor::End);
+
+ // æ£æ¥ä¿¡å·è´¨éæ¯å¦è¯å¥½ä»¥ä¸
+ bool rsrpGood = data.contains("è¦çæå¥½") || data.contains("è¦çè¯å¥½") ||
+ overallAssessment.contains("è¦ç强度æå¥½") || overallAssessment.contains("è¦ç强度è¯å¥½");
+ bool rsrqGood = data.contains("è´¨éæä½³") || data.contains("è´¨éè¯å¥½") ||
+ overallAssessment.contains("ä¿¡å·è´¨éæä½³") || overallAssessment.contains("ä¿¡å·è´¨éè¯å¥½");
+ bool isSignalGood = rsrpGood && rsrqGood;
+
+ qDebug() << "ä¿¡å·è´¨éæ£æ¥: RSRPè¯å¥½ä»¥ä¸=" << rsrpGood << ", RSRQè¯å¥½ä»¥ä¸=" << rsrqGood << ", 综å夿=" << isSignalGood;
+
+ if (data.contains("LTEä¿¡å·è¯å¥½") || isSignalGood) {
+ signalGood4GCount++;
+ qDebug() << "æ£æµå°LTEä¿¡å·è¯å¥½ä»¥ä¸ï¼å½åè¯å¥½æ¬¡æ°:" << signalGood4GCount << "/5ï¼å·²æ¥æ¶æ°æ®æ¬¡æ°:" << signalReceived4GCount << "/5";
+ ui->statusbar->showMessage(QString("LTEä¿¡å·è¯å¥½ (%1/5) æ°æ®(%2/5)").arg(signalGood4GCount).arg(signalReceived4GCount), 2000);
+ } else {
+ qDebug() << "LTEä¿¡å·è´¨éä¸è¾¾æ ï¼éè¦è¯å¥½ä»¥ä¸ï¼ï¼å·²æ¥æ¶æ°æ®æ¬¡æ°:" << signalReceived4GCount << "/5";
+ ui->statusbar->showMessage(QString("LTEä¿¡å·è´¨éä¸è¾¾æ æ°æ®(%1/5)").arg(signalReceived4GCount), 2000);
+ }
+
+ // æ£æ¥æ¯å¦å·²æ¶å°5æ¬¡æ°æ®
+ if (signalReceived4GCount >= 5) {
+ signal4GTimer->stop();
+
+ if (signalGood4GCount >= 5) {
+ // 5æ¬¡æ°æ®é½æ¯è¯å¥½ä»¥ä¸ï¼æµè¯éè¿
+ qDebug() << "5次4Gä¿¡å·æ°æ®é½è¾¾å°è¯å¥½ä»¥ä¸æ åï¼æµè¯éè¿";
+ ui->statusbar->showMessage("4Gä¿¡å·æµè¯éè¿ - 5次信å·é½è¾¾å°è¯å¥½ä»¥ä¸ï¼", 5000);
+ updateTestStatus("ppp", STATUS_SUCCESS);
+ } else {
+ // æä¿¡å·è´¨éä¸è¾¾æ ï¼æµè¯å¤±è´¥
+ qDebug() << "4Gä¿¡å·æµè¯å¤±è´¥ - åªæ" << signalGood4GCount << "次达å°è¯å¥½ä»¥ä¸æ å";
+ ui->statusbar->showMessage(QString("4Gä¿¡å·æµè¯å¤±è´¥ - åªæ%1次达å°è¯å¥½æ å").arg(signalGood4GCount), 5000);
+ updateTestStatus("ppp", STATUS_FAILED);
+ }
+
+ // å®æäº§æµ
+ currentTestStep = TEST_COMPLETED;
+ isProductionTestRunning = false;
+ qDebug() << "äº§æµæµç¨å®æ";
+
+ // ä¿åæµè¯è®°å½
+ QString fileName = saveTestRecord();
+
+ // æ¾ç¤ºæç»æµè¯ç»æå¼¹çª
+ showFinalTestResult();
+ }
+
+ // éç½®ç¶ææ å¿ï¼ä¸ºä¸æ¬¡æ£æµåå¤
+ rsrqReceived = false;
+ rsrpReceived = false;
+ }
+}
+
+// è·åRSRQä¿¡å·è´¨éè¯çº§
+QString MainWindow::getRsrqGrade(double rsrq)
+{
+ QString grade;
+ QString description;
+
+ if (rsrq >= -7 && rsrq <= -3) {
+ grade = "è´¨éæä½³";
+ description = "ï¼å¹²æ°æå°ï¼";
+ } else if (rsrq >= -12 && rsrq < -7) {
+ grade = "è´¨éè¯å¥½";
+ description = "ï¼è½»å¾®å¹²æ°ï¼ä¸å½±å使ç¨ï¼";
+ } else if (rsrq >= -19.5 && rsrq < -12) {
+ grade = "è´¨éè¾å·®";
+ description = "ï¼å¹²æ°ææ¾ï¼å¯è½æéï¼";
+ } else if (rsrq < -19.5) {
+ grade = "è´¨éæå·®";
+ description = "ï¼æ æ³æ£å¸¸éä¿¡ï¼";
+ } else {
+ grade = "æ°å¼å¼å¸¸";
+ description = "ï¼è¶
åºæ£å¸¸èå´ï¼";
+ }
+
+ return QString("%1 %2").arg(grade, description);
+}
+
+// è·åRSRPä¿¡å·è¦ç强度è¯çº§
+QString MainWindow::getRsrpGrade(double rsrp)
+{
+ QString grade;
+ QString description;
+
+ if (rsrp >= -85 && rsrp <= -44) {
+ grade = "è¦çæå¥½";
+ description = "ï¼æ»¡æ ¼ä¿¡å·ï¼";
+ } else if (rsrp >= -100 && rsrp < -85) {
+ grade = "è¦çè¯å¥½";
+ description = "ï¼ç¨³å®éä¿¡ï¼";
+ } else if (rsrp >= -110 && rsrp < -100) {
+ grade = "è¦çè¾å¼±";
+ description = "ï¼å¯è½æéï¼";
+ } else if (rsrp >= -140 && rsrp < -110) {
+ grade = "è¦çæå·®";
+ description = "ï¼é¢ç¹æè¿ï¼";
+ } else {
+ grade = "æ°å¼å¼å¸¸";
+ description = "ï¼è¶
åºæ£å¸¸èå´ï¼";
+ }
+
+ return QString("%1 %2").arg(grade, description);
+}
+
+// è·åæ´ä½ä¿¡å·è¯ä¼°
+QString MainWindow::getOverallSignalAssessment(double rsrp, double rsrq)
+{
+ QString rsrpGrade, rsrqGrade;
+
+ // ç®åçççº§å¤æ
+ if (rsrp >= -85) {
+ rsrpGrade = "æå¥½";
+ } else if (rsrp >= -100) {
+ rsrpGrade = "è¯å¥½";
+ } else if (rsrp >= -110) {
+ rsrpGrade = "è¾å¼±";
+ } else {
+ rsrpGrade = "æå·®";
+ }
+
+ if (rsrq >= -7) {
+ rsrqGrade = "æä½³";
+ } else if (rsrq >= -12) {
+ rsrqGrade = "è¯å¥½";
+ } else if (rsrq >= -19.5) {
+ rsrqGrade = "è¾å·®";
+ } else {
+ rsrqGrade = "æå·®";
+ }
+
+ // 综åè¯ä¼°
+ QString assessment;
+ if ((rsrpGrade == "æå¥½" || rsrpGrade == "è¯å¥½") && (rsrqGrade == "æä½³" || rsrqGrade == "è¯å¥½")) {
+ assessment = "å®å
¨æ»¡è¶³4G髿¸
éè¯ãé«éä¸ç½çä¸å¡çç¨³å®æ¥å
¥éæ±";
+ } else if (rsrpGrade == "è¾å¼±" || rsrqGrade == "è¾å·®") {
+ assessment = "ç½ç»æ§è½å¯è½åå½±åï¼å»ºè®®ç§»å¨å°ä¿¡å·æ´å¥½çä½ç½®";
+ } else {
+ assessment = "ä¿¡å·è´¨éä¸ä½³ï¼å¯è½å½±åæ£å¸¸éä¿¡";
+ }
+
+ return QString("è¦ç强度%1ï¼ä¿¡å·è´¨é%2ã%3").arg(rsrpGrade, rsrqGrade, assessment);
+}
+
+// æ¾ç¤ºæç»æµè¯ç»æå¼¹çª
+// æ¾ç¤ºçµæ± å
çµå¤±è´¥å¼¹çª
+void MainWindow::showBatteryChargeFailDialog()
+{
+ QMessageBox chargeFailDialog(this);
+ chargeFailDialog.setWindowTitle("çµæ± æµè¯å¤±è´¥");
+ chargeFailDialog.setText("â ï¸ çµæ± æµè¯å¤±è´¥");
+ chargeFailDialog.setInformativeText("æ£æµå°è®¾å¤æªå
çµï¼charge = 0ï¼\nè¯·è¿æ¥å
çµå¨åéæ°æµè¯");
+ chargeFailDialog.setIcon(QMessageBox::Warning);
+
+ // æ·»å èªå®ä¹æé®
+ QPushButton *confirmButton = chargeFailDialog.addButton("确认", QMessageBox::AcceptRole);
+ QPushButton *retryButton = chargeFailDialog.addButton("éæ°è·å", QMessageBox::ActionRole);
+
+ chargeFailDialog.exec();
+
+ if (chargeFailDialog.clickedButton() == confirmButton) {
+ qDebug() << "ç¨æ·ç¡®è®¤çµæ± å
çµå¤±è´¥ï¼æ è®°æµè¯å¤±è´¥";
+ updateTestStatus("battery", STATUS_FAILED);
+
+ // ç»§ç»G-sensoræµè¯
+ if (isProductionTestRunning && currentTestStep == TEST_BATTERY) {
+ qDebug() << "çµæ± æµè¯å¤±è´¥ç¡®è®¤ï¼ç»§ç»G-sensoræµè¯";
+ currentTestStep = TEST_GSENSOR;
+ performGsensorTest();
+ }
+ } else if (chargeFailDialog.clickedButton() == retryButton) {
+ qDebug() << "ç¨æ·éæ©éæ°è·åçµæ± ä¿¡æ¯";
+ ui->statusbar->showMessage("éæ°è·åçµæ± ä¿¡æ¯...", 2000);
+
+ // éæ°åéçµæ± æµè¯æä»¤
+ serial->write("AT^GETCYWEEID\r\n");
+ qDebug() << "éæ°åéçµæ± æµè¯æä»¤: AT^GETCYWEEID";
+
+ // éæ°å¯å¨è¶
æ¶æ£æµ
+ testTimeoutTimer->start(10000);
+ }
+}
+
+// æ¾ç¤º4Gé夿µè¯å¼¹çª
+void MainWindow::show4GRetryDialog(const QString& failReason)
+{
+ QMessageBox retryDialog(this);
+ retryDialog.setWindowTitle("4Gæµè¯å¤±è´¥");
+ retryDialog.setText("ð¶ 4Gä¿¡å·æµè¯å¤±è´¥");
+
+ // æå»ºè¯¦ç»ç失败信æ¯ï¼å
æ¬SIMå¡ç¶æ
+ QString detailedInfo = QString("æµè¯å¤±è´¥åå ï¼%1").arg(failReason);
+
+ // æ·»å SIMå¡ç¶æä¿¡æ¯
+ if (currentSimStatus == 0) {
+ detailedInfo += "\n\nâ ï¸ SIMå¡ç¶æï¼æªæå
¥";
+ detailedInfo += "\n请æå
¥SIMå¡åéæ°æµè¯";
+ } else if (currentSimStatus == 1) {
+ detailedInfo += "\n\nâ
SIMå¡ç¶æï¼å·²æå
¥";
+ } else {
+ detailedInfo += "\n\nâ SIMå¡ç¶æï¼æªç¥";
+ }
+
+ detailedInfo += "\n\næ¯å¦éæ°è¿è¡4Gæµè¯ï¼";
+
+ retryDialog.setInformativeText(detailedInfo);
+ retryDialog.setIcon(QMessageBox::Warning);
+
+ // æ·»å èªå®ä¹æé®
+ QPushButton *retryButton = retryDialog.addButton("éæ°æµè¯", QMessageBox::AcceptRole);
+ QPushButton *skipButton = retryDialog.addButton("è·³è¿æµè¯", QMessageBox::RejectRole);
+
+ retryDialog.exec();
+
+ if (retryDialog.clickedButton() == retryButton) {
+ qDebug() << "ç¨æ·éæ©éæ°è¿è¡4Gæµè¯";
+ ui->statusbar->showMessage("éæ°å¼å§4Gæµè¯...", 2000);
+
+ // éç½®4Gæµè¯ç¶æ
+ hasReceivedFirstSignal = false;
+ cat1SignalTestCount = 0;
+ cat1SignalReceivedCount = 0;
+ cat1SignalGoodCount = 0;
+ cat1Signal99Count = 0;
+ cat1SignalTotalValue = 0;
+ // ç§»é¤äºcat1ProcessedSignalsçæ¸
çï¼æ¹ç¨æ¶é´æ³æ¹å¼
+
+ // éç½®4Gæµè¯è®¡æ°å¨ï¼ç¡®ä¿éæ°æµè¯æ¶ä»å¤´å¼å§
+ initRetry4GCount = 0;
+ signalTest4GCount = 0;
+ signalReceived4GCount = 0;
+ signalGood4GCount = 0;
+ pppCommandCount = 0;
+ hasReceivedSignalSim = false;
+ hasReceivedPppInfo = false;
+ currentSimStatus = -1; // éç½®SIMå¡ç¶æä¸ºæªç¥
+
+ // 忢ææ4Gç¸å
³å®æ¶å¨
+ if (cat1SignalTimer->isActive()) {
+ cat1SignalTimer->stop();
+ }
+ if (signal4GTimer->isActive()) {
+ signal4GTimer->stop();
+ }
+ if (test4GTimer->isActive()) {
+ test4GTimer->stop();
+ }
+
+ // éæ°å¼å§4Gæµè¯
+ updateTestStatus("ppp", STATUS_TESTING);
+ currentTestStep = TEST_PPP_INIT;
+ perform4GTest();
+
+ } else if (retryDialog.clickedButton() == skipButton) {
+ qDebug() << "ç¨æ·éæ©è·³è¿4Gæµè¯ï¼æ è®°æµè¯å¤±è´¥";
+ updateTestStatus("ppp", STATUS_FAILED);
+
+ // 忢ææ4Gç¸å
³å®æ¶å¨ï¼ç¡®ä¿æµè¯å®å
¨åæ¢
+ if (cat1SignalTimer->isActive()) {
+ cat1SignalTimer->stop();
+ qDebug() << "忢CAT1ä¿¡å·æµè¯å®æ¶å¨";
+ }
+ if (signal4GTimer->isActive()) {
+ signal4GTimer->stop();
+ qDebug() << "忢4Gä¿¡å·æ£æµå®æ¶å¨";
+ }
+ if (test4GTimer->isActive()) {
+ test4GTimer->stop();
+ qDebug() << "忢4Gæµè¯è¶
æ¶å®æ¶å¨";
+ }
+
+ // éç½®4Gæµè¯ç¸å
³ç¶æ
+ hasReceivedFirstSignal = false;
+ hasReceivedSignalSim = false;
+ hasReceivedPppInfo = false;
+
+ // å®æäº§æµï¼å¤±è´¥ï¼
+ if (isProductionTestRunning) {
+ currentTestStep = TEST_COMPLETED;
+ isProductionTestRunning = false;
+ qDebug() << "ç¨æ·è·³è¿4Gæµè¯ï¼äº§æµæµç¨å®æ";
+
+ // ä¿åæµè¯è®°å½
+ QString fileName = saveTestRecord();
+
+ // æ¾ç¤ºæç»æµè¯ç»æå¼¹çª
+ showFinalTestResult();
+ }
+ }
+}
+
+void MainWindow::showFinalTestResult()
+{
+ // è·åå项æµè¯ç»æ
+ QString lcdResult = ui->lcdStatusText->text();
+ QString motorResult = ui->motorStatusText->text();
+ QString keyResult = ui->keyStatusText->text();
+ QString audioResult = ui->audioStatusText->text();
+ QString batteryResult = ui->batteryStatusText->text();
+ QString gsensorResult = ui->gsensorStatusText->text();
+ QString pppResult = ui->pppStatusText->text();
+ QString overallResult = ui->overallStatusText->text();
+
+ // åå»ºç»æå¼¹çª
+ QMessageBox resultDialog(this);
+ resultDialog.setWindowTitle("产æµç»æ");
+
+ // æå»ºç»æå
容
+ QString resultContent = QString(
+ "===== 产æµå®æ =====\n\n"
+ "ð± LCDæµè¯ï¼%1\n"
+ "ð§ 马达æµè¯ï¼%2\n"
+ "â¨ï¸ æé®æµè¯ï¼%3\n"
+ "ð¤ å½é³æµè¯ï¼%4\n"
+ "ð çµæ± æµè¯ï¼%5\n"
+ "ð¡ G-sensoræµè¯ï¼%6\n"
+ "ð 4Gæµè¯ï¼%7\n\n"
+ "ð æ´ä½ç»æï¼%8"
+ ).arg(lcdResult, motorResult, keyResult, audioResult,
+ batteryResult, gsensorResult, pppResult, overallResult);
+
+ resultDialog.setText(resultContent);
+
+ // è®¾ç½®å¾æ åæé®
+ if (overallResult == "éè¿") {
+ resultDialog.setIcon(QMessageBox::Information);
+ resultDialog.setInformativeText("ð æåï¼æææµè¯é¡¹ç®åéè¿ï¼");
+ } else {
+ resultDialog.setIcon(QMessageBox::Critical);
+ resultDialog.setInformativeText("â æµè¯æªéè¿ï¼è¯·æ£æ¥ç¸å
³é¡¹ç®ã");
+ }
+
+ // æ·»å ç¡®å®æé®
+ QPushButton *okButton = resultDialog.addButton("ç¡®å®", QMessageBox::AcceptRole);
+ okButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #4CAF50; "
+ "color: white; "
+ "padding: 10px 20px; "
+ "border-radius: 5px; "
+ "font-weight: bold; "
+ "font-size: 16px; "
+ "min-width: 80px; "
+ "}"
+ "QPushButton:hover { "
+ "background-color: #45a049; "
+ "}"
+ );
+
+ // è®¾ç½®å¼¹çªæ ·å¼
+ resultDialog.setStyleSheet(
+ "QMessageBox { "
+ "background-color: #f8f9fa; "
+ "}"
+ "QMessageBox QLabel { "
+ "font-size: 14px; "
+ "line-height: 1.4; "
+ "}"
+ );
+
+ // æ¾ç¤ºå¼¹çª
+ qDebug() << "æ¾ç¤ºæç»æµè¯ç»æå¼¹çª";
+ resultDialog.exec();
+
+ // ç¨æ·ç¹å»ç¡®å®åçå¤ç
+ qDebug() << "ç¨æ·ç¡®è®¤æµè¯ç»æï¼åééåºäº§æµæä»¤";
+
+ // åééåºäº§æµæä»¤
+ if (serial->isOpen()) {
+ serial->write("AT^RESTORE\r\n");
+ qDebug() << "åééåºäº§æµæä»¤: AT^RESTORE";
+ ui->statusbar->showMessage("å·²éåºäº§æµæ¨¡å¼", 3000);
+ }
+
+ // æ¢å¤äº§æµæé®ç¶æ - ååèè²å¹¶å¯ç¨
+ ui->openButton_2->setStyleSheet("QPushButton { background-color: #4A90E2; color: white; padding: 5px 10px; border: none; border-radius: 3px; }");
+ ui->openButton_2->setEnabled(true);
+ qDebug() << "产æµå®æ - æé®å·²æ¢å¤èè²å¹¶å¯ç¨";
+
+ // æ¸
空æ´ä¸ªäº§æµç¶æ
+ clearProductionTestState();
+
+ qDebug() << "äº§æµæµç¨å®å
¨ç»æï¼ç¶æå·²æ¸
空";
+}
+
+// éç¨æµè¯è¶
æ¶å¤ç
+void MainWindow::onTestTimeout()
+{
+ testTimeoutTimer->stop();
+
+ if (!isProductionTestRunning) {
+ qDebug() << "æµè¯è¶
æ¶ä½äº§æµæªè¿è¡ï¼å¿½ç¥";
+ return;
+ }
+
+ QString testName;
+ QString testDescription;
+
+ // æ ¹æ®å½åæµè¯æ¥éª¤ç¡®å®æµè¯åç§°
+ switch (currentTestStep) {
+ case TEST_RESET:
+ // 工忍¡å¼è¿å
¥è¶
æ¶
+ qDebug() << "工忍¡å¼è¿å
¥è¶
æ¶ï¼æªæ¶å°ç¡®è®¤æ¶æ¯";
+ ui->statusbar->showMessage("工忍¡å¼è¿å
¥è¶
æ¶ï¼è¯·æ£æ¥è®¾å¤", 5000);
+
+ QMessageBox::warning(this, "工忍¡å¼è¶
æ¶",
+ "æªæ¶å°å·¥å模å¼è¿å
¥ç¡®è®¤æ¶æ¯ï¼\n'fac:enter or exit facotry mode'\n\nè¯·æ£æ¥è®¾å¤è¿æ¥åç¶æ");
+
+ // åæ¢äº§æµ
+ isProductionTestRunning = false;
+ currentTestStep = TEST_IDLE;
+ return;
+
+ case TEST_MOTOR:
+ testName = "motor";
+ testDescription = "马达æµè¯";
+ break;
+ case TEST_BATTERY:
+ testName = "battery";
+ testDescription = "çµæ± æµè¯";
+ break;
+ case TEST_GSENSOR:
+ testName = "gsensor";
+ testDescription = "G-sensoræµè¯";
+ break;
+ default:
+ qDebug() << "æªç¥çæµè¯æ¥éª¤è¶
æ¶:" << currentTestStep;
+ return;
+ }
+
+ qDebug() << testDescription << "è¶
æ¶ï¼10ç§å
æªæ¶å°ååº";
+
+ // å¼¹åºè¶
æ¶æç¤ºå¯¹è¯æ¡
+ QMessageBox timeoutDialog(this);
+ timeoutDialog.setWindowTitle("æµè¯è¶
æ¶");
+ timeoutDialog.setIcon(QMessageBox::Warning);
+ timeoutDialog.setText(QString("%1å¼å¯å¤±è´¥").arg(testDescription));
+ timeoutDialog.setInformativeText("10ç§å
æªæ¶å°è®¾å¤ååºï¼è¯·æ£æ¥æºå¨ã");
+
+ QPushButton *retryButton = timeoutDialog.addButton("éè¯", QMessageBox::AcceptRole);
+ QPushButton *skipButton = timeoutDialog.addButton("è·³è¿", QMessageBox::RejectRole);
+ QPushButton *stopButton = timeoutDialog.addButton("忢æµè¯", QMessageBox::DestructiveRole);
+
+ // 设置æé®æ ·å¼
+ retryButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #4CAF50; "
+ "color: white; "
+ "padding: 10px 15px; "
+ "border-radius: 4px; "
+ "font-weight: bold; "
+ "}"
+ );
+
+ skipButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #FF9800; "
+ "color: white; "
+ "padding: 10px 15px; "
+ "border-radius: 4px; "
+ "font-weight: bold; "
+ "}"
+ );
+
+ stopButton->setStyleSheet(
+ "QPushButton { "
+ "background-color: #f44336; "
+ "color: white; "
+ "padding: 10px 15px; "
+ "border-radius: 4px; "
+ "font-weight: bold; "
+ "}"
+ );
+
+ timeoutDialog.exec();
+
+ if (timeoutDialog.clickedButton() == retryButton) {
+ // ç¨æ·éæ©éè¯
+ qDebug() << "ç¨æ·éæ©éè¯" << testDescription;
+ ui->statusbar->showMessage(QString("éè¯%1").arg(testDescription), 2000);
+
+ // å
åé忢æä»¤ï¼ç¶åéæ°å¼å§æµè¯
+ qDebug() << "éè¯ååé忢æä»¤";
+ serial->write("AT^VIBRATORTIMER=0\r\n"); // åæ¢é©¬è¾¾
+ serial->write("AT^LCDTEST=2\r\n"); // éåºLCDæµè¯
+
+ // å»¶è¿500msåéæ°å¼å§æµè¯
+ QTimer::singleShot(500, this, [this, testDescription]() {
+ qDebug() << "忢æä»¤å·²åéï¼å¼å§éè¯" << testDescription;
+
+ // æ ¹æ®æµè¯ç±»åéæ°å¼å§æµè¯
+ switch (currentTestStep) {
+ case TEST_MOTOR:
+ performMotorTest();
+ break;
+ case TEST_BATTERY:
+ performBatteryTest();
+ break;
+ case TEST_GSENSOR:
+ performGsensorTest();
+ break;
+ default:
+ break;
+ }
+ });
+
+ } else if (timeoutDialog.clickedButton() == skipButton) {
+ // ç¨æ·éæ©è·³è¿ï¼æ 记为失败并继ç»ä¸ä¸ä¸ªæµè¯
+ qDebug() << "ç¨æ·éæ©è·³è¿" << testDescription;
+ ui->statusbar->showMessage(QString("%1已跳è¿").arg(testDescription), 2000);
+ updateTestStatus(testName, STATUS_FAILED);
+
+ // ç»§ç»ä¸ä¸ä¸ªæµè¯
+ switch (currentTestStep) {
+ case TEST_MOTOR:
+ currentTestStep = TEST_KEY;
+ performKeyTest();
+ break;
+ case TEST_BATTERY:
+ currentTestStep = TEST_GSENSOR;
+ performGsensorTest();
+ break;
+ case TEST_GSENSOR:
+ {
+ // G-sensoræµè¯è¶
æ¶ï¼ç»§ç»4Gæµè¯
+ qDebug() << "G-sensoræµè¯è¶
æ¶ï¼ç»§ç»4Gæµè¯";
+ updateTestStatus("gsensor", STATUS_FAILED);
+ currentTestStep = TEST_PPP_INIT;
+ perform4GTest();
+ break;
+ }
+ default:
+ break;
+ }
+
+ } else {
+ // ç¨æ·éæ©åæ¢æµè¯
+ qDebug() << "ç¨æ·éæ©åæ¢æµè¯";
+ ui->statusbar->showMessage("æµè¯å·²åæ¢", 2000);
+ updateTestStatus(testName, STATUS_FAILED);
+
+ // åæ¢äº§æµ
+ isProductionTestRunning = false;
+ currentTestStep = TEST_IDLE;
+
+ // ä¿åæµè¯è®°å½å¹¶æ¾ç¤ºç»æ
+ QString fileName = saveTestRecord();
+ showFinalTestResult();
+ }
+}
+
+// æ¸
空产æµç¶æ
+void MainWindow::clearProductionTestState()
+{
+ qDebug() << "å¼å§æ¸
空产æµç¶æ";
+
+ // 忢ææå®æ¶å¨
+ if (lcdTestTimer->isActive()) {
+ lcdTestTimer->stop();
+ qDebug() << "忢LCDæµè¯å®æ¶å¨";
+ }
+
+ if (motorTestTimer->isActive()) {
+ motorTestTimer->stop();
+ qDebug() << "åæ¢é©¬è¾¾æµè¯å®æ¶å¨";
+ }
+
+ if (test4GTimer->isActive()) {
+ test4GTimer->stop();
+ qDebug() << "忢4Gæµè¯å®æ¶å¨";
+ }
+
+ if (signal4GTimer->isActive()) {
+ signal4GTimer->stop();
+ qDebug() << "忢4Gä¿¡å·æ£æµå®æ¶å¨";
+ }
+
+ if (cat1SignalTimer->isActive()) {
+ cat1SignalTimer->stop();
+ qDebug() << "忢CAT1ä¿¡å·æµè¯å®æ¶å¨";
+ }
+
+ if (testTimeoutTimer->isActive()) {
+ testTimeoutTimer->stop();
+ qDebug() << "忢éç¨è¶
æ¶å®æ¶å¨";
+ }
+
+ // é置产æµç¶æåé
+ isProductionTestRunning = false;
+ currentTestStep = TEST_IDLE;
+ currentLcdColor = 0;
+ initRetry4GCount = 0;
+ signalTest4GCount = 0;
+ signalReceived4GCount = 0;
+ signalGood4GCount = 0;
+ hasReceivedFirstSignal = false;
+ cat1SignalTestCount = 0;
+ cat1SignalReceivedCount = 0;
+ cat1SignalGoodCount = 0;
+ cat1Signal99Count = 0;
+ cat1SignalTotalValue = 0;
+ // ç§»é¤äºcat1ProcessedSignalsçæ¸
çï¼æ¹ç¨æ¶é´æ³æ¹å¼
+ currentModemVersion = ""; // åå§åMODEMçæ¬ä¸ºç©º
+ currentSimStatus = -1; // éç½®SIMå¡ç¶æä¸ºæªç¥
+
+ // é置弹çªç¶æ
+ lcdTestPopupShown = false;
+ motorTestPopupShown = false;
+ isWaitingForUserConfirm = false;
+ keyTestStarted = false;
+ audioTestPopupShown = false;
+ audioPlaybackPopupShown = false;
+
+ // éç½®æé®æµè¯ç¶æ
+ for (int i = 0; i < 4; i++) {
+ keyTestStatus[i] = 0;
+ }
+
+ // æ¸
ç©ºç¶ææç¤ºå¨ - éç½®ä¸ºæªæµè¯ç¶æ
+ updateTestStatus("lcd", STATUS_UNTESTED);
+ updateTestStatus("motor", STATUS_UNTESTED);
+ updateTestStatus("key", STATUS_UNTESTED);
+ updateTestStatus("audio", STATUS_UNTESTED);
+ updateTestStatus("battery", STATUS_UNTESTED);
+ updateTestStatus("gsensor", STATUS_UNTESTED);
+ updateTestStatus("ppp", STATUS_UNTESTED);
+
+ // æ¸
ç©ºä¸²å£æ¥æ¶ææ¬æ¡
+ ui->recvTextEdit->clear();
+ qDebug() << "å·²æ¸
ç©ºä¸²å£æ¥æ¶ææ¬æ¡";
+
+ qDebug() << "产æµç¶ææ¸
ç©ºå®æ";
+}
+
+void MainWindow::on_agingTestButton_clicked()
+{
+ // æ¸
空ææUIå
容
+ ui->recvTextEdit->clear(); // æ¸
ç©ºä¸²å£æ¥æ¶ææ¬æ¡
+ ui->sendTextEdit->clear(); // æ¸
空åéææ¬æ¡
+ ui->statusbar->clearMessage(); // æ¸
ç©ºç¶ææ
+
+ // æ¸
空设å¤ä¿¡æ¯
+ ui->VerlineEdit->clear(); // æ¸
ç©ºçæ¬ä¿¡æ¯
+ ui->IMEIlineEdit->clear(); // æ¸
空IMEI
+ ui->ICCIDlineEdit->clear(); // æ¸
空ICCID
+ ui->ModemVerlineEdit->clear(); // æ¸
空è°å¶è§£è°å¨çæ¬
+ ui->PYVerlineEdit->clear(); // æ¸
空pythonçæ¬
+
+ // é置弹çªç¶æ
+ lcdTestPopupShown = false;
+ motorTestPopupShown = false;
+ isWaitingForUserConfirm = false;
+ keyTestStarted = false;
+ audioTestPopupShown = false;
+ audioPlaybackPopupShown = false;
+
+ // éç½®ç¶ææç¤ºå¨
+ updateTestStatus("lcd", STATUS_UNTESTED);
+ updateTestStatus("motor", STATUS_UNTESTED);
+ updateTestStatus("key", STATUS_UNTESTED);
+ updateTestStatus("audio", STATUS_UNTESTED);
+ updateTestStatus("battery", STATUS_UNTESTED);
+ updateTestStatus("gsensor", STATUS_UNTESTED);
+ updateTestStatus("ppp", STATUS_UNTESTED);
+ serial->write("AT^FACTORY=2\r\n");
+}
+
+void MainWindow::on_agingTestButton_2_clicked()
+{
+ // æ¸
空ææUIå
容
+ ui->recvTextEdit->clear(); // æ¸
ç©ºä¸²å£æ¥æ¶ææ¬æ¡
+ ui->sendTextEdit->clear(); // æ¸
空åéææ¬æ¡
+ ui->statusbar->clearMessage(); // æ¸
ç©ºç¶ææ
+
+ // æ¸
空设å¤ä¿¡æ¯
+ ui->VerlineEdit->clear(); // æ¸
ç©ºçæ¬ä¿¡æ¯
+ ui->IMEIlineEdit->clear(); // æ¸
空IMEI
+ ui->ICCIDlineEdit->clear(); // æ¸
空ICCID
+ ui->ModemVerlineEdit->clear(); // æ¸
空è°å¶è§£è°å¨çæ¬
+ ui->PYVerlineEdit->clear(); // æ¸
空pythonçæ¬
+
+ // é置弹çªç¶æ
+ lcdTestPopupShown = false;
+ motorTestPopupShown = false;
+ isWaitingForUserConfirm = false;
+ keyTestStarted = false;
+ audioTestPopupShown = false;
+ audioPlaybackPopupShown = false;
+
+ // éç½®ç¶ææç¤ºå¨
+ updateTestStatus("lcd", STATUS_UNTESTED);
+ updateTestStatus("motor", STATUS_UNTESTED);
+ updateTestStatus("key", STATUS_UNTESTED);
+ updateTestStatus("audio", STATUS_UNTESTED);
+ updateTestStatus("battery", STATUS_UNTESTED);
+ updateTestStatus("gsensor", STATUS_UNTESTED);
+ updateTestStatus("ppp", STATUS_UNTESTED);
+
+ serial->write("AT^RESTORE\r\n");
+}
+
+void MainWindow::on_openButton_3_clicked()
+{
+ // æ¸
空ææUIå
容
+ ui->recvTextEdit->clear(); // æ¸
ç©ºä¸²å£æ¥æ¶ææ¬æ¡
+ ui->sendTextEdit->clear(); // æ¸
空åéææ¬æ¡
+ ui->statusbar->clearMessage(); // æ¸
ç©ºç¶ææ
+
+ // æ¸
空设å¤ä¿¡æ¯
+ ui->VerlineEdit->clear(); // æ¸
ç©ºçæ¬ä¿¡æ¯
+ ui->IMEIlineEdit->clear(); // æ¸
空IMEI
+ ui->ICCIDlineEdit->clear(); // æ¸
空ICCID
+ ui->ModemVerlineEdit->clear(); // æ¸
空è°å¶è§£è°å¨çæ¬
+ ui->PYVerlineEdit->clear(); // æ¸
空pythonçæ¬
+
+ // é置弹çªç¶æ
+ lcdTestPopupShown = false;
+ motorTestPopupShown = false;
+ isWaitingForUserConfirm = false;
+ keyTestStarted = false;
+ audioTestPopupShown = false;
+ audioPlaybackPopupShown = false;
+
+ // éç½®ç¶ææç¤ºå¨
+ updateTestStatus("lcd", STATUS_UNTESTED);
+ updateTestStatus("motor", STATUS_UNTESTED);
+ updateTestStatus("key", STATUS_UNTESTED);
+ updateTestStatus("audio", STATUS_UNTESTED);
+ updateTestStatus("battery", STATUS_UNTESTED);
+ updateTestStatus("gsensor", STATUS_UNTESTED);
+ updateTestStatus("ppp", STATUS_UNTESTED);
+
+ serial->write("AT^FACTORY=3\r\n");
+}
diff --git a/mainwindow.h b/mainwindow.h
index 8a58b37..2c87f27 100644
--- a/mainwindow.h
+++ b/mainwindow.h
@@ -1,145 +1,196 @@
-#ifndef MAINWINDOW_H
-#define MAINWINDOW_H
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include "header.h"
-#include "result_thread.h"
-#include "common.h"
-#include "at_data.h"
-#include "QFileDialog"
-#include "QMessageBox"
-#include "QTime"
-
-#define COM_NUMBER 10
-
-// å°è£
äºUIä¸éè¦è°ç¨çææå½æ°æ¥å£
-QT_BEGIN_NAMESPACE
-namespace Ui {
-class MainWindow;
-}
-QT_END_NAMESPACE
-
-class MainWindow : public QMainWindow {
- Q_OBJECT
-
-public:
- MainWindow(QWidget *parent = nullptr);
- ~MainWindow();
-
-private:
- Ui::MainWindow *ui;
- /* ------------------------uart------------------------------- */
- Result_Thread *result_thread;
- // æ¯å¦å¿½ç¥uartæ°æ®ï¼ä¸åæ¾
- bool uart_rx_Ignoring_display {false};
- // æ¯å¦æuartéè·¯æ°æ®ä¸æ¥
- bool uart_rx_flag {false};
- bool dongle_is_connected {false};
- int dongle_connected_times {0};
- QStringList uart_get_enable_comm_or_port();
- QString uart_get_comm_or_port(int nIndex, bool bValue);
- void uart_open(QString com,QString com_band);
- void uart_close();
- /* ------------------------spp-------------------------------- */
- QTimer *spp_timer_handle {NULL};
- QTimer *spp_connected_handle {NULL};
- int dongle_try_count {0};
- int spp_try_count {0};
-
- /* -----------------------transmit---------------------------- */
- QStringList transmit_fromborad_local_list;
- QStringList tansmit_fromborad_borad_list;
- QStringList transmit_toboard_local_list;
- QStringList transmit_toboard_borad_list;
- typedef enum{
- TRANSMIT_IDLE,
- TRANSMIT_DOWNLOAD,
- TRANSMIT_UPLOAD,
- }transmit_mode;
- // download is 1,uplaod is 2
- transmit_mode transmit_download_or_upload {TRANSMIT_IDLE};
- QTimer *transmit_timer_handle {NULL};
- void transmit_progress_start();
- /* -------------------------UI------------------------------- */
- enum ui_page{
- PAGE_COMPLETE,
- PAGE_BOARD,
- };
- void ui_setting_save();
- void ui_setting_read();
- void ui_display(QString str,bool inOrOut);
- /* -------------------------AT------------------------------- */
- At_Process *at_handler;
- void at_check_send_status(bool flag);
- void at_set_bt_format();
- bool bt_test_switch {false};
- /* ------------------------end------------------------------ */
-
-private slots:
- /* --------------------------UI------------------------------ */
- void ui_tab_mainwindow_complete();
- void ui_tab_mainwindow_board();
- void ui_save_windows();
- /* -------------------------uart----------------------------- */
- void uart_process();
- void uart_send_data();
- void uart_rx_dispaly(int buf_len, u8Piont buf);
- void uart_check_dtr_rts();
- void uart_com_select();
- void uart_com_switch(QString com);
- void uart_baud_switch(QString baud);
- /* -------------------------spp------------------------------- */
- void spp_connect();
- void spp_timer_callback();
- void spp_connected_callback();
- void dongle_suspend();
- void dongle_resume();
- /* -----------------------at/transmit---------------------------- */
- void at_rx_display(int at_buf_len, u8Piont at_buf);
- void at_stackinfo_send();
- void at_fsrm_send();
- void at_mediamusicplay_send();
- void at_mediamusicstop_send();
- void at_mediaaudiorecord_send();
- void at_custom_send();
- void transmit_ls_rx_diaplay(int transmit_ls_size, vPiont transmit_ls_buff);
- void transmit_rx_display(bool transmit_result_flag);
- void transmit_update_progress();
- void transmit_fromboard_name_change();
- void transmit_fromboard_selectfilepath();
- void transmit_fromboard_getfilelist();
- void transmit_fromboard_download();
- void transmit_fromboard_delete();
- void transmit_fromboard_stop();
- void transmit_toboard_choosefile();
- void transmit_toboard_upload();
- void transmit_toboard_stop();
- /* ----------------------- è¦åæµè¯è®¾ç½® --------------------------- */
- void at_set_dongle_addr_complete();
- void at_bt_delay_ms_complete();
- void at_check_bt_len(int packtype_index);
- /* -----------------------è¦åæµè¯-æ´æºæ®µ-------------------------- */
- void at_get_rx_count_complete();
- void at_bt_tx_complete(); // BTé¿åï¼é信令ï¼
- void at_bt_rx_complete(); // BTé¿æ¶ï¼é信令ï¼
- void at_ble_tx_complete(); // BLEé¿åï¼é信令ï¼
- void at_ble_rx_complete(); // BLEé¿æ¶ï¼é信令ï¼
- /* -----------------------ä¼ å¯¼æµè¯-åæ¿æ®µ-------------------------- */
- void at_bt_tx_board(); // BTé¿åï¼é信令ï¼
- void at_bt_rx_board(); // BTé¿æ¶ï¼é信令ï¼
- void at_ble_tx_board(); // BLEé¿åï¼é信令ï¼
- void at_ble_rx_board(); // BLEé¿æ¶ï¼é信令ï¼
- void at_bt_dutmode_board();
- void at_bt_btlo_board();
- void at_bt_btpwr_board();
- void at_bt_wakeup();
- void at_bt_sleep();
- /* ------------------------------------------------------------- */
-};
-#endif // MAINWINDOW_H
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+QT_BEGIN_NAMESPACE
+namespace Ui { class MainWindow; }
+QT_END_NAMESPACE
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ // ç¶ææç¤ºå¨æä¸¾
+ enum TestStatus {
+ STATUS_UNTESTED, // æªæµè¯
+ STATUS_TESTING, // æµè¯ä¸
+ STATUS_SUCCESS, // éè¿
+ STATUS_FAILED // 失败
+ };
+ MainWindow(QWidget *parent = nullptr);
+ ~MainWindow();
+
+private slots:
+ void on_refreshButton_clicked(); // å·æ°ä¸²å£å表
+ void on_openButton_clicked(); // æå¼/å
³é串å£
+ void on_sendButton_clicked(); // åéæ°æ®
+ void on_clearRecvButton_clicked(); // æ¸
ç©ºæ¥æ¶åº
+ void on_clearSendButton_clicked(); // æ¸
空åéåº
+ void readSerialData(); // 读å䏲壿°æ®
+
+ void on_openButton_2_clicked();
+ void on_openRecordsFolderButton_clicked(); // æå¼è®°å½æä»¶å¤¹
+
+ // 产æµç¸å
³æ§½å½æ°
+ void on_ProductionTestButton_clicked(); // å¼å§äº§æµ
+ void performLcdTest(); // LCDæµè¯
+ void performLcdColorTest(); // LCDé¢è²æµè¯
+ void performMotorTest(); // 马达æµè¯
+ void perform4GTest(); // 4Gæµè¯
+ void perform4GSignalTest(); // 4Gä¿¡å·è´¨éæµè¯
+ void onLcdTestTimer(); // LCDæµè¯å®æ¶å¨
+ void onMotorTestTimer(); // 马达æµè¯å®æ¶å¨
+ void on4GTestTimeout(); // 4Gæµè¯è¶
æ¶
+ void on4GSignalTimer(); // 4Gä¿¡å·æ£æµå®æ¶å¨
+ void onTestTimeout(); // éç¨æµè¯è¶
æ¶å¤ç
+ void checkFactoryModeResult(const QString& data); // æ£æ¥å·¥å模å¼è¿å
¥ç»æ
+ void check4GInitResult(const QString& data); // æ£æ¥4Gåå§åç»æ
+ void check4GSignalResult(const QString& data); // æ£æ¥4Gä¿¡å·è´¨éç»æ
+ QString getRsrqGrade(double rsrq); // è·åRSRQä¿¡å·è´¨éè¯çº§
+ QString getRsrpGrade(double rsrp); // è·åRSRPä¿¡å·è¦ç强度è¯çº§
+ QString getOverallSignalAssessment(double rsrp, double rsrq); // è·åæ´ä½ä¿¡å·è¯ä¼°
+ void showFinalTestResult(); // æ¾ç¤ºæç»æµè¯ç»æå¼¹çª
+ void showBatteryChargeFailDialog(); // æ¾ç¤ºçµæ± å
çµå¤±è´¥å¼¹çª
+ void clearProductionTestState(); // æ¸
空产æµç¶æ
+ void checkLcdTestResult(const QString& data); // æ£æ¥LCDæµè¯ç»æ
+ void checkBuildVerResult(const QString& data); // æ£æ¥BuildVerå¯å¨å®æ
+ void showLcdTestConfirmDialog(); // æ¾ç¤ºLCDæµè¯ç¡®è®¤å¼¹çª
+ void showMotorTestConfirmDialog(); // æ¾ç¤ºé©¬è¾¾æµè¯ç¡®è®¤å¼¹çª
+ void performKeyTest(); // æ§è¡æé®æµè¯
+ void checkKeyTestResult(const QString& data); // æ£æ¥æé®æµè¯ç»æ
+ void showKeyTestConfirmDialog(bool allKeysTested); // æ¾ç¤ºæé®æµè¯ç¡®è®¤å¼¹çª
+ void performAudioTest(); // æ§è¡å½é³æµè¯
+ void showAudioTestDialog(); // æ¾ç¤ºå½é³æµè¯å¼¹çª
+ void onAudioRecordTimer(); // å½é³æµè¯å®æ¶å¨(3ç§å½é³)
+ void checkAudioTestResult(const QString& data); // æ£æ¥å½é³æµè¯ç»æ
+ void performBatteryTest(); // æ§è¡çµæ± æµè¯
+ void checkBatteryTestResult(const QString& data); // æ£æ¥çµæ± æµè¯ç»æ
+ void performGsensorTest(); // æ§è¡G-sensoræµè¯
+ void checkGsensorTestResult(const QString& data); // æ£æ¥G-sensoræµè¯ç»æ
+ void updateTestStatus(const QString& testName, TestStatus status);
+ void updateOverallStatus();
+ QString saveTestRecord(); // ä¿åæµè¯è®°å½å°Excelï¼éé»ä¿åï¼
+ void checkSignalAndSimValues(const QString& data); // æ£æ¥signalåsimå¼è¿è¡4Gæµè¯å¤æ
+ void sendPppCommand(); // åéPPPæä»¤
+ void parseWstpPrintData(const QString& data); // è§£æwstp_printæ ¼å¼çBTMACåCyweeChipInfoæ°æ®
+
+
+ void onCat1SignalTimer();
+ void checkCat1SignalResult(const QString& data);
+ void show4GRetryDialog(const QString& failReason);
+ bool isEGModem() const;
+ bool isValidIMEI(const QString& imei);
+ bool isValidICCID(const QString& iccid);
+
+ void on_agingTestButton_clicked();
+
+ void on_agingTestButton_2_clicked();
+
+ void on_openButton_3_clicked();
+
+private:
+ Ui::MainWindow *ui;
+ QSerialPort *serial; // 串å£å¯¹è±¡
+ QString recvBuffer; // ç¨äºç´¯ç§¯æ¥æ¶çæ°æ®ï¼å¤çåçé®é¢
+ void updateSerialPorts(); // æ´æ°å¯ç¨ä¸²å£
+
+ // 产æµç¸å
³åé
+ QTimer *lcdTestTimer; // LCDæµè¯å®æ¶å¨
+ QTimer *motorTestTimer; // 马达æµè¯å®æ¶å¨
+ QTimer *test4GTimer; // 4Gæµè¯è¶
æ¶å®æ¶å¨
+ QTimer *signal4GTimer; // 4Gä¿¡å·æ£æµå®æ¶å¨
+ QTimer *testTimeoutTimer; // éç¨æµè¯è¶
æ¶å®æ¶å¨
+
+ QTimer *cat1SignalTimer; // CAT1ä¿¡å·æµè¯å®æ¶å¨
+ int currentLcdColor; // å½åLCDæµè¯é¢è² (1=红, 2=绿, 3=è)
+ int initRetry4GCount; // 4Gåå§åéè¯æ¬¡æ°
+ bool hasReceivedFirstSignal;
+ int cat1SignalTestCount;
+ int cat1SignalReceivedCount;
+ int cat1SignalGoodCount;
+ int cat1Signal99Count;
+ int cat1SignalTotalValue;
+ int signalTest4GCount; // 4Gä¿¡å·æ£æµå鿬¡æ°
+ int signalReceived4GCount; // 4Gä¿¡å·æ¥æ¶å°æææ°æ®æ¬¡æ°
+ int signalGood4GCount; // 4Gä¿¡å·è¯å¥½ä»¥ä¸è®¡æ°
+ int pppCommandCount; // PPPæä»¤å鿬¡æ°è®¡æ°å¨
+ bool hasReceivedSignalSim; // æ¯å¦å·²æ¶å°signalåsimæ°æ®
+ bool hasReceivedPppInfo; // æ¯å¦å·²æ¶å°PPPINFOç¸å
³æå°
+ QString currentModemVersion; // å½åMODEMçæ¬
+ QString currentPYVerVersion; // å½åpythonçæ¬
+ int currentSimStatus; // å½åSIMå¡ç¶æï¼1=æå
¥ï¼0=æªæå
¥ï¼-1=æªç¥
+ bool isProductionTestRunning; // äº§æµæ¯å¦æ£å¨è¿è¡
+ QDateTime testStartTime; // æµè¯å¼å§æ¶é´
+ bool lcdTestPopupShown; // LCDæµè¯å¼¹çªæ¯å¦å·²æ¾ç¤º
+ bool motorTestPopupShown; // 马达æµè¯å¼¹çªæ¯å¦å·²æ¾ç¤º
+ bool isWaitingForUserConfirm; // æ¯å¦æ£å¨çå¾
ç¨æ·ç¡®è®¤
+ bool keyTestStarted; // æé®æµè¯æ¯å¦å·²å¼å§
+ int keyTestStatus[4]; // æé®æµè¯ç¶æ 0=æªæµè¯ 1=å·²æµè¯
+ QDialog *keyTestDialog; // æé®æµè¯å¼¹çª
+ QPushButton *keyButtons[4]; // æé®æµè¯æé®
+ bool audioTestPopupShown; // å½é³æµè¯å¼¹çªæ¯å¦å·²æ¾ç¤º
+ bool audioPlaybackPopupShown; // å½é³ææ¾ç¡®è®¤å¼¹çªæ¯å¦å·²æ¾ç¤º
+ QTimer *audioRecordTimer; // å½é³æµè¯å®æ¶å¨
+ QDialog *audioTestDialog; // å½é³æµè¯å¯¹è¯æ¡
+ QLabel *audioDialogLabel; // å½é³å¯¹è¯æ¡æ ç¾
+ QLabel *audioDialogInfo; // å½é³å¯¹è¯æ¡ä¿¡æ¯
+ QPushButton *audioStartButton; // å¼å§å½é³æé®
+ QPushButton *audioPassButton; // å½é³éè¿æé®
+ QPushButton *audioFailButton; // å½é³å¤±è´¥æé®
+ QPushButton *audioRetestButton; // éæ°æµè¯æé®
+
+ enum AudioTestStep {
+ AUDIO_STARTING_RECORD, // å¼å§å½é³
+ AUDIO_PLAYING_1KHZ, // æ£å¨ææ¾1kHzé³é¢
+ AUDIO_STOPPING_1KHZ, // åæ¢ææ¾1kHzé³é¢
+ AUDIO_STOPPING_RECORD, // 忢å½é³
+ AUDIO_PLAYING_RECORDED, // ææ¾å½å¶çé³é¢
+ AUDIO_STOPPING_PLAYBACK // åæ¢ææ¾å½å¶çé³é¢
+ } currentAudioStep;
+
+ enum ProductionTestStep {
+ TEST_IDLE,
+ TEST_RESET,
+ TEST_WAIT_BUILDVER,
+ TEST_LCD,
+ TEST_MOTOR,
+ TEST_KEY,
+ TEST_AUDIO,
+ TEST_BATTERY,
+ TEST_GSENSOR,
+ TEST_PPP_INIT,
+ TEST_PPP_UPDATE,
+ TEST_PPP_SIGNAL,
+ TEST_COMPLETED
+ } currentTestStep;
+ // åå
è¿å¶ä¸åèæ°ç»è½¬æ¢å·¥å
·å½æ°
+ QByteArray hexStringToByteArray(const QString &hexString);
+ QString byteArrayToHexString(const QByteArray &byteArray);
+ // æ°æ®æå彿°
+ void ShowSoftVer(const QString& data);
+ void CheckVibratorFunc(const QString& data);
+ // PPP_INFOæ ¼å¼æ°æ®æå彿°
+ void ShowPppInfoIMEI(const QString& data);
+ void ShowPppInfoICCID(const QString& data);
+ void ShowPppInfoModemVer(const QString& data);
+ void ShowPppInfoPYVer(const QString& data);
+ // CAT1ä¿¡å·æµè¯ç¸å
³å½æ°
+ void parseNetworkStatChanged(const QString& data);
+};
+#endif // MAINWINDOW_H
diff --git a/mainwindow.ui b/mainwindow.ui
index 0eaae6b..52a6a1a 100644
--- a/mainwindow.ui
+++ b/mainwindow.ui
@@ -1,3846 +1,788 @@
-
-
- MainWindow
-
-
-
- 0
- 0
- 890
- 707
-
-
-
-
- é»ä½
- 50
- false
-
-
-
- Factory_Tools
-
-
-
- :/icon/windows.ico:/icon/windows.ico
-
-
- 1.000000000000000
-
-
- Qt::LeftToRight
-
-
-
-
-
- 0
- 0
- 631
- 371
-
-
-
-
- Times New Roman
- 10
-
-
-
- true
-
-
- QTextBrowser{background-color:rgb(26, 26, 26);
- color:rgb(127, 255, 0)}
-
-
- Qt::ScrollBarAlwaysOn
-
-
- Qt::TextBrowserInteraction
-
-
-
-
-
- 0
- 370
- 891
- 311
-
-
-
-
- é»ä½
- 50
- false
-
-
-
- 0
-
-
-
-
- false
-
-
-
- 0
- 0
- 891
- 291
-
-
-
-
- 0
- 0
-
-
-
-
- é»ä½
- 12
- 50
- false
-
-
-
- ArrowCursor
-
-
- 3
-
-
-
- Debug
-
-
-
-
- 0
- 0
- 771
- 261
-
-
-
-
-
-
- 790
- 30
- 75
- 23
-
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- åé
-
-
-
-
-
- 790
- 83
- 75
- 23
-
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- æ¸
é¤åé
-
-
-
-
-
- 789
- 157
- 88
- 16
-
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- å å车æ¢è¡
-
-
- false
-
-
-
-
-
- To Board
-
-
-
-
- 20
- 210
- 831
- 23
-
-
-
- 0
-
-
- false
-
-
-
-
-
- 20
- 20
- 831
- 161
-
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- Upload File
-
-
-
-
- 10
- 40
- 121
- 21
-
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- Local File Path:
-
-
-
-
-
- 10
- 100
- 121
- 20
-
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- Board File Path:
-
-
-
-
-
- 730
- 100
- 75
- 23
-
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- stop
-
-
-
-
-
- 140
- 100
- 471
- 20
-
-
-
-
-
-
- 640
- 40
- 161
- 23
-
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- Choose File
-
-
-
-
-
- 640
- 100
- 75
- 23
-
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- Upload
-
-
- false
-
-
-
-
-
- 140
- 40
- 471
- 20
-
-
-
-
-
-
-
- From Board
-
-
-
-
- 20
- 20
- 701
- 71
-
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- File Storage
-
-
-
-
- 10
- 30
- 121
- 21
-
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- Local File Path:
-
-
-
-
-
- 140
- 30
- 421
- 20
-
-
-
-
-
-
- 580
- 30
- 91
- 23
-
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- ....
-
-
-
-
-
-
- 20
- 110
- 701
- 101
-
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- File Selector
-
-
-
-
- 40
- 20
- 71
- 20
-
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- File Path:
-
-
-
-
-
- 140
- 20
- 531
- 20
-
-
-
-
-
-
- 140
- 60
- 411
- 22
-
-
-
-
-
-
- 570
- 60
- 101
- 23
-
-
-
-
- Times New Roman
- 9
- 50
- false
-
-
-
- Get file List
-
-
-
-
-
- 40
- 60
- 71
- 20
-
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- File Name:
-
-
-
-
-
- 290
- 130
- 75
- 23
-
-
-
- PushButton
-
-
-
-
-
-
- 20
- 220
- 711
- 20
-
-
-
- 0
-
-
-
-
-
- 760
- 20
- 95
- 201
-
-
-
- -
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- Download
-
-
- false
-
-
-
- -
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- Delete
-
-
-
- -
-
-
-
- Times New Roman
- 10
- 50
- false
-
-
-
- Stop
-
-
-
-
-
-
-
-
- ATå½ä»¤
-
-
-
-
- 0
- 0
- 891
- 271
-
-
-
-
- é»ä½
- 10
- 50
- false
-
-
-
- QTabWidget::West
-
-
- QTabWidget::Triangular
-
-
- 0
-
-
- Qt::ElideNone
-
-
-
- MCU
-
-
-
-
- 20
- 10
- 831
- 211
-
-
-
- Debug
-
-
-
-
- 20
- 30
- 791
- 31
-
-
-
-
- 10
-
- -
-
-
- StackInfo
-
-
-
- -
-
-
- å¾
å¼å
-
-
-
- -
-
-
- å¾
å¼å
-
-
-
- -
-
-
- å¾
å¼å
-
-
-
- -
-
-
- å¾
å¼å
-
-
-
-
-
-
-
-
- 20
- 90
- 371
- 30
-
-
-
- -
-
-
- -
-
-
- FSRM
-
-
-
-
-
-
-
-
- 20
- 150
- 731
- 25
-
-
-
- -
-
-
- åé
-
-
-
- -
-
-
- Qt::Horizontal
-
-
- QSizePolicy::Minimum
-
-
-
- 30
- 20
-
-
-
-
- -
-
-
-
- é»ä½
- 8
- 50
- false
-
-
-
- module id
-
-
-
- -
-
-
-
- é»ä½
- 8
- 50
- false
-
-
-
- cmd id
-
-
-
- -
-
-
- payload
-
-
-
-
-
-
-
-
-
- MEDIA
-
-
-
-
- 20
- 10
- 821
- 161
-
-
-
- Media
-
-
-
-
- 20
- 30
- 591
- 32
-
-
-
-
- 3
-
-
- 3
-
-
- 3
-
-
- 3
-
- -
-
-
- -
-
-
- Music Play
-
-
-
- -
-
-
- Music Stop
-
-
-
-
-
-
-
-
- 20
- 80
- 591
- 32
-
-
-
-
- 3
-
-
- 3
-
-
- 3
-
-
- 3
-
- -
-
-
- -
-
-
- Audio Record
-
-
-
-
-
-
-
-
-
- BT
-
-
-
-
- 20
- 10
- 821
- 111
-
-
-
- è¦åæµè¯è®¾ç½®
-
-
-
-
- 20
- 40
- 671
- 25
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- å»¶æ¶æ¶é´
-
-
-
- -
-
-
-
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
- ms
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- DongleMAC
-
-
-
- -
-
-
-
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
-
-
-
-
-
-
- è¦åæµè¯
-
-
-
-
- 20
- 10
- 831
- 121
-
-
-
- BR EDR
-
-
-
-
- 20
- 20
- 761
- 81
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Qt::DefaultContextMenu
-
-
-
-
- DH1
-
-
- -
-
- DH3
-
-
- -
-
- DH5
-
-
- -
-
- 2-DH1
-
-
- -
-
- 2-DH3
-
-
- -
-
- 2-DH5
-
-
- -
-
- 3-DH1
-
-
- -
-
- 3-DH3
-
-
- -
-
- 3-DH5
-
-
-
-
- -
-
-
- Length(0-27)
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
- ON
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
- 10101010
-
-
- -
-
- PRBS9
-
-
- -
-
- 11110000
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- BR RX
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- 0
-
-
-
-
- ON
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- BR TX
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
- true
-
-
- QLineEdit::Normal
-
-
- Channel(0-78)
-
-
- Qt::LogicalMoveStyle
-
-
- false
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
- Channel(0-78)
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Qt::DefaultContextMenu
-
-
-
-
- DH1
-
-
- -
-
- DH3
-
-
- -
-
- DH5
-
-
- -
-
- 2-DH1
-
-
- -
-
- 2-DH3
-
-
- -
-
- 2-DH5
-
-
- -
-
- 3-DH1
-
-
- -
-
- 3-DH3
-
-
- -
-
- 3-DH5
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
- 10101010
-
-
- -
-
- PRBS9
-
-
- -
-
- 11110000
-
-
-
-
- -
-
-
- Length(0-27)
-
-
-
-
-
-
-
-
-
- 20
- 140
- 831
- 111
-
-
-
- BLE
-
-
-
-
- 20
- 70
- 461
- 26
-
-
-
-
- 3
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
- ON
-
-
-
-
- -
-
-
- Channel(0-39)
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Qt::DefaultContextMenu
-
-
-
-
- BLE 1M
-
-
- -
-
- BLE 2M
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- BLE RX
-
-
-
-
-
-
-
-
- 20
- 21
- 761
- 25
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- BLE TX
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
- ON
-
-
-
-
- -
-
-
- Channel(0-39)
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
- 10101010
-
-
- -
-
- PRBS9
-
-
- -
-
- 11110000
-
-
-
-
- -
-
-
- Length(0-255)
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Qt::DefaultContextMenu
-
-
-
-
- BLE 1M
-
-
- -
-
- BLE 2M
-
-
-
-
-
-
-
-
-
- 560
- 70
- 221
- 25
-
-
-
- -
-
-
- è·åRX Count
-
-
-
- -
-
-
-
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- false
-
-
-
- 0
- 0
- 911
- 291
-
-
-
-
- é»ä½
- 12
- 50
- false
-
-
-
- 2
-
-
-
- Debug
-
-
-
-
- 0
- 0
- 771
- 261
-
-
-
-
-
-
- 790
- 30
- 75
- 23
-
-
-
-
- é»ä½
- 10
- 50
- false
-
-
-
- åé
-
-
-
-
-
- 790
- 83
- 75
- 23
-
-
-
-
- é»ä½
- 10
- 50
- false
-
-
-
- æ¸
é¤åé
-
-
-
-
-
- 789
- 157
- 88
- 16
-
-
-
-
- é»ä½
- 10
- 50
- false
-
-
-
- å å车æ¢è¡
-
-
- false
-
-
-
-
-
- MCU
-
-
-
-
- BT
-
-
-
-
- 0
- 0
- 911
- 281
-
-
-
-
- é»ä½
- 10
- 50
- false
-
-
-
- QTabWidget::West
-
-
- QTabWidget::Triangular
-
-
- 2
-
-
- Qt::ElideNone
-
-
- false
-
-
-
- é信令æµè¯
-
-
-
-
- 20
- 140
- 831
- 111
-
-
-
- BLE
-
-
-
-
- 20
- 20
- 761
- 25
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- BLE TX
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
- ON
-
-
- -
-
- OFF
-
-
-
-
- -
-
-
-
-
-
- Channel(0-39)
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
- 10101010
-
-
- -
-
- PRBS9
-
-
- -
-
- 11110000
-
-
-
-
- -
-
-
- Length(0-255)
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Qt::DefaultContextMenu
-
-
-
-
- BLE 1M
-
-
- -
-
- BLE 2M
-
-
-
-
-
-
-
-
-
- 20
- 69
- 461
- 26
-
-
-
-
- 3
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
- ON
-
-
- -
-
- OFF
-
-
-
-
- -
-
-
- Channel(0-39)
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Qt::DefaultContextMenu
-
-
-
-
- BLE 1M
-
-
- -
-
- BLE 2M
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- BLE RX
-
-
-
-
-
-
-
-
-
- 20
- 10
- 831
- 121
-
-
-
- BR EDR
-
-
-
-
- 20
- 20
- 761
- 81
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
- ON
-
-
- -
-
- OFF
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
- 10101010
-
-
- -
-
- PRBS9
-
-
- -
-
- 11110000
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Qt::DefaultContextMenu
-
-
-
-
- DH1
-
-
- -
-
- DH3
-
-
- -
-
- DH5
-
-
- -
-
- 2-DH1
-
-
- -
-
- 2-DH3
-
-
- -
-
- 2-DH5
-
-
- -
-
- 3-DH1
-
-
- -
-
- 3-DH3
-
-
- -
-
- 3-DH5
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
- Channel(0-78)
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
- 10101010
-
-
- -
-
- PRBS9
-
-
- -
-
- 11110000
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- BR RX
-
-
-
- -
-
-
- Length(0-27)
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- 0
-
-
-
-
- ON
-
-
- -
-
- OFF
-
-
-
-
- -
-
-
- Length(0-27)
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- BR TX
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Qt::DefaultContextMenu
-
-
-
-
- DH1
-
-
- -
-
- DH3
-
-
- -
-
- DH5
-
-
- -
-
- 2-DH1
-
-
- -
-
- 2-DH3
-
-
- -
-
- 2-DH5
-
-
- -
-
- 3-DH1
-
-
- -
-
- 3-DH3
-
-
- -
-
- 3-DH5
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
- Channel(0-78)
-
-
-
-
-
-
-
-
-
- 信令æµè¯
-
-
-
-
- 20
- 10
- 831
- 111
-
-
-
- 信令
-
-
-
-
- 20
- 30
- 371
- 29
-
-
-
-
- 3
-
-
- 3
-
-
- 3
-
-
- 3
-
- -
-
-
-
- 0
- 0
-
-
-
- BTDUTMODE
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- 信令æµè¯ï¼
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
- ON
-
-
- -
-
- OFF
-
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 30
- 20
-
-
-
-
-
-
-
-
-
-
- å
¶ä»
-
-
-
-
- 20
- 20
- 791
- 121
-
-
-
- å鳿µè¯ä¸åçè°æ´
-
-
-
-
- 30
- 40
- 731
- 25
-
-
-
-
- 10
-
- -
-
-
- channel(0-78)
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- åçè°æ´
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- å鳿µè¯
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
- ON
-
-
- -
-
- OFF
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
- ON
-
-
- -
-
- OFF
-
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
- power chip(2-14)
-
-
-
-
-
-
-
-
-
- 20
- 140
- 791
- 111
-
-
-
- BT_UART
-
-
-
-
- 30
- 40
- 75
- 23
-
-
-
- å¤é
-
-
-
-
-
- 150
- 40
- 75
- 23
-
-
-
- ç¡ç
-
-
-
-
-
-
-
-
-
-
-
-
- 650
- 0
- 224
- 389
-
-
-
-
- 5
-
-
- 20
-
-
- 5
-
-
- 20
-
-
- 20
-
- -
-
-
-
- 0
- 0
-
-
-
-
- é»ä½
- 9
- 50
- false
-
-
-
- ArrowCursor
-
-
- false
-
-
- 115200
-
-
- 6
-
-
- true
-
-
-
-
- 4800
-
-
- -
-
- 9600
-
-
- -
-
- 14400
-
-
- -
-
- 19200
-
-
- -
-
- 38400
-
-
- -
-
- 57600
-
-
- -
-
- 115200
-
-
- -
-
- 128000
-
-
- -
-
- 230400
-
-
- -
-
- 256000
-
-
- -
-
- 460800
-
-
- -
-
- 500000
-
-
- -
-
- 512000
-
-
- -
-
- 600000
-
-
- -
-
- 750000
-
-
- -
-
- 921600
-
-
- -
-
- 1000000
-
-
- -
-
- 1500000
-
-
- -
-
- 2000000
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- é»ä½
- 9
- 50
- false
-
-
-
-
-
-
- MACå°å
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- 䏲壿ä½
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- é»ä½
- 9
- 50
- false
-
-
-
- RTS
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- é»ä½
- 9
- 50
- false
-
-
-
- ä¿åçªå£
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- é»ä½
- 9
- 50
- false
-
-
-
- DTR
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- é»ä½
- 9
- 50
- false
-
-
-
- 16è¿å¶æ¾ç¤º
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- é»ä½
- 9
- 50
- false
-
-
-
- æå¼ä¸²å£
-
-
- true
-
-
- false
-
-
- false
-
-
- false
-
-
-
- -
-
-
- false
-
-
-
- 0
- 0
-
-
-
-
- é»ä½
- 9
- 50
- false
-
-
-
- è¿æ¥è®¾å¤
-
-
- false
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- é»ä½
- 9
- 50
- false
-
-
-
- 16è¿å¶åé
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- é»ä½
- 9
- 50
- false
-
-
-
-
-
- COM1
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- é»ä½
- 9
- 50
- false
-
-
-
- æ¸
餿¥æ¶
-
-
-
- -
-
-
-
- 20
- 20
-
-
-
- QPushButton{background-color: rgb(255, 0, 0);}
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
- true
-
-
-
-
- true
-
-
- true
-
-
- æ´æº
-
-
-
- é»ä½
- 12
-
-
-
-
-
- true
-
-
- false
-
-
- åæ¿
-
-
-
- 12
-
-
-
-
-
- dongleè°è¯
-
-
-
- 12
-
-
-
-
-
-
- MyComboBox
- QComboBox
-
-
- mouse_clicked(bool)
-
-
-
- MyLineEdit
- QLineEdit
-
-
-
-
-
-
- pbtn_open_uart
- clicked()
- MainWindow
- uart_process()
-
-
- 849
- 154
-
-
- 838
- 261
-
-
-
-
- pbtn_clear_display
- clicked()
- txtb_dispaly
- clear()
-
-
- 849
- 293
-
-
- 614
- 380
-
-
-
-
- ckbox_dtr
- stateChanged(int)
- MainWindow
- uart_check_dtr_rts()
-
-
- 815
- 334
-
-
- 882
- 371
-
-
-
-
- ckbox_rts
- stateChanged(int)
- MainWindow
- uart_check_dtr_rts()
-
-
- 711
- 334
-
-
- 758
- 373
-
-
-
-
- cbox_uart_com_select
- mouse_clicked(bool)
- MainWindow
- uart_com_select()
-
-
- 719
- 61
-
-
- 888
- 100
-
-
-
-
- pbtn_spp_connect
- clicked()
- MainWindow
- spp_connect()
-
-
- 811
- 245
-
-
- 888
- 267
-
-
-
-
- pbtn_toboard_stop
- clicked()
- MainWindow
- transmit_toboard_stop()
-
-
- 810
- 559
-
-
- 739
- 294
-
-
-
-
- pbtn_toboard_Upload
- clicked()
- MainWindow
- transmit_toboard_upload()
-
-
- 715
- 559
-
-
- 665
- 296
-
-
-
-
- pbtn_fromboard_getfilelist
- clicked()
- MainWindow
- transmit_fromboard_getfilelist()
-
-
- 670
- 609
-
-
- 654
- 408
-
-
-
-
- pbtn_send_data
- clicked()
- MainWindow
- uart_send_data()
-
-
- 844
- 469
-
-
- 865
- 411
-
-
-
-
- pbtn_fromboard_download
- clicked()
- MainWindow
- transmit_fromboard_download()
-
-
- 830
- 489
-
-
- 849
- 420
-
-
-
-
- pbtn_fromboard_selectfilepath
- clicked()
- MainWindow
- transmit_fromboard_selectfilepath()
-
-
- 665
- 489
-
-
- 673
- 417
-
-
-
-
- pbtn_clear_senddata
- clicked()
- tedit_input_data
- clear()
-
-
- 866
- 522
-
-
- 700
- 591
-
-
-
-
- pbtn_fromboard_stop
- clicked()
- MainWindow
- transmit_fromboard_stop()
-
-
- 855
- 605
-
-
- 676
- 315
-
-
-
-
- pbtn_fromboard_delete
- clicked()
- MainWindow
- transmit_fromboard_delete()
-
-
- 855
- 547
-
-
- 671
- 351
-
-
-
-
- ledit_formboad_bordpath
- textEdited(QString)
- MainWindow
- transmit_fromboard_name_change()
-
-
- 499
- 566
-
-
- 688
- 273
-
-
-
-
- pbtn_toboard_choosefile
- clicked()
- MainWindow
- transmit_toboard_choosefile()
-
-
- 736
- 499
-
-
- 660
- 343
-
-
-
-
- action_complete
- triggered(bool)
- MainWindow
- ui_tab_mainwindow_complete()
-
-
- -1
- -1
-
-
- 468
- 363
-
-
-
-
- action_board
- triggered(bool)
- MainWindow
- ui_tab_mainwindow_board()
-
-
- -1
- -1
-
-
- 539
- 363
-
-
-
-
- pbtn_board
- clicked()
- tedit_input_data_board
- clear()
-
-
- 822
- 522
-
-
- 767
- 568
-
-
-
-
- pbtn_send_data_board
- clicked()
- MainWindow
- uart_send_data()
-
-
- 842
- 469
-
-
- 888
- 484
-
-
-
-
- pbtn_at_mediaaudiorecord
- clicked()
- MainWindow
- at_mediaaudiorecord_send()
-
-
- 646
- 535
-
-
- 643
- 285
-
-
-
-
- pbtn_at_stackinfo
- clicked()
- MainWindow
- at_stackinfo_send()
-
-
- 160
- 485
-
-
- 654
- 412
-
-
-
-
- pbtn_at_fsrm
- clicked()
- MainWindow
- at_fsrm_send()
-
-
- 428
- 544
-
-
- 655
- 254
-
-
-
-
- pbtn_at_mediamusicstop
- clicked()
- MainWindow
- at_mediamusicstop_send()
-
-
- 646
- 485
-
-
- 656
- 381
-
-
-
-
- pbtn_at_mediamusicplay
- clicked()
- MainWindow
- at_mediamusicplay_send()
-
-
- 545
- 485
-
-
- 654
- 330
-
-
-
-
- pbtn_br_tx_complete
- clicked()
- MainWindow
- at_bt_tx_complete()
-
-
- 156
- 481
-
-
- 636
- 372
-
-
-
-
- pbtn_br_rx_complete
- clicked()
- MainWindow
- at_bt_rx_complete()
-
-
- 156
- 519
-
-
- 637
- 335
-
-
-
-
- pbtn_ble_tx_complete
- clicked()
- MainWindow
- at_ble_tx_complete()
-
-
- 149
- 603
-
-
- 639
- 361
-
-
-
-
- pbtn_ble_rx_complete
- clicked()
- MainWindow
- at_ble_rx_complete()
-
-
- 141
- 652
-
-
- 444
- 354
-
-
-
-
- pbtn_br_tx_board
- clicked()
- MainWindow
- at_bt_tx_board()
-
-
- 156
- 481
-
-
- 639
- 325
-
-
-
-
- pbtn_br_rx_board
- clicked()
- MainWindow
- at_bt_rx_board()
-
-
- 156
- 519
-
-
- 646
- 169
-
-
-
-
- pbtn_btdutmode_board
- clicked()
- MainWindow
- at_bt_dutmode_board()
-
-
- 265
- 484
-
-
- 646
- 210
-
-
-
-
- pbtn_ble_tx_board
- clicked()
- MainWindow
- at_ble_tx_board()
-
-
- 139
- 581
-
-
- 633
- 248
-
-
-
-
- pbtn_ble_rx_board
- clicked()
- MainWindow
- at_ble_rx_board()
-
-
- 139
- 630
-
-
- 643
- 204
-
-
-
-
- pbtn_get_rx_count
- clicked()
- MainWindow
- at_get_rx_count_complete()
-
-
- 674
- 652
-
-
- 647
- 134
-
-
-
-
- pbtn_delay_time
- clicked()
- MainWindow
- at_bt_delay_ms_complete()
-
-
- 134
- 492
-
-
- 637
- 161
-
-
-
-
- pbtn_donglemac
- clicked()
- MainWindow
- at_set_dongle_addr_complete()
-
-
- 581
- 492
-
-
- 653
- 126
-
-
-
-
- cbox_uart_com_select
- activated(QString)
- MainWindow
- uart_com_switch(QString)
-
-
- 702
- 55
-
-
- 764
- 76
-
-
-
-
- cbox_uart_baud_select
- activated(QString)
- MainWindow
- uart_baud_switch(QString)
-
-
- 712
- 103
-
-
- 744
- 133
-
-
-
-
- cbox_br_tx_PacketType_complete
- activated(int)
- MainWindow
- at_check_bt_len(int)
-
-
- 514
- 479
-
-
- 649
- 73
-
-
-
-
- cbox_br_rx_PacketType_complete
- activated(int)
- MainWindow
- at_check_bt_len(int)
-
-
- 514
- 517
-
-
- 647
- 55
-
-
-
-
- cbox_br_tx_PacketType_board
- activated(int)
- MainWindow
- at_check_bt_len(int)
-
-
- 514
- 479
-
-
- 639
- 116
-
-
-
-
- cbox_br_rx_PacketType_board
- activated(int)
- MainWindow
- at_check_bt_len(int)
-
-
- 514
- 517
-
-
- 638
- 85
-
-
-
-
- pushButton
- clicked()
- MainWindow
- ui_save_windows()
-
-
- 702
- 285
-
-
- 647
- 236
-
-
-
-
- pbtn_btlo_board
- clicked()
- MainWindow
- at_bt_btlo_board()
-
-
- 144
- 502
-
-
- 642
- 200
-
-
-
-
- pbtn_btpwr_board
- clicked()
- MainWindow
- at_bt_btpwr_board()
-
-
- 589
- 502
-
-
- 684
- 304
-
-
-
-
- pbtn_at_custom_send
- clicked()
- MainWindow
- at_custom_send()
-
-
- 169
- 602
-
-
- 661
- 190
-
-
-
-
- pushButton_3
- clicked()
- MainWindow
- at_bt_wakeup()
-
-
- 122
- 615
-
-
- 957
- 601
-
-
-
-
- pushButton_4
- clicked()
- MainWindow
- at_bt_sleep()
-
-
- 244
- 615
-
-
- 970
- 548
-
-
-
-
-
- transmit_toboard_choosefile()
- uart_send_data()
- uart_process()
- check_word_wrap()
- check_hex_display()
- at_stackinfo_send()
- uart_check_dtr_rts()
- uart_com_select()
- transmit_fromboard_selectfilepath()
- transmit_fromboard_getfilelist()
- transmit_fromboard_download()
- transmit_toboard_upload()
- transmit_toboard_stop()
- transmit_fromboard_delete()
- transmit_fromboard_stop()
- spp_connect()
- transmit_fromboard_name_change()
- at_fsrm_send()
- at_mediamusicplay_send()
- at_mediamusicstop_send()
- at_mediaaudiorecord_send()
- ui_tab_mainwindow_complete()
- ui_tab_mainwindow_board()
- at_bt_tx_complete()
- at_bt_rx_complete()
- at_ble_tx_complete()
- at_ble_rx_complete()
- at_bt_rx_board()
- at_bt_tx_board()
- at_ble_tx_board()
- at_ble_rx_board()
- at_bt_dutmode_board()
- at_bt_delay_ms_complete()
- at_set_dongle_addr_complete()
- at_get_rx_count_complete()
- uart_com_switch(QString)
- uart_baud_switch(QString)
- at_check_bt_len(int)
- ui_save_windows()
- at_bt_btlo_board()
- at_bt_btpwr_board()
- at_custom_send()
- at_bt_wakeup()
- at_bt_sleep()
-
-
+
+
+ MainWindow
+
+
+
+ 0
+ 0
+ 1309
+ 641
+
+
+
+
+ 10
+
+
+
+ MainWindow
+
+
+
+
+
+ 10
+ 30
+ 231
+ 31
+
+
+
+
+
+
+ 260
+ 20
+ 741
+ 401
+
+
+
+
+
+
+ 260
+ 460
+ 741
+ 71
+
+
+
+
+
+
+ 10
+ 90
+ 101
+ 51
+
+
+
+ æå¼ä¸²å£
+
+
+
+
+
+ 120
+ 90
+ 101
+ 51
+
+
+
+ æ¸
ç©ºæ°æ®
+
+
+
+
+
+ 930
+ 540
+ 75
+ 23
+
+
+
+ åé
+
+
+
+
+
+ 1010
+ 30
+ 21
+ 16
+
+
+
+ Verï¼
+
+
+
+
+
+ 1050
+ 30
+ 181
+ 20
+
+
+
+
+
+
+ 1010
+ 60
+ 31
+ 20
+
+
+
+ IMEI:
+
+
+
+
+
+ 1050
+ 60
+ 181
+ 20
+
+
+
+
+
+
+ 1010
+ 90
+ 41
+ 20
+
+
+
+ ICCID
+
+
+
+
+
+ 1050
+ 90
+ 181
+ 20
+
+
+
+
+
+
+ 1050
+ 120
+ 251
+ 20
+
+
+
+
+
+
+ 1010
+ 120
+ 41
+ 21
+
+
+
+ Modem:
+
+
+
+
+
+ 10
+ 160
+ 101
+ 51
+
+
+
+ å¼å§äº§æµ
+
+
+
+
+
+ 120
+ 160
+ 101
+ 51
+
+
+
+ QPushButton {
+background-color: #FF9800;
+color: white;
+border-radius: 4px;
+font-weight: bold;
+}
+QPushButton:hover {
+background-color: #F57C00;
+}
+
+
+ æå¼è®°å½
+
+
+
+
+
+ 10
+ 220
+ 101
+ 51
+
+
+
+ QPushButton {
+background-color: #9C27B0;
+color: white;
+border-radius: 4px;
+font-weight: bold;
+}
+QPushButton:hover {
+background-color: #7B1FA2;
+}
+
+
+ èåæµè¯
+
+
+
+
+
+ 1010
+ 180
+ 61
+ 20
+
+
+
+ ææ°VER:
+
+
+
+
+
+ 1070
+ 180
+ 231
+ 20
+
+
+
+
+
+
+ 1010
+ 210
+ 81
+ 20
+
+
+
+ ææ°MODEM:
+
+
+
+
+
+ 1090
+ 210
+ 231
+ 20
+
+
+
+
+
+
+ 1020
+ 280
+ 281
+ 271
+
+
+
+ 产æµç¶æ
+
+
+
+
+ 10
+ 25
+ 60
+ 20
+
+
+
+ LCDæµè¯:
+
+
+
+
+
+ 80
+ 25
+ 20
+ 20
+
+
+
+ color: #888888; font-size: 18px; font-weight: bold;
+
+
+ â
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 110
+ 25
+ 60
+ 20
+
+
+
+ color: #888888;
+
+
+ æªæµè¯
+
+
+
+
+
+ 10
+ 55
+ 60
+ 20
+
+
+
+ 马达æµè¯:
+
+
+
+
+
+ 80
+ 55
+ 20
+ 20
+
+
+
+ color: #888888; font-size: 18px; font-weight: bold;
+
+
+ â
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 110
+ 55
+ 60
+ 20
+
+
+
+ color: #888888;
+
+
+ æªæµè¯
+
+
+
+
+
+ 10
+ 85
+ 60
+ 20
+
+
+
+ æé®æµè¯:
+
+
+
+
+
+ 80
+ 85
+ 20
+ 20
+
+
+
+ color: #888888; font-size: 18px; font-weight: bold;
+
+
+ â
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 110
+ 85
+ 60
+ 20
+
+
+
+ color: #888888;
+
+
+ æªæµè¯
+
+
+
+
+
+ 10
+ 115
+ 60
+ 20
+
+
+
+ å½é³æµè¯:
+
+
+
+
+
+ 80
+ 115
+ 20
+ 20
+
+
+
+ color: #888888; font-size: 18px; font-weight: bold;
+
+
+ â
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 110
+ 115
+ 60
+ 20
+
+
+
+ color: #888888;
+
+
+ æªæµè¯
+
+
+
+
+
+ 10
+ 145
+ 60
+ 20
+
+
+
+ çµæ± æµè¯:
+
+
+
+
+
+ 80
+ 145
+ 20
+ 20
+
+
+
+ color: #888888; font-size: 18px; font-weight: bold;
+
+
+ â
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 110
+ 145
+ 60
+ 20
+
+
+
+ color: #888888;
+
+
+ æªæµè¯
+
+
+
+
+
+ 10
+ 175
+ 60
+ 20
+
+
+
+ G-sensor:
+
+
+
+
+
+ 80
+ 175
+ 20
+ 20
+
+
+
+ color: #888888; font-size: 18px; font-weight: bold;
+
+
+ â
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 110
+ 175
+ 60
+ 20
+
+
+
+ color: #888888;
+
+
+ æªæµè¯
+
+
+
+
+
+ 10
+ 205
+ 60
+ 20
+
+
+
+ 4Gæµè¯:
+
+
+
+
+
+ 80
+ 205
+ 20
+ 20
+
+
+
+ color: #888888; font-size: 18px; font-weight: bold;
+
+
+ â
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 110
+ 205
+ 60
+ 20
+
+
+
+ color: #888888;
+
+
+ æªæµè¯
+
+
+
+
+
+ 10
+ 235
+ 60
+ 20
+
+
+
+ æ´ä½ç¶æ:
+
+
+
+
+
+ 80
+ 235
+ 20
+ 20
+
+
+
+ color: #888888; font-size: 18px; font-weight: bold;
+
+
+ â
+
+
+ Qt::AlignCenter
+
+
+
+
+
+ 110
+ 235
+ 80
+ 20
+
+
+
+ color: #888888;
+
+
+ çå¾
å¼å§
+
+
+
+
+
+
+ 120
+ 220
+ 101
+ 51
+
+
+
+ QPushButton {
+background-color: #9C27B0;
+color: white;
+border-radius: 4px;
+font-weight: bold;
+}
+QPushButton:hover {
+background-color: #7B1FA2;
+}
+
+
+ æ¢å¤åºå
+
+
+
+
+
+ 10
+ 280
+ 101
+ 51
+
+
+
+ èåç»æ
+
+
+
+
+
+ 1050
+ 150
+ 251
+ 20
+
+
+
+
+
+
+
+
+
+ 1010
+ 150
+ 41
+ 21
+
+
+
+ PYVER
+
+
+
+
+
+ 1010
+ 240
+ 81
+ 20
+
+
+
+ ææ°PY:
+
+
+
+
+
+ 1090
+ 240
+ 231
+ 20
+
+
+
+
+
+
+
+
+
+
diff --git a/mythread.cpp b/mythread.cpp
deleted file mode 100644
index 6d0a5db..0000000
--- a/mythread.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-#include "mythread.h"
-
-MyThread::MyThread()
-{
- stopped = false;
- pauseFlag = false;
-}
-
-MyThread::~MyThread()
-{
-}
-
-void MyThread::process()
-{
-}
-
-void MyThread::run()
-{
- while (true) {
- QMutexLocker locker(&m_lock_stop);
- if (stopped) {
- stopped = false;
- qDebug() << "线ç¨ç»æ¢";
- return;
- }
- if (pauseFlag) {
- m_lock_Pause.lock();
- condition.wait(&m_lock_Pause);
- m_lock_Pause.unlock();
- }
- process();
- }
- stopped = false;
- pauseFlag = false;
-}
-
-void MyThread::pause()
-{
- if (this->isRunning() && !pauseFlag) {
- pauseFlag = true;
- }
-}
-
-void MyThread::resume()
-{
- if (this->isRunning() && pauseFlag) {
- pauseFlag = false;
- condition.wakeAll();
- }
-}
-
-void MyThread::stop()
-{
- if (this->isRunning()) {
- if (pauseFlag) {
- this->resume();
- }
- QMutexLocker locker(&m_lock_stop);
- stopped = true;
- }
-}
diff --git a/mythread.h b/mythread.h
deleted file mode 100644
index 72164a8..0000000
--- a/mythread.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef MYTHREAD_H
-#define MYTHREAD_H
-#include
-#include
-#include
-#include
-#include
-#include
-#include
- /*-----------------------rxåè°å½æ°çº¿ç¨-------------------------------*/
- // å½åè°å½æ°æ§è¡æ¶ï¼ä¼å¤éæ¤çº¿ç¨ã æ ¹æ®åè°å½æ°è¿å弿§è¡å¯¹åºå½æ°ã
-class MyThread : public QThread
-{
- public:
- explicit MyThread();
- ~MyThread();
- void stop();
-
- protected:
- void run() override final;
- virtual void process();
- public slots:
- void pause();
- void resume();
-
- private:
- QMutex m_lock_stop;
- volatile bool stopped;
- QMutex m_lock_Pause;
- std::atomic pauseFlag;
- QWaitCondition condition;
-};
-#endif // MYTHREAD_H
diff --git a/readme.txt b/readme.txt
deleted file mode 100644
index 096c091..0000000
--- a/readme.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-main.cpp示ä¾å¦ä¸
-________________________________________________________________________________________________________________________________________
-#include
-#include "interface.h"
-#include "info.h"
-#include "windows.h"
-#include "Library_global.h"
-using namespace std;
-
-class MyInfo : public uapi::Info
-{
-public:
- MyInfo(){};
- ~MyInfo(){};
- void onReadEvent(int eventType, void *data) override
- {
- cout<<"eventType = "<InfoEventConnect(&info);
- handle->SetCurrentMode(uapi::MODE_BLUETOOTH);
-
-// 串å£é
ç½®
- char *com = "COM11";
- handle->SerialPortOpen(com, 921600);
-
-// è®¾ç½®ä¸ºæ´æºæ®µ
- handle->SetCurrentMode(uapi::MODE_BLUETOOTH);
-
-// åéSTACKINFOå½ä»¤
- handle->AtMessageSend(8,0x0d,NULL,0);
-
-// è·åæä»¶å表
- char ls_tx[] = "/user/";
- handle->FileGetList(ls_tx, strlen(ls_tx));
-
- char board_delete_path[] = "/user/test.mp3";
- handle->FileDelete(board_delete_path, strlen(board_delete_path));
-
-// ä¸ä¼ æä»¶
- Sleep(1000);
- char local_path[] = "C:/Users/y30032013/Desktop/music.mp3";
- char board_path[] = "/user/music.mp3";
- handle->FileUpload(board_path, local_path);
- Sleep(3000);
- handle->FileTransmitStop();
-
-// ä¸è½½æä»¶
- Sleep(1000);
- handle->FileGetList(ls_tx, strlen(ls_tx));
- Sleep(3000);
- char name[] = "/user/music.mp3";
- char pc_path[] = "C:/Users/y30032013/Desktop/bin/";
- handle->FileDownload(name, pc_path);
-
- while (1) {
- Sleep(100);
- }
-}
-________________________________________________________________________________________________________________________________________
diff --git a/release/LeiNiaoFactoryTool.exe b/release/LeiNiaoFactoryTool.exe
new file mode 100644
index 0000000..f08aa2e
Binary files /dev/null and b/release/LeiNiaoFactoryTool.exe differ
diff --git a/release/at_data.obj b/release/at_data.obj
deleted file mode 100644
index 1329fb2..0000000
Binary files a/release/at_data.obj and /dev/null differ
diff --git a/release/custom.obj b/release/custom.obj
deleted file mode 100644
index 64b0a6b..0000000
Binary files a/release/custom.obj and /dev/null differ
diff --git a/release/factory_tool.exe b/release/factory_tool.exe
deleted file mode 100644
index efac356..0000000
Binary files a/release/factory_tool.exe and /dev/null differ
diff --git a/release/main.obj b/release/main.obj
deleted file mode 100644
index 7961d78..0000000
Binary files a/release/main.obj and /dev/null differ
diff --git a/release/mainwindow.obj b/release/mainwindow.obj
deleted file mode 100644
index b0b1b11..0000000
Binary files a/release/mainwindow.obj and /dev/null differ
diff --git a/release/moc_custom.obj b/release/moc_custom.obj
deleted file mode 100644
index 39b4657..0000000
Binary files a/release/moc_custom.obj and /dev/null differ
diff --git a/release/moc_mainwindow.obj b/release/moc_mainwindow.obj
deleted file mode 100644
index 7e546a7..0000000
Binary files a/release/moc_mainwindow.obj and /dev/null differ
diff --git a/release/mythread.obj b/release/mythread.obj
deleted file mode 100644
index c14deb3..0000000
Binary files a/release/mythread.obj and /dev/null differ
diff --git a/release/result_thread.obj b/release/result_thread.obj
deleted file mode 100644
index 1c15396..0000000
Binary files a/release/result_thread.obj and /dev/null differ
diff --git a/release/wrtm_class.obj b/release/wrtm_class.obj
deleted file mode 100644
index c6011e2..0000000
Binary files a/release/wrtm_class.obj and /dev/null differ
diff --git "a/release/\344\272\247\346\265\213\350\256\260\345\275\225/\344\272\247\346\265\213\350\256\260\345\275\225.csv" "b/release/\344\272\247\346\265\213\350\256\260\345\275\225/\344\272\247\346\265\213\350\256\260\345\275\225.csv"
new file mode 100644
index 0000000..4e782e2
--- /dev/null
+++ "b/release/\344\272\247\346\265\213\350\256\260\345\275\225/\344\272\247\346\265\213\350\256\260\345\275\225.csv"
@@ -0,0 +1,7 @@
+å¼å§æ¶é´,ç»ææ¶é´,æµè¯èæ¶,è½¯ä»¶çæ¬,IMEI,ICCID,Modemçæ¬,LCDæµè¯,马达æµè¯,æé®æµè¯,å½é³æµè¯,çµæ± æµè¯,G-sensoræµè¯,4Gæµè¯,æ´ä½ç»æ
+2025-10-23 11:27:51,2025-10-23 12:09:27,41å35ç§,V1.0.0_20251023_110314,860132064650112,898604B7192590313291,EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_TEST0725,éè¿,éè¿,éè¿,éè¿,失败,éè¿,失败,æªéè¿
+2025-10-21 17:28:03,2025-10-21 17:28:57,0å54ç§,V1.1.0_20251021_142617,866827070011340,89860441192590308567,N706A-H111-STD-BZ_CN2X_HTTPS-000_T1013,éè¿,éè¿,éè¿,éè¿,éè¿,éè¿,éè¿,éè¿
+2025-10-24 19:10:59,2025-10-24 19:12:09,1å9ç§,V1.0.0_20251024_185411,860132063148589,89860441192590308570,EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_TEST0725,éè¿,éè¿,éè¿,éè¿,éè¿,éè¿,éè¿,éè¿
+2025-11-03 14:14:22,2025-11-03 14:15:39,1å16ç§,V1.0.1_20251103_113708,860132064627870,898604B7192590313369,EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_TEST0725,éè¿,éè¿,éè¿,éè¿,失败,éè¿,éè¿,æªéè¿
+2025-11-05 16:43:42,2025-11-05 16:44:22,0å40ç§,V1.0.2_20251105_144822,860132064638570,898604B7192590313374,EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_TEST0725,PY_SRV_V25,éè¿,éè¿,éè¿,éè¿,失败,éè¿,éè¿
+2025-11-10 12:10:40,2025-11-10 12:11:37,0å56ç§,V1.1.2_20251030_135758,866827070012918,898604e4192590355316,N706A-H111-STD-BZ_CN2X_HTTPS-000_T1013,æªè·å,éè¿,éè¿,éè¿,éè¿,éè¿,éè¿,éè¿
diff --git "a/release/\344\272\247\346\265\213\350\256\260\345\275\225/\350\200\201\345\214\226\350\256\260\345\275\225/\350\200\201\345\214\226_20251105_094030.csv" "b/release/\344\272\247\346\265\213\350\256\260\345\275\225/\350\200\201\345\214\226\350\256\260\345\275\225/\350\200\201\345\214\226_20251105_094030.csv"
new file mode 100644
index 0000000..6614706
--- /dev/null
+++ "b/release/\344\272\247\346\265\213\350\256\260\345\275\225/\350\200\201\345\214\226\350\256\260\345\275\225/\350\200\201\345\214\226_20251105_094030.csv"
@@ -0,0 +1 @@
+åºÂå·,æÂ¶é´,çµ池æµÂè¯Â,G-sensoræµÂè¯Â,4GæµÂè¯Â
diff --git "a/release/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271.zip" "b/release/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271.zip"
new file mode 100644
index 0000000..b08eb3e
Binary files /dev/null and "b/release/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271.zip" differ
diff --git "a/release/\351\233\267\351\270\237\344\272\247\346\265\213\345\267\245\345\205\267.zip" "b/release/\351\233\267\351\270\237\344\272\247\346\265\213\345\267\245\345\205\267.zip"
new file mode 100644
index 0000000..32e7238
Binary files /dev/null and "b/release/\351\233\267\351\270\237\344\272\247\346\265\213\345\267\245\345\205\267.zip" differ
diff --git "a/release/\351\233\267\351\270\237\344\272\247\346\265\213\345\267\245\345\205\267/LeiNiaoFactoryTool.exe" "b/release/\351\233\267\351\270\237\344\272\247\346\265\213\345\267\245\345\205\267/LeiNiaoFactoryTool.exe"
new file mode 100644
index 0000000..d1adc2c
Binary files /dev/null and "b/release/\351\233\267\351\270\237\344\272\247\346\265\213\345\267\245\345\205\267/LeiNiaoFactoryTool.exe" differ
diff --git a/result_thread.cpp b/result_thread.cpp
deleted file mode 100644
index 57db951..0000000
--- a/result_thread.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-#include "result_thread.h"
-
-struct result_info g_result_info={0,NULL,0,NULL,false,NONE_DATA,0,NULL};
-QMutex g_result_thread_mlock;
-QWaitCondition g_result_thread_condition;
-
-
-
-Result_Thread::Result_Thread(QObject *parent)
-{
- obj=parent;
-}
-
-Result_Thread::~Result_Thread()
-{
-}
-
-// ç» UI 线ç¨åéæ¶æ¯
-void Result_Thread::process()
-{
- g_result_thread_mlock.lock();
- g_result_thread_condition.wait(&g_result_thread_mlock, MLOCK_TIMEOUT);
- switch (g_result_info.result_thread_flag) {
- case UART_RX_DATA:
- 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 æ§½å½æ°
- g_result_info.result_thread_flag = NONE_DATA;
- break;
- case LS_RESULT_DATA:
- 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));
- g_result_info.result_thread_flag = NONE_DATA;
- break;
- case TRANSMIT_FILE_DATA:
- QMetaObject::invokeMethod(obj, "transmit_rx_display",Q_ARG(bool, g_result_info.transmit_result_flag));
- g_result_info.transmit_result_flag = false;
- g_result_info.result_thread_flag = NONE_DATA;
- break;
- case AT_RESULT_DATA:
- QMetaObject::invokeMethod(obj, "at_rx_display",Q_ARG(int, g_result_info.at_result_len),Q_ARG(u8Piont,g_result_info.at_result_buf));
- g_result_info.result_thread_flag = NONE_DATA;
- break;
- default:
- break;
- }
- g_result_thread_mlock.unlock();
-}
-
-uint32_t uart_callback(void *buf, uint32_t buf_len)
-{
- g_result_info.uart_rx_buf_len = (int)buf_len;
- // rxçæ°æ®ä¸å
å«\0,æä»¥å¤åé
1åèã
- g_result_info.uart_rx_buf=(uint8_t *)malloc(buf_len);
- memset(g_result_info.uart_rx_buf,0,buf_len);
- memcpy_s(g_result_info.uart_rx_buf, buf_len, (uint8_t *)buf, buf_len);
- g_result_info.result_thread_flag = UART_RX_DATA;
- g_result_thread_mlock.lock();
- g_result_thread_condition.wakeAll();
- g_result_thread_mlock.unlock();
- return 0;
-}
-
-uint32_t ls_callback(uint32_t size, uapi_ls_info_t *buff)
-{
- g_result_info.transmit_ls_buff = (uapi_ls_info_t *)malloc(size * sizeof(uapi_ls_info_t)+1);
- 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));
- g_result_info.transmit_ls_size = static_cast(size);
- g_result_info.result_thread_flag = LS_RESULT_DATA;
- g_result_thread_mlock.lock();
- g_result_thread_condition.wakeAll();
- g_result_thread_mlock.unlock();
- return 0;
-}
-
-uint32_t transmit_callback(bool is_finished, uintptr_t usr_data)
-{
- g_result_info.transmit_result_flag = is_finished;
- Q_UNUSED(usr_data);
- g_result_info.result_thread_flag = TRANSMIT_FILE_DATA;
- g_result_thread_mlock.lock();
- g_result_thread_condition.wakeAll();
- g_result_thread_mlock.unlock();
- return 0;
-}
-
-uint32_t at_callback(void *buf, uint32_t len)
-{
- uint8_t * at_buff = (uint8_t *)malloc(len);
- memcpy_s(at_buff, len , buf, len);
- g_result_info.at_result_buf = (uint8_t *)at_buff;
- g_result_info.at_result_len = len;
- g_result_info.result_thread_flag = AT_RESULT_DATA;
- g_result_thread_mlock.lock();
- g_result_thread_condition.wakeAll();
- g_result_thread_mlock.unlock();
- return 0;
-}
-void transmit_get_data_count(uint32_t *total_size, uint32_t *current_size)
-{
- uapi_transmit_progress transmint_data_count;
- uapi_transmit_process(&transmint_data_count);
- *total_size=transmint_data_count.total_size;
- *current_size=transmint_data_count.transmited_size;
-}
diff --git a/result_thread.h b/result_thread.h
deleted file mode 100644
index acb41a5..0000000
--- a/result_thread.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef RESULT_THREAD_H
-#define RESULT_THREAD_H
-#include "mythread.h"
-#include "common.h"
-#include
-#include
-#include
-#include
-#include
-
-#define BUF_SIZE 4096
-#define MLOCK_TIMEOUT 2000
-enum get_data_flag
-{
- NONE_DATA = -1,
- UART_RX_DATA = 0,
- LS_RESULT_DATA,
- TRANSMIT_FILE_DATA,
- AT_RESULT_DATA,
-};
-
-struct result_info{
- // uartæ¶å°çæ°æ®
- int uart_rx_buf_len;
- uint8_t *uart_rx_buf;
-
- // lsæ°æ®å¤§å°åå
容
- int transmit_ls_size;
- uapi_ls_info_t *transmit_ls_buff;
-
- // ä¼ è¾æä»¶æ¯å¦æå
- bool transmit_result_flag;
-
- // å½ååè°å½æ°æ è®°
- int result_thread_flag;
-
- // atè°ç¨è¿å
- int at_result_len;
- uint8_t *at_result_buf;
-};
-
-class Result_Thread : public MyThread
-{
-public:
- Result_Thread(QObject *parent = 0);
- ~Result_Thread();
-protected:
- void process() override final;
-private:
- QObject *obj;
-};
-
-uint32_t uart_callback(void *buf, uint32_t buf_len);
-uint32_t ls_callback(uint32_t size, uapi_ls_info_t *buff);
-uint32_t transmit_callback(bool is_finished, uintptr_t usr_data);
-uint32_t at_callback(void *buf, uint32_t len);
-void transmit_get_data_count(uint32_t *total_size, uint32_t *current_size);
-#endif // RESULT_THREAD_H
diff --git a/untitled_zh_CN.ts b/untitled_zh_CN.ts
deleted file mode 100644
index 806770f..0000000
--- a/untitled_zh_CN.ts
+++ /dev/null
@@ -1,844 +0,0 @@
-
-
-
-
- MainWindow
-
-
- æå¼ä¸²å£
-
-
-
-
- ATå½ä»¤
-
-
-
-
-
-
- åé
-
-
-
-
-
-
- Debug
-
-
-
-
-
- æ¸
é¤åé
-
-
-
-
- From Board
- From Boad
-
-
-
-
- File Storage
-
-
-
-
-
- Local File Path:
-
-
-
-
- Factory_Tools
-
-
-
-
- To Board
-
-
-
-
- Upload File
-
-
-
-
- Board File Path:
-
-
-
-
- Choose File
-
-
-
-
- ....
-
-
-
-
- File Selector
-
-
-
-
- File Path:
-
-
-
-
- Get file List
-
-
-
-
- File Name:
-
-
-
-
- Download
-
-
-
-
- Delete
-
-
-
-
- Stop
-
-
-
-
-
- MCU
-
-
-
-
-
-
-
- å¾
å¼å
-
-
-
-
- FSRM
-
-
-
-
- module id
-
-
-
-
- cmd id
-
-
-
-
- payload
-
-
-
-
- MEDIA
-
-
-
-
- Media
-
-
-
-
- Music Play
-
-
-
-
- Music Stop
-
-
-
-
- Audio Record
-
-
-
-
-
- BT
-
-
-
-
-
-
-
- Channel(0-78)
-
-
-
-
-
-
-
- Channel(0-39)
-
-
-
-
-
- Length(0-255)
-
-
-
-
- BTDUTMODE
-
-
-
-
- 信令æµè¯ï¼
-
-
-
-
- å
¶ä»
-
-
-
-
- å鳿µè¯ä¸åçè°æ´
-
-
-
-
- channel(0-78)
-
-
-
-
- åçè°æ´
-
-
-
-
- å鳿µè¯
-
-
-
-
- power chip(2-14)
-
-
-
-
- BT_UART
-
-
-
-
- å¤é
-
-
-
-
- ç¡ç
-
-
-
-
- dongleè°è¯
-
-
-
-
-
-
-
-
-
-
- OFF
-
-
-
-
- è¦åæµè¯è®¾ç½®
-
-
-
-
- å»¶æ¶æ¶é´
-
-
-
-
- ms
-
-
-
-
- DongleMAC
-
-
-
-
- è¦åæµè¯
-
-
-
-
-
- BR EDR
-
-
-
-
-
-
-
- 2-DH5
-
-
-
-
-
-
-
- Length(0-27)
- Length
-
-
-
-
-
-
-
- DH1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ON
-
-
-
-
-
- BR TX
-
-
-
-
-
-
-
-
-
- 10101010
-
-
-
-
-
-
-
-
-
- PRBS9
-
-
-
-
-
-
-
-
-
- 11110000
-
-
-
-
-
-
-
- DH3
-
-
-
-
-
-
-
- DH5
-
-
-
-
-
-
-
- 2-DH1
-
-
-
-
-
-
-
- 2-DH3
-
-
-
-
-
-
-
- 3-DH1
-
-
-
-
-
-
-
- 3-DH3
-
-
-
-
-
-
-
- 3-DH5
-
-
-
-
-
- BR RX
-
-
-
-
-
- BLE
-
-
-
-
-
- BLE TX
-
-
-
-
-
-
-
- BLE 1M
-
-
-
-
-
-
-
- BLE 2M
-
-
-
-
-
- BLE RX
-
-
-
-
- é信令æµè¯
-
-
-
-
- 信令æµè¯
-
-
-
-
- èå
-
-
-
-
- åæ¿
-
-
-
-
- æ´æº
-
-
-
-
- 4800
-
-
-
-
- 9600
-
-
-
-
- 14400
-
-
-
-
- 19200
-
-
-
-
- 38400
-
-
-
-
- 57600
-
-
-
-
-
- 115200
-
-
-
-
- è·åRX Count
-
-
-
-
- 信令
-
-
-
-
- 128000
-
-
-
-
- 230400
-
-
-
-
- 256000
-
-
-
-
- 460800
-
-
-
-
- 500000
-
-
-
-
- 512000
-
-
-
-
- 600000
-
-
-
-
- 750000
-
-
-
-
- 921600
-
-
-
-
- 1000000
-
-
-
-
- 1500000
-
-
-
-
- 2000000
-
-
-
-
- è¿æ¥è®¾å¤
-
-
-
-
- MACå°å
-
-
-
-
-
- å å车æ¢è¡
-
-
-
-
-
- Upload
-
-
-
-
- stop
-
-
-
-
- StackInfo
-
-
-
-
- PushButton
-
-
-
-
- 䏲壿ä½
-
-
-
-
- æ¸
餿¥æ¶
-
-
-
-
- ä¿åçªå£
-
-
-
-
- 16è¿å¶æ¾ç¤º
-
-
-
-
- 16è¿å¶åé
-
-
-
-
- RTS
-
-
-
-
- DTR
-
-
-
-
- COM1
-
-
-
-
- 串å£
-
-
-
-
- æå¼ä¸²å£å¤±è´¥ï¼
-
-
-
-
- 注å表
-
-
-
-
- æ æ³æå¼æ³¨å表ï¼
-
-
-
-
- ls fail!
-
-
-
-
-
- æä»¶å¤§å°ä¸º0ï¼
-
-
-
-
- æä»¶ä¸è½½å¯å¨å¤±è´¥!
-
-
-
-
-
-
-
-
- AT
-
-
-
-
- AT send fail!
-
-
-
-
-
- ls
-
-
-
-
-
-
-
-
-
-
-
- File Path
- File
-
-
-
-
-
-
-
-
-
- æä»¶è·¯å¾ä¸ºç©º!
-
-
-
-
-
- Board File Name
-
-
-
-
- Downloade
-
-
-
-
- delete
-
-
-
-
- delete file fail!
-
-
-
-
-
- æä»¶è·¯å¾ä¸ºç©ºï¼
-
-
-
-
- æä»¶ä¸ä¼ å¯å¨å¤±è´¥!
-
-
-
-
-
- MACå°å为空!
-
-
-
-
-
-
-
- lengthé误!
-
-
-
-
-
-
-
-
- æä½é误
-
-
-
-
-
-
-
-
- åºå
å
³éå°é¢æµè¯é¡¹!
-
-
-
-
- è¯·éæ©æ£ç¡®çæä»¶ï¼
-
-
-
-
- QObject
-
-
- HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
-
-
-
-
diff --git a/wrtm_class.cpp b/wrtm_class.cpp
deleted file mode 100644
index 2f23908..0000000
--- a/wrtm_class.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-#include "header.h"
-
-#include "interface.h"
-#include "info.h"
-#include "windows.h"
-#include "Library_global.h"
-#include "qdebug.h"
-using namespace std;
-
-static uart_rx_function g_uart_rx_callback=NULL;
-static at_result_callback g_at_result_callback=NULL;
-static transmit_ls_result g_ls_result_callback=NULL;
-static transmit_result_hook g_result_hook_callback=NULL;
-
-
-class MyInfo : public uapi::Info
-{
-public:
- MyInfo(){};
- ~MyInfo(){};
- void onReadEvent(int eventType, void *data) override
- {
- uapi::SerialPortReceiveData *precvdata = NULL;
- uapi::TransmitResult *ptransResult = NULL;
- uapi::FileListResult *flistResult = NULL;
- uapi::AtReceiveData *atrecvdata = NULL;
-
- switch(eventType)
- {
- case uapi::INFO_SERIALPORT:
- precvdata=(uapi::SerialPortReceiveData*)data;
- qDebug()<<"INFO_SERIALPORT "<< precvdata->data;
- if(g_uart_rx_callback)
- g_uart_rx_callback(precvdata->data,precvdata->dataLength);
- break;
- case uapi::INFO_FILE_TRANSMIT_RESULT:
- ptransResult = (uapi::TransmitResult*)data;
- qDebug()<<"INFO_FILE_TRANSMIT_RESULT "<< ptransResult->finishResult;
- if(g_result_hook_callback)
- g_result_hook_callback(ptransResult->finishResult,NULL);
- break;
- case uapi::INFO_FILE_LIST_RESULT:
- flistResult=(uapi::FileListResult*)data;
- qDebug()<<"INFO_FILE_LIST_RESULT "<< flistResult->lsInfo->name;
- if(g_ls_result_callback)
- g_ls_result_callback(flistResult->lsInfoNumber,(uapi_ls_info_t *)flistResult->lsInfo);
- break;
- case uapi::INFO_AT_RECEIVE:
- atrecvdata=(uapi::AtReceiveData*)data;
- qDebug()<<"INFO_AT_RECEIVE "<< atrecvdata->data;
- if(g_at_result_callback)
- g_at_result_callback(atrecvdata->data,atrecvdata->dataLength);
- break;
- }
-
- }
-};
-static MyInfo info;
-static Interface *handle= new Interface();
-uapi_errcode uapi_uart_set_currentMode(int mode)
-{
- if (mode == 0)
- handle->SetCurrentMode(uapi::MODE_SERIALPORT);
- else
- handle->SetCurrentMode(uapi::MODE_BLUETOOTH);
- return SUCC;
-}
-uapi_errcode uapi_uart_open(const char *com, uint32_t baud) // æå¼uartå£ï¼ com æ ¼å¼ä¸º "\\\\.\\COM47"ï¼ baud 为波ç¹ç
-{
- handle->InfoEventConnect(&info);
- handle->SetCurrentMode(uapi::MODE_SERIALPORT);
- int ret= handle->SerialPortOpen(com,baud);
- if (ret == 0)
- return SUCC;
- else
- return FAIL;
-}
-uapi_errcode uapi_uart_tx_data(void *buf, uint32_t buf_len) // uart TX åéæ°æ®buf
-{
- qDebug()<<"tx:"<SerialPortWrite((unsigned char *)buf,buf_len);
- return SUCC;
-}
-uapi_errcode uapi_uart_set_rts_dtr(int rts_flag, int dtr_flag) // uart 设置rtsådtrå¼å
³
-{
-// handle->SetCurrentMode(uapi::MODE_SERIALPORT);
- handle->SerialPortSetRtsDtr(rts_flag,dtr_flag);
- return SUCC;
-}
-uapi_errcode uapi_uart_callback_register(uart_rx_function callback) // uart 注ååè°å½æ°
-{
- g_uart_rx_callback = callback;
- return SUCC;
-}
-uapi_errcode uapi_uart_close(void)// å
³éuartå£
-{
-
- handle->SerialPortClose();
- return SUCC;
-}
-
-uapi_errcode uapi_at_send(uint8_t module_id, uint8_t cmd_id, uint8_t *pkt, uint32_t pkt_size, at_result_callback callback) // atå½ä»¤å鿥å£ï¼module_idåcmd_id请åèãSparta 产线 æµè¯æåã10.2ç«
-{
- g_at_result_callback = callback;
-
- handle->AtMessageSend(module_id,cmd_id,pkt,pkt_size);
-
- return SUCC;
-}
-
-uapi_errcode uapi_file_download(char* board_file_path, char* local_file_path, transmit_result_hook handler) // æä»¶ä¸è½½æ¥å£ï¼åæ°åå«ä¸ºæ¿ç«¯æä»¶å°åï¼è¯¦ç»å°æä»¶åç¼ï¼ï¼pc端åå¨è·¯å¾ï¼è¯¦ç»å°æä»¶å¤¹ï¼ï¼ä¼ è¾ç»æåè°å½æ°
-{
- g_result_hook_callback = handler;
- handle->FileDownload(board_file_path,local_file_path);
- return SUCC;
-}
-
-uapi_errcode uapi_file_upload(char* board_file_path,char* local_file_path, transmit_result_hook handler)// æä»¶ä¸ä¼ æ¥å£ï¼åæ°åå«ä¸ºæ¿ç«¯æä»¶å°åï¼è¯¦ç»å°æä»¶åç¼ï¼ï¼pc端åå¨è·¯å¾ï¼è¯¦ç»å°æä»¶åç¼ï¼ï¼ä¼ è¾ç»æåè°å½æ°
-{
- g_result_hook_callback = handler;
- handle->FileUpload(board_file_path,local_file_path);
- return SUCC;
-}
-
-uapi_errcode uapi_ls_send(char *path, uint32_t path_len, transmit_ls_result callback)// æ¥è¯¢æä»¶å表æ¥å£ï¼åæ°ä¸ºæ¿ç«¯æä»¶è·¯å¾ï¼è¯¦ç»å°æä»¶å¤¹ï¼ï¼è·¯å¾é¿åº¦ï¼get liståè°å½æ°
-{
- g_ls_result_callback = callback;
- qDebug()<<"uapi_ls_send "<FileGetList(path,path_len);
-
- return SUCC;
-}
-
-uapi_errcode uapi_file_delete(char *board_file_path, uint32_t board_file_path_len) // å 餿宿件æ¥å£ï¼åæ°ä¸ºæ¿ç«¯æä»¶å°åï¼è¯¦ç»å°æä»¶åç¼ï¼ï¼æä»¶è·¯å¾é¿åº¦
-{
- handle->FileDelete(board_file_path,board_file_path_len);
- return SUCC;
-}
-
-uapi_errcode uapi_file_transmit_stop(void)// 忢æä»¶ä¸è½½æ¥å£
-{
- handle->FileTransmitStop();
- return SUCC;
-}
-
-uapi_errcode uapi_transmit_process(uapi_transmit_progress *data) // è·åæä»¶ä¼ è¾è¿åº¦ï¼å
¥å data æ´æ°ä¸ºæ£å¨ä¼ è¾çæä»¶çæ»å¤§å°åå·²ä¼ è¾å¤§å°
-{
- handle->FileTransmitProgress((uapi::FileTransmitDataCount*)data);
- return SUCC;
-}