-#include "mainwindow.h"
+#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "config_manager.h"
#include <QMessageBox>
configManager.loadConfig();
// 初始化开机检测相关变量
bootDetected = false;
- factoryModeChecked = false;
versionInfoFetched = false;
// 初始化版本信息获取相关变量
versionCommandQueue.clear();
}
}
- // 产测模式检测(在检测到开机后执行)
- if (bootDetected && !factoryModeChecked && !isProductionTestRunning) {
- checkFactoryMode(line);
- }
-
// 产测已开始:等待开机完成关键字后再进入 PMADDVOTE(与空闲时的 checkBootDetection 使用同一关键字列表)
if (isProductionTestRunning && currentTestStep == TEST_WAIT_BOOT) {
tryAdvanceProductionAfterBootKeywords(line);
parseWstpPrintData(line);
}
- // 检测FACTORY TEST MODE状态(wstp_print格式)
- if (line.contains("FACTORY TEST MODE:", Qt::CaseInsensitive)) {
- qDebug() << "检测到FACTORY TEST MODE信息:" << line.trimmed();
- appendToLogFile(QString("检测到FACTORY TEST MODE信息: %1\n").arg(line.trimmed()));
-
- if (line.contains("FACTORY TEST MODE: ENABLED", Qt::CaseInsensitive)) {
- // 产测模式已开启
- ui->factoryModeLineEdit->setText("是");
- ui->factoryModeLineEdit->setStyleSheet("background-color: #ffcccc;"); // 红底
- qDebug() << "产测模式: 已开启";
- appendToLogFile(QString("=== 产测模式状态: 已开启 ===\n"));
-
- // 仅在非产测流程中自动拉版本;产测时串口可能出现该行,避免与当前测试 AT 并发(如 G-sensor)
- if (!isProductionTestRunning && !factoryModeChecked) {
- factoryModeChecked = true;
- QTimer::singleShot(1000, this, [this]() {
- if (!isProductionTestRunning && !versionInfoFetched) {
- startVersionInfoFetch();
- }
- });
- }
- } else if (line.contains("FACTORY TEST MODE: DISABLED", Qt::CaseInsensitive)) {
- // 产测模式已关闭
- ui->factoryModeLineEdit->setText("否");
- ui->factoryModeLineEdit->setStyleSheet("background-color: #ccffcc;"); // 绿底
- qDebug() << "产测模式: 已关闭";
- appendToLogFile(QString("=== 产测模式状态: 已关闭 ===\n"));
-
- if (!isProductionTestRunning && !factoryModeChecked) {
- factoryModeChecked = true;
- QTimer::singleShot(1000, this, [this]() {
- if (!isProductionTestRunning && !versionInfoFetched) {
- startVersionInfoFetch();
- }
- });
- }
- }
- }
-
- // 4G/PPP 相关解析已移除
-
// 检测工厂模式进入确认(用于产测;兼容 facotry/factory 拼写,大小写不敏感)
if (line.contains("enter or exit facotry mode", Qt::CaseInsensitive) ||
line.contains("enter or exit factory mode", Qt::CaseInsensitive)) {
// 重置开机检测状态
bootDetected = false;
- factoryModeChecked = false;
versionInfoFetched = false;
// 清空设备信息
audioTestAwaitingMicLevel = true;
+ // 仅使用音量数值(如 2.0)。若误填整句 AT^AUDIOTEST=7 2.0 或多余 AT^,与下方前缀拼接会变成 AT^AT^...,固件报 cannot find cmd handle
QString volumeStr = ui->audioVolumeLineEdit->text().trimmed();
- if (volumeStr.isEmpty()) volumeStr = "2.0";
+ if (volumeStr.isEmpty()) {
+ volumeStr = QStringLiteral("2.0");
+ } else {
+ while (volumeStr.startsWith(QLatin1String("AT^"), Qt::CaseInsensitive)) {
+ volumeStr = volumeStr.mid(3).trimmed();
+ }
+ volumeStr.remove(QRegExp("^AUDIOTEST\\s*=\\s*7\\s+", Qt::CaseInsensitive));
+ volumeStr = volumeStr.trimmed();
+ if (volumeStr.isEmpty()) {
+ volumeStr = QStringLiteral("2.0");
+ }
+ }
QTimer::singleShot(200, this, [this, volumeStr]() {
if (!isProductionTestRunning || currentTestStep != TEST_AUDIO || !serial || !serial->isOpen()) {
bootDetected = true;
- // 延迟1秒后自动发送产测模式检测指令(无论是否有日志,都要检测)
+ // 延迟1秒后自动拉版本信息(不再发 AT^FACTORY? / 解析 FACTORY TEST MODE)
QTimer::singleShot(1000, this, [this]() {
- if (!factoryModeChecked && serial->isOpen()) {
- QString cmd = configManager.getFactoryModeCheckCommand();
- if (!cmd.isEmpty()) {
- // 如果是查询指令,确保使用 ? 参数
- if (!cmd.contains("?") && !cmd.contains("=")) {
- cmd = cmd + "?";
- }
- serial->write((cmd + "\r\n").toUtf8());
- qDebug() << "检测到开机,自动发送产测模式检测指令:" << cmd;
- appendToLogFile(QString("=== 检测到开机,自动发送产测模式检测指令: %1 ===\n").arg(cmd));
- } else {
- qDebug() << "产测模式检测指令为空,跳过检测";
- appendToLogFile(QString("=== 产测模式检测指令为空,跳过检测 ===\n"));
- // 如果指令为空,直接标记为已检测,并开始获取版本信息
- factoryModeChecked = true;
- QTimer::singleShot(1000, this, [this]() {
- if (!versionInfoFetched) {
- startVersionInfoFetch();
- }
- });
- }
- } else {
- if (!serial->isOpen()) {
- qDebug() << "串口未打开,无法发送产测模式检测指令";
- } else {
- qDebug() << "产测模式已检测过,跳过发送检测指令";
- }
- }
- });
-
- break;
- }
- }
-}
-
-// 检测产测模式
-void MainWindow::checkFactoryMode(const QString& data)
-{
- if (factoryModeChecked) {
- return; // 已经检测过,不再重复检测
- }
-
- QStringList keywords = configManager.getFactoryModeKeywords();
- bool found = false;
- for (const QString& keyword : keywords) {
- if (data.contains(keyword, Qt::CaseInsensitive)) {
- qDebug() << "检测到产测模式关键字:" << keyword;
- appendToLogFile(QString("=== 检测到产测模式: %1 ===\n").arg(keyword));
-
- factoryModeChecked = true;
- found = true;
-
- // 解析产测模式状态并更新UI
- if (data.contains("FACTORY TEST MODE: ENABLED", Qt::CaseInsensitive)) {
- ui->factoryModeLineEdit->setText("是");
- ui->factoryModeLineEdit->setStyleSheet("background-color: #ffcccc;"); // 红底
- qDebug() << "产测模式: 已开启";
- } else if (data.contains("FACTORY TEST MODE: DISABLED", Qt::CaseInsensitive)) {
- ui->factoryModeLineEdit->setText("否");
- ui->factoryModeLineEdit->setStyleSheet("background-color: #ccffcc;"); // 绿底
- qDebug() << "产测模式: 已关闭";
- }
-
- // 延迟1秒后开始获取版本信息
- QTimer::singleShot(1000, this, [this]() {
- if (!versionInfoFetched) {
+ if (!isProductionTestRunning && serial->isOpen() && !versionInfoFetched) {
startVersionInfoFetch();
+ } else if (!serial->isOpen()) {
+ qDebug() << "串口未打开,跳过自动获取版本信息";
}
});
break;
}
}
-
- // 如果没有检测到产测模式关键字,但收到了产测模式检测指令的响应(可能是OK或ERROR)
- // 解析 AT^FACTORY 或 AT^FACTORY? 的响应
- if (!found) {
- // 检查是否是 AT^FACTORY 相关指令的响应
- // AT^FACTORY? 的响应可能是:+FACTORY: 1 或 +FACTORY: 0
- QRegExp factoryResponsePattern("\\+FACTORY:\\s*(\\d+)", Qt::CaseInsensitive);
- if (factoryResponsePattern.indexIn(data) != -1) {
- int factoryValue = factoryResponsePattern.cap(1).toInt();
- qDebug() << "解析到产测模式响应值:" << factoryValue;
- appendToLogFile(QString("=== 产测模式检测响应: %1 ===\n").arg(factoryValue));
-
- factoryModeChecked = true;
-
- // 更新UI
- if (factoryValue == 1) {
- ui->factoryModeLineEdit->setText("是");
- ui->factoryModeLineEdit->setStyleSheet("background-color: #ffcccc;"); // 红底
- qDebug() << "产测模式: 已开启 (响应值=1)";
- } else {
- ui->factoryModeLineEdit->setText("否");
- ui->factoryModeLineEdit->setStyleSheet("background-color: #ccffcc;"); // 绿底
- qDebug() << "产测模式: 已关闭 (响应值=0)";
- }
-
- // 延迟1秒后开始获取版本信息
- QTimer::singleShot(1000, this, [this]() {
- if (!versionInfoFetched) {
- startVersionInfoFetch();
- }
- });
- }
- // 如果响应是OK,可能是 AT^FACTORY 的确认响应(进入产测模式)
- else if (data.contains("OK", Qt::CaseInsensitive) &&
- (data.contains("FACTORY", Qt::CaseInsensitive) ||
- data.contains("AT^FACTORY", Qt::CaseInsensitive))) {
- qDebug() << "产测模式检测指令返回OK,认为已进入产测模式";
- appendToLogFile(QString("=== 产测模式检测指令返回OK,认为已进入产测模式 ===\n"));
-
- factoryModeChecked = true;
-
- // 更新UI(假设OK表示已开启)
- ui->factoryModeLineEdit->setText("是");
- ui->factoryModeLineEdit->setStyleSheet("background-color: #ffcccc;"); // 红底
-
- // 延迟1秒后开始获取版本信息
- QTimer::singleShot(1000, this, [this]() {
- if (!versionInfoFetched) {
- startVersionInfoFetch();
- }
- });
- }
- // 记录其他响应用于调试
- else if (data.contains("ERROR", Qt::CaseInsensitive) ||
- data.contains("+CME ERROR", Qt::CaseInsensitive) ||
- data.contains("OK", Qt::CaseInsensitive)) {
- qDebug() << "产测模式检测指令响应:" << data.trimmed();
- appendToLogFile(QString("产测模式检测指令响应: %1\n").arg(data.trimmed()));
- }
- }
}
// 开始获取版本信息