将ACL断连时使用接口改为回连接口,确报可以连接上HFP(有BUG会同时连上A2DP)
authorhcj <1224667075@qq.com>
Sat, 27 Jul 2024 02:13:56 +0000 (10:13 +0800)
committerhcj <1224667075@qq.com>
Sat, 27 Jul 2024 02:13:56 +0000 (10:13 +0800)
code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothModel.h
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp
code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneService.cpp

index 679b451..a38074a 100644 (file)
@@ -138,6 +138,8 @@ int uapi_a2dp_snk_get_device_connect_state(void);
 int uapi_a2dp_snk_connect(void);\r
 int uapi_a2dp_snk_disconnect(void);\r
 int uapi_disconnect_remote_device(void);\r
+int uapi_get_acl_connect_state(void);\r
+int uapi_set_acl_connect_hfp(void);\r
 \r
 \r
 #ifdef __cplusplus\r
index 7ea5b31..b6c0d59 100644 (file)
@@ -968,7 +968,9 @@ void BluetoothModel::BtGapAclStateChangedHandle(gap_acl_state_t state, unsigned
         }\r
     }\r
 }\r
+static uint8_t ALC_State_flag=0;\r
 \r
+static uint8_t ALC_connect_hfp_flag=0;\r
 // 回调:ACL连接状态上报\r
 void GapAclStateChangedCallback(const bd_addr_t *bdAddr, gap_acl_state_t state, unsigned int reason)\r
 {\r
@@ -976,6 +978,16 @@ void GapAclStateChangedCallback(const bd_addr_t *bdAddr, gap_acl_state_t state,
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr: %02x%02x%02x%02x%02x%02x",\r
         bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* mac下标 0 1 2 3 4 5 */\r
         bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */\r
+    ALC_State_flag=state;\r
+\r
+    if(ALC_connect_hfp_flag && state==GAP_ACL_STATE_CONNECTED)\r
+    {\r
+        int ret= hfp_hf_connect(bdAddr);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt hfp_hf_connect ret %X", ret);\r
+        ALC_connect_hfp_flag=0;\r
+    }\r
+    \r
+\r
     if ((gap_get_device_class(bdAddr) & 0x200) != 0) {\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback: Mobile Phone Device");\r
         return;\r
@@ -1629,12 +1641,27 @@ int uapi_disconnect_remote_device()
     get_phone_addr(&bdaddr);\r
     if (bt_is_acl_connected(&bdaddr))\r
     {\r
+       \r
        int ret = gap_disconnect_remote_device(&bdaddr);\r
        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bluetooth_close_all gap_disconnect_remote_device ret = %u", ret);\r
     }\r
     return 0;\r
 }\r
-  \r
+\r
+\r
+int uapi_get_acl_connect_state()\r
+{\r
+    if( ALC_State_flag==GAP_ACL_STATE_DISCONNECTED )//|| ALC_State_flag ==GAP_ACL_STATE_LE_DISCONNECTED)\r
+    return 0;\r
+    else\r
+    return 1;\r
+}\r
+\r
+int uapi_set_acl_connect_hfp()\r
+{\r
+    ALC_connect_hfp_flag=1;\r
+    return 0;\r
+}\r
 // /////////////////////////////////////////HFP hf端 代码///////////////////////////////////////////////////\r
 \r
 // int uapi_HFP_hf_connect()\r
index 90bfbd6..0f65679 100644 (file)
@@ -1874,24 +1874,26 @@ int uapi_hfp_connect(void)
     int ret;
      bd_addr_t bdaddr={0};
     get_phone_addr(&bdaddr);
-    // if(false==bt_is_acl_connected(&bdaddr))
-    // {
-    //     ret= gap_connect_remote_device(&bdaddr);
-        
-    //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[bt_is_acl_connected] ret:%X", ret);
-    // }
-    // else
-    // {
-    //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[bt_is_acl_connected is true");
-    // }
-    // ret= hfp_hf_send_dtmf_tone(&bdaddr,'1');
-    // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[hfp_hf_send_dtmf_tone] ret:%X", ret);
+    if(false==OHOS::uapi_get_acl_connect_state())
+    {
+        // ret= gap_connect_remote_device(&bdaddr);
+        // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[gap_connect_remote_device] ret:%X", ret);
+        // ret=OHOS::uapi_set_acl_connect_hfp();
+        ret=gap_reconnect_media_device(&bdaddr);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[gap_connect_remote_device] ret:%X", ret);
+    }
+    else
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[bt_is_acl_connected is true");
+        ret = hfp_hf_connect(&bdaddr);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[uapi_hfp_connect] ret:%X", ret);
+    }
+ 
+    
     
-    ret = hfp_hf_connect(&bdaddr);
      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr: ****%02x %02x %02x %02x g_bdAddr.type: %x\n",
     g_bdAddr.addr[3], g_bdAddr.addr[2], g_bdAddr.addr[1], g_bdAddr.addr[0], g_bdAddr.type); /* 3 2 1 0 idx */
 
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[uapi_hfp_connect] ret:%X", ret);
     return ret;   
 }