修改br连接接口 改用消息机制 增加回连判断 实际实现传统蓝牙开关关闭则br连接不上(有BUG)
authorhcj <1224667075@qq.com>
Wed, 14 Aug 2024 10:17:26 +0000 (18:17 +0800)
committerhcj <1224667075@qq.com>
Wed, 14 Aug 2024 10:17:26 +0000 (18:17 +0800)
code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothModelC.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp
code/sdk/application/wearable/fd230app/nativeui/phoneservice/include/PhoneServiceC.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneService.cpp
code/sdk/application/wearable/service/ble_service/bleservice/bleService.c
code/sdk/drivers/peripheral/utils/CMakeLists.txt
code/sdk/drivers/peripheral/utils/custom_cmd_service.c
code/sdk/drivers/peripheral/utils/custom_utils.h
code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c

diff --git a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothModelC.h b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothModelC.h
new file mode 100644 (file)
index 0000000..785a37a
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: BluetoothModel view
+ * Author:
+ * Create: 2021-10-13
+ */
+
+#ifndef C_BLUETOOTH_MODEL_H_
+#define C_BLUETOOTH_MODEL_H_
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int uapi_a2dp_snk_connect_(void);
+int uapi_a2dp_snk_disconnect_(void);
+//int uapi_disconnect_remote_device_(void);
+
+int uapi_reconnect_(void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
index 9981e57..fb8597a 100644 (file)
@@ -6,6 +6,8 @@
  */\r
 #include <cstdint>\r
 #include "BluetoothModel.h"\r
+#include "BluetoothModelC.h"\r
+\r
 #include "BluetoothWrapper.h"\r
 #include "BluetoothPresenter.h"\r
 #include "ConnectPhonePresenter.h"\r
@@ -23,7 +25,8 @@
 #include "bts_spp.h"\r
 #include "osal_task.h"\r
 #include "bts_pbap.h"\r
-\r
+#include "ConfigModelC.h"\r
+#include "custom_utils.h"\r
 #ifdef SUPPORT_ALIPAY_SEC\r
 #include "alipay_feature.h"\r
 #endif\r
@@ -44,6 +47,7 @@
 #include "BluetoothWrapper.h"\r
 #endif\r
 #include "Bluetooyhpabpserver.h"\r
+#include "bletest.h"\r
 namespace OHOS {\r
 \r
 #define BT_SPP_TASK_STACK_SIZE 2048\r
@@ -241,7 +245,7 @@ void bluetooth_close_all(void)
     \r
     /**TODO: 断开BR链接**/\r
     bd_addr_t bdaddr={0};\r
-    get_phone_addr(&bdaddr);\r
+    uapi_get_br_address(&bdaddr);\r
     if (bt_is_acl_connected(&bdaddr))\r
     {\r
        ret = gap_disconnect_remote_device(&bdaddr);\r
@@ -749,7 +753,15 @@ void BtGapPairStatusChangedCallback(const bd_addr_t *bdAddr, int status)
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtGapPairStatusChangedCallback addr: ****%02x%02x%02x%02x status: %d\n",\r
         bdAddr->addr[3], bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0], status); /* addr下标 0 1 2 3 */\r
     memcpy(&BtGapPair_bdAddr,bdAddr,sizeof(bd_addr_t));\r
-    uapi_a2dp_snk_connect();\r
+    // if(status == GAP_PAIR_PAIRED)\r
+    // { \r
+    if(cm_custom_ble_service_on_flag() && !get_ble_pair())\r
+    {\r
+        uapi_a2dp_snk_connect();\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_a2dp_snk_connect");\r
+    }\r
+        \r
+    //}\r
     //uapi_a2dp_snk_connect();\r
     //a2dp_snk_connect(bdAddr);\r
    \r
@@ -989,6 +1001,11 @@ 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
+    //效果不好\r
+    if(!cm_custom_ble_service_on_flag())\r
+    {\r
+        gap_disconnect_remote_device(bdAddr);\r
+    }\r
 \r
     //ALC_State_flag=state;\r
 \r
@@ -1663,6 +1680,7 @@ int uapi_a2dp_snk_get_device_connect_state()
 \r
 void uapi_get_br_address(bd_addr_t *bdaddr)\r
 {\r
+ \r
     if(BtGapPair_bdAddr.addr[0]==0 && BtGapPair_bdAddr.addr[1]==0 &&\r
     BtGapPair_bdAddr.addr[2]==0 && BtGapPair_bdAddr.addr[3]==0 )\r
     get_phone_addr(bdaddr);\r
@@ -1670,7 +1688,17 @@ void uapi_get_br_address(bd_addr_t *bdaddr)
     memcpy(bdaddr,&BtGapPair_bdAddr,sizeof(bd_addr_t));\r
 \r
 }\r
+static uint8_t br_cmd=0;\r
 int uapi_a2dp_snk_connect()\r
+{\r
+    br_cmd=BR_A2DP_CONNECT;\r
+    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BR_CONNECT,&br_cmd,sizeof(br_cmd));\r
+    return 0;\r
+\r
+}\r
+  \r
+\r
+int uapi_a2dp_snk_connect_()\r
 {\r
 \r
     bd_addr_t bdaddr={0};\r
@@ -1685,6 +1713,14 @@ int uapi_a2dp_snk_connect()
 }\r
 \r
 int uapi_a2dp_snk_disconnect()\r
+{\r
+    br_cmd=BR_A2DP_DISCONNECT;\r
+    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BR_CONNECT,&br_cmd,sizeof(br_cmd));\r
+     return 0;\r
+}\r
+  \r
+\r
+int uapi_a2dp_snk_disconnect_()\r
 {\r
     \r
     bd_addr_t bdaddr={0};\r
@@ -1695,6 +1731,13 @@ int uapi_a2dp_snk_disconnect()
     return ret;\r
 }\r
 \r
+// int uapi_disconnect_remote_device_()\r
+// {\r
+//     do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BR_CONNECT,&br_cmd,sizeof(br_cmd));\r
+//     return 0;\r
+// }\r
+  \r
+\r
 int uapi_disconnect_remote_device()\r
 {\r
     bd_addr_t bdaddr={0};\r
@@ -1735,6 +1778,15 @@ int uapi_set_acl_connect_A2DP()
 }\r
 \r
 \r
+int uapi_reconnect_()\r
+{\r
+    \r
+    br_cmd=BR_RECONNECT;\r
+    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BR_CONNECT,&br_cmd,sizeof(br_cmd));\r
+     return 0;\r
+}\r
+  \r
+\r
 int uapi_reconnect(void)\r
 {\r
     bd_addr_t bdaddr={0};\r
@@ -1745,6 +1797,8 @@ int uapi_reconnect(void)
     return 0;\r
 }\r
 \r
+\r
+\r
 // /////////////////////////////////////////HFP hf端 代码///////////////////////////////////////////////////\r
 \r
 // int uapi_HFP_hf_connect()\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/phoneservice/include/PhoneServiceC.h b/code/sdk/application/wearable/fd230app/nativeui/phoneservice/include/PhoneServiceC.h
new file mode 100644 (file)
index 0000000..458fbb4
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: PhoneService
+ * Create: 2021-09-22
+ */
+
+#ifndef PHONE_SERVICE_H
+#define PHONE_SERVICE_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int uapi_hfp_disconnect_(void);
+
+int uapi_hfp_connect_(void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // PHONE_SERVICE_H
index b89b2c6..584f819 100644 (file)
@@ -5,6 +5,8 @@
  */
 
 #include "PhoneService.h"
+#include "PhoneServiceC.h"
+
 #include "PhoneAudio.h"
 #include "securec.h"
 #include <cstdio>
@@ -28,6 +30,7 @@
 #include "BluetoothModel.h"
 #include "notification_manager.h"
 #include "CallerLogModel.h"
+#include "custom_utils.h"
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -599,6 +602,8 @@ static void ConnStateChanged(const bd_addr_t *bdAddr, profile_connect_state_t st
         case PROFILE_STATE_CONNECTED: // 蓝牙连接成功
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[ConnStateChanged] BT connected");
             BtConnectedPro(bdAddr);
+            SendMsgToUIService(BT_CONNECTED_TO_UI, 0, nullptr, 0);
+            //SendMsgToMsgCenterService(BT_CONNECTED_TO_MSGCENTER, 0, nullptr, 0);
             break;
         case PROFILE_STATE_DISCONNECTING: // 蓝牙连接断连
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[ConnStateChanged] BT disconnecting");
@@ -608,7 +613,8 @@ static void ConnStateChanged(const bd_addr_t *bdAddr, profile_connect_state_t st
             BtDisconnectedPro();
             if(0==OHOS::uapi_a2dp_snk_get_device_connect_state() && 0==uapi_hfp_connect_state())
             {
-                       // remove by merge patch
+                SendMsgToUIService(BT_DISCONNECTED_TO_UI, 0, nullptr, 0);
+                //SendMsgToMsgCenterService(BT_DISCONNECTED_TO_MSGCENTER, 0, nullptr, 0);
             }
            
             break;
@@ -1888,11 +1894,11 @@ int TransCallToMobilePhone(void)
     }
 }
 
-int uapi_hfp_disconnect(void)
+int uapi_hfp_disconnect_(void)
 {
     int ret;
     bd_addr_t bdaddr={0};
-    get_phone_addr(&bdaddr);
+    OHOS:: uapi_get_br_address(&bdaddr);
     ret = hfp_hf_disconnect(&bdaddr);
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr: ****%02x %02x %02x %02x g_bdAddr.type: %x\n",
     bdaddr.addr[3], bdaddr.addr[2], bdaddr.addr[1], bdaddr.addr[0], bdaddr.type); /* 3 2 1 0 idx */
@@ -1901,12 +1907,13 @@ int uapi_hfp_disconnect(void)
     return ret;   
 }
 
-int uapi_hfp_connect(void)
+int uapi_hfp_connect_(void)
 {
     int ret;
-     bd_addr_t bdaddr={0};
-    get_phone_addr(&bdaddr);
-    if(false==OHOS::uapi_get_acl_connect_state())
+    bd_addr_t bdaddr={0};
+    OHOS:: uapi_get_br_address(&bdaddr);
+
+    if(0==OHOS::uapi_a2dp_snk_get_device_connect_state() && 0==uapi_hfp_connect_state())
     {
         //  ret= gap_connect_remote_device(&bdaddr);
         //  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[gap_connect_remote_device] ret:%X", ret);
@@ -1933,7 +1940,8 @@ int uapi_hfp_connect_state(void)
 {
     int ret;
     bd_addr_t bdaddr={0};
-    get_phone_addr(&bdaddr);
+    OHOS:: uapi_get_br_address(&bdaddr);
+
     ret = hfp_hf_get_device_connect_state(&bdaddr);
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[hfp_connect_hfp] ret:%d", ret);
     if(PROFILE_STATE_CONNECTED==ret || PROFILE_STATE_CONNECTING ==ret)
@@ -1946,11 +1954,31 @@ int uapi_hfp_connect_state(void)
 void uapi_hfp_send_DTMF_CODE(char code)
 {
     bd_addr_t bdaddr={0};
-    get_phone_addr(&bdaddr);
+    OHOS:: uapi_get_br_address(&bdaddr);
+
     int ret= hfp_hf_send_dtmf_tone(&bdaddr,code);
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[hfp_hf_send_dtmf_tone] ret:%d", ret);
 }
 
+
+static uint8_t br_cmd=0;
+int uapi_hfp_connect()
+{
+    br_cmd=BR_HFP_CONNECT;
+    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BR_CONNECT,&br_cmd,sizeof(br_cmd));
+    return 0;
+}
+  
+
+int uapi_hfp_disconnect()
+{
+    br_cmd=BR_HFP_DISCONNECT;
+    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BR_CONNECT,&br_cmd,sizeof(br_cmd));
+    return 0;
+}
+
+
+
 #ifdef __cplusplus
 }
 #endif
index 68c3e55..88c9989 100644 (file)
@@ -363,9 +363,11 @@ void svr_pair_result_cbt_cb(uint16_t conn_id, const bd_addr_t *addr, errcode_t s
                 \r
             \r
             }else{\r
-                if(false==(bt_is_acl_connected(addr)))\r
+                bd_addr_t bdaddr={0};\r
+                uapi_get_br_address(&bdaddr);\r
+                if(false==(bt_is_acl_connected(&bdaddr)))\r
                 {\r
-                    int ret=gap_reconnect_media_device(&phone_addr);\r
+                    int ret=gap_reconnect_media_device(&bdaddr);\r
                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_reconnect_media_device!!! %X\r\n",ret);\r
                 }\r
                 else\r
index 1977a4e..f9ca05e 100644 (file)
@@ -15,6 +15,7 @@ set(SOURCES
 
 set(PUBLIC_HEADER
     ${CMAKE_CURRENT_SOURCE_DIR}
+    ${ROOT_DIR}/application/wearable/fd230app/nativeui/phoneservice/include
 )
 
 set(PRIVATE_HEADER
index ca43334..b35c2ea 100644 (file)
 
 #include "custom_utils.h"
 
+#include "BluetoothModelC.h"
+
+#include "PhoneServiceC.h"
+
+
 typedef struct
 {
     uint8_t cmd;
@@ -194,6 +199,34 @@ static void custom_cmd_service_check_task(void const *arg)
         case CUSTOM_CMD_MSG_TYPE_VIBRATOR_TEST:
             uapi_vibrator_test(2 * 60 * 60);
             break;
+        case CUSTOM_CMD_MSG_BR_CONNECT:
+
+            switch (mail.data[0])
+            {
+                //hfp connect 
+                case BR_HFP_CONNECT:
+                    uapi_hfp_connect_();
+                    break;
+                //hfp disconnect
+                case BR_HFP_DISCONNECT:
+                    uapi_hfp_disconnect_();
+                    break;
+                //a2dp connect
+                case BR_A2DP_CONNECT:
+                    uapi_a2dp_snk_connect_();
+                    break;
+                //a2dp disconnect
+                case BR_A2DP_DISCONNECT:
+                    uapi_a2dp_snk_disconnect_();
+                    break;
+                case BR_RECONNECT:
+                    uapi_reconnect_();
+                    break;
+                default:
+                    break;
+            }
+            break;
+
         default:
             PRINT("Unknown CUSTOM_CMD_MSG cmd 0x%02X \r\n", mail.cmd);
             break;
index 0ad7f73..2349a7e 100644 (file)
@@ -205,6 +205,17 @@ uint32_t uapi_calendar_store_date(void);
 #define CUSTOM_CMD_MSG_TYPE_CROWN_TEST 0x0A
 #define CUSTOM_CMD_MSG_TYPE_VIBRATOR_TEST 0x0B
 
+#define CUSTOM_CMD_MSG_BR_CONNECT 0x0C
+
+typedef enum {
+    BR_HFP_CONNECT=1,
+    BR_HFP_DISCONNECT,
+    BR_A2DP_CONNECT,
+    BR_A2DP_DISCONNECT,
+    BR_RECONNECT,
+   
+} CUSTOM_CMD_MSG_BR_CONNECT_TYPE;
+
 errcode_t uapi_custom_cmd_service_init(void);
 void do_custom_cmd_service_check_msg(int cmd, void *params, int paramlen);
 int uapi_delete_files(const char *file_path);
index a81a165..14871c9 100644 (file)
@@ -1052,29 +1052,25 @@ static uint32_t BLE_TEST(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
     case 1:
         uapi_reconnect();
         break;
-    // case 2:
-    //     custom_ble_service_start();
-    //     break;
+    case 2:
+        custom_ble_service_start();
+        break;
     case 3:
         custom_ble_service_start_(atoi( (char *)argv[1]));
         break;
     case 4:
         uapi_a2dp_snk_connect();
         break;
-    // case 5:
-    //     svr_ble_adv_stop();
-    //     break;
-    // case 6:
-    //     uapi_disconnect_remote_device();
-    //     break;
-    // case 7:
-    //     uapi_ble_disconnect_device();
-    //     break;
+    case 5:
+        svr_ble_adv_stop();
+        break;
+    case 6:
+        uapi_disconnect_remote_device();
+        break;
+    case 7:
+        uapi_ble_disconnect_device();
+        break;
         
-    //  case 3:
-    //     gap_br_set_bt_scan_mode(GAP_SCAN_MODE_NONE, 20);;
-    //     break;
-     
     default:
         break;
     }