From 48cfc7bcf4fbbc5dbe041434d3baa11521e44a68 Mon Sep 17 00:00:00 2001 From: hcj <1224667075@qq.com> Date: Sun, 29 Sep 2024 17:11:19 +0800 Subject: [PATCH] =?utf8?q?=E5=A4=9A=E8=93=9D=E7=89=99=E8=BF=9E=E6=8E=A5?= =?utf8?q?=E9=80=82=E9=85=8D=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../service/ble_service/bleservice/bleANCS.c | 2 +- .../service/ble_service/bleservice/bleEvent.c | 48 +++++++----- .../ble_service/bleservice/bleService.c | 76 ++++++++++++++----- .../ble_service/bleservice/bleService.h | 3 +- 4 files changed, 92 insertions(+), 37 deletions(-) diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleANCS.c b/code/sdk/application/wearable/service/ble_service/bleservice/bleANCS.c index 763a23abf..7e7209f87 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleANCS.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleANCS.c @@ -289,7 +289,7 @@ static void ble_ancs_client_notify_source_cbk(uint8_t client_id, uint16_t conn_i uint32_t creationTime=0; int ret = uapi_get_timestampe_ss(&creationTime); //当前时间戳减去订阅通知时间戳3s以上的通知,才要求数据(过滤ios将所有未查看消息发过来) - if(creationTime-subscribe_notify_creationTime>5) + //if(creationTime-subscribe_notify_creationTime>5) ble_ancs_client_at_cmd_get_notify_att(conn_id, notify_src->notification_uid); // diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c index 71abb2a54..46679966a 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c @@ -588,7 +588,10 @@ errcode_t UnbindSucessCmd(uint8_t flag)//发送解绑指令,解绑界面调用 sendok = sendBleData(value,19); msleep(50);//增加延时,确保可以成功发送解除绑定 - bool ret = bt_is_acl_connected(&phone_addr); + bd_addr_t addr={0}; + get_phone_addr(&addr,g_ble_conn_id); + + bool ret = bt_is_acl_connected(&addr); if(flag == 1) { if(0!=remove(PHONE_WATCH_CONFIG_PATH)) @@ -605,7 +608,10 @@ errcode_t UnbindSucessCmd(uint8_t flag)//发送解绑指令,解绑界面调用 } void getDeviceState(void)//获取设备状态 { - bool ret = bt_is_acl_connected(&phone_addr); + bd_addr_t addr={0}; + get_phone_addr(&addr,g_ble_conn_id); + + bool ret = bt_is_acl_connected(&addr); printf("getDeviceState ret:%d\r\n",ret); } @@ -663,12 +669,13 @@ void comfirmPaire(uint8_t flag) if(flag == 1) { first_bond = 1; - // printf("gap_ble_pair_remote_device 333333333 %x-%x-%x-%x-%x-%x\r\n",phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2],phone_addr.addr[3],phone_addr.addr[4],phone_addr.addr[5]); - // 一键双连使能(依赖安全连接参数配置) - + if(get_ble_pair()) { - errcode_t code = gap_ble_pair_remote_device(&phone_addr); + bd_addr_t addr={0}; + get_phone_addr(&addr,g_ble_conn_id); + + errcode_t code = gap_ble_pair_remote_device(&addr); if(code!=ERRCODE_SUCC) { printf("gap_ble_pair_remote_device fail %X\r\n",code); @@ -678,7 +685,10 @@ void comfirmPaire(uint8_t flag) }else{ first_bond = 0; errcode_t ret = 0; - ret = gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接 + bd_addr_t addr={0}; + get_phone_addr(&addr,g_ble_conn_id); + + ret = gap_ble_disconnect_remote_device(&addr);//与固定的mac设置地址进行断开连接 // printf("gap_ble_disconnect_remote_device %x\r\n",ret); ret = gap_ble_remove_all_pairs(); bool ret_ok = gap_remove_all_pairs(); @@ -970,10 +980,15 @@ void cleanUnbindInfor(uint8_t flag)//和旧手机解绑清除配对信息 uint8_t mac_data[6]; memset(mac_data,0,6); GetwatchSaveMac(&mac_data,&MacType); - errcode_t ret1 = gap_disconnect_remote_device(&disconect_addr); - gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接 + + bd_addr_t addr={0}; + get_phone_addr(&addr,g_ble_conn_id); + + errcode_t ret1 = gap_disconnect_remote_device(&addr); + gap_ble_disconnect_remote_device(&addr);//与固定的mac设置地址进行断开连接 + if (flag == 1){ - errcode_t ret= gap_ble_remove_pair(&disconect_addr);//清除配对信息 + errcode_t ret= gap_ble_remove_pair(&addr);//清除配对信息 gap_ble_remove_all_pairs(); bool ret_flag = gap_remove_all_pairs(); @@ -1133,19 +1148,19 @@ void sendBindInfor(uint8_t *data) errcode_t ret = gap_ble_set_ctkd_enable(true); } - printf("phone_addr:%02x-%02x-%02x-%02x-%02x-%02x type:%d ",phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2], - phone_addr.addr[3],phone_addr.addr[4],phone_addr.addr[5],phone_addr.type); - + if(get_ble_pair()) { - errcode_t code = gap_ble_pair_remote_device(&phone_addr); + bd_addr_t addr={0}; + get_phone_addr(&addr,g_ble_conn_id); + + errcode_t code = gap_ble_pair_remote_device(&addr); if(code!=ERRCODE_SUCC) { printf("gap_ble_pair_remote_device fail %X\r\n",code); } } - // ret = gap_ble_pair_remote_device(&phone_addr); - // printf("gap_ble_pair_remote_device ret:%x \r\n",ret); + bond = 0x02;//手表与该手机绑定过 value[17] = bond;// value[18] = Calculate_CRC(value,18); @@ -1160,7 +1175,6 @@ void sendBindInfor(uint8_t *data) if(bond == 0x03) { - // gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接 devnamelen = 0; GetwatchSaveNameLen(&devnamelen);//获取手表设备保存手机的设备名称长度 if(devnamelen > 0) 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 c274c0105..496a8a8a3 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c @@ -106,8 +106,14 @@ static bool AdverFlag = false; static uint8_t scan_data[BLE_SCAN_DATA_LENTH] = {0}; uint8_t phone_mac_data[6]={0}; -bd_addr_t phone_addr;//发起配对地址反序 + +#define ble_add_max_num 10 +static bd_addr_t phone_addr[ble_add_max_num]; +static uint16_t ble_conn_id[ble_add_max_num]; + + bd_addr_t disconect_addr;//断开连接地址不需要反序 + uint8_t Bleconnect = 0;//蓝牙默认是断开 0 1 为连接 uint8_t devpair_state = 0;//设备配对状态 0 未配对 1已配对成功 uint8_t bond_flag = 0;//绑定标识 @@ -128,16 +134,50 @@ static uint16_t Is_value_handle[handle_max_len]={0}; static uint32_t handle_num=0; -void get_phone_addr(bd_addr_t *addr) +void get_phone_addr(bd_addr_t *addr,uint16_t conn_id) { - if (addr!=NULL) memcpy(addr,&phone_addr,sizeof(bd_addr_t)); + if (addr==NULL) + return; + + for(int i=0;iaddr[0],addr->addr[1],addr->addr[2],addr->addr[3],addr->addr[4],addr->addr[5]); } @@ -1394,7 +1430,7 @@ void ble_unregist_server(void) void svr_ble_bluetooth_init(void) { - memset(&phone_addr,0,sizeof(bd_addr_t)); + // memset(&phone_addr,0,sizeof(bd_addr_t)); srv_ble_server_register_gap_ble_callbacks(); srv_ble_server_register_gatt_callbacks(); @@ -1424,8 +1460,11 @@ void custom_ble_service_stop(void) { AdverFlag = false; errcode_t ret = 0; + bd_addr_t addr={0}; + get_phone_addr(&addr,g_ble_conn_id); + if(Bleconnect == GAP_BLE_STATE_CONNECTED){//设备连接需要断开 - ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&phone_addr);//与固定的mac设置地址进行断开连接 + ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&addr);//与固定的mac设置地址进行断开连接 } // 一键双连去使能 @@ -1439,7 +1478,10 @@ void custom_ble_service_stop(void) void uapi_ble_disconnect_device() { errcode_t ret = 0; - ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&phone_addr);//与固定的mac设置地址进行断开连接 + bd_addr_t addr={0}; + get_phone_addr(&addr,g_ble_conn_id); + + ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&addr);//与固定的mac设置地址进行断开连接 WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gap_ble_disconnect_remote_device ret = %X", ret); } 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 ff5cb03fe..0f16548d4 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.h +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.h @@ -11,7 +11,6 @@ extern "C" { #include "errcode.h" extern uint16_t g_ble_conn_id; extern uint16_t g_ble_server_id; -extern bd_addr_t phone_addr; extern bd_addr_t disconect_addr;//断开连接地址不需要反序 extern uint8_t bond_flag; extern uint8_t phone_mac_data[6]; @@ -36,7 +35,7 @@ extern uint16_t g_ble_server_handle; void svr_ble_bluetooth_init(void);//蓝牙服务初始化 void custom_ble_service_stop(void);//主动关闭蓝牙 void custom_ble_service_start(void);//主动开启蓝牙 -void get_phone_addr(bd_addr_t *addr); +void get_phone_addr(bd_addr_t *addr,uint16_t conn_id); void svr_ble_adv_start_param(void);//开始蓝牙广播 -- 2.17.1