From 288ef2d09bb6262600ffc56257ecccf399204966 Mon Sep 17 00:00:00 2001 From: xue <2144439972@qq.com> Date: Thu, 2 Apr 2026 16:03:42 +0800 Subject: [PATCH] =?utf8?q?=E4=BF=AE=E5=A4=8Dble=5Fadv=5FTimer=5FCallBack?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../ble_service/bleservice/bleService.c | 62 +++++++++++++------ 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/code/sdk/zhihui/services/ble_service/bleservice/bleService.c b/code/sdk/zhihui/services/ble_service/bleservice/bleService.c index f40e9df33..dbbb969d6 100644 --- a/code/sdk/zhihui/services/ble_service/bleservice/bleService.c +++ b/code/sdk/zhihui/services/ble_service/bleservice/bleService.c @@ -431,15 +431,28 @@ static void svr_ble_adv_data_set(int adv_id) return; } +/* gap_ble_stop_adv is asynchronous; set_adv_param/start_adv return STATE_ERR if stack not idle yet */ +static void ble_adv_wait_stopped_evt(uint32_t timeout_ms) +{ + uint32_t waited = 0; + const uint32_t step = 25U; + + while (get_ble_adv_status() != 0 && waited < timeout_ms) { + osDelay((int32_t)step); + waited += step; + } +} void svr_ble_adv_factory_test_start_param(void) { errcode_t ret = 0; int adv_id = BLE_ADV_ID; if (ble_adv_falg == 1) { //已经开始广播了,不需要重复开启广播 - ret=gap_ble_stop_adv(adv_id); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv need restart , gap_ble_stop_adv ret %x\n",ret); - osDelay(50); + ret = gap_ble_stop_adv(adv_id); + if (ret != ERRCODE_BT_SUCCESS) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "factory ble adv: gap_ble_stop_adv ret 0x%x", ret); + } + ble_adv_wait_stopped_evt(800U); } gap_ble_adv_params_t adv_para; @@ -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); } - -static int8_t ble_adv_init_falg=200; +static uint16_t ble_adv_init_falg = 200; static osTimerId_t ble_adv_timer=NULL; @@ -481,9 +493,11 @@ static void ble_adv_Timer_CallBack(int data) errcode_t ret = 0; if(get_ble_adv_status()) { - ret=gap_ble_stop_adv(adv_id); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv need restart , gap_ble_stop_adv ret %x\n",ret); - osDelay(50); + ret = gap_ble_stop_adv(adv_id); + if (ret != ERRCODE_BT_SUCCESS) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv restart: gap_ble_stop_adv ret 0x%x", ret); + } + ble_adv_wait_stopped_evt(800U); if(!uapi_dev_runtime_get_factory_test_status_flag()) { @@ -495,21 +509,25 @@ static void ble_adv_Timer_CallBack(int data) adv_para.channel_map = 0x7; adv_para.duration = 0; - ret=gap_ble_set_adv_param(adv_id, &adv_para);//设置广播参数 - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv need restart , gap_ble_set_adv_param ret %x\n",ret); + ret = gap_ble_set_adv_param(adv_id, &adv_para); + if (ret != ERRCODE_BT_SUCCESS) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv restart: gap_ble_set_adv_param ret 0x%x", ret); + } } if(get_ble_connect()==false) { - ret=gap_ble_start_adv(adv_id); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv need restart , gap_ble_start_adv ret %x\n",ret); + ret = gap_ble_start_adv(adv_id); + if (ret != ERRCODE_BT_SUCCESS) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv restart: gap_ble_start_adv ret 0x%x", ret); + } } } else { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "no sdv\n"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv restart: adv already stopped"); if(!uapi_dev_runtime_get_factory_test_status_flag()) { @@ -520,8 +538,10 @@ static void ble_adv_Timer_CallBack(int data) adv_para.adv_type = GAP_BLE_ADV_CONN_SCAN_UNDIR; adv_para.channel_map = 0x7; adv_para.duration = 0; - ret=gap_ble_set_adv_param(adv_id, &adv_para);//设置广播参数 - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv need restart , gap_ble_set_adv_param ret %x\n",ret); + ret = gap_ble_set_adv_param(adv_id, &adv_para); + if (ret != ERRCODE_BT_SUCCESS) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv restart: gap_ble_set_adv_param ret 0x%x", ret); + } } @@ -544,9 +564,11 @@ void svr_ble_adv_start_param(void) errcode_t ret = 0; int adv_id = BLE_ADV_ID; if (ble_adv_falg == 1) { //已经开始广播了,不需要重复开启广播 - ret=gap_ble_stop_adv(adv_id); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv need restart , gap_ble_stop_adv ret %x\n",ret); - osDelay(50); + ret = gap_ble_stop_adv(adv_id); + if (ret != ERRCODE_BT_SUCCESS) { + WEARABLE_LOGW(WEARABLE_LOG_MODULE_APP, "ble adv param: gap_ble_stop_adv ret 0x%x", ret); + } + ble_adv_wait_stopped_evt(800U); } if(ble_adv_init_falg) @@ -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"); srv_ble_add_chart_decr_Zhihui_ota(server_id,srv_handle); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "srv_ble_add_chart_decr_Zhihui_ota \r\n"); - srv_ble_add_Zhihui_AI(server_id,srv_handle); + // srv_ble_add_Zhihui_AI(server_id,srv_handle); // srv_ble_add_chart_decr_Zhihui_AI(server_id,srv_handle); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "srv_ble_add_Zhihui_AI \r\n"); srv_ble_add_ZHIHUIOTA_REPLY_chart_decr_recv_cmd(server_id,srv_handle); @@ -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) { if (adv_id == BLE_ADV_ID) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"svr_ble_adv_stop_cb adv_id: %d, status:%d\n", adv_id, status); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_adv_stop_cb adv_id: %d, status:%d", adv_id, status); ble_adv_start=0; uapi_save_runtime_log(RUNTIME_LOG_BLE_BROADCAST_OFF); } -- 2.17.1