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
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
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
\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
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
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
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
{ \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
\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
// 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
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
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
// 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
{\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
\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