修改产测二维码内容适配256字节
authorCaisking <Casiking@zhihuishixun.com>
Thu, 21 Aug 2025 04:03:37 +0000 (12:03 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Thu, 21 Aug 2025 04:03:37 +0000 (12:03 +0800)
code/sdk/zhihui/UI/producttest/include/testQRCode.h
code/sdk/zhihui/UI/producttest/src/testQRCode.cpp
code/sdk/zhihui/UI/producttest/src/testView.cpp

index a8f82ac..b6a5dba 100644 (file)
@@ -35,10 +35,19 @@ namespace OHOS
 
     private:
         UIScrollView *testQRCodeScrollView{nullptr};
+        UILabel *Title{nullptr};
+        UIQrcode *QRCodeView{nullptr};
+        UILabelButtonExt *labelButton_next{nullptr};
         bool initViewStatus{false};
-        UILabel *Title{nullptr};           // 标题
-        UIQrcode *QRCodeView{nullptr};     // 二维码视图
-        UILabelButtonExt *labelButton_next{nullptr}; // 退出按钮
+
+        // 内容生成相关函数
+        std::string GenerateProductInfo();           // 生成产品信息
+        std::string GenerateTestTimeInfo();          // 生成测试时间信息
+        std::string GenerateDeviceInfo();            // 生成设备信息
+        std::string GenerateTestSummary();           // 生成测试结果汇总
+        std::string GetProductModelString();         // 获取产品型号字符串
+        std::string GetBluetoothAddress();           // 获取蓝牙地址
+        std::string GetFirmwareVersion();            // 获取固件版本
     };
 }
 
index c78687f..3254437 100644 (file)
@@ -163,168 +163,204 @@ namespace OHOS
     {
         std::string content;
         
-        // 1. 产品型号(从ConfigModel获取)
-        content += "产品型号: ";
+        // 压缩版本:只保留最核心信息,确保在256字符以内
+        
+        // 1. 产品型号
+        content += GenerateProductInfo();
+        
+        // 2. 测试时间
+        content += GenerateTestTimeInfo();
+           
+        // 3. 核心设备信息
+        content += GenerateDeviceInfo();
+        
+        // 4. 测试结果
+        content += GenerateTestSummary();
+    
+        
+      
+        // 调试:打印内容长度
+        printf("=== 二维码内容长度检查 ===\n");
+        printf("内容长度: %zu 字符\n", content.length());
+        printf("内容预览:\n%s\n", content.c_str());
+        printf("=== 内容长度检查结束 ===\n");
+        
+        return content;
+    }
 
+    // 生成产品信息
+    std::string testQRCodeView::GenerateProductInfo()
+    {
+        std::string content = "产品: ";
+        content += GetProductModelString();
+        content += "\n";
+        return content;
+    }
+
+    // 获取产品型号字符串
+    std::string testQRCodeView::GetProductModelString()
+    {
         #ifdef FD230
-        content += "FD230";
+        return "FD230";
         #elif defined(BOARD_N9)
-        content += "N9";
+        return "N9";
         #elif defined(BOARD_W9)
-        content += "W9";
+        return "W9";
         #else
-        content += "Unknown";
+        return "Unknown";
         #endif
-         
-        content += "\n";
+    }
+
+    // 生成测试时间信息
+    std::string testQRCodeView::GenerateTestTimeInfo()
+    {
+        std::string content;
         
-        // 2. 测试开始时间
-        content += "测试开始时间: ";
+        // 测试开始时间
+        content += "开始: ";
         if (testModel::GetInstance()) {
             content += testModel::GetInstance()->GetStartTime();
             if (content.back() == '\n') {
                 content.pop_back(); // 移除多余的换行符
             }
         } else {
-            content += "获取失败";
+            content += "fail";
         }
         content += "\n";
         
-        // 2.1 测试结束时间(如果有的话)
+        // 测试结束时间(如果有的话)
         if (testModel::GetInstance() && !testModel::GetInstance()->GetEndTime().empty()) {
-            content += "测试结束时间: ";
+            content += "结束: ";
             content += testModel::GetInstance()->GetEndTime();
             content += "\n";
         } else if (testModel::GetInstance()) {
             // 检查是否所有测试都完成了
             if (testModel::GetInstance()->IsAllTestsCompleted()) {
-                content += "测试结束时间: ";
+                content += "结束: ";
                 content += testModel::GetInstance()->GetEndTime();
                 content += "\n";
             }
         }
         
-        // 3. 蓝牙地址
-        content += "蓝牙地址: ";
-        uint8_t btaddr[6] = {0};
-        uint8_t btaddr_str[64] = {0};
-        uint32_t len = 6;
-        errcode_t ret = uapi_get_nv_btaddr((uint8_t *)btaddr, &len);
-        if (ret == ERRCODE_SUCC) {
-            sprintf((char *)btaddr_str, "%02X:%02X:%02X:%02X:%02X:%02X", 
-                    btaddr[0], btaddr[1], btaddr[2], btaddr[3], btaddr[4], btaddr[5]);
-            content += (char *)btaddr_str;
-        } else {
-            content += "获取失败";
-        }
+        return content;
+    }
+
+    // 生成设备信息
+    std::string testQRCodeView::GenerateDeviceInfo()
+    {
+        std::string content;
+        
+        // 蓝牙地址
+        content += "BT: ";
+        content += GetBluetoothAddress();
         content += "\n";
         
-        // 4. IMEI号
+        // IMEI号
         content += "IMEI: ";
         if (ConfigModel::GetInstance()) {
             content += ConfigModel::GetInstance()->Getimei();
         } else {
-            content += "获取失败";
+            content += "fail";
         }
         content += "\n";
         
-        // 5. 固件版本号
-        content += "固件版本: ";
-        char version_buf[128] = {0};
-        uint32_t version_len = 128;
-        if (uapi_get_buildversion((uint8_t *)version_buf, version_len) == ERRCODE_SUCC) {
-            content += version_buf;
-        } else {
-            content += "获取失败";
-        }
+        // 固件版本号
+        content += "VER: ";
+        content += GetFirmwareVersion();
         content += "\n";
         
-        // 6. Model版本(4G模块版本)
-        content += "4G模块版本: ";
+        // Model版本(4G模块版本)
+        content += "4GMODEL: ";
         if (ConfigModel::GetInstance()) {
             content += ConfigModel::GetInstance()->GetmoderVer();
         } else {
-            content += "获取失败";
+            content += "fail";
         }
         content += "\n";
         
-        // 7. Python版本
-        content += "Python版本: ";
+        // Python版本
+        content += "Python: ";
         if (ConfigModel::GetInstance()) {
             content += ConfigModel::GetInstance()->GetpyVer();
         } else {
-            content += "获取失败";
+            content += "fail";
         }
         content += "\n";
         
-        // 8. 测试统计信息
-        content += "\n=== 测试统计 ===\n";
+        return content;
+    }
+
+    // 获取蓝牙地址
+    std::string testQRCodeView::GetBluetoothAddress()
+    {
+        uint8_t btaddr[6] = {0};
+        uint8_t btaddr_str[64] = {0};
+        uint32_t len = 6;
+        errcode_t ret = uapi_get_nv_btaddr((uint8_t *)btaddr, &len);
+        if (ret == ERRCODE_SUCC) {
+            sprintf((char *)btaddr_str, "%02X:%02X:%02X:%02X:%02X:%02X", 
+                    btaddr[0], btaddr[1], btaddr[2], btaddr[3], btaddr[4], btaddr[5]);
+            return (char *)btaddr_str;
+        } else {
+            return "fail";
+        }
+    }
+
+    // 获取固件版本
+    std::string testQRCodeView::GetFirmwareVersion()
+    {
+        char version_buf[128] = {0};
+        uint32_t version_len = 128;
+        if (uapi_get_buildversion((uint8_t *)version_buf, version_len) == ERRCODE_SUCC) {
+            return version_buf;
+        } else {
+            return "fail";
+        }
+    }
+
+    // 生成测试结果汇总
+    std::string testQRCodeView::GenerateTestSummary()
+    {
+        std::string content;
+        
         if (testModel::GetInstance()) {
-            // 统计成功、失败、未测试的项数
-            int success_count = 0, failed_count = 0, none_count = 0;
+            int successCount = 0, failCount = 0, notTestCount = 0;
+            std::string failedIds, notTestIds;
+            
+            // 统计结果并收集ID
             for (int i = 0; i < MAX_TEST_ITEM; i++) {
                 test_status_enum status = testModel::GetInstance()->GetResult(i);
                 switch (status) {
-                    case TEST_STATUS_SUCCESS:
-                        success_count++;
+                    case TEST_STATUS_SUCCESS: 
+                        successCount++; 
                         break;
-                    case TEST_STATUS_ERROR:
-                        failed_count++;
+                    case TEST_STATUS_ERROR: 
+                        failCount++; 
+                        if (!failedIds.empty()) failedIds += ",";
+                        failedIds += std::to_string(i);
                         break;
-                    case TEST_STATUS_NONE:
-                        none_count++;
+                    case TEST_STATUS_NONE: 
+                        notTestCount++; 
+                        if (!notTestIds.empty()) notTestIds += ",";
+                        notTestIds += std::to_string(i);
                         break;
                 }
             }
-            content += "成功: " + std::to_string(success_count) + "项\n";
-            content += "失败: " + std::to_string(failed_count) + "项\n";
-            content += "未测试: " + std::to_string(none_count) + "项\n";
-            content += "总计: " + std::to_string(MAX_TEST_ITEM) + "项\n";
-        }
-        
-        // 9. 产测结果汇总
-        content += "产测结果汇总:\n";
-        if (testModel::GetInstance()) {
-            int successCount = 0;
-            int failCount = 0;
-            int notTestCount = 0;
-            std::string failedItems;
-            std::string notTestItems;
             
-            // 遍历所有测试项,统计结果
-            for (int i = 0; i < MAX_TEST_ITEM; i++) {
-                test_status_enum status = testModel::GetInstance()->GetResult(i);
-                std::string itemName = testModel::GetInstance()->GetTestItemDescription(i);
-                
-                if (status == TEST_STATUS_SUCCESS) {
-                    successCount++;
-                } else if (status == TEST_STATUS_ERROR) {
-                    failCount++;
-                    if (!failedItems.empty()) failedItems += ", ";
-                    failedItems += itemName;
-                } else if (status == TEST_STATUS_NONE) {
-                    notTestCount++;
-                    if (!notTestItems.empty()) notTestItems += ", ";
-                    notTestItems += itemName;
-                }
-            }
+            // 显示统计信息
+            content += "成功:" + std::to_string(successCount) + "\n";
+            content += "失败:" + std::to_string(failCount) + "\n";
+            content += "未测:" + std::to_string(notTestCount) + "\n";
             
-            content += "成功项数: " + std::to_string(successCount) + "\n";
-            content += "失败项数: " + std::to_string(failCount) + "\n";
-            content += "未测试项数: " + std::to_string(notTestCount) + "\n";
-            content += "总计: " + std::to_string(MAX_TEST_ITEM) + "\n";
-            
-            // 显示具体的失败项
+            // 显示失败项的ID列表
             if (failCount > 0) {
-                content += "失败项: " + failedItems + "\n";
+                content += "失败项:" + failedIds + "\n";
             }
             
-            // 显示具体的未测试项
+            // 显示未测试项的ID列表
             if (notTestCount > 0) {
-                content += "未测试项: " + notTestItems + "\n";
+                content += "未测项:" + notTestIds + "\n";
             }
-        } else {
-            content += "获取产测结果失败\n";
         }
         
         return content;
index a18d488..39ec7ed 100644 (file)
@@ -366,8 +366,8 @@ namespace OHOS
             printf("设置后 oktestBtn->GetViewId() 地址 = %p\n", oktestBtn->GetViewId());\r
             printf("=== VIEWID DEBUG END ===\n");\r
             \r
-            UIView::OnClickListener *clickListener = static_cast<UIView::OnClickListener *>(testPresenter::GetInstance());\r
-            oktestBtn->SetOnClickListener(clickListener);\r
+            // UIView::OnClickListener *clickListener = static_cast<UIView::OnClickListener *>(testPresenter::GetInstance());\r
+            oktestBtn->SetOnClickListener(presenter_);\r
             scrollView->Add(oktestBtn);\r
         }\r
 \r
@@ -404,8 +404,8 @@ namespace OHOS
             printf("设置后 failtestBtn->GetViewId() 地址 = %p\n", failtestBtn->GetViewId());\r
             printf("=== VIEWID DEBUG FAIL BUTTON END ===\n");\r
             \r
-            UIView::OnClickListener *clickListener = static_cast<UIView::OnClickListener *>(testPresenter::GetInstance());\r
-            failtestBtn->SetOnClickListener(clickListener);\r
+            // UIView::OnClickListener *clickListener = static_cast<UIView::OnClickListener *>(testPresenter::GetInstance());\r
+            failtestBtn->SetOnClickListener(presenter_);\r
             scrollView->Add(failtestBtn);\r
         }\r
 \r