优化蓝牙产测GPS测试 2575/1
authorpenglei <1624952103@qq.com>
Tue, 21 Oct 2025 04:00:08 +0000 (12:00 +0800)
committerpenglei <1624952103@qq.com>
Tue, 21 Oct 2025 04:00:08 +0000 (12:00 +0800)
code/sdk/zhihui/services/factorytest_service/factorytest_protocol.c
code/sdk/zhihui/services/gnss/src/NMEA0183.c

index bf6c06b..8f6a71c 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com\r
  * @Date: 2024-06-17 14:31:08\r
  * @LastEditors: penglei 1624952103@qq.com\r
- * @LastEditTime: 2025-08-18 18:37:51\r
+ * @LastEditTime: 2025-10-21 11:11:55\r
  * @FilePath: /FD230/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c\r
  * @Description: \r
  * \r
 #include "gnss_ctl.h"\r
 #include "NMEA0183.h"\r
 static gps_data_t send_gps_data = {0};\r
+static osTimerId_t g_gps_test_timer = NULL;\r
+static uint8_t g_gps_test_flag = 0;\r
+static uint32_t g_gps_test_count = 0;\r
+static char *g_gps_tmp_buffer = NULL;\r
+static char *g_gps_time_buffer = NULL;\r
 #endif\r
 \r
 #ifdef ENABLE_BN02\r
@@ -213,6 +218,116 @@ void ble_acc_check_timer_callback(void)
             6);\r
 }\r
 \r
+#ifdef SUPPORT_GNSS\r
+void gps_test_timer_callback(void)\r
+{\r
+    if(g_gps_tmp_buffer == NULL)\r
+    {\r
+        g_gps_tmp_buffer = (char*)malloc(1024);\r
+        if(g_gps_tmp_buffer == NULL)\r
+        {\r
+            PRINT("GPS timer callback: malloc tmp buffer failed\n");\r
+            return;\r
+        }\r
+    }\r
+    \r
+    if(g_gps_time_buffer == NULL)\r
+    {\r
+        g_gps_time_buffer = (char*)malloc(10);\r
+        if(g_gps_time_buffer == NULL)\r
+        {\r
+            PRINT("GPS timer callback: malloc time buffer failed\n");\r
+            return;\r
+        }\r
+    }\r
+    \r
+    memset(g_gps_tmp_buffer, 0, 1024);\r
+    memset(g_gps_time_buffer, 0, 10);\r
+    \r
+    gps_data_t *gps_data = getPGPSGlobaldata();\r
+    if(gps_data == NULL)\r
+    {\r
+        PRINT("gps_data == NULL \n");\r
+\r
+        if(g_gps_test_timer != NULL)\r
+        {\r
+            osTimerStop(g_gps_test_timer);\r
+            osTimerDelete(g_gps_test_timer);\r
+            g_gps_test_timer = NULL;\r
+        }\r
+        gnss_stop();\r
+\r
+        if(g_gps_tmp_buffer != NULL)\r
+        {\r
+            free(g_gps_tmp_buffer);\r
+            g_gps_tmp_buffer = NULL;\r
+        }\r
+        if(g_gps_time_buffer != NULL)\r
+        {\r
+            free(g_gps_time_buffer);\r
+            g_gps_time_buffer = NULL;\r
+        }\r
+        return;\r
+    }\r
+\r
+    if (gps_data->last_gps_time_ms > 0)\r
+    {\r
+        memcpy_s(&send_gps_data, sizeof(gps_data_t), gps_data, sizeof(gps_data_t));\r
+    }\r
+    \r
+    g_gps_test_count++;\r
+    \r
+    memset_s(g_gps_tmp_buffer, 1024, 0, 1024);        \r
+    dump_location_data_to_factory(&send_gps_data, g_gps_tmp_buffer, 1024);\r
+    memset_s(g_gps_time_buffer, 10, 0, 10);  \r
+    sprintf_s(g_gps_time_buffer, 10, "%d", g_gps_test_count);\r
+    strcat_s(g_gps_tmp_buffer, 1024, g_gps_time_buffer);\r
+\r
+    if(g_gps_tmp_buffer != NULL)\r
+    {\r
+        uint16_t data_len = (uint16_t)strlen(g_gps_tmp_buffer);\r
+        factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
+            BLE_TEST_CMD_SOFT_TEST_SUB_MODE_GPS,\r
+            0x01,\r
+            (uint8_t*)g_gps_tmp_buffer,\r
+            data_len);\r
+    }\r
+    \r
+    if(send_gps_data.status > 1)\r
+    {\r
+        g_gps_test_flag = 1; \r
+    }\r
+    \r
+    if(g_gps_test_flag || g_gps_test_count >= 2 * 60)\r
+    {\r
+        if(g_gps_test_timer != NULL)\r
+        {\r
+            osTimerStop(g_gps_test_timer);\r
+            osTimerDelete(g_gps_test_timer);\r
+            g_gps_test_timer = NULL;\r
+        }\r
+        \r
+\r
+        gnss_stop();\r
+\r
+        g_gps_test_flag = 0;\r
+        g_gps_test_count = 0;\r
+        \r
+\r
+        if(g_gps_tmp_buffer != NULL)\r
+        {\r
+            free(g_gps_tmp_buffer);\r
+            g_gps_tmp_buffer = NULL;\r
+        }\r
+        if(g_gps_time_buffer != NULL)\r
+        {\r
+            free(g_gps_time_buffer);\r
+            g_gps_time_buffer = NULL;\r
+        }\r
+    }\r
+}\r
+#endif\r
+\r
 static uint8_t aging_start_flag = 0;\r
 \r
 void factorytest_start_aging_test(void)\r
@@ -2211,48 +2326,26 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
             if (testitem == 0x01)\r
             {\r
                 //定位\r
-                uint8_t send_data = 0;\r
-                bool flag = 0;\r
-                char tmp[1024]={0};\r
-                char time[10]={0};\r
 #ifdef SUPPORT_GNSS\r
+                g_gps_test_flag = 0;\r
+                g_gps_test_count = 0;\r
+                memset(&send_gps_data, 0, sizeof(gps_data_t));\r
+                \r
                 gnss_start();\r
                 LOS_Msleep(100);\r
-                do{\r
-                    gps_data_t *gps_data = getPGPSGlobaldata();\r
-                    if(gps_data == NULL)\r
-                    {\r
-                        PRINT("gps_data == NULL \n");\r
-                        return;\r
-                    }\r
-                    if (gps_data->last_gps_time_ms > 0)\r
-                    {\r
-                        memcpy_s(&send_gps_data,sizeof(gps_data_t),gps_data,sizeof(gps_data_t));\r
-                    }\r
-                    if(send_gps_data.status > 1)\r
-                    {\r
-                        flag = 1;\r
-                    }\r
-                    else\r
-                    {\r
-                        LOS_Msleep(1000);\r
-                        send_data++;\r
-                    }\r
-                    memset_s(tmp,sizeof(tmp),0,sizeof(tmp));        \r
-                    dump_location_data_to_factory(&send_gps_data,tmp,sizeof(tmp));\r
-                    memset_s(time,sizeof(time),0,sizeof(time));  \r
-                    sprintf_s(time,sizeof(time),"%d",send_data);\r
-                    strcat_s(tmp,sizeof(tmp),time);\r
-                    PRINT("send_gps_data.status : %d time : %d\n",send_gps_data.status,send_data);\r
-                    PRINT("tmp : %s size : %d\n",tmp,strlen(tmp));\r
-                    factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
-                        BLE_TEST_CMD_SOFT_TEST_SUB_MODE_GPS,\r
-                        0x01,\r
-                        (uint8_t*)tmp,\r
-                        strlen(tmp));\r
-                }while(send_data <= 2 * 60 && !flag);\r
-                // PRINT("定位超时 关闭GPS\n");\r
-                gnss_stop();\r
+                \r
+                if(g_gps_test_timer == NULL)\r
+                {\r
+                    g_gps_test_timer = osTimerNew((osTimerFunc_t)gps_test_timer_callback, osTimerPeriodic, NULL, NULL);\r
+                }\r
+                if(g_gps_test_timer != NULL)\r
+                {\r
+                    osTimerStart(g_gps_test_timer, 1000); // 1秒定时\r
+                }\r
+                else\r
+                {\r
+                    gnss_stop();\r
+                }\r
 #endif\r
 \r
             } else if(testitem == 0x02)\r
index bf27cbe..46bd78f 100644 (file)
@@ -1277,7 +1277,7 @@ void dump_location_data_to_factory(gps_data_t *locationdata,char* buf,int max_bu
        if (locationdata->starcountN>0)\r
        {\r
                memset_s(tmpbuf,DUMP_BUF_SIZE,0,DUMP_BUF_SIZE);\r
-               sprintf_s(tmpbuf,DUMP_BUF_SIZE,";N,%d",\r
+               sprintf_s(tmpbuf,DUMP_BUF_SIZE,"N,%d",\r
                locationdata->starcountN);\r
                strcat_s(buf,max_buflen,tmpbuf);\r
                for(int i=0;i<5;i++)\r