修复ble_adv_Timer_CallBack 3327/1 3327/head 3328/target/1 3329/target/1
authorxue <2144439972@qq.com>
Thu, 2 Apr 2026 08:03:42 +0000 (16:03 +0800)
committerxue <2144439972@qq.com>
Thu, 2 Apr 2026 08:03:42 +0000 (16:03 +0800)
code/sdk/zhihui/services/ble_service/bleservice/bleService.c

index f40e9df..dbbb969 100644 (file)
@@ -431,15 +431,28 @@ static void svr_ble_adv_data_set(int adv_id)
     return;\r
 }\r
 \r
+/* gap_ble_stop_adv is asynchronous; set_adv_param/start_adv return STATE_ERR if stack not idle yet */\r
+static void ble_adv_wait_stopped_evt(uint32_t timeout_ms)\r
+{\r
+    uint32_t waited = 0;\r
+    const uint32_t step = 25U;\r
+\r
+    while (get_ble_adv_status() != 0 && waited < timeout_ms) {\r
+        osDelay((int32_t)step);\r
+        waited += step;\r
+    }\r
+}\r
 \r
 void svr_ble_adv_factory_test_start_param(void)\r
 {\r
     errcode_t ret = 0;\r
     int adv_id = BLE_ADV_ID;\r
     if (ble_adv_falg == 1) { //已经开始广播了,不需要重复开启广播\r
-        ret=gap_ble_stop_adv(adv_id);\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv need restart , gap_ble_stop_adv ret %x\n",ret);\r
-        osDelay(50);\r
+        ret = gap_ble_stop_adv(adv_id);\r
+        if (ret != ERRCODE_BT_SUCCESS) {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "factory ble adv: gap_ble_stop_adv ret 0x%x", ret);\r
+        }\r
+        ble_adv_wait_stopped_evt(800U);\r
     }\r
 \r
     gap_ble_adv_params_t adv_para;\r
@@ -463,8 +476,7 @@ void svr_ble_adv_factory_test_start_param(void)
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_adv_start bt gap_ble_start_adv2  ret = 0x%x", ret);\r
 }\r
 \r
-\r
-static int8_t ble_adv_init_falg=200;\r
+static uint16_t ble_adv_init_falg = 200;\r
 \r
 static osTimerId_t ble_adv_timer=NULL;\r
 \r
@@ -481,9 +493,11 @@ static void  ble_adv_Timer_CallBack(int data)
         errcode_t ret = 0;\r
         if(get_ble_adv_status())\r
         {\r
-            ret=gap_ble_stop_adv(adv_id);\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv need restart , gap_ble_stop_adv ret %x\n",ret);\r
-            osDelay(50);\r
+            ret = gap_ble_stop_adv(adv_id);\r
+            if (ret != ERRCODE_BT_SUCCESS) {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv restart: gap_ble_stop_adv ret 0x%x", ret);\r
+            }\r
+            ble_adv_wait_stopped_evt(800U);\r
 \r
             if(!uapi_dev_runtime_get_factory_test_status_flag())\r
             {\r
@@ -495,21 +509,25 @@ static void  ble_adv_Timer_CallBack(int data)
                 adv_para.channel_map = 0x7;\r
                 adv_para.duration = 0;\r
 \r
-                ret=gap_ble_set_adv_param(adv_id, &adv_para);//设置广播参数\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv need restart , gap_ble_set_adv_param ret %x\n",ret);\r
+                ret = gap_ble_set_adv_param(adv_id, &adv_para);\r
+                if (ret != ERRCODE_BT_SUCCESS) {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv restart: gap_ble_set_adv_param ret 0x%x", ret);\r
+                }\r
 \r
             }\r
             if(get_ble_connect()==false)\r
             {\r
-                ret=gap_ble_start_adv(adv_id);\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv need restart , gap_ble_start_adv ret %x\n",ret);\r
+                ret = gap_ble_start_adv(adv_id);\r
+                if (ret != ERRCODE_BT_SUCCESS) {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv restart: gap_ble_start_adv ret 0x%x", ret);\r
+                }\r
            }\r
           \r
 \r
         }\r
         else\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "no sdv\n");\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv restart: adv already stopped");\r
             if(!uapi_dev_runtime_get_factory_test_status_flag())\r
             {\r
 \r
@@ -520,8 +538,10 @@ static void  ble_adv_Timer_CallBack(int data)
                 adv_para.adv_type = GAP_BLE_ADV_CONN_SCAN_UNDIR;\r
                 adv_para.channel_map = 0x7;\r
                 adv_para.duration = 0;\r
-                ret=gap_ble_set_adv_param(adv_id, &adv_para);//设置广播参数\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv need restart , gap_ble_set_adv_param ret %x\n",ret);\r
+                ret = gap_ble_set_adv_param(adv_id, &adv_para);\r
+                if (ret != ERRCODE_BT_SUCCESS) {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv restart: gap_ble_set_adv_param ret 0x%x", ret);\r
+                }\r
 \r
             }\r
            \r
@@ -544,9 +564,11 @@ void svr_ble_adv_start_param(void)
     errcode_t ret = 0;\r
     int adv_id = BLE_ADV_ID;\r
     if (ble_adv_falg == 1) { //已经开始广播了,不需要重复开启广播\r
-        ret=gap_ble_stop_adv(adv_id);\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv need restart , gap_ble_stop_adv ret %x\n",ret);\r
-        osDelay(50);\r
+        ret = gap_ble_stop_adv(adv_id);\r
+        if (ret != ERRCODE_BT_SUCCESS) {\r
+            WEARABLE_LOGW(WEARABLE_LOG_MODULE_APP, "ble adv param: gap_ble_stop_adv ret 0x%x", ret);\r
+        }\r
+        ble_adv_wait_stopped_evt(800U);\r
     }\r
 \r
     if(ble_adv_init_falg)\r
@@ -1369,7 +1391,7 @@ static void svr_ble_bt_gatts_service_add_cb(uint8_t server_id, bt_uuid_t *uuid,
          WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "srv_ble_add_chart_decr_recv_cmd \r\n");\r
         srv_ble_add_chart_decr_Zhihui_ota(server_id,srv_handle);\r
          WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "srv_ble_add_chart_decr_Zhihui_ota \r\n");\r
-        srv_ble_add_Zhihui_AI(server_id,srv_handle);\r
+        // srv_ble_add_Zhihui_AI(server_id,srv_handle);\r
         // srv_ble_add_chart_decr_Zhihui_AI(server_id,srv_handle);\r
          WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "srv_ble_add_Zhihui_AI \r\n");\r
         srv_ble_add_ZHIHUIOTA_REPLY_chart_decr_recv_cmd(server_id,srv_handle);\r
@@ -2028,7 +2050,7 @@ static void svr_ble_adv_start_cb(uint8_t adv_id, adv_status_t status)
 static void svr_ble_adv_stop_cb(uint8_t adv_id, adv_status_t status)\r
 {\r
     if (adv_id == BLE_ADV_ID) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"svr_ble_adv_stop_cb adv_id: %d, status:%d\n", adv_id, status);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_adv_stop_cb adv_id: %d, status:%d", adv_id, status);\r
         ble_adv_start=0;\r
         uapi_save_runtime_log(RUNTIME_LOG_BLE_BROADCAST_OFF);\r
     }\r