优化bleservice注册流程,0626 patch版本bleservice可以正常使用了。 450/1 450/head 452/target/1
authorSnickerSun <snickersun@163.com>
Thu, 4 Jul 2024 09:50:19 +0000 (17:50 +0800)
committerSnickerSun <snickersun@163.com>
Thu, 4 Jul 2024 09:50:19 +0000 (17:50 +0800)
支付宝和一键双联还未实现

code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothWrapper.h
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothWrapper.cpp
code/sdk/application/wearable/service/ble_service/bleservice/bleService.c
code/sdk/application/wearable/service/ble_service/bleservice/bleService.h
code/sdk/application/wearable/service/factorytest_service/factorytestService.c
code/sdk/drivers/peripheral/ppg/ppgBleService/ppgBleService.c
code/sdk/drivers/peripheral/utils/custom_utils.c

index 3c645fe..94c990a 100644 (file)
@@ -23,6 +23,7 @@ void wrapper_ble_register(void);
 errcode_t wrapper_gatts_register_server(bt_uuid_t *app_uuid, uint8_t *server_id);\r
 errcode_t wrapper_gatts_add_service(uint8_t server_id, bt_uuid_t *service_uuid, bool is_primary);\r
 void wrapper_gatts_service_start(void);\r
+void wrapper_gatts_clear_service(void);\r
 \r
 #ifdef __cplusplus\r
 }\r
index 630b69c..742767e 100644 (file)
@@ -106,8 +106,11 @@ void BluetoothModel::InitBluetoothInfo(void)
     }\r
 }\r
 \r
-void bluetooth_enable_all(void)\r
+static int g_bluetooth_initialled=0;\r
+static int bluetooth_init_all(void)\r
 {\r
+\r
+    if (g_bluetooth_initialled == 1) return 1;\r
 #ifndef SUPPORT_AUTO_OTA\r
     errcode_t ret;\r
 \r
@@ -144,27 +147,71 @@ void bluetooth_enable_all(void)
     // BtInitCallBacksEx(); //BLE\r
     // BtInitGatts(); //BLE \r
 \r
-    wrapper_gatts_service_start(); //start reg ble server\r
+    //start reg ble server\r
+    wrapper_gatts_service_start(); \r
+    // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_BLE_WRAPPERSTART,NULL,0);\r
 \r
     // BtInitSpp();\r
     BtA2dpInit();\r
 \r
     /**开始ble广播*/\r
-    // openBle();\r
+    // custom_ble_service_start();\r
     // BleAdvStart();\r
-\r
 #endif\r
+    g_bluetooth_initialled = 1;\r
+\r
+    return 0;\r
+}\r
+\r
+    \r
+void bluetooth_enable_all(void)\r
+{\r
+    //初始化过的则直接开启扫描即可\r
+    if (bluetooth_init_all() == 1)\r
+    {\r
+        /**开始ble广播*/\r
+        custom_ble_service_start();\r
+    }\r
 }\r
 \r
 void bluetooth_close_all(void)\r
 {\r
     errcode_t ret;\r
     \r
-    /**停止扫描,清除协议缓存*/\r
-    closeBle();\r
+    /**停止Ble广播,断开链接,清除协议缓存*/\r
+    custom_ble_service_stop();\r
+\r
+    /** 停止BR广播 */\r
+    ret = gap_br_set_bt_scan_mode(GAP_SCAN_MODE_NONE, 0);\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bluetooth_close_all gap_br_set_bt_scan_mode ret = %u", ret);\r
+    \r
+    /**TODO: 停止BR扫描**/\r
+    if(is_bt_discovering(BT_TRANSPORT_INVALID) || is_bt_discovering(BT_TRANSPORT_BR_EDR) || is_bt_discovering(BT_TRANSPORT_LE))\r
+    {\r
+        gap_br_cancel_discovery();\r
+    }\r
+    /**TODO: 关闭自动重连**/\r
+\r
+    // 设置自动回连,ios一键双连依赖此配置\r
+    bts_feature_t bts_feature = { 0 };\r
+    bts_feature.bt_auto_reconnect_closed = 1;\r
+    bts_feature.bt_a2dp_snk_closed = 1;\r
+    ret = bts_set_features(&bts_feature);\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt bts_set_features ret = %u", ret);\r
+    \r
+    /**TODO: 断开BR链接**/\r
+    bd_addr_t bdaddr={0};\r
+    get_phone_addr(&bdaddr);\r
+    if (bt_is_acl_connected(&bdaddr))\r
+    {\r
+       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
+\r
+    //海思不建议使用 disable_bt_stack ,说可能影响 btcore 与 mcore通讯\r
+    // ret = disable_bt_stack();\r
+    // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt disable_bt_stack ret = %u", ret);\r
 \r
-    ret = disable_bt_stack();\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt disable_bt_stack ret = %u", ret);\r
 }\r
 \r
 void BluetoothModel::Init()\r
@@ -1312,8 +1359,7 @@ void BtInitCallBacks(void)
     g_btGapCallBacks.pair_confiremed_callback = BtGapPairConfirmedCallback;\r
     gap_register_callbacks(&g_btGapCallBacks);\r
 \r
-    \r
-    }\r
+}\r
 \r
 void BtInitCallBacksEx()\r
 {\r
@@ -1339,7 +1385,7 @@ void BtInitGatts(void)
 {\r
     uint16_t id = 0x1FF0;\r
     uint16_t ser_id = 0x1FFF;\r
-    uint8_t serverId = 1;\r
+    uint8_t serverId = 0;\r
     bt_uuid_t uuid;\r
     int ret;\r
 \r
index 7293cfd..9f3064a 100644 (file)
@@ -11,6 +11,7 @@
 #ifdef __cplusplus\r
 extern "C" {\r
 #endif\r
+#include "custom_utils.h"\r
 \r
 static bool gatts_register_flag = false;\r
 static uint8_t gatts_server_id = 0;\r
@@ -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);\r
             }\r
         }\r
+        // 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());\r
         wrapper_gatts_service_start();\r
+        // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_BLE_WRAPPERSTART,NULL,0);\r
     }\r
 }\r
 void wrapper_gatts_stop_service_callback(uint8_t server_id, uint16_t handle, errcode_t status)\r
@@ -301,22 +304,35 @@ errcode_t wrapper_gatts_add_service(uint8_t server_id, bt_uuid_t *service_uuid,
     return ERRCODE_SUCC;\r
 }\r
 #include "debug_print.h"\r
-extern "C" void openBle(void);\r
+extern "C" void custom_ble_service_start(void);\r
 void wrapper_gatts_service_start(void)\r
 {\r
+    // printf("wrapper_gatts_service_start \n");\r
     if (!g_uuid_list.empty()) {\r
         bt_uuid_t &uuid = g_uuid_list.front();\r
+        bt_uuid_t uuid_tmp={0};\r
+        memcpy(&uuid_tmp,&uuid,sizeof(bt_uuid_t));\r
         // 服务异步添加,需要保证当前服务start后,再添加下一个服务\r
-        errcode_t ret = gatts_add_service(gatts_server_id, &uuid, true);\r
-        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);\r
         g_uuid_list.pop_front();\r
+        errcode_t ret = gatts_add_service(gatts_server_id, &uuid_tmp, true);\r
+        // 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",\r
+        //         uuid_tmp.uuid_len,uuid_tmp.uuid[0],uuid_tmp.uuid[1],gatts_server_id,ret,g_uuid_list.size());\r
+\r
     } else {\r
         g_svr_handle_list.clear();\r
+        // printf("wrapper_gatts_service_start g_uuid_list empty,start adv \n");\r
          /**开始ble广播*/\r
-        openBle();\r
+        custom_ble_service_start();\r
     }\r
-}\r
+    // printf("wrapper_gatts_service_start end\n");\r
 \r
+}\r
+void wrapper_gatts_clear_service(void)\r
+{\r
+    if (!g_uuid_list.empty()) g_uuid_list.clear();\r
+    if (!g_svr_handle_list.empty()) g_svr_handle_list.clear();\r
+    gatts_register_flag = false;\r
+}\r
 #ifdef __cplusplus\r
 }\r
 #endif\r
index 06c59fb..e88e10b 100644 (file)
@@ -92,7 +92,6 @@ static uint16_t g_ble_read_handle = 0;
 uint16_t g_ble_conn_id = 0;\r
 uint16_t g_ble_server_handle = 0;\r
 static uint8_t g_ble_character_buf[BLE_CHARACTERISTIC_MAX_LENGTH] = {0};\r
-static bool g_ble_init_flag = false;\r
 static const uint8_t ble_adv_type[BLE_ADV_TYPE_LENTH] = {2, 1, 0xA};\r
 static const uint8_t ble_adv_uuid[BLE_ADV_UUID_LENTH] = {0x3, 0x3, 0xe0, 0x18};\r
 static const uint8_t ble_adv_tx[4] = {0x03,0x03,0xe0,0x18};\r
@@ -115,6 +114,11 @@ uint16_t data2ae2Cmd = 0;//read
 uint16_t data2ae1Cmd = 0;//安卓消息来电\r
 uint16_t data2ae0Cmd = 0;//OTA\r
 \r
+\r
+void get_phone_addr(bd_addr_t *addr)\r
+{\r
+    if (addr!=NULL)    memcpy(addr,&phone_addr,sizeof(bd_addr_t));\r
+}\r
 static void set_phone_info(bd_addr_t *addr)//保存手机信息 包含手机mac地址\r
 {\r
     memcpy(&phone_addr,addr,sizeof(bd_addr_t));\r
@@ -141,11 +145,8 @@ void svr_ble_adv_start(void)
     ble_adv_falg = 1;\r
     gap_ble_start_adv(BLE_ADV_ID);\r
 }\r
-bool get_ble_status(void)\r
-{\r
-    return AdverFlag;\r
-}\r
-#if 1\r
+\r
+\r
 /* adapt ios adv data. *///设置广播和扫描数据\r
 static void svr_ble_adv_data_set(int adv_id)\r
 {\r
@@ -263,16 +264,18 @@ static void svr_ble_adv_data_set(int adv_id)
 \r
     return;\r
 }\r
-#endif\r
+\r
 \r
 \r
 \r
 void svr_ble_adv_start_param(void)\r
 {\r
+    errcode_t ret = 0;\r
     int adv_id = BLE_ADV_ID;\r
-    if (AdverFlag == true) { //已经开始广播了,不需要重复开启广播\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BleAdvStart already started1");\r
-        // return;\r
+    if (ble_adv_falg == 1) { //已经开始广播了,不需要重复开启广播\r
+        ret=gap_ble_stop_adv(adv_id);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble adv need restart , gap_ble_stop_adv ret %x\n",ret);\r
+        osDelay(50);\r
     }\r
 \r
     gap_ble_adv_params_t adv_para;\r
@@ -288,14 +291,14 @@ void svr_ble_adv_start_param(void)
     gap_ble_set_local_appearance(GAP_BLE_APPEARANCE_TYPE_GENERIC_WATCH);//仅是手表\r
     svr_ble_adv_data_set(adv_id);//开始广播和扫描数据\r
     ble_adv_falg = 1;\r
-    int32_t ret = gap_ble_start_adv(adv_id);\r
+    ret = gap_ble_start_adv(adv_id);\r
     if (ret) {\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_adv_start bt gap_ble_start_adv1  ret = 0x%x", ret);\r
     }\r
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_adv_start bt gap_ble_start_adv2  ret = 0x%x", ret);\r
 }\r
 \r
-static void svr_ble_connstate_change_cb(unsigned short conn_id, bd_addr_t *addr, gap_ble_conn_state_t conn_state,\r
+void svr_ble_connstate_change_cb(unsigned short conn_id, bd_addr_t *addr, gap_ble_conn_state_t conn_state,\r
     gap_ble_pair_state_t pair_state, gap_ble_disc_reason_t disc_reason)\r
 {\r
     \r
@@ -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);\r
 }\r
 \r
-static void svr_pair_result_cbt_cb(uint16_t conn_id, const bd_addr_t *addr, errcode_t status)\r
+void svr_pair_result_cbt_cb(uint16_t conn_id, const bd_addr_t *addr, errcode_t status)\r
 {\r
     devpair_state = 1;//代表配对成功了\r
     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],\r
     addr->addr[2],addr->addr[3],addr->addr[4],addr->addr[5],status);\r
 }\r
-static void svr_ble_adv_start_cb(uint8_t adv_id, adv_status_t status)\r
-{\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_adv_start_cb!!! 0x%x %d",adv_id,status);\r
-    \r
-}\r
-\r
-static void svr_ble_set_adv_data_cb(uint8_t adv_id, errcode_t status)\r
-{\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_set_adv_data_cb:%d",status);\r
-   \r
-}\r
 \r
-static void svr_ble_adv_stop_cb(uint8_t adv_id, adv_status_t status)\r
-{\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_adv_stop_cb:%d",status);\r
-}\r
 //添加ota特征值\r
 static void srv_ble_add_chart_decr_ota(uint8_t server_id,uint16_t srv_handle)\r
 {   \r
@@ -953,26 +941,6 @@ static void svr_ble_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid_t
     return;\r
 }\r
 \r
-static void svr_ble_bt_gatts_descriptor_add_cb(uint8_t server_id, bt_uuid_t *uuid, uint16_t srv_handle,\r
-    uint16_t desc_handle, errcode_t status)\r
-{\r
-     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);\r
-}\r
-\r
-static void svr_ble_bt_gatts_service_start_cb(uint8_t server_id, uint16_t srv_handle, errcode_t status)\r
-{\r
-    // ALIPAY_PRINT_DEBUG(0, "BtGattsServiceStartCallback 0x%x 0x%x 0x%x", status, server_id, srv_handle);\r
-}\r
-\r
-static void svr_ble_bt_gatts_service_stop_cb(uint8_t server_id, uint16_t srv_handle, errcode_t status)\r
-{\r
-    // ALIPAY_PRINT_DEBUG(0, "BtGattsServiceStopCallback 0x%x 0x%x 0x%x", status, server_id, srv_handle);\r
-}\r
-\r
-static void svr_ble_bt_gatts_service_del_cb(uint8_t server_id, errcode_t status)\r
-{\r
-    // ALIPAY_PRINT_DEBUG(0, "BtGattsServiceDeleteCallback 0x%x 0x%x", status, server_id);\r
-}\r
 errcode_t svr_ble_bt_gatts_noyify(uint8_t *data, uint16_t data_len)//这里是设备数据上报给app手机端\r
 {\r
     gatts_ntf_ind_t data_info;\r
@@ -1098,20 +1066,7 @@ static void svr_ble_bt_gatts_req_write_cb(uint8_t server_id, uint16_t conn_id, g
 { \r
     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,\r
     write_cb_para->handle,write_cb_para->request_id);\r
-    // printf("alipay_handle%d",alipay_handle);\r
-    #if 0\r
-    char *hex_str_tmp = malloc(10*1024);\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"hex_str_tmp:%x\r\n",hex_str_tmp);\r
-    uint16_t i=0;\r
-    for( i = 0;i<write_cb_para->length;i++)\r
-    {   \r
-        //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"%x ",write_cb_para->value[i]);\r
-        sprintf(hex_str_tmp+i*3,"%02X ",write_cb_para->value[i]);\r
-    }\r
-    hex_str_tmp[i*3] = 0;\r
-    // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"hex_str_tmp:%s\r\n",hex_str_tmp);\r
-    free(hex_str_tmp);\r
-    #endif\r
+    \r
     blesrv_service_recv_msg_handler(write_cb_para->handle,write_cb_para->value,write_cb_para->length);\r
 }\r
 static void svr_ble_mtu_exchange(uint8_t server_id, uint16_t conn_id, uint16_t mtu_size, errcode_t status)\r
@@ -1120,35 +1075,15 @@ static void svr_ble_mtu_exchange(uint8_t server_id, uint16_t conn_id, uint16_t m
 \r
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_mtu_exchange %d %d %d\r\n",server_id,conn_id,mtu_size);\r
 }\r
-\r
-static void svr_gap_ble_connect_param_update_callback(uint16_t conn_id, errcode_t status,const gap_ble_conn_param_update_t *param)\r
-{\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"connect param changed conn_id:%u status:%u", conn_id, status);\r
-    if (param != NULL) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP," interval:%u latency:%u timeout:%u\r\n", param->interval, param->latency, param->timeout);\r
-    }\r
-}\r
-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)\r
+/*******************  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
     sendParieSuccess(1,&phone_addr);\r
     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]);\r
 }\r
 \r
-static void sample_gap_ble_set_scan_param_cbk(errcode_t status)\r
-{\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetScanParameterCallback status: %u\n", status);\r
-}\r
 \r
-static void sample_gap_ble_scan_result_cbk(const gap_scan_result_data_t *scan_result_data)\r
-{\r
-    if (scan_result_data == NULL) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scan_result_data is null \n");\r
-        return;\r
-    }\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr_type: %u addr:0x%02x:**:**:**:%02x:%02x  rssi %u.\r\n", scan_result_data->addr.type,\r
-        scan_result_data->addr.addr[0], scan_result_data->addr.addr[4],\r
-        scan_result_data->addr.addr[5], scan_result_data->rssi );\r
-}\r
+\r
 // void srv_ble_start_scan(void)\r
 // {\r
 //     gap_ble_scan_params_t scan_param = { 0 };\r
@@ -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);\r
 // }\r
 \r
-void svr_ble_btcallback_reg(void)//ble基础通讯服务注册回调函数\r
+void srv_ble_server_register_gap_ble_callbacks(void)//ble基础通讯服务注册回调函数\r
 {\r
     \r
-    // gap_ble_sec_params_t sec_params = {0};\r
-    // sec_params.bondable = 0x01;\r
-    // sec_params.io_capability = GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT;//最好选择没有输入输出IO能力\r
-    // sec_params.sc_enable = 0x00;\r
-    // sec_params.sc_mode = GAP_BLE_GAP_SECURITY_MODE1_LEVEL2;\r
-    // errcode_t ret = gap_ble_set_sec_param(&sec_params);//设置配对参数 发起配对弹窗\r
-\r
-\r
-    g_ble_gapble_cbs.ble_enable_cb = NULL;\r
-    g_ble_gapble_cbs.ble_disable_cb = NULL;\r
-    g_ble_gapble_cbs.set_adv_data_cb = svr_ble_set_adv_data_cb;\r
-    g_ble_gapble_cbs.set_adv_param_cb = NULL;\r
-    g_ble_gapble_cbs.set_scan_param_cb = sample_gap_ble_set_scan_param_cbk;\r
-    g_ble_gapble_cbs.start_adv_cb = svr_ble_adv_start_cb;\r
-    g_ble_gapble_cbs.stop_adv_cb = svr_ble_adv_stop_cb;\r
-    g_ble_gapble_cbs.scan_result_cb = sample_gap_ble_scan_result_cbk;\r
+\r
+  \r
     g_ble_gapble_cbs.conn_state_change_cb = svr_ble_connstate_change_cb;\r
     g_ble_gapble_cbs.pair_result_cb = svr_pair_result_cbt_cb;\r
-    g_ble_gapble_cbs.read_rssi_cb = NULL;\r
-    g_ble_gapble_cbs.terminate_adv_cb = NULL;\r
+\r
     g_ble_gapble_cbs.auth_complete_cb = svr_gap_ble_auth_complete_callback;\r
-    g_ble_gapble_cbs.conn_param_update_cb = svr_gap_ble_connect_param_update_callback;\r
    \r
 #ifndef SUPPORT_AT_OHOSFWK\r
     gap_ble_register_callbacks(&g_ble_gapble_cbs);\r
 #else\r
     wrapper_gap_ble_register_callbacks(&g_ble_gapble_cbs);\r
 #endif\r
-    srv_ble_server_register_gatt_callbacks();\r
 }\r
 void srv_ble_server_register_gatt_callbacks(void)\r
 {\r
     errcode_t ret = ERRCODE_BT_SUCCESS;\r
     g_ble_gatts_cbs.add_service_cb = svr_ble_bt_gatts_service_add_cb;\r
     g_ble_gatts_cbs.add_characteristic_cb = svr_ble_bt_gatts_characteristic_add_cb;\r
-    g_ble_gatts_cbs.add_descriptor_cb = svr_ble_bt_gatts_descriptor_add_cb;\r
-    g_ble_gatts_cbs.start_service_cb = svr_ble_bt_gatts_service_start_cb;\r
-    g_ble_gatts_cbs.stop_service_cb = svr_ble_bt_gatts_service_stop_cb;\r
-    g_ble_gatts_cbs.delete_service_cb = svr_ble_bt_gatts_service_del_cb;\r
+\r
     g_ble_gatts_cbs.read_request_cb = svr_ble_bt_gatts_req_read_cb;\r
     g_ble_gatts_cbs.write_request_cb = svr_ble_bt_gatts_req_write_cb;\r
     g_ble_gatts_cbs.mtu_changed_cb = svr_ble_mtu_exchange;\r
@@ -1231,34 +1146,35 @@ void srv_ble_server_register_gatt_callbacks(void)
     return;\r
 }\r
 static uint8_t g_server_id = 0;\r
-static void svr_ble_bt_init_gatts(void)\r
+static void svr_ble_register_service(void)\r
 {\r
-    uint16_t id = BLE_SERVICE_UUID;\r
     uint16_t srevr_id = BLE_SERVICE_UUID;\r
-    uint16_t ser_id = 0x1fff;\r
+    uint16_t ser_id = BLE_SERVICE_UUID;\r
     uint8_t serverId = 0;\r
     bt_uuid_t uuid;\r
     errcode_t ret = 0;\r
-    uuid.uuid_len = (uint8_t)sizeof(srevr_id);\r
-    memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&srevr_id, sizeof(srevr_id));\r
+    uuid.uuid_len = (uint8_t)sizeof(ser_id);\r
+    memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&ser_id, sizeof(ser_id));\r
 \r
 #ifndef SUPPORT_AT_OHOSFWK\r
     ret = gatts_register_server(&uuid, &serverId); /* 注册gatt server */\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_register_server ret: 0x%x serverId = 0x%x uuid.uuid_len:%d", ret, serverId,uuid.uuid_len);\r
 #else\r
     ret = wrapper_gatts_register_server(&uuid, &serverId); /* 注册gatt server */\r
+    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);\r
 #endif\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_register_server ret: 0x%x serverId = 0x%x uuid.uuid_len:%d", ret, serverId,uuid.uuid_len);\r
     g_ble_server_id = serverId;\r
 \r
     bt_uuid_t ble_service_uuid = {0};\r
-    bts_data_to_uuid_len2(id, &ble_service_uuid);\r
+    bts_data_to_uuid_len2(srevr_id, &ble_service_uuid);\r
 \r
 #ifndef SUPPORT_AT_OHOSFWK\r
     ret = gatts_add_service(serverId, &ble_service_uuid, true);\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_add_service ret: 0x%x", ret);\r
 #else\r
     ret = wrapper_gatts_add_service(serverId, &ble_service_uuid, true);\r
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "wrapper_gatts_add_service ret: 0x%x", ret);\r
 #endif\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_add_service ret: 0x%x", ret);\r
 \r
     return;\r
 }\r
@@ -1289,16 +1205,6 @@ void ble_unregist_server(void)
     gatts_unregister_server(g_ble_server_id);\r
     \r
 }\r
-// void svr_ble_reset_init(void)//重新启ble服务\r
-// {\r
-//     alipay_unregist_server();\r
-//     osDelay(100);\r
-//     svr_ble_btcallback_reg();\r
-//     svr_ble_bt_init_gatts();\r
-//     ble_hid_server_init();\r
-//     ble_factory_server_init();\r
-//     svr_ble_adv_start_param();\r
-// }\r
 \r
 void svr_ble_bluetooth_init(void)\r
 {\r
@@ -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);\r
     // }\r
 \r
-    if (g_custom_ble_init_flag)\r
-    {\r
-        return ;\r
-    }\r
+    // if (g_custom_ble_init_flag)\r
+    // {\r
+    //     return ;\r
+    // }\r
+\r
+    //清除上次内容\r
+    wrapper_gatts_clear_service();\r
+\r
     // osDelay(100);\r
-    svr_ble_btcallback_reg();\r
-  \r
+    srv_ble_server_register_gap_ble_callbacks();\r
+    srv_ble_server_register_gatt_callbacks();\r
+\r
     //add server and ble service\r
-    svr_ble_bt_init_gatts();\r
+    svr_ble_register_service();\r
+    \r
     #ifdef SUPPORT_HID_SERVICE\r
     // ble_hid_server_init();\r
     #endif\r
+\r
     // svr_alipay_bt_init_gatts();\r
     ble_factory_server_init(g_ble_server_id);\r
+    \r
     ble_ppgtest_server_init(g_ble_server_id);\r
 \r
     g_custom_ble_init_flag = true;\r
     return;\r
 }\r
 //关闭蓝牙\r
-void closeBle(void)\r
+void custom_ble_service_stop(void)\r
 {\r
-    // printf("%d %s\n",__LINE__,__FUNCTION__);\r
-    if(AdverFlag == true)//没有连接的状态下关闭蓝牙#只能手动开启蓝牙\r
-    {\r
-        AdverFlag = false;\r
-        g_ble_init_flag = false;\r
-        // bd_addr_t bd_addr;\r
-        // unsigned char addr[BLE_MAC_MAX_LEN] = {0};\r
-        // bluetooth_get_local_addr(&addr[0],BD_ADDR_LEN);\r
-        // memcpy(bd_addr.addr,addr,BLE_MAC_MAX_LEN);\r
-        errcode_t ret = 0;\r
-        if(Bleconnect == GAP_BLE_STATE_CONNECTED){//设备连接需要断开\r
-            ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&phone_addr);//与固定的mac设置地址进行断开连接\r
-        }\r
-        // // ret = gap_ble_remove_all_pairs();//删除和所有配对的手机app\r
-        // // gap_remove_all_pairs();\r
-        svr_ble_adv_stop();//停止广播 不发送广播数据 就是app搜索不到该设备了\r
-        free_ble_data();\r
-        // ble_recv_register_msg_callback(NULL);\r
-        // ret = disable_bt_stack();//关闭ble 直接断开和当前连接的手机app\r
-        // ret = disable_ble();//关闭ble 直接断开和当前连接的手机app\r
-        // 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]);\r
-    }else{\r
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AdverFlag false no need closeBle\r\n");\r
-\r
+    AdverFlag = false;\r
+    errcode_t ret = 0;\r
+    if(Bleconnect == GAP_BLE_STATE_CONNECTED){//设备连接需要断开\r
+        ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&phone_addr);//与固定的mac设置地址进行断开连接\r
     }\r
+    svr_ble_adv_stop();//停止广播 不发送广播数据 就是app搜索不到该设备了\r
+    free_ble_data(); //删除所有协议缓存数据\r
 }\r
 //开启蓝牙\r
-void openBle(void)\r
+void custom_ble_service_start(void)\r
 {\r
-    printf("%d %s\n",__LINE__,__FUNCTION__);\r
-    if(AdverFlag == false)//在连接的状态下不需要\r
-    {\r
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AdverFlag true need openBle again\r\n");\r
-        AdverFlag = true;\r
-        svr_ble_adv_start_param();\r
-    }else{\r
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AdverFlag true no need openBle again\r\n");\r
-\r
-    }\r
+   AdverFlag = true;\r
+   svr_ble_adv_start_param();\r
+   \r
 }\r
 #define MODE_BLE_ADV_SRV (0)\r
 #define MODE_ALIPAY_ADV_SRV (1)\r
 void ble_avd_mode_change(uint8_t mode)\r
 {\r
     \r
-    if(AdverFlag == false)\r
-    {\r
-        return;\r
-    }\r
     uint8_t adv_ok = 0;\r
     switch(mode)\r
     {\r
@@ -1389,12 +1274,12 @@ void ble_avd_mode_change(uint8_t mode)
             {\r
                 exit_alipay_gui = 0;\r
                 printf("ble_advd_start!!!!!!!!! %d %d Bleconnect:%d\r\n",ble_adv_falg,AdverFlag,Bleconnect);\r
-                if(ble_adv_falg == false && AdverFlag == true)//关闭ble 并且没有广播不需要广播数据了\r
+                if(ble_adv_falg == 0 && AdverFlag == true)//关闭ble 并且没有广播不需要广播数据了\r
                 {\r
                     adv_ok = 1;\r
                     svr_ble_adv_start(); \r
                 }\r
-                if(Bleconnect == true && adv_ok != 1)//退出识图还在连接app需要关闭广播数据\r
+                if(Bleconnect == GAP_BLE_STATE_CONNECTED && adv_ok != 1)//退出识图还在连接app需要关闭广播数据\r
                 {\r
                     svr_ble_adv_stop();\r
                 }\r
@@ -1405,7 +1290,7 @@ void ble_avd_mode_change(uint8_t mode)
 \r
             \r
             exit_alipay_gui = 1;\r
-            printf("alipay_ble_advd_start!!!!!!!!! %d %d",ble_adv_falg,AdverFlag);\r
+            printf("alipay_ble_advd_start!!!!!!!!! ble_adv_falg: %d ,AdverFlag: %d",ble_adv_falg,AdverFlag);\r
             svr_ble_adv_start(); \r
           \r
             break;\r
index 162ae5f..6e6142c 100644 (file)
@@ -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);
index baa64b4..e2753f9 100644 (file)
@@ -52,8 +52,10 @@ static void ble_factorytest_add_service(uint8_t server_id)
    errcode_t ret = 0;\r
 #ifndef SUPPORT_AT_OHOSFWK\r
     ret = gatts_add_service(server_id, &factory_service_uuid, true);\r
+    // 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);\r
 #else\r
     ret = wrapper_gatts_add_service(server_id, &factory_service_uuid, true);\r
+    // 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);\r
 #endif\r
 \r
 }\r
index 0131acb..fa69240 100644 (file)
@@ -65,8 +65,10 @@ static void ble_ppgtest_add_service(uint8_t server_id)
     errcode_t ret = 0;\r
 #ifndef SUPPORT_AT_OHOSFWK\r
     ret = gatts_add_service(server_id, &ppgtest_service_uuid, true);\r
+    // 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);\r
 #else\r
     ret = wrapper_gatts_add_service(server_id, &ppgtest_service_uuid, true);\r
+    // 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);\r
 #endif\r
 }\r
 static void ble_ppgtest_add_descriptor_report_reference(uint8_t server_id, uint16_t srvc_handle, bool is_notify_report)\r
index ae48297..e6d8da7 100644 (file)
@@ -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)