From 3f8995b3f4739beb70074624cc24d8dbb5bf245f Mon Sep 17 00:00:00 2001 From: SnickerSun Date: Thu, 4 Jul 2024 17:50:19 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96bleservice=E6=B3=A8=E5=86=8C?= =?utf8?q?=E6=B5=81=E7=A8=8B=EF=BC=8C0626=20patch=E7=89=88=E6=9C=ACbleserv?= =?utf8?q?ice=E5=8F=AF=E4=BB=A5=E6=AD=A3=E5=B8=B8=E4=BD=BF=E7=94=A8?= =?utf8?q?=E4=BA=86=E3=80=82=20=E6=94=AF=E4=BB=98=E5=AE=9D=E5=92=8C?= =?utf8?q?=E4=B8=80=E9=94=AE=E5=8F=8C=E8=81=94=E8=BF=98=E6=9C=AA=E5=AE=9E?= =?utf8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../bluetooth/include/BluetoothWrapper.h | 1 + .../nativeui/bluetooth/src/BluetoothModel.cpp | 68 ++++- .../bluetooth/src/BluetoothWrapper.cpp | 26 +- .../ble_service/bleservice/bleService.c | 241 +++++------------- .../ble_service/bleservice/bleService.h | 9 +- .../factorytest_service/factorytestService.c | 2 + .../ppg/ppgBleService/ppgBleService.c | 2 + .../drivers/peripheral/utils/custom_utils.c | 19 +- 8 files changed, 153 insertions(+), 215 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothWrapper.h b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothWrapper.h index 3c645feb1..94c990a6c 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothWrapper.h +++ b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothWrapper.h @@ -23,6 +23,7 @@ void wrapper_ble_register(void); errcode_t wrapper_gatts_register_server(bt_uuid_t *app_uuid, uint8_t *server_id); errcode_t wrapper_gatts_add_service(uint8_t server_id, bt_uuid_t *service_uuid, bool is_primary); void wrapper_gatts_service_start(void); +void wrapper_gatts_clear_service(void); #ifdef __cplusplus } 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 630b69cfd..742767e4e 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp @@ -106,8 +106,11 @@ void BluetoothModel::InitBluetoothInfo(void) } } -void bluetooth_enable_all(void) +static int g_bluetooth_initialled=0; +static int bluetooth_init_all(void) { + + if (g_bluetooth_initialled == 1) return 1; #ifndef SUPPORT_AUTO_OTA errcode_t ret; @@ -144,27 +147,71 @@ void bluetooth_enable_all(void) // BtInitCallBacksEx(); //BLE // BtInitGatts(); //BLE - wrapper_gatts_service_start(); //start reg ble server + //start reg ble server + wrapper_gatts_service_start(); + // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_BLE_WRAPPERSTART,NULL,0); // BtInitSpp(); BtA2dpInit(); /**开始ble广播*/ - // openBle(); + // custom_ble_service_start(); // BleAdvStart(); - #endif + g_bluetooth_initialled = 1; + + return 0; +} + + +void bluetooth_enable_all(void) +{ + //初始化过的则直接开启扫描即可 + if (bluetooth_init_all() == 1) + { + /**开始ble广播*/ + custom_ble_service_start(); + } } void bluetooth_close_all(void) { errcode_t ret; - /**停止扫描,清除协议缓存*/ - closeBle(); + /**停止Ble广播,断开链接,清除协议缓存*/ + custom_ble_service_stop(); + + /** 停止BR广播 */ + ret = gap_br_set_bt_scan_mode(GAP_SCAN_MODE_NONE, 0); + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bluetooth_close_all gap_br_set_bt_scan_mode ret = %u", ret); + + /**TODO: 停止BR扫描**/ + if(is_bt_discovering(BT_TRANSPORT_INVALID) || is_bt_discovering(BT_TRANSPORT_BR_EDR) || is_bt_discovering(BT_TRANSPORT_LE)) + { + gap_br_cancel_discovery(); + } + /**TODO: 关闭自动重连**/ + + // 设置自动回连,ios一键双连依赖此配置 + bts_feature_t bts_feature = { 0 }; + bts_feature.bt_auto_reconnect_closed = 1; + bts_feature.bt_a2dp_snk_closed = 1; + ret = bts_set_features(&bts_feature); + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt bts_set_features ret = %u", ret); + + /**TODO: 断开BR链接**/ + bd_addr_t bdaddr={0}; + get_phone_addr(&bdaddr); + if (bt_is_acl_connected(&bdaddr)) + { + ret = gap_disconnect_remote_device(&bdaddr); + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bluetooth_close_all gap_disconnect_remote_device ret = %u", ret); + } + + //海思不建议使用 disable_bt_stack ,说可能影响 btcore 与 mcore通讯 + // ret = disable_bt_stack(); + // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt disable_bt_stack ret = %u", ret); - ret = disable_bt_stack(); - WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt disable_bt_stack ret = %u", ret); } void BluetoothModel::Init() @@ -1312,8 +1359,7 @@ void BtInitCallBacks(void) g_btGapCallBacks.pair_confiremed_callback = BtGapPairConfirmedCallback; gap_register_callbacks(&g_btGapCallBacks); - - } +} void BtInitCallBacksEx() { @@ -1339,7 +1385,7 @@ void BtInitGatts(void) { uint16_t id = 0x1FF0; uint16_t ser_id = 0x1FFF; - uint8_t serverId = 1; + uint8_t serverId = 0; bt_uuid_t uuid; int ret; diff --git a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothWrapper.cpp b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothWrapper.cpp index 7293cfdc5..9f3064a95 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothWrapper.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothWrapper.cpp @@ -11,6 +11,7 @@ #ifdef __cplusplus extern "C" { #endif +#include "custom_utils.h" static bool gatts_register_flag = false; static uint8_t gatts_server_id = 0; @@ -201,7 +202,9 @@ void wrapper_gatts_start_service_callback(uint8_t server_id, uint16_t handle, er callback.start_service_cb(server_id, handle, status); } } + // printf("wrapper_gatts_start_service_callback server_id %d,handle %d, status %x , g_svr_handle_list.size %d\r\n",server_id,handle,status,g_svr_handle_list.size()); wrapper_gatts_service_start(); + // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_BLE_WRAPPERSTART,NULL,0); } } void wrapper_gatts_stop_service_callback(uint8_t server_id, uint16_t handle, errcode_t status) @@ -301,22 +304,35 @@ errcode_t wrapper_gatts_add_service(uint8_t server_id, bt_uuid_t *service_uuid, return ERRCODE_SUCC; } #include "debug_print.h" -extern "C" void openBle(void); +extern "C" void custom_ble_service_start(void); void wrapper_gatts_service_start(void) { + // printf("wrapper_gatts_service_start \n"); if (!g_uuid_list.empty()) { bt_uuid_t &uuid = g_uuid_list.front(); + bt_uuid_t uuid_tmp={0}; + memcpy(&uuid_tmp,&uuid,sizeof(bt_uuid_t)); // 服务异步添加,需要保证当前服务start后,再添加下一个服务 - errcode_t ret = gatts_add_service(gatts_server_id, &uuid, true); - printf("wrapper_gatts_service_start gatts_add_service uuid len %x [0x%04X],gatts_server_id %u, ret 0x%x\n",uuid.uuid_len,*((uint16_t*)&uuid.uuid),gatts_server_id,ret); g_uuid_list.pop_front(); + errcode_t ret = gatts_add_service(gatts_server_id, &uuid_tmp, true); + // printf("wrapper_gatts_service_start gatts_add_service uuid len %x [0x%02X%02X],gatts_server_id %u, ret 0x%x, g_uuid_list.size %d\n", + // uuid_tmp.uuid_len,uuid_tmp.uuid[0],uuid_tmp.uuid[1],gatts_server_id,ret,g_uuid_list.size()); + } else { g_svr_handle_list.clear(); + // printf("wrapper_gatts_service_start g_uuid_list empty,start adv \n"); /**开始ble广播*/ - openBle(); + custom_ble_service_start(); } -} + // printf("wrapper_gatts_service_start end\n"); +} +void wrapper_gatts_clear_service(void) +{ + if (!g_uuid_list.empty()) g_uuid_list.clear(); + if (!g_svr_handle_list.empty()) g_svr_handle_list.clear(); + gatts_register_flag = false; +} #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 06c59fb06..e88e10bdc 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c @@ -92,7 +92,6 @@ static uint16_t g_ble_read_handle = 0; uint16_t g_ble_conn_id = 0; uint16_t g_ble_server_handle = 0; static uint8_t g_ble_character_buf[BLE_CHARACTERISTIC_MAX_LENGTH] = {0}; -static bool g_ble_init_flag = false; static const uint8_t ble_adv_type[BLE_ADV_TYPE_LENTH] = {2, 1, 0xA}; static const uint8_t ble_adv_uuid[BLE_ADV_UUID_LENTH] = {0x3, 0x3, 0xe0, 0x18}; static const uint8_t ble_adv_tx[4] = {0x03,0x03,0xe0,0x18}; @@ -115,6 +114,11 @@ uint16_t data2ae2Cmd = 0;//read uint16_t data2ae1Cmd = 0;//安卓消息来电 uint16_t data2ae0Cmd = 0;//OTA + +void get_phone_addr(bd_addr_t *addr) +{ + if (addr!=NULL) memcpy(addr,&phone_addr,sizeof(bd_addr_t)); +} static void set_phone_info(bd_addr_t *addr)//保存手机信息 包含手机mac地址 { memcpy(&phone_addr,addr,sizeof(bd_addr_t)); @@ -141,11 +145,8 @@ void svr_ble_adv_start(void) ble_adv_falg = 1; gap_ble_start_adv(BLE_ADV_ID); } -bool get_ble_status(void) -{ - return AdverFlag; -} -#if 1 + + /* adapt ios adv data. *///设置广播和扫描数据 static void svr_ble_adv_data_set(int adv_id) { @@ -263,16 +264,18 @@ static void svr_ble_adv_data_set(int adv_id) return; } -#endif + void svr_ble_adv_start_param(void) { + errcode_t ret = 0; int adv_id = BLE_ADV_ID; - if (AdverFlag == true) { //已经开始广播了,不需要重复开启广播 - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BleAdvStart already started1"); - // return; + if (ble_adv_falg == 1) { //已经开始广播了,不需要重复开启广播 + ret=gap_ble_stop_adv(adv_id); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv need restart , gap_ble_stop_adv ret %x\n",ret); + osDelay(50); } gap_ble_adv_params_t adv_para; @@ -288,14 +291,14 @@ void svr_ble_adv_start_param(void) gap_ble_set_local_appearance(GAP_BLE_APPEARANCE_TYPE_GENERIC_WATCH);//仅是手表 svr_ble_adv_data_set(adv_id);//开始广播和扫描数据 ble_adv_falg = 1; - int32_t ret = gap_ble_start_adv(adv_id); + ret = gap_ble_start_adv(adv_id); if (ret) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_adv_start bt gap_ble_start_adv1 ret = 0x%x", ret); } WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_adv_start bt gap_ble_start_adv2 ret = 0x%x", ret); } -static void svr_ble_connstate_change_cb(unsigned short conn_id, bd_addr_t *addr, gap_ble_conn_state_t conn_state, +void svr_ble_connstate_change_cb(unsigned short conn_id, bd_addr_t *addr, gap_ble_conn_state_t conn_state, gap_ble_pair_state_t pair_state, gap_ble_disc_reason_t disc_reason) { @@ -327,28 +330,13 @@ static void svr_ble_connstate_change_cb(unsigned short conn_id, bd_addr_t *addr, uapi_dev_runtime_set_ble_connect_stat(Bleconnect); } -static void svr_pair_result_cbt_cb(uint16_t conn_id, const bd_addr_t *addr, errcode_t status) +void svr_pair_result_cbt_cb(uint16_t conn_id, const bd_addr_t *addr, errcode_t status) { devpair_state = 1;//代表配对成功了 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_pair_result_cbt_cb!!! addr 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x status:0x%x\r\n",addr->addr[0],addr->addr[1], addr->addr[2],addr->addr[3],addr->addr[4],addr->addr[5],status); } -static void svr_ble_adv_start_cb(uint8_t adv_id, adv_status_t status) -{ - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_adv_start_cb!!! 0x%x %d",adv_id,status); - -} - -static void svr_ble_set_adv_data_cb(uint8_t adv_id, errcode_t status) -{ - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_set_adv_data_cb:%d",status); - -} -static void svr_ble_adv_stop_cb(uint8_t adv_id, adv_status_t status) -{ - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_adv_stop_cb:%d",status); -} //添加ota特征值 static void srv_ble_add_chart_decr_ota(uint8_t server_id,uint16_t srv_handle) { @@ -953,26 +941,6 @@ static void svr_ble_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid_t return; } -static void svr_ble_bt_gatts_descriptor_add_cb(uint8_t server_id, bt_uuid_t *uuid, uint16_t srv_handle, - uint16_t desc_handle, errcode_t status) -{ - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "desc_handle_uuid 0x%02x%02x desc_handle %d\r\n",uuid->uuid[0],uuid->uuid[1],desc_handle); -} - -static void svr_ble_bt_gatts_service_start_cb(uint8_t server_id, uint16_t srv_handle, errcode_t status) -{ - // ALIPAY_PRINT_DEBUG(0, "BtGattsServiceStartCallback 0x%x 0x%x 0x%x", status, server_id, srv_handle); -} - -static void svr_ble_bt_gatts_service_stop_cb(uint8_t server_id, uint16_t srv_handle, errcode_t status) -{ - // ALIPAY_PRINT_DEBUG(0, "BtGattsServiceStopCallback 0x%x 0x%x 0x%x", status, server_id, srv_handle); -} - -static void svr_ble_bt_gatts_service_del_cb(uint8_t server_id, errcode_t status) -{ - // ALIPAY_PRINT_DEBUG(0, "BtGattsServiceDeleteCallback 0x%x 0x%x", status, server_id); -} errcode_t svr_ble_bt_gatts_noyify(uint8_t *data, uint16_t data_len)//这里是设备数据上报给app手机端 { gatts_ntf_ind_t data_info; @@ -1098,20 +1066,7 @@ static void svr_ble_bt_gatts_req_write_cb(uint8_t server_id, uint16_t conn_id, g { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "g_ble_server_handle %d conn_id :%d write_cb_para->length:%d write_cb_para->handle %d write_cb_para->request_id:%d",g_ble_server_handle,conn_id,write_cb_para->length, write_cb_para->handle,write_cb_para->request_id); - // printf("alipay_handle%d",alipay_handle); - #if 0 - char *hex_str_tmp = malloc(10*1024); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"hex_str_tmp:%x\r\n",hex_str_tmp); - uint16_t i=0; - for( i = 0;ilength;i++) - { - //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"%x ",write_cb_para->value[i]); - sprintf(hex_str_tmp+i*3,"%02X ",write_cb_para->value[i]); - } - hex_str_tmp[i*3] = 0; - // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"hex_str_tmp:%s\r\n",hex_str_tmp); - free(hex_str_tmp); - #endif + blesrv_service_recv_msg_handler(write_cb_para->handle,write_cb_para->value,write_cb_para->length); } static void svr_ble_mtu_exchange(uint8_t server_id, uint16_t conn_id, uint16_t mtu_size, errcode_t status) @@ -1120,35 +1075,15 @@ static void svr_ble_mtu_exchange(uint8_t server_id, uint16_t conn_id, uint16_t m WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_mtu_exchange %d %d %d\r\n",server_id,conn_id,mtu_size); } - -static void svr_gap_ble_connect_param_update_callback(uint16_t conn_id, errcode_t status,const gap_ble_conn_param_update_t *param) -{ - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"connect param changed conn_id:%u status:%u", conn_id, status); - if (param != NULL) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP," interval:%u latency:%u timeout:%u\r\n", param->interval, param->latency, param->timeout); - } -} -static 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) +/******************* gap_ble ************************************/ +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) { sendParieSuccess(1,&phone_addr); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_gap_ble_auth_complete_callback %x %x %x %x %x %x\r\n",addr->addr[0],addr->addr[1],addr->addr[2],addr->addr[3],addr->addr[4],addr->addr[5]); } -static void sample_gap_ble_set_scan_param_cbk(errcode_t status) -{ - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetScanParameterCallback status: %u\n", status); -} -static void sample_gap_ble_scan_result_cbk(const gap_scan_result_data_t *scan_result_data) -{ - if (scan_result_data == NULL) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scan_result_data is null \n"); - return; - } - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr_type: %u addr:0x%02x:**:**:**:%02x:%02x rssi %u.\r\n", scan_result_data->addr.type, - scan_result_data->addr.addr[0], scan_result_data->addr.addr[4], - scan_result_data->addr.addr[5], scan_result_data->rssi ); -} + // void srv_ble_start_scan(void) // { // gap_ble_scan_params_t scan_param = { 0 }; @@ -1177,48 +1112,28 @@ static void sample_gap_ble_scan_result_cbk(const gap_scan_result_data_t *scan_re // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_stop_scan fail %d !",reT_gap); // } -void svr_ble_btcallback_reg(void)//ble基础通讯服务注册回调函数 +void srv_ble_server_register_gap_ble_callbacks(void)//ble基础通讯服务注册回调函数 { - // 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; - // errcode_t ret = gap_ble_set_sec_param(&sec_params);//设置配对参数 发起配对弹窗 - - - g_ble_gapble_cbs.ble_enable_cb = NULL; - g_ble_gapble_cbs.ble_disable_cb = NULL; - g_ble_gapble_cbs.set_adv_data_cb = svr_ble_set_adv_data_cb; - g_ble_gapble_cbs.set_adv_param_cb = NULL; - g_ble_gapble_cbs.set_scan_param_cb = sample_gap_ble_set_scan_param_cbk; - g_ble_gapble_cbs.start_adv_cb = svr_ble_adv_start_cb; - g_ble_gapble_cbs.stop_adv_cb = svr_ble_adv_stop_cb; - g_ble_gapble_cbs.scan_result_cb = sample_gap_ble_scan_result_cbk; + + 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.read_rssi_cb = NULL; - g_ble_gapble_cbs.terminate_adv_cb = NULL; + g_ble_gapble_cbs.auth_complete_cb = svr_gap_ble_auth_complete_callback; - g_ble_gapble_cbs.conn_param_update_cb = svr_gap_ble_connect_param_update_callback; #ifndef SUPPORT_AT_OHOSFWK gap_ble_register_callbacks(&g_ble_gapble_cbs); #else wrapper_gap_ble_register_callbacks(&g_ble_gapble_cbs); #endif - srv_ble_server_register_gatt_callbacks(); } void srv_ble_server_register_gatt_callbacks(void) { errcode_t ret = ERRCODE_BT_SUCCESS; g_ble_gatts_cbs.add_service_cb = svr_ble_bt_gatts_service_add_cb; g_ble_gatts_cbs.add_characteristic_cb = svr_ble_bt_gatts_characteristic_add_cb; - g_ble_gatts_cbs.add_descriptor_cb = svr_ble_bt_gatts_descriptor_add_cb; - g_ble_gatts_cbs.start_service_cb = svr_ble_bt_gatts_service_start_cb; - g_ble_gatts_cbs.stop_service_cb = svr_ble_bt_gatts_service_stop_cb; - g_ble_gatts_cbs.delete_service_cb = svr_ble_bt_gatts_service_del_cb; + g_ble_gatts_cbs.read_request_cb = svr_ble_bt_gatts_req_read_cb; g_ble_gatts_cbs.write_request_cb = svr_ble_bt_gatts_req_write_cb; g_ble_gatts_cbs.mtu_changed_cb = svr_ble_mtu_exchange; @@ -1231,34 +1146,35 @@ void srv_ble_server_register_gatt_callbacks(void) return; } static uint8_t g_server_id = 0; -static void svr_ble_bt_init_gatts(void) +static void svr_ble_register_service(void) { - uint16_t id = BLE_SERVICE_UUID; uint16_t srevr_id = BLE_SERVICE_UUID; - uint16_t ser_id = 0x1fff; + uint16_t ser_id = BLE_SERVICE_UUID; uint8_t serverId = 0; bt_uuid_t uuid; errcode_t ret = 0; - uuid.uuid_len = (uint8_t)sizeof(srevr_id); - memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&srevr_id, sizeof(srevr_id)); + uuid.uuid_len = (uint8_t)sizeof(ser_id); + memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&ser_id, sizeof(ser_id)); #ifndef SUPPORT_AT_OHOSFWK ret = gatts_register_server(&uuid, &serverId); /* 注册gatt server */ + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_register_server ret: 0x%x serverId = 0x%x uuid.uuid_len:%d", ret, serverId,uuid.uuid_len); #else ret = wrapper_gatts_register_server(&uuid, &serverId); /* 注册gatt server */ + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "wrapper_gatts_register_server ret: 0x%x serverId = 0x%x uuid.uuid_len:%d", ret, serverId,uuid.uuid_len); #endif - WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_register_server ret: 0x%x serverId = 0x%x uuid.uuid_len:%d", ret, serverId,uuid.uuid_len); g_ble_server_id = serverId; bt_uuid_t ble_service_uuid = {0}; - bts_data_to_uuid_len2(id, &ble_service_uuid); + bts_data_to_uuid_len2(srevr_id, &ble_service_uuid); #ifndef SUPPORT_AT_OHOSFWK ret = gatts_add_service(serverId, &ble_service_uuid, true); + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_add_service ret: 0x%x", ret); #else ret = wrapper_gatts_add_service(serverId, &ble_service_uuid, true); + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "wrapper_gatts_add_service ret: 0x%x", ret); #endif - WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_add_service ret: 0x%x", ret); return; } @@ -1289,16 +1205,6 @@ void ble_unregist_server(void) gatts_unregister_server(g_ble_server_id); } -// void svr_ble_reset_init(void)//重新启ble服务 -// { -// alipay_unregist_server(); -// osDelay(100); -// svr_ble_btcallback_reg(); -// svr_ble_bt_init_gatts(); -// ble_hid_server_init(); -// ble_factory_server_init(); -// svr_ble_adv_start_param(); -// } void svr_ble_bluetooth_init(void) { @@ -1309,77 +1215,56 @@ void svr_ble_bluetooth_init(void) // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_bluetooth_init enable_bt_stack ret:%u.\r\n", ret); // } - if (g_custom_ble_init_flag) - { - return ; - } + // if (g_custom_ble_init_flag) + // { + // return ; + // } + + //清除上次内容 + wrapper_gatts_clear_service(); + // osDelay(100); - svr_ble_btcallback_reg(); - + srv_ble_server_register_gap_ble_callbacks(); + srv_ble_server_register_gatt_callbacks(); + //add server and ble service - svr_ble_bt_init_gatts(); + svr_ble_register_service(); + #ifdef SUPPORT_HID_SERVICE // ble_hid_server_init(); #endif + // svr_alipay_bt_init_gatts(); ble_factory_server_init(g_ble_server_id); + ble_ppgtest_server_init(g_ble_server_id); g_custom_ble_init_flag = true; return; } //关闭蓝牙 -void closeBle(void) +void custom_ble_service_stop(void) { - // printf("%d %s\n",__LINE__,__FUNCTION__); - if(AdverFlag == true)//没有连接的状态下关闭蓝牙#只能手动开启蓝牙 - { - AdverFlag = false; - g_ble_init_flag = false; - // bd_addr_t bd_addr; - // unsigned char addr[BLE_MAC_MAX_LEN] = {0}; - // bluetooth_get_local_addr(&addr[0],BD_ADDR_LEN); - // memcpy(bd_addr.addr,addr,BLE_MAC_MAX_LEN); - errcode_t ret = 0; - if(Bleconnect == GAP_BLE_STATE_CONNECTED){//设备连接需要断开 - ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&phone_addr);//与固定的mac设置地址进行断开连接 - } - // // ret = gap_ble_remove_all_pairs();//删除和所有配对的手机app - // // gap_remove_all_pairs(); - svr_ble_adv_stop();//停止广播 不发送广播数据 就是app搜索不到该设备了 - free_ble_data(); - // ble_recv_register_msg_callback(NULL); - // ret = disable_bt_stack();//关闭ble 直接断开和当前连接的手机app - // ret = disable_ble();//关闭ble 直接断开和当前连接的手机app - // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "closeBle ret%d 0x%x-0x%x-0x%x-0x%x-0x%x-0x%x\r\n",ret,bd_addr.addr[0],bd_addr.addr[1],bd_addr.addr[2],bd_addr.addr[3],bd_addr.addr[4],bd_addr.addr[5]); - }else{ - WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AdverFlag false no need closeBle\r\n"); - + AdverFlag = false; + errcode_t ret = 0; + if(Bleconnect == GAP_BLE_STATE_CONNECTED){//设备连接需要断开 + ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&phone_addr);//与固定的mac设置地址进行断开连接 } + svr_ble_adv_stop();//停止广播 不发送广播数据 就是app搜索不到该设备了 + free_ble_data(); //删除所有协议缓存数据 } //开启蓝牙 -void openBle(void) +void custom_ble_service_start(void) { - printf("%d %s\n",__LINE__,__FUNCTION__); - if(AdverFlag == false)//在连接的状态下不需要 - { - WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AdverFlag true need openBle again\r\n"); - AdverFlag = true; - svr_ble_adv_start_param(); - }else{ - WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AdverFlag true no need openBle again\r\n"); - - } + AdverFlag = true; + svr_ble_adv_start_param(); + } #define MODE_BLE_ADV_SRV (0) #define MODE_ALIPAY_ADV_SRV (1) void ble_avd_mode_change(uint8_t mode) { - if(AdverFlag == false) - { - return; - } uint8_t adv_ok = 0; switch(mode) { @@ -1389,12 +1274,12 @@ void ble_avd_mode_change(uint8_t mode) { exit_alipay_gui = 0; printf("ble_advd_start!!!!!!!!! %d %d Bleconnect:%d\r\n",ble_adv_falg,AdverFlag,Bleconnect); - if(ble_adv_falg == false && AdverFlag == true)//关闭ble 并且没有广播不需要广播数据了 + if(ble_adv_falg == 0 && AdverFlag == true)//关闭ble 并且没有广播不需要广播数据了 { adv_ok = 1; svr_ble_adv_start(); } - if(Bleconnect == true && adv_ok != 1)//退出识图还在连接app需要关闭广播数据 + if(Bleconnect == GAP_BLE_STATE_CONNECTED && adv_ok != 1)//退出识图还在连接app需要关闭广播数据 { svr_ble_adv_stop(); } @@ -1405,7 +1290,7 @@ void ble_avd_mode_change(uint8_t mode) exit_alipay_gui = 1; - printf("alipay_ble_advd_start!!!!!!!!! %d %d",ble_adv_falg,AdverFlag); + printf("alipay_ble_advd_start!!!!!!!!! ble_adv_falg: %d ,AdverFlag: %d",ble_adv_falg,AdverFlag); svr_ble_adv_start(); break; diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.h b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.h index 162ae5f5f..6e6142c39 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.h +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.h @@ -27,12 +27,13 @@ extern uint16_t alipay_handle; extern uint16_t g_ble_conn_id; extern uint16_t g_ble_server_handle; void svr_ble_bluetooth_init(void);//蓝牙服务初始化 -void closeBle(void);//主动关闭蓝牙 -void openBle(void);//主动开启蓝牙 +void custom_ble_service_stop(void);//主动关闭蓝牙 +void custom_ble_service_start(void);//主动开启蓝牙 +void get_phone_addr(bd_addr_t *addr); void svr_ble_adv_start_param(void);//开始蓝牙广播 -bool get_ble_status(void);//默认是开启一开机 -void svr_ble_btcallback_reg(void); + +void srv_ble_server_register_gap_ble_callbacks(void); bool ble_gatts_cmp_uuid(const bt_uuid_t *tgt_uuid, const bt_uuid_t *src_uuid); void srv_ble_server_register_gatt_callbacks(void); errcode_t svr_ble_bt_gatts_noyify(uint8_t *data, uint16_t data_len); diff --git a/code/sdk/application/wearable/service/factorytest_service/factorytestService.c b/code/sdk/application/wearable/service/factorytest_service/factorytestService.c index baa64b41a..e2753f90b 100644 --- a/code/sdk/application/wearable/service/factorytest_service/factorytestService.c +++ b/code/sdk/application/wearable/service/factorytest_service/factorytestService.c @@ -52,8 +52,10 @@ static void ble_factorytest_add_service(uint8_t server_id) errcode_t ret = 0; #ifndef SUPPORT_AT_OHOSFWK ret = gatts_add_service(server_id, &factory_service_uuid, true); + // printf("ble_factorytest_add_service gatts_add_service ret: 0x%x serverId = 0x%x uuid.uuid_len:%d\n", ret, server_id,factory_service_uuid.uuid_len); #else ret = wrapper_gatts_add_service(server_id, &factory_service_uuid, true); + // printf("ble_factorytest_add_service wrapper_gatts_add_service ret: 0x%x serverId = 0x%x uuid.uuid_len:%d\n", ret, server_id,factory_service_uuid.uuid_len); #endif } diff --git a/code/sdk/drivers/peripheral/ppg/ppgBleService/ppgBleService.c b/code/sdk/drivers/peripheral/ppg/ppgBleService/ppgBleService.c index 0131acb09..fa69240ba 100644 --- a/code/sdk/drivers/peripheral/ppg/ppgBleService/ppgBleService.c +++ b/code/sdk/drivers/peripheral/ppg/ppgBleService/ppgBleService.c @@ -65,8 +65,10 @@ static void ble_ppgtest_add_service(uint8_t server_id) errcode_t ret = 0; #ifndef SUPPORT_AT_OHOSFWK ret = gatts_add_service(server_id, &ppgtest_service_uuid, true); + // printf("ble_ppgtest_add_service wrapper_gatts_add_service ret: 0x%x server_id = 0x%x uuid.uuid_len:%d\n", ret, server_id,ppgtest_service_uuid.uuid_len); #else ret = wrapper_gatts_add_service(server_id, &ppgtest_service_uuid, true); + // printf("ble_ppgtest_add_service wrapper_gatts_add_service ret: 0x%x server_id = 0x%x uuid.uuid_len:%d\n", ret, server_id,ppgtest_service_uuid.uuid_len); #endif } static void ble_ppgtest_add_descriptor_report_reference(uint8_t server_id, uint16_t srvc_handle, bool is_notify_report) diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.c b/code/sdk/drivers/peripheral/utils/custom_utils.c index ae48297bd..e6d8da72e 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils.c +++ b/code/sdk/drivers/peripheral/utils/custom_utils.c @@ -256,29 +256,14 @@ bool stop_custom_ble_service(void) bool start_alipay_ble_service(void) { + /* 支付宝运行时,需要保证在广播状态,方便支付宝链接*/ ble_avd_mode_change(1); - // if(get_ble_status()) - // { - // PRINT("stop custom protocol classic bt ble service first !\r\n"); - // stop_custom_ble_service(); - // uapi_systick_delay_ms(20); - // } - // PRINT("start_alipay_ble_service !\r\n"); - // svr_alipay_bluetooth_init(); return true; } bool stop_alipay_ble_service(void) { + /* 支付宝退出后,需要恢复原来的广播状态 */ ble_avd_mode_change(0); - // PRINT("stop_alipay_ble_service !\r\n"); - // alipay_unregist_server(); - // disable_bt_stack(); - // if(custom_ble_service_on_flag()) - // { - // PRINT("start_custom_ble_service !\r\n"); - // uapi_systick_delay_ms(20); - // start_custom_ble_service(); - // } return true; } void startup_post_init_task(void) -- 2.17.1