sendok = sendBleData(value,19);\r
msleep(50);//增加延时,确保可以成功发送解除绑定\r
\r
- bool ret = bt_is_acl_connected(&phone_addr);\r
+ bd_addr_t addr={0};\r
+ get_phone_addr(&addr,g_ble_conn_id);\r
+\r
+ bool ret = bt_is_acl_connected(&addr);\r
if(flag == 1)\r
{ \r
if(0!=remove(PHONE_WATCH_CONFIG_PATH))\r
}\r
void getDeviceState(void)//获取设备状态\r
{\r
- bool ret = bt_is_acl_connected(&phone_addr);\r
+ bd_addr_t addr={0};\r
+ get_phone_addr(&addr,g_ble_conn_id);\r
+\r
+ bool ret = bt_is_acl_connected(&addr);\r
printf("getDeviceState ret:%d\r\n",ret);\r
}\r
\r
if(flag == 1)\r
{\r
first_bond = 1;\r
- // 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]);\r
- // 一键双连使能(依赖安全连接参数配置)\r
- \r
+\r
if(get_ble_pair())\r
{\r
- errcode_t code = gap_ble_pair_remote_device(&phone_addr);\r
+ bd_addr_t addr={0};\r
+ get_phone_addr(&addr,g_ble_conn_id);\r
+\r
+ errcode_t code = gap_ble_pair_remote_device(&addr);\r
if(code!=ERRCODE_SUCC)\r
{\r
printf("gap_ble_pair_remote_device fail %X\r\n",code);\r
}else{\r
first_bond = 0;\r
errcode_t ret = 0;\r
- ret = gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接\r
+ bd_addr_t addr={0};\r
+ get_phone_addr(&addr,g_ble_conn_id);\r
+\r
+ ret = gap_ble_disconnect_remote_device(&addr);//与固定的mac设置地址进行断开连接\r
// printf("gap_ble_disconnect_remote_device %x\r\n",ret);\r
ret = gap_ble_remove_all_pairs(); \r
bool ret_ok = gap_remove_all_pairs();\r
uint8_t mac_data[6];\r
memset(mac_data,0,6);\r
GetwatchSaveMac(&mac_data,&MacType);\r
- errcode_t ret1 = gap_disconnect_remote_device(&disconect_addr);\r
- gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接\r
+ \r
+ bd_addr_t addr={0};\r
+ get_phone_addr(&addr,g_ble_conn_id);\r
+\r
+ errcode_t ret1 = gap_disconnect_remote_device(&addr);\r
+ gap_ble_disconnect_remote_device(&addr);//与固定的mac设置地址进行断开连接\r
+\r
if (flag == 1){\r
- errcode_t ret= gap_ble_remove_pair(&disconect_addr);//清除配对信息\r
+ errcode_t ret= gap_ble_remove_pair(&addr);//清除配对信息\r
\r
gap_ble_remove_all_pairs(); \r
bool ret_flag = gap_remove_all_pairs();\r
errcode_t ret = gap_ble_set_ctkd_enable(true);\r
}\r
\r
- printf("phone_addr:%02x-%02x-%02x-%02x-%02x-%02x type:%d ",phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2],\r
- phone_addr.addr[3],phone_addr.addr[4],phone_addr.addr[5],phone_addr.type);\r
-\r
+ \r
if(get_ble_pair())\r
{\r
- errcode_t code = gap_ble_pair_remote_device(&phone_addr);\r
+ bd_addr_t addr={0};\r
+ get_phone_addr(&addr,g_ble_conn_id);\r
+\r
+ errcode_t code = gap_ble_pair_remote_device(&addr);\r
if(code!=ERRCODE_SUCC)\r
{\r
printf("gap_ble_pair_remote_device fail %X\r\n",code);\r
}\r
}\r
- // ret = gap_ble_pair_remote_device(&phone_addr);\r
- // printf("gap_ble_pair_remote_device ret:%x \r\n",ret);\r
+ \r
bond = 0x02;//手表与该手机绑定过\r
value[17] = bond;//\r
value[18] = Calculate_CRC(value,18);\r
\r
if(bond == 0x03)\r
{\r
- // gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接\r
devnamelen = 0;\r
GetwatchSaveNameLen(&devnamelen);//获取手表设备保存手机的设备名称长度\r
if(devnamelen > 0)\r
static uint8_t scan_data[BLE_SCAN_DATA_LENTH] = {0};\r
\r
uint8_t phone_mac_data[6]={0};\r
-bd_addr_t phone_addr;//发起配对地址反序\r
+\r
+#define ble_add_max_num 10\r
+static bd_addr_t phone_addr[ble_add_max_num];\r
+static uint16_t ble_conn_id[ble_add_max_num];\r
+\r
+\r
bd_addr_t disconect_addr;//断开连接地址不需要反序\r
+\r
uint8_t Bleconnect = 0;//蓝牙默认是断开 0 1 为连接\r
uint8_t devpair_state = 0;//设备配对状态 0 未配对 1已配对成功\r
uint8_t bond_flag = 0;//绑定标识\r
static uint32_t handle_num=0;\r
\r
\r
-void get_phone_addr(bd_addr_t *addr)\r
+void get_phone_addr(bd_addr_t *addr,uint16_t conn_id)\r
{\r
- if (addr!=NULL) memcpy(addr,&phone_addr,sizeof(bd_addr_t));\r
+ if (addr==NULL)\r
+ return;\r
+\r
+ for(int i=0;i<ble_add_max_num;i++)\r
+ {\r
+ if(conn_id==ble_conn_id[i])\r
+ {\r
+ memcpy(addr,&phone_addr[i],sizeof(bd_addr_t));\r
+ }\r
+ }\r
+ \r
}\r
-static void set_phone_info(bd_addr_t *addr)//保存手机信息 包含手机mac地址\r
+static uint16_t add_num=0;\r
+\r
+static void set_phone_info(bd_addr_t *addr,uint16_t conn_id)//保存手机信息 包含手机mac地址\r
{\r
- memcpy(&phone_addr,addr,sizeof(bd_addr_t));\r
- memcpy(&disconect_addr,addr,sizeof(bd_addr_t));\r
+ memcpy(&phone_addr[add_num],addr,sizeof(bd_addr_t));\r
+ ble_conn_id[add_num]=conn_id;\r
+\r
+ add_num++;\r
+ if(add_num==ble_add_max_num)\r
+ {\r
+ add_num=0;\r
+ }\r
+}\r
+\r
+\r
+static void clean_phone_info(uint16_t conn_id)//保存手机信息 包含手机mac地址\r
+{\r
+ for(int i=0;i<ble_add_max_num;i++)\r
+ {\r
+ if(conn_id==ble_conn_id[i])\r
+ {\r
+ bd_addr_t addr={0};\r
+ memcpy(&phone_addr[i],&addr,sizeof(bd_addr_t));\r
+ ble_conn_id[i]=0;\r
+ return;\r
+ }\r
+ }\r
}\r
\r
+\r
enum{\r
BLE_CHARACTERISTIC_RECV_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_NOTIFY|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP|GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_READ,\r
BLE_CHARACTERISTIC_SNED_SHORT_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP,\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "其他连接断开,不做多余处理 \r\n");\r
}\r
+ clean_phone_info(conn_id);\r
\r
} \r
else \r
{\r
int ret =svr_ble_adv_stop();\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"%x",ret);\r
- set_phone_info(addr);\r
+ //第一个连接\r
+ \r
}\r
-\r
+ set_phone_info(addr,conn_id);\r
\r
ble_connect_ok();\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr: ****%02x%02x%02x%02x \n",\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
sendParieSuccess(1,addr);\r
uapi_set_br_address(addr);\r
-\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_gap_ble_auth_complete_callback %x %x %x %x %x %x\r\n",\r
- phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2],phone_addr.addr[3],phone_addr.addr[4],phone_addr.addr[5]);\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_gap_ble_auth_complete_callback %x %x %x %x %x %x\r\n",\r
- addr->addr[0],addr->addr[1],addr->addr[2],addr->addr[3],addr->addr[4],addr->addr[5]);\r
}\r
\r
\r
\r
void svr_ble_bluetooth_init(void)\r
{\r
- memset(&phone_addr,0,sizeof(bd_addr_t));\r
+ // memset(&phone_addr,0,sizeof(bd_addr_t));\r
\r
srv_ble_server_register_gap_ble_callbacks();\r
srv_ble_server_register_gatt_callbacks();\r
{\r
AdverFlag = false;\r
errcode_t ret = 0;\r
+ bd_addr_t addr={0};\r
+ get_phone_addr(&addr,g_ble_conn_id);\r
+\r
if(Bleconnect == GAP_BLE_STATE_CONNECTED){//设备连接需要断开\r
- ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&phone_addr);//与固定的mac设置地址进行断开连接\r
+ ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&addr);//与固定的mac设置地址进行断开连接\r
}\r
\r
// 一键双连去使能\r
void uapi_ble_disconnect_device()\r
{\r
errcode_t ret = 0;\r
- ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&phone_addr);//与固定的mac设置地址进行断开连接\r
+ bd_addr_t addr={0};\r
+ get_phone_addr(&addr,g_ble_conn_id);\r
+\r
+ ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&addr);//与固定的mac设置地址进行断开连接\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gap_ble_disconnect_remote_device ret = %X", ret);\r
\r
}\r