From 6e2539c985c855bc131696c2a0bb517a7b630ba6 Mon Sep 17 00:00:00 2001 From: SnickerSun Date: Thu, 4 Jul 2024 20:12:43 +0800 Subject: [PATCH] =?utf8?q?=E9=80=82=E9=85=8D=E4=B8=80=E9=94=AE=E5=8F=8C?= =?utf8?q?=E8=81=94=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nativeui/bluetooth/src/BluetoothModel.cpp | 38 ++++++++++++------- .../service/ble_service/bleservice/bleEvent.c | 13 +++++-- .../ble_service/bleservice/bleService.c | 15 +++++--- 3 files changed, 44 insertions(+), 22 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp index 94b6b4df9..5d0ac7a8f 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp @@ -110,7 +110,7 @@ void InitBluetoothInfo(void) WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt SetLocalName %s ", watchName); }else{ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt SetLocalName %s ret = 0x%x", watchName,ret); - } + } } } @@ -121,7 +121,6 @@ static int bluetooth_init_all(void) if (g_bluetooth_initialled == 1) return 1; #ifndef SUPPORT_AUTO_OTA errcode_t ret; - // 设置自动回连,ios一键双连依赖此配置 bts_feature_t bts_feature = { 0 }; bts_feature.bt_auto_reconnect_closed = 0; @@ -132,16 +131,16 @@ static int bluetooth_init_all(void) WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt enable_bt_stack ret = %u", ret); // 设置安全连接 - gap_ble_sec_params_t sec_params = {0}; - sec_params.bondable = 0x01; - sec_params.io_capability = GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT;//最好选择没有输入输出IO能力 - sec_params.sc_enable = 0x00; - sec_params.sc_mode = GAP_BLE_GAP_SECURITY_MODE1_LEVEL2; - ret = gap_ble_set_sec_param(&sec_params);//设置配对参数 发起配对弹窗 - - // gap_ble_sec_params_t sec_param = { 1, GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT, 1, GAP_BLE_GAP_SECURITY_MODE1_LEVEL3 }; + // gap_ble_sec_params_t sec_params = {0}; + // sec_params.bondable = 0x01; + // sec_params.io_capability = GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT;//最好选择没有输入输出IO能力 + // sec_params.sc_enable = 0x00; + // sec_params.sc_mode = GAP_BLE_GAP_SECURITY_MODE1_LEVEL2; + // ret = gap_ble_set_sec_param(&sec_params);//设置配对参数 发起配对弹窗 + + gap_ble_sec_params_t sec_param = { 1, GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT, 1, GAP_BLE_GAP_SECURITY_MODE1_LEVEL3 }; // gap_ble_sec_params_t sec_param = { 1, GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT, 0, GAP_BLE_GAP_SECURITY_MODE1_LEVEL2 }; - // ret = gap_ble_set_sec_param(&sec_param); + ret = gap_ble_set_sec_param(&sec_param); WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt gap_ble_set_sec_param ret = %u", ret); InitBluetoothInfo(); @@ -179,6 +178,17 @@ void bluetooth_enable_all(void) //初始化过的则直接开启扫描即可 if (bluetooth_init_all() == 1) { + + errcode_t ret; + // 设置自动回连,ios一键双连依赖此配置 + bts_feature_t bts_feature = { 0 }; + bts_feature.bt_auto_reconnect_closed = 0; + ret = bts_set_features(&bts_feature); + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt bts_set_features ret = %u", ret); + // gap_ble_sec_params_t sec_param = { 1, GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT, 1, GAP_BLE_GAP_SECURITY_MODE1_LEVEL3 }; + gap_ble_sec_params_t sec_param = { 1, GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT, 0, GAP_BLE_GAP_SECURITY_MODE1_LEVEL2 }; + ret = gap_ble_set_sec_param(&sec_param); + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt gap_ble_set_sec_param ret = %u", ret); /**开始ble广播*/ custom_ble_service_start(); } @@ -1032,7 +1042,7 @@ static void BleConnStateChangeCallback(unsigned short connId, bd_addr_t *addr, g SendMsgToMsgCenterService(BT_CONNECTED_TO_MSGCENTER, 0, nullptr, 0); (void)memcpy_s(&g_bd_addr, sizeof(bd_addr_t), addr, sizeof(bd_addr_t)); } -} + } static void BleAdvStartCallback(uint8_t advId, adv_status_t status) { @@ -1376,8 +1386,8 @@ void BtInitCallBacksEx() g_gapBleCallbacks.conn_state_change_cb = BleConnStateChangeCallback; g_gapBleCallbacks.start_adv_cb = BleAdvStartCallback; g_gapBleCallbacks.stop_adv_cb = BleAdvStopCallback; - g_gapBleCallbacks.terminate_adv_cb = BleAdvTerminateCallback; - wrapper_gap_ble_register_callbacks(&g_gapBleCallbacks); + g_gapBleCallbacks.terminate_adv_cb = BleAdvTerminateCallback; + wrapper_gap_ble_register_callbacks(&g_gapBleCallbacks); g_btGattsCallbacks.add_service_cb = BtGattsServiceAddCallback; g_btGattsCallbacks.add_characteristic_cb = BtGattsCharacteristicAddCallback; diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c index 02f36283d..a739c3253 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c @@ -561,7 +561,10 @@ void comfirmPaire(uint8_t flag) { first_bond = 1; // printf("gap_ble_pair_remote_device 333333333 %x-%x-%x-%x-%x-%x\r\n",phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2],phone_addr.addr[3],phone_addr.addr[4],phone_addr.addr[5]); - + // 一键双连使能(依赖安全连接参数配置) + errcode_t ret = gap_ble_set_ctkd_enable(true); + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gap_ble_set_ctkd_enable ret = %x", ret); + errcode_t code = gap_ble_pair_remote_device(&phone_addr); if(code!=ERRCODE_SUCC) { @@ -951,10 +954,14 @@ void sendBindInfor(uint8_t *data) int result = memcmp(copare_mac,save_mac,6); if(result == 0) { - printf("phone_addr:%02x-%02x-%02x-%02x-%02x-%02x type:%d",phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2], + printf("phone_addr:%02x-%02x-%02x-%02x-%02x-%02x type:%d ",phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2], phone_addr.addr[3],phone_addr.addr[4],phone_addr.addr[5],phone_addr.type); + + ret = gap_ble_set_ctkd_enable(true); + printf("gap_ble_set_ctkd_enable ret = %x ", ret); + ret = gap_ble_pair_remote_device(&phone_addr); - printf("ret:%d",ret); + printf("gap_ble_pair_remote_device ret:%x ",ret); bond = 0x02;//手表与该手机绑定过 value[17] = bond;// value[18] = Calculate_CRC(value,18); diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c index dd3f19504..2a19d961b 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c @@ -1093,15 +1093,15 @@ void svr_gap_ble_auth_complete_callback(uint16_t conn_id, const bd_addr_t *addr, // else // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_stop_scan fail %d !",reT_gap); // } - +static void srv_BleAdvTerminateCallback(uint8_t advId, adv_status_t status) +{ + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "srv_BleAdvTerminateCallback advId: %d, status:%d\n", advId, status); +} void srv_ble_server_register_gap_ble_callbacks(void)//ble基础通讯服务注册回调函数 { - - - g_ble_gapble_cbs.conn_state_change_cb = svr_ble_connstate_change_cb; g_ble_gapble_cbs.pair_result_cb = svr_pair_result_cbt_cb; - + g_ble_gapble_cbs.terminate_adv_cb = srv_BleAdvTerminateCallback; g_ble_gapble_cbs.auth_complete_cb = svr_gap_ble_auth_complete_callback; #ifndef SUPPORT_AT_OHOSFWK @@ -1232,6 +1232,11 @@ void custom_ble_service_stop(void) if(Bleconnect == GAP_BLE_STATE_CONNECTED){//设备连接需要断开 ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&phone_addr);//与固定的mac设置地址进行断开连接 } + + // 一键双连去使能 + ret = gap_ble_set_ctkd_enable(false); + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gap_ble_set_ctkd_disable ret = %u", ret); + svr_ble_adv_stop();//停止广播 不发送广播数据 就是app搜索不到该设备了 free_ble_data(); //删除所有协议缓存数据 } -- 2.17.1