From 4d7fced7c859f1d7587febedd40a5dd0b1064cfa Mon Sep 17 00:00:00 2001 From: hcj <1224667075@qq.com> Date: Wed, 14 Aug 2024 18:17:26 +0800 Subject: [PATCH] =?utf8?q?=E4=BF=AE=E6=94=B9br=E8=BF=9E=E6=8E=A5=E6=8E=A5?= =?utf8?q?=E5=8F=A3=20=E6=94=B9=E7=94=A8=E6=B6=88=E6=81=AF=E6=9C=BA?= =?utf8?q?=E5=88=B6=20=E5=A2=9E=E5=8A=A0=E5=9B=9E=E8=BF=9E=E5=88=A4?= =?utf8?q?=E6=96=AD=20=E5=AE=9E=E9=99=85=E5=AE=9E=E7=8E=B0=E4=BC=A0?= =?utf8?q?=E7=BB=9F=E8=93=9D=E7=89=99=E5=BC=80=E5=85=B3=E5=85=B3=E9=97=AD?= =?utf8?q?=E5=88=99br=E8=BF=9E=E6=8E=A5=E4=B8=8D=E4=B8=8A(=E6=9C=89BUG)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../bluetooth/include/BluetoothModelC.h | 28 +++++++++ .../nativeui/bluetooth/src/BluetoothModel.cpp | 60 ++++++++++++++++++- .../phoneservice/include/PhoneServiceC.h | 24 ++++++++ .../phoneservice/src/PhoneService.cpp | 46 +++++++++++--- .../ble_service/bleservice/bleService.c | 6 +- .../drivers/peripheral/utils/CMakeLists.txt | 1 + .../peripheral/utils/custom_cmd_service.c | 33 ++++++++++ .../drivers/peripheral/utils/custom_utils.h | 11 ++++ .../peripheral/utils/custom_utils_at_cmd.c | 28 ++++----- 9 files changed, 207 insertions(+), 30 deletions(-) create mode 100644 code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothModelC.h create mode 100644 code/sdk/application/wearable/fd230app/nativeui/phoneservice/include/PhoneServiceC.h 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 index 000000000..785a37ad0 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothModelC.h @@ -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 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 9981e57cf..fb8597a7b 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp @@ -6,6 +6,8 @@ */ #include #include "BluetoothModel.h" +#include "BluetoothModelC.h" + #include "BluetoothWrapper.h" #include "BluetoothPresenter.h" #include "ConnectPhonePresenter.h" @@ -23,7 +25,8 @@ #include "bts_spp.h" #include "osal_task.h" #include "bts_pbap.h" - +#include "ConfigModelC.h" +#include "custom_utils.h" #ifdef SUPPORT_ALIPAY_SEC #include "alipay_feature.h" #endif @@ -44,6 +47,7 @@ #include "BluetoothWrapper.h" #endif #include "Bluetooyhpabpserver.h" +#include "bletest.h" namespace OHOS { #define BT_SPP_TASK_STACK_SIZE 2048 @@ -241,7 +245,7 @@ void bluetooth_close_all(void) /**TODO: 断开BR链接**/ bd_addr_t bdaddr={0}; - get_phone_addr(&bdaddr); + uapi_get_br_address(&bdaddr); if (bt_is_acl_connected(&bdaddr)) { ret = gap_disconnect_remote_device(&bdaddr); @@ -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", bdAddr->addr[3], bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0], status); /* addr下标 0 1 2 3 */ memcpy(&BtGapPair_bdAddr,bdAddr,sizeof(bd_addr_t)); - uapi_a2dp_snk_connect(); + // if(status == GAP_PAIR_PAIRED) + // { + if(cm_custom_ble_service_on_flag() && !get_ble_pair()) + { + uapi_a2dp_snk_connect(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_a2dp_snk_connect"); + } + + //} //uapi_a2dp_snk_connect(); //a2dp_snk_connect(bdAddr); @@ -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", bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* mac下标 0 1 2 3 4 5 */ bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */ + //效果不好 + if(!cm_custom_ble_service_on_flag()) + { + gap_disconnect_remote_device(bdAddr); + } //ALC_State_flag=state; @@ -1663,6 +1680,7 @@ int uapi_a2dp_snk_get_device_connect_state() void uapi_get_br_address(bd_addr_t *bdaddr) { + if(BtGapPair_bdAddr.addr[0]==0 && BtGapPair_bdAddr.addr[1]==0 && BtGapPair_bdAddr.addr[2]==0 && BtGapPair_bdAddr.addr[3]==0 ) get_phone_addr(bdaddr); @@ -1670,7 +1688,17 @@ void uapi_get_br_address(bd_addr_t *bdaddr) memcpy(bdaddr,&BtGapPair_bdAddr,sizeof(bd_addr_t)); } +static uint8_t br_cmd=0; int uapi_a2dp_snk_connect() +{ + br_cmd=BR_A2DP_CONNECT; + do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BR_CONNECT,&br_cmd,sizeof(br_cmd)); + return 0; + +} + + +int uapi_a2dp_snk_connect_() { bd_addr_t bdaddr={0}; @@ -1685,6 +1713,14 @@ int uapi_a2dp_snk_connect() } int uapi_a2dp_snk_disconnect() +{ + br_cmd=BR_A2DP_DISCONNECT; + do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BR_CONNECT,&br_cmd,sizeof(br_cmd)); + return 0; +} + + +int uapi_a2dp_snk_disconnect_() { bd_addr_t bdaddr={0}; @@ -1695,6 +1731,13 @@ int uapi_a2dp_snk_disconnect() return ret; } +// int uapi_disconnect_remote_device_() +// { +// do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BR_CONNECT,&br_cmd,sizeof(br_cmd)); +// return 0; +// } + + int uapi_disconnect_remote_device() { bd_addr_t bdaddr={0}; @@ -1735,6 +1778,15 @@ int uapi_set_acl_connect_A2DP() } +int uapi_reconnect_() +{ + + br_cmd=BR_RECONNECT; + do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BR_CONNECT,&br_cmd,sizeof(br_cmd)); + return 0; +} + + int uapi_reconnect(void) { bd_addr_t bdaddr={0}; @@ -1745,6 +1797,8 @@ int uapi_reconnect(void) return 0; } + + // /////////////////////////////////////////HFP hf端 代码/////////////////////////////////////////////////// // int uapi_HFP_hf_connect() 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 index 000000000..458fbb477 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/phoneservice/include/PhoneServiceC.h @@ -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 diff --git a/code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneService.cpp b/code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneService.cpp index b89b2c6bb..584f81954 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneService.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneService.cpp @@ -5,6 +5,8 @@ */ #include "PhoneService.h" +#include "PhoneServiceC.h" + #include "PhoneAudio.h" #include "securec.h" #include @@ -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 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 68c3e5581..88c998976 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c @@ -363,9 +363,11 @@ void svr_pair_result_cbt_cb(uint16_t conn_id, const bd_addr_t *addr, errcode_t s }else{ - if(false==(bt_is_acl_connected(addr))) + bd_addr_t bdaddr={0}; + uapi_get_br_address(&bdaddr); + if(false==(bt_is_acl_connected(&bdaddr))) { - int ret=gap_reconnect_media_device(&phone_addr); + int ret=gap_reconnect_media_device(&bdaddr); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_reconnect_media_device!!! %X\r\n",ret); } else diff --git a/code/sdk/drivers/peripheral/utils/CMakeLists.txt b/code/sdk/drivers/peripheral/utils/CMakeLists.txt index 1977a4e0f..f9ca05eb1 100644 --- a/code/sdk/drivers/peripheral/utils/CMakeLists.txt +++ b/code/sdk/drivers/peripheral/utils/CMakeLists.txt @@ -15,6 +15,7 @@ set(SOURCES set(PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR} + ${ROOT_DIR}/application/wearable/fd230app/nativeui/phoneservice/include ) set(PRIVATE_HEADER diff --git a/code/sdk/drivers/peripheral/utils/custom_cmd_service.c b/code/sdk/drivers/peripheral/utils/custom_cmd_service.c index ca43334c4..b35c2ea30 100644 --- a/code/sdk/drivers/peripheral/utils/custom_cmd_service.c +++ b/code/sdk/drivers/peripheral/utils/custom_cmd_service.c @@ -31,6 +31,11 @@ #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; diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.h b/code/sdk/drivers/peripheral/utils/custom_utils.h index 0ad7f7308..2349a7e42 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils.h +++ b/code/sdk/drivers/peripheral/utils/custom_utils.h @@ -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); diff --git a/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c b/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c index a81a165c3..14871c94f 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c +++ b/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c @@ -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; } -- 2.17.1