先屏蔽绑定和解绑界面
authordxy <1731678236@qq.com>
Fri, 12 Apr 2024 03:44:59 +0000 (11:44 +0800)
committerdxy <1731678236@qq.com>
Fri, 12 Apr 2024 03:44:59 +0000 (11:44 +0800)
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c
code/sdk/application/wearable/service/ble_service/bleservice/bleService.c
code/sdk/application/wearable/service/ble_service/bleservice/bleService.h

index 9e84c0f..74db90b 100644 (file)
@@ -535,7 +535,11 @@ void getPhoneNameLen(uint8_t *crcnum,uint8_t *datalen)//获取手机设备名称
         }\r
         memcpy(datalen,&len,1);\r
         cJSON_Delete(root);\r
-    } \r
+    } else{\r
+        len = 0;\r
+\r
+        memcpy(datalen,&len,1);\r
+    }\r
 }\r
 \r
 static char *getPhoneName(uint8_t *crcnum)//获取手机设备名称\r
@@ -554,14 +558,19 @@ static char *getPhoneName(uint8_t *crcnum)//获取手机设备名称
                 savephonename =  malloc(sizeof(char)*datalen);\r
                 strcpy(str,pn->valuestring);\r
                 strcpy(savephonename,pn->valuestring);\r
-                free(str);\r
                 printf("str:%s savephonename:%s\n",str,savephonename);\r
             }\r
             printf("设备名称: %s\n", pn->valuestring);\r
         }\r
         cJSON_Delete(root);\r
     } \r
-    return str;\r
+    if (str == NULL){\r
+        return NULL;\r
+    } \r
+    else{\r
+        return str;\r
+    }\r
+    \r
 }\r
 void getPhoneMac(uint8_t *crcnum,uint8_t *phoneMac)//获取手机设备mac这个是手表上传给手机的mac地址\r
 {\r
@@ -588,15 +597,13 @@ void getPhoneMac(uint8_t *crcnum,uint8_t *phoneMac)//获取手机设备mac这个
             }\r
             printf("\n");\r
         }\r
-        if(phone_tmp[0] == 0 && phone_tmp[1] == 0 && phone_tmp[2] == 0 && phone_tmp[3] == 0 && phone_tmp[4] == 0 && phone_tmp[5] == 0){\r
-            memcpy(phoneMac,0,6);\r
-        }else\r
-        {\r
-            memcpy(phoneMac,phone_tmp,6);\r
-            \r
-        }\r
+\r
+        memcpy(phoneMac,phone_tmp,6);\r
         cJSON_Delete(root);\r
     } \r
+    else{\r
+        memcpy(phoneMac,phone_tmp,6);\r
+    }\r
 }\r
 \r
 void GetwatchSaveMac(uint8_t *mac,uint8_t *mactype)//获取手表本地保存的mac地址和mac地址类型 分共有和私有的\r
@@ -650,6 +657,12 @@ void GetwatchSaveMac(uint8_t *mac,uint8_t *mactype)//获取手表本地保存的
             memcpy(mac,mac_tmp,6);\r
         }\r
         cJSON_Delete(root);\r
+    }else\r
+    {\r
+        memset(mac_tmp,0,6);\r
+        memcpy(mac,mac_tmp,6);\r
+        uint8_t type = 0;\r
+        memcpy(&mactype,&type,1);\r
     }\r
 }\r
 static void GetwatchSaveNameLen(uint8_t *datalen)//获取手表本地保存的手机设备名称长度\r
@@ -682,6 +695,9 @@ static void GetwatchSaveNameLen(uint8_t *datalen)//获取手表本地保存的
         memcpy(datalen,&len,1);\r
         // 释放资源\r
         cJSON_Delete(root);\r
+    }else{\r
+        len = 0;\r
+       memcpy(datalen,&len,1); \r
     }\r
 }\r
 static char *GetwatchSaveName(void)//获取手表本地保存的手机设备名称\r
@@ -713,10 +729,6 @@ static char *GetwatchSaveName(void)//获取手表本地保存的手机设备名
                     str = malloc(sizeof(char)*showname_len);\r
                     pn->valuestring[showname_len-1]='\0';\r
                     strcpy(str,pn->valuestring);\r
-                    if(str)\r
-                    {\r
-                        free(str);\r
-                    }\r
                     printf("GetwatchSaveName:%s",pn->valuestring);\r
                 }\r
             }\r
@@ -724,14 +736,37 @@ static char *GetwatchSaveName(void)//获取手表本地保存的手机设备名
         // 释放资源\r
         cJSON_Delete(root);\r
     }\r
-    return str;\r
+    if (str == NULL)\r
+    {\r
+        return NULL;\r
+    }else{\r
+        return str;\r
+    }\r
+    \r
 }\r
 void cleanUnbindInfor(void)//和旧手机解绑清除配对信息\r
 {\r
+    uint8_t value[19];\r
+    memset(value,0,19);\r
+    uint32_t tmp = 1;\r
+    uint16_t tmp_fen= 1;\r
+    value[0] =0x72;\r
+    value[1] =0x05;\r
+    value[2] =0x11;\r
+    memcpy(value+3,&tmp,4);\r
+    memcpy(value+7,&tmp,4);\r
+    memcpy(value+11,&tmp,4);\r
+    memcpy(value+15,&tmp_fen,2);\r
+    value[17] = 0x03;//\r
+    value[18] = Calculate_CRC(value,18);\r
+    sendBleData(value,19);\r
+\r
     uint8_t MacType = 0;\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
+    // printf("inforaddr:%x",ret1);\r
     gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接\r
     bd_addr_t inforaddr;\r
     inforaddr.addr[0] = mac_data[0];\r
@@ -742,22 +777,25 @@ void cleanUnbindInfor(void)//和旧手机解绑清除配对信息
     inforaddr.addr[5] = mac_data[5];\r
     inforaddr.type = MacType;\r
     // printf("inforaddr:%x-%x-%x-%x-%x-%x",inforaddr.addr[0],inforaddr.addr[1],inforaddr.addr[2],inforaddr.addr[3],inforaddr.addr[4],inforaddr.addr[5]);\r
-    errcode_t ret= gap_ble_remove_pair(&inforaddr);//清除配对信息\r
-    if(ret!=ERRCODE_SUCC)\r
-    {\r
-        printf("gap_ble_remove_pair : %X\r\n",ret);\r
-    }\r
+    errcode_t ret= gap_ble_remove_pair(&disconect_addr);//清除配对信息\r
+    gap_remove_pair(&disconect_addr);\r
+    // if(ret!=ERRCODE_SUCC)\r
+    // {\r
+    //     printf("gap_ble_remove_pair : %X\r\n",ret);\r
+    // }\r
     //清除保存的文件信息\r
     if(0!=remove(PHONE_WATCH_CONFIG_PATH))\r
     {\r
         printf("json remove fail\r\n");\r
     } \r
+    uapi_reboot_device();\r
+\r
 \r
 }\r
 void sendBindInfor(uint8_t *crcnum)\r
 {\r
-    uint8_t value[20];\r
-    memset(value,0,20);\r
+    uint8_t value[19];\r
+    memset(value,0,19);\r
     uint32_t tmp = 1;\r
     uint16_t tmp_fen= 1;\r
     value[0] =0x72;\r
@@ -767,11 +805,11 @@ void sendBindInfor(uint8_t *crcnum)
     memcpy(value+7,&tmp,4);\r
     memcpy(value+11,&tmp,4);\r
     memcpy(value+15,&tmp_fen,2);\r
-\r
+    \r
     uint8_t copare_mac[6];\r
     memset(copare_mac,0,6);\r
     uint8_t datalen=0;\r
-    char *devname;\r
+    char *devname = NULL;\r
     uint8_t devnamelen = 0;\r
     uint8_t mac_tmp[6];\r
     memset(mac_tmp,0,6);\r
@@ -779,19 +817,24 @@ void sendBindInfor(uint8_t *crcnum)
     uint8_t bond = 1;//未与任何手机绑定过\r
     errcode_t ret = 0;\r
     first_bond = 0;\r
-   \r
-\r
     uint8_t save_mac[6];\r
     memset(save_mac,0,6);\r
-    char *showname;\r
+    char *showname = NULL;\r
     uint8_t showname_len = 0;\r
     uint8_t MacType = 0;\r
 \r
     GetwatchSaveMac(&save_mac,&MacType);//获取手表设备本地保存的mac地址和mac地址类型 \r
     getPhoneMac(crcnum,&copare_mac);\r
-   \r
+    // save_mac[0] = 90;\r
+    // memset(copare_mac,0,6);\r
     if(save_mac[0] == 0 && save_mac[1] == 0 && save_mac[2] == 0 && save_mac[3] == 0 && save_mac[4] == 0 && save_mac[5] == 0)//只要手表本地存储没有mac地址就走连接流程重新绑定\r
     {\r
+        bond = 0x01;//手表未和任何手机绑定过\r
+        value[17] = bond;//\r
+        value[18] = Calculate_CRC(value,18);\r
+        sendBleData(value,19);\r
+        comfirmPaire(1);\r
+        return;\r
         #ifdef SUPPORT_DEVICE_PAIRING_NOTIFICATION\r
         devnamelen = 0;\r
         getPhoneNameLen(crcnum,&devnamelen);//获取手机下发的手机设备名称长度\r
@@ -799,17 +842,21 @@ void sendBindInfor(uint8_t *crcnum)
         {\r
             devname = getPhoneName(crcnum);\r
             printf("devname!!!!!!!!!:%s devnamelen:%d",devname,devnamelen);\r
-            CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,NULL,0);\r
-            printf("bond flag:!!!!!!!!!\r\n");\r
+            if (devname != NULL){\r
+                printf("phone devname is name!!!!!!!!!:");\r
+                CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,NULL,0);\r
+            }else{\r
+                printf("phone devname is no name11111!!!!!!!!!:");\r
+                CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,NULL,0);\r
+            }\r
         }else{\r
+            printf("phone devname is no name!!!!!!!!!:");\r
             CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,NULL,0);\r
         }\r
         #endif\r
-        bond = 0x01;//手表未和任何手机绑定过\r
+        \r
     }else\r
     {\r
-        // printf("success parsing JSON :save_mac :%x %x %x %x %x %x copare_mac %x %x %x %x %x %x;\n",save_mac[0],save_mac[1],save_mac[2],save_mac[3],save_mac[4],save_mac[5],\r
-            // copare_mac[0],copare_mac[1],copare_mac[2],copare_mac[3],copare_mac[4],copare_mac[5]);\r
         if(copare_mac[0] == 0 && copare_mac[1] == 0 && copare_mac[2] == 0 && copare_mac[3] == 0 && copare_mac[4] == 0 && copare_mac[5] == 0) \r
         {\r
             bond = 0x03;//手表和其他手机绑定过\r
@@ -823,6 +870,10 @@ void sendBindInfor(uint8_t *crcnum)
                 ret = gap_ble_pair_remote_device(&phone_addr);\r
                 printf("ret:%d",ret);\r
                 bond = 0x02;//手表与该手机绑定过\r
+                value[17] = bond;//\r
+                value[18] = Calculate_CRC(value,18);\r
+                sendBleData(value,19);\r
+                return;\r
             }else{\r
                 bond = 0x03;//手表与其他手机绑定过\r
             }\r
@@ -834,15 +885,31 @@ void sendBindInfor(uint8_t *crcnum)
     sendBleData(value,19);\r
     if(bond == 0x03)\r
     {\r
+        cleanUnbindInfor();\r
+        return;\r
+        errcode_t ret1 = gap_disconnect_remote_device(&disconect_addr);\r
+        gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接\r
         devnamelen = 0;\r
         GetwatchSaveNameLen(&devnamelen);//获取手表设备保存手机的设备名称长度\r
         if(devnamelen > 0)\r
         {   \r
             devname = GetwatchSaveName();\r
             printf("devname:%s showname_len:%d",devname,devnamelen);\r
-            CustomEventPublish(TOPIC_EVENT_DEVICE_UNBIND,(uint8_t *)devname,devnamelen);\r
+            // cleanUnbindInfor();\r
+            if (devname != NULL){\r
+                printf("devname:is no null!!!!!");\r
+                CustomEventPublish(TOPIC_EVENT_DEVICE_UNBIND,(uint8_t *)devname,devnamelen);\r
+            }else{\r
+                printf("devname:is  null!!!!!");\r
+                CustomEventPublish(TOPIC_EVENT_DEVICE_UNBIND,NULL,0);\r
+            }\r
+            \r
             printf("cleanUnbindInfor!!!!!!!");\r
         }else{\r
+            cleanUnbindInfor();\r
+            return;\r
+            printf("devname:is no name!!!!!");\r
+            // cleanUnbindInfor();\r
             CustomEventPublish(TOPIC_EVENT_DEVICE_UNBIND,NULL,0);\r
         }\r
         //加解绑提示界面是否和旧的手机解绑app 弹窗提示\r
index 0088bc3..2db8c9a 100644 (file)
@@ -93,7 +93,7 @@ uint8_t phone_mac_data[6]={0};
 bd_addr_t phone_addr;//发起配对地址反序\r
 bd_addr_t disconect_addr;//断开连接地址不需要反序\r
 uint8_t Bleconnect = 0;//蓝牙默认是断开 0 1 为连接\r
-\r
+uint8_t devpair_state = 0;//设备配对状态 0 未配对 1已配对成功\r
 uint8_t bond_flag = 0;//绑定标识\r
 uint16_t ble_nus_max_data_len = SDK_BLE_MTU_MIN - 3; \r
 #define A2DP_STREAM_ACCEPT_TIMER_PERIOD 500\r
@@ -148,7 +148,7 @@ static void svr_ble_adv_data_set(int adv_id)
     gap_ble_config_adv_data_t adv_data_info;\r
     memset_s(&adv_data_info, sizeof(gap_ble_config_adv_data_t), 0, sizeof(gap_ble_config_adv_data_t));\r
 \r
-#if 1\r
+#if 0\r
     unsigned char set_mac[6] = {0x61,0x22,0x33,0x44,0x09,0x26};\r
     bluetooth_set_local_addr(set_mac,6);\r
     bd_addr_t addr_info;\r
@@ -159,7 +159,7 @@ static void svr_ble_adv_data_set(int adv_id)
     bluetooth_get_local_addr(&addr[0],len);\r
     char watchName[32];\r
     memset_s(watchName, sizeof(watchName), 0, sizeof(watchName));\r
-    (void)sprintf_s(watchName, sizeof(watchName), "%s %x%x",BLE_DEFAULT_NAME,addr[1],addr[0]);\r
+    (void)sprintf_s(watchName, sizeof(watchName), "%s %02x%02x",BLE_DEFAULT_NAME,addr[1],addr[0]);\r
     // (void)sprintf_s(watchName, sizeof(watchName), "%s",BLE_DEFAULT_NAME);\r
 \r
     ret = bluetooth_set_local_name((unsigned char*)watchName, strlen((char*)watchName) + 1);\r
@@ -275,6 +275,7 @@ void svr_ble_adv_start_param(void)
 static 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
     uint16_t number;\r
     errcode_t ret = gap_ble_get_paired_devices_num(&number);\r
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "number :%d addr!!! 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x addr->type:%d\r\n",number,addr->addr[0],addr->addr[1],addr->addr[2],addr->addr[3],\r
@@ -287,6 +288,7 @@ static void svr_ble_connstate_change_cb(unsigned short conn_id, bd_addr_t *addr,
         svr_ble_adv_start();\r
         // }    \r
     } else {\r
+        devpair_state = 0;//\r
         svr_ble_adv_stop();\r
         set_phone_info(addr);\r
         Bleconnect = GAP_BLE_STATE_CONNECTED;//蓝牙已连接\r
@@ -297,6 +299,7 @@ static void svr_ble_connstate_change_cb(unsigned short conn_id, bd_addr_t *addr,
 \r
 static 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
@@ -1237,8 +1240,8 @@ void svr_ble_reset_init(void)//重新启ble服务
 \r
 void svr_bluetooth_init(void)\r
 {\r
-    // bool ret = enable_bt_stack();\r
-    bool ret = enable_ble();\r
+    bool ret = enable_bt_stack();\r
+    // bool ret = enable_ble();\r
     if (ret != ERRCODE_SUCC) {\r
         // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "svr_bluetooth_init enable_bt_stack ret:%u.\r\n", ret);\r
     }\r
index 4bbc7d0..742b767 100644 (file)
@@ -16,6 +16,7 @@ extern bd_addr_t disconect_addr;//断开连接地址不需要反序
 extern uint8_t bond_flag;
 extern uint8_t phone_mac_data[6];
 extern uint8_t Bleconnect;//蓝牙默认是断开 0 1 为连接
+extern uint8_t devpair_state;
 extern uint8_t data2ae3Cmd;//2ae3短指令特征值
 extern uint8_t data2ae4Cmd;//长指令特征值 大于20个字节的数据app下发的
 extern uint16_t ble_nus_max_data_len;