优化A2DP及HFP回连效果
authorhcj <1224667075@qq.com>
Fri, 1 Nov 2024 07:26:44 +0000 (15:26 +0800)
committerhcj <1224667075@qq.com>
Fri, 1 Nov 2024 07:26:44 +0000 (15:26 +0800)
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp
code/sdk/application/wearable/fd230app/nativeui/classicbluetooth/src/BluetoothServiceOptionsView.cpp
code/sdk/application/wearable/fd230app/nativeui/classicbluetooth/src/ClassicBlueToothPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/phoneservice/include/PhoneService.h
code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneService.cpp
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c
code/sdk/application/wearable/service/ble_service/bleservice/bleService.c

index 97fdb79..c30074a 100644 (file)
@@ -1462,11 +1462,23 @@ static void BtA2dpSnkConnectStateChangedCb(bd_addr_t *bd_addr, int conn_state)
     }\r
     else if (conn_state==PROFILE_STATE_CONNECTING || conn_state==PROFILE_STATE_CONNECTED)\r
     {\r
+#ifdef BR_DISCONNECT\r
+        if(!cm_get_A2DP_switch())\r
+        {\r
+            uapi_a2dp_snk_disconnect();\r
+            return;\r
+        }\r
+\r
+        if(cm_get_HFP_switch() && uapi_hfp_connect_state()==0)\r
+        {\r
+            uapi_hfp_connect();\r
+        }\r
+#endif\r
         SendMsgToUIService(BT_CONNECTED_TO_UI, 0, nullptr, 0);\r
         SendMsgToMsgCenterService(BT_CONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
-        if(pbap_pce_get_device_connect_state(bd_addr)==PROFILE_STATE_DISCONNECTING ||\r
-         pbap_pce_get_device_connect_state(bd_addr)==PROFILE_STATE_DISCONNECTED)\r
-        uapi_pbap_cmd_start_client();\r
+        // if(pbap_pce_get_device_connect_state(bd_addr)==PROFILE_STATE_DISCONNECTING ||\r
+        //  pbap_pce_get_device_connect_state(bd_addr)==PROFILE_STATE_DISCONNECTED)\r
+        // uapi_pbap_cmd_start_client();\r
         // if(conn_state==PROFILE_STATE_CONNECTED)\r
         // {\r
         //     if(pbap_pce_get_device_connect_state(bd_addr)==PROFILE_STATE_DISCONNECTED)\r
@@ -1850,7 +1862,7 @@ int uapi_a2dp_snk_disconnect_()
     uapi_get_br_address(&bdaddr);\r
 \r
     int ret = a2dp_snk_disconnect(&bdaddr);\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"state(int): %d\n", ret);\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"state(int): %X\n", ret);\r
     return ret;\r
 }\r
 \r
index b1fbfcc..bbaff85 100644 (file)
@@ -9,7 +9,7 @@
 #include "ui_resource_string.h"
 #include "cmsis_os2.h"
 #include "graphic_service.h"
-
+#include "ConfigModelC.h"
 namespace OHOS
 {
     static BluetoothServiceOptionsView *g_pBluetoothServiceOptionsView{nullptr};
@@ -94,7 +94,7 @@ namespace OHOS
     static osTimerId_t  MG_TEST_timer=NULL;
     static uint8_t button_state=0;
     static uint8_t count_num=0;
-
+    static uint8_t connect_state=0;
     bool BluetoothServiceOptionsView::get_connectview_Visible(void)
     {
         return connectingScrollView->IsVisible();
@@ -102,36 +102,48 @@ namespace OHOS
 
     static void connectTimerCallBackProc(int data)
     {
-        bool connect_state=false;
+       
         count_num++;
         switch (button_state)
         {
             case BluetoothServiceOptionsView::CONNECT_HFP:
                 if(uapi_hfp_connect_state())
                 {
-                    //BluetoothServiceOptionsView::GetInstance()->show_connecting_view(false);
-                    connect_state=true;
+                   if(cm_get_A2DP_switch()&&uapi_a2dp_snk_get_device_connect_state())
+                   {
+                        connect_state++;
+                   }
+                   else if(!cm_get_A2DP_switch())
+                   {
+                        connect_state++;
+                   }
+
+                 
                 }
                 break;
             case BluetoothServiceOptionsView::DISCONNECT_HFP:
                 if(!uapi_hfp_connect_state())
                 {
                     //BluetoothServiceOptionsView::GetInstance()->show_connecting_view(false);
-                    connect_state=true;
+                    
+                    {
+                        connect_state++;
+                    }
+                   
                 }
                 break;
             case BluetoothServiceOptionsView::CONNECT_A2DP:
                 if(uapi_a2dp_snk_get_device_connect_state())
                 {
                     //BluetoothServiceOptionsView::GetInstance()->show_connecting_view(false);
-                    connect_state=true;
+                    connect_state++;
                 }
                 break;
             case BluetoothServiceOptionsView::DISCONNECT_A2DP:
                 if(!uapi_a2dp_snk_get_device_connect_state())
                 {
                     //BluetoothServiceOptionsView::GetInstance()->show_connecting_view(false);
-                    connect_state=true;
+                    connect_state++;
                 }
                 break;
             
@@ -139,7 +151,7 @@ namespace OHOS
                 break;
             
         }
-        if(count_num==9 || connect_state)
+        if(count_num==9 || connect_state>=2)
         {
             if( BluetoothServiceOptionsView::GetInstance())
             BluetoothServiceOptionsView::GetInstance()->show_connecting_view(false);
@@ -191,6 +203,8 @@ namespace OHOS
         }
         MG_TEST_timer = osTimerNew((osTimerFunc_t)connectTimerCallBack, osTimerPeriodic, NULL, NULL);
         tick =500;
+        connect_state=0;
+        
         retTimer = osTimerStart(MG_TEST_timer, tick);
         if (retTimer != osOK && MG_TEST_timer != NULL) {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"StartCallTimer osTimerStart failed, ret = %lx!!", retTimer);
index 12cdc63..6d0cbaf 100644 (file)
@@ -18,6 +18,7 @@
 #include "BluetoothModel.h"\r
 #include "custom_runtime.h"\r
 #include "ConfigModelC.h"\r
+#include "PhoneService.h"\r
 namespace OHOS\r
 {\r
     // 当前Presenter属性实例化的内存指针\r
@@ -126,7 +127,7 @@ namespace OHOS
             uapi_get_br_address(&bdaddr);\r
             if( uapi_dev_runtime_get_bt_powerstat() && (cm_get_HFP_switch()||cm_get_A2DP_switch()))\r
             {\r
-                if (false==bt_is_acl_connected(&bdaddr) && !(bdaddr.addr[0]==0 && bdaddr.addr[1]==0 && bdaddr.addr[2]==0 && bdaddr.addr[3]==0 \r
+                if ( cm_get_HFP_switch()&& cm_get_A2DP_switch() && false==bt_is_acl_connected(&bdaddr) && !(bdaddr.addr[0]==0 && bdaddr.addr[1]==0 && bdaddr.addr[2]==0 && bdaddr.addr[3]==0 \r
                     && bdaddr.addr[4]==0 && bdaddr.addr[5]==0))\r
                 {\r
                     int ret = gap_reconnect_media_device(&bdaddr);\r
@@ -135,8 +136,15 @@ namespace OHOS
                 else\r
                 {\r
                     \r
-                    if(cm_get_A2DP_switch() || cm_get_HFP_switch())\r
-                    uapi_a2dp_snk_connect();\r
+                    if(cm_get_A2DP_switch())\r
+                    {\r
+                        uapi_a2dp_snk_connect();\r
+                    }\r
+                    if(cm_get_HFP_switch())\r
+                    {\r
+                        uapi_hfp_connect();\r
+                    }\r
+\r
                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_a2dp_snk_connect!!! \r\n");\r
                 }\r
                 \r
index 1c9210e..1760f88 100644 (file)
@@ -37,7 +37,7 @@
 #include "custom_runtime.h"
 #include "vibrator_service.h"
 #include "gfx_utils/mem_api.h"
-#include "ConfigModel.h"
+#include "ConfigModelC.h"
 #include "cat1_ctl.h"
 #ifdef __cplusplus
 extern "C" {
@@ -649,10 +649,30 @@ static void ConnStateChanged(const bd_addr_t *bdAddr, profile_connect_state_t st
 
     switch (state) {
         case PROFILE_STATE_CONNECTING: // 蓝牙正在连接
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[ConnStateChanged] BT connecting");
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[ConnStateChanged] BT connecting");
+            #ifdef BR_DISCONNECT
+                if(!cm_get_HFP_switch())
+                {
+                    uapi_hfp_disconnect();
+                    return;
+                }
+            #endif
             break;
         case PROFILE_STATE_CONNECTED: // 蓝牙连接成功
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[ConnStateChanged] BT connected");
+            #ifdef BR_DISCONNECT
+            if(!cm_get_HFP_switch())
+            {
+                uapi_hfp_disconnect();
+                return;
+            }
+          
+            if(cm_get_A2DP_switch() && OHOS::uapi_a2dp_snk_get_device_connect_state()==0)
+            {
+                OHOS::uapi_a2dp_snk_connect();
+            }
+            
+            #endif
             BtConnectedPro(bdAddr);
             SendMsgToUIService(BT_CONNECTED_TO_UI, 0, nullptr, 0);
             uapi_pbap_cmd_start_client();
@@ -2166,6 +2186,8 @@ int TransCallToMobilePhone(void)
     }
 }
 
+#include "los_base.h"
+
 int uapi_hfp_disconnect_(void)
 {
     int ret;
@@ -2181,6 +2203,10 @@ int uapi_hfp_disconnect_(void)
 
 int uapi_hfp_connect_(void)
 {
+    // if(uapi_hfp_connect_state()==1)
+    // {
+    //     return;
+    // }
     int ret;
     bd_addr_t bdaddr={0};
     OHOS:: uapi_get_br_address(&bdaddr);
@@ -2197,10 +2223,28 @@ int uapi_hfp_connect_(void)
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[bt_is_acl_connected is true");
         ret = hfp_hf_connect(&bdaddr);
-        if(ret!=ERRCODE_SUCC)
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[uapi_hfp_connect] ret:%X", ret);
+        if(ret==0x8000600B)
         {
-            ret=gap_reconnect_media_device(&bdaddr);
+            gap_disconnect_remote_device(&bdaddr);
+            sleep(1);
+            //if(ret!=ERRCODE_SUCC)
+            {
+                ret=gap_reconnect_media_device(&bdaddr);
+            }
+           
+           
+        }
+        else
+        {
+            if(ret!=ERRCODE_SUCC)
+            {
+                ret=gap_reconnect_media_device(&bdaddr);
+            }
         }
+        
+
+       
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[uapi_hfp_connect] ret:%X", ret);
     }
 
index e50e059..c3573a8 100644 (file)
@@ -55,6 +55,9 @@ extern "C" {
 \r
 #define  MAX_BLE_EVENT_DIAL_NUM  (10) //表盘最大数量\r
 \r
+#include "upg_common_porting.h"\r
+\r
+\r
 uint32_t packdataLen = 0;\r
 uint32_t totalDataLen = 0;\r
 uint8_t totalpack = 0;\r
@@ -108,10 +111,10 @@ static uint32_t timer_flie_flag=0;
 ble_read_data* ble_read_timer_p=NULL;\r
 \r
 #ifdef  SINGLE_USER_PARTITION\r
-#define UP_DATE_FWPKG_PATH    "/user/update/update.fwpkg"  \r
+#define UP_DATE_FWPKG_PATH    UPG_FILE_NAME  \r
                     \r
 #else\r
-#define UP_DATE_FWPKG_PATH   "/update/update.fwpkg"\r
+#define UP_DATE_FWPKG_PATH   UPG_FILE_NAME\r
 #endif\r
 \r
 \r
@@ -2885,18 +2888,19 @@ uint8_t parse_jsonCheck_weather(uint8_t *buf,uint8_t *check)//json 格式解析
     uapi_get_br_address(&bdaddr);\r
     if( uapi_dev_runtime_get_bt_powerstat() && (cm_get_HFP_switch()||cm_get_A2DP_switch()))\r
     {\r
-        if (false==bt_is_acl_connected(&bdaddr) && !(bdaddr.addr[0]==0 && bdaddr.addr[1]==0 && bdaddr.addr[2]==0 && bdaddr.addr[3]==0 \r
+      \r
+        if(cm_get_A2DP_switch() && cm_get_A2DP_switch() && false==bt_is_acl_connected(&bdaddr) && !(bdaddr.addr[0]==0 && bdaddr.addr[1]==0 && bdaddr.addr[2]==0 && bdaddr.addr[3]==0 \r
               && bdaddr.addr[4]==0 && bdaddr.addr[5]==0))\r
         {\r
-            int ret = gap_reconnect_media_device(&bdaddr);\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " gap_reconnect_media_device ret = %u %02x %02x %02x ", ret,bdaddr.addr[5],bdaddr.addr[4],bdaddr.addr[3]);\r
+            gap_reconnect_media_device(&bdaddr);\r
         }\r
-        else\r
+        else if(cm_get_A2DP_switch())\r
         {\r
-            \r
-            if(cm_get_A2DP_switch() || cm_get_HFP_switch())\r
             uapi_a2dp_snk_connect();\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_a2dp_snk_connect!!! \r\n");\r
+        }\r
+        else if(cm_get_HFP_switch())\r
+        {\r
+            uapi_hfp_connect();\r
         }\r
         \r
     }\r
index 41b5a82..1b9f4b3 100644 (file)
@@ -39,6 +39,7 @@ extern "C" {
 #include "custom_runtime.h"\r
 #include "custom_utils.h"\r
 #include "bletest.h"\r
+#include "ConfigModelC.h"\r
 #ifdef SUPPORT_AT_CYWEE\r
 #include "cywee_ble_Service.h"\r
 #endif\r
@@ -575,8 +576,20 @@ void svr_pair_result_cbt_cb(uint16_t conn_id, const bd_addr_t *addr, errcode_t s
 \r
             if(get_ble_pair()&&( cm_get_A2DP_switch() || cm_get_HFP_switch()))\r
             {\r
-                int ret=gap_reconnect_media_device(addr);\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_reconnect_media_device!!! %X\r\n",ret);\r
+                if(cm_get_A2DP_switch() && cm_get_A2DP_switch())\r
+                {\r
+                    int ret=gap_reconnect_media_device(addr);\r
+                }\r
+                else if(cm_get_A2DP_switch())\r
+                {\r
+                    uapi_a2dp_snk_connect();\r
+                }\r
+                else if(cm_get_HFP_switch())\r
+                {\r
+                    uapi_hfp_connect();\r
+                }\r
+\r
+\r
             }\r
             else\r
             { \r
@@ -603,7 +616,6 @@ void svr_pair_result_cbt_cb(uint16_t conn_id, const bd_addr_t *addr, errcode_t s
             } \r
         }\r
         hand_watch_first_time_Paired();\r
-        svr_ble_adv_stop();\r
 \r
     }\r
 }\r
@@ -1605,6 +1617,9 @@ static void svr_ble_mtu_exchange(uint8_t server_id, uint16_t conn_id, uint16_t m
 /*******************  gap_ble  ************************************/\r
 void svr_gap_ble_auth_complete_callback(uint16_t conn_id, const bd_addr_t *addr, errcode_t status,ble_auth_info_evt_t* evt)\r
 {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sendParieSuccess");\r
+\r
+\r
     sendParieSuccess(1,addr);\r
     uapi_set_br_address(addr);\r
 }\r