优化蓝牙数据接收:更改蓝牙名称为WatchSoar
authorDXY <1731678236@qq.com>
Fri, 10 May 2024 09:51:33 +0000 (17:51 +0800)
committerDXY <1731678236@qq.com>
Fri, 10 May 2024 09:51:33 +0000 (17:51 +0800)
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h
code/sdk/application/wearable/service/ble_service/bleservice/bleService.c
code/sdk/application/wearable/service/msg_center/src/notify/pairing_notification.cpp

index f2f691a..6d96217 100644 (file)
@@ -163,7 +163,25 @@ int ble_recv_msg_callback(uint8_t writ_read,uint16_t msg_typeID, uint8_t *msg_da
     int ret = 1;\r
     return ret;\r
 }\r
-\r
+int char_to_dec(char ch)\r
+{\r
+    int num = 0;\r
+    if(ch >= '0' && ch <= '9') {\r
+        num = num * 10 + (ch - '0');\r
+    }\r
+    return num;\r
+}\r
+void char_to_big(uint8_t *src_str,uint8_t *res_str,uint8_t len)\r
+{\r
+    for(uint8_t i = 0;i<len;i++)\r
+    {\r
+        if(src_str[i] >= 'a' && src_str[i] <= 'z') {\r
+            src_str[i] = src_str[i] - 32;\r
+            printf("src_tr:\r\n");\r
+        }\r
+    }\r
+    memcpy(res_str,src_str,len);\r
+}\r
 void cameram_data(void)//拍照发送数据 调用这个接口即可\r
 {\r
     uint8_t data[2]={0x01,0x00};\r
@@ -1874,9 +1892,12 @@ void SetsteptargetParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *to
 \r
 uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据\r
 {\r
+\r
     uint8_t *json;\r
     json = buf;\r
+    printf("jsonCheck_weather:len: json:%f jsonlen:%d\r\n",0.011,strlen((char *)json));\r
     #if 0\r
+\r
         FILE *fp=fopen("user/weather.json","wb+");\r
         printf("jsonCheck_weather len %d",strlen((char *)buf)+1);\r
         //fwrite((void*)buf,1,strlen((char *)buf)+1,fp);\r
@@ -1888,6 +1909,7 @@ uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据
         printf("天气 JSON解析错误\n");\r
         return 2;\r
     }\r
+    printf("开始解析天气 JSON\n");\r
     cJSON *now_cjson = cJSON_GetObjectItem(root, "now");\r
     \r
     int humidity = cJSON_GetObjectItem(now_cjson, "humidity")->valueint;\r
@@ -1898,7 +1920,7 @@ uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据
     int iconNight = cJSON_GetObjectItem(now_cjson, "iconNight")->valueint;\r
 \r
     set_weather_now_data(humidity,windScale,textNight,uvIndex,temp,iconNight);\r
-\r
+    printf("开始解析天气 JSON!!!!\n");\r
 //     "address":\r
 // {"lat":225737664,\r
 // "atm":"1010",\r
@@ -1913,7 +1935,7 @@ uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据
     int lat = cJSON_GetObjectItem(address_cjson, "lat")->valueint;\r
     int lon = cJSON_GetObjectItem(address_cjson, "lon")->valueint;\r
     set_weather_address_data(lat,atm,city,subLocality,lon);\r
-\r
+    printf("开始解析天气 JSON11111\n");\r
     cJSON *daily = cJSON_GetObjectItem(root, "daily");\r
     for(int i=0;i<7;i++)\r
     {   \r
@@ -1926,14 +1948,7 @@ uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据
         int  tempMax=cJSON_GetObjectItem(data,"tempMax")->valueint;\r
         set_weather_one_data(tempMin,iconDay,fxDate,tempMax,textDay,i);\r
     }\r
-   \r
-    //cJSON_GetObjectItem(daily, "daily");\r
-\r
-\r
-    \r
-    // if (cJSON_IsString(city_cjson)) {\r
-    //     printf("city: %s\n", city_cjson->valuestring);\r
-    // }\r
+    printf("开始解析天气 JSON2222222\n");\r
     cJSON_Delete(root);\r
     printf("weather data!!!!!!!!!!end\r\n");\r
     return 1;\r
@@ -1953,7 +1968,7 @@ void GetWeatherCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,
     memcpy(sendBuf+7,&tmp,4);\r
     memcpy(sendBuf+11,&tmp,4);\r
     memcpy(sendBuf+15,&tmp_data,2);\r
-\r
+    printf("GetWeatherCmd:len:%d crcnum:%s\r\n",len,crcnum);\r
        if(Check_CRC(crcnum,len,crcvalue))\r
        {\r
         uint8_t check = 1;\r
@@ -2160,7 +2175,7 @@ void getAPPaddressbook(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalD
 void type2AE4Data(uint8_t *buf_cmd,uint8_t *data,uint16_t datalen,uint8_t *totalData,uint8_t crcvalue)\r
 {\r
     uint16_t typeID = buf_cmd[1]*256+buf_cmd[2];\r
-    printf("type2AE4Data typeID:0x%x",typeID);\r
+    printf("type2AE4Data typeID:0x%x\r\n",typeID);\r
     switch (typeID) //ID\r
     {\r
         case USER_INFOR_CMD://app下发的获取用户信息\r
@@ -4479,7 +4494,7 @@ void getPhoneInfo_test(void)
 void bleLongRecvData(uint8_t *data, uint16_t data_size,uint8_t *buf_cmd,uint8_t *totalData,uint8_t crcvalue)//buf_cmd 指令前17个字节数据\r
 {\r
     uint8_t type=buf_cmd[1];\r
-    printf("type:%d %d data_size:%d data:%d crcvalue:%x",buf_cmd[0],type,data_size,data[0],crcvalue);\r
+    printf("type:%d %d data_size:%d data:%x crcvalue:%x\r\n",buf_cmd[0],type,data_size,data,crcvalue);\r
     switch (type)\r
     {\r
         case 0x02://获取手机信息\r
@@ -4760,10 +4775,10 @@ void ancsDataShowCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalDat
 void type2AE1Data(uint8_t *buf_cmd,uint8_t *data,uint16_t datalen,uint8_t *totalData,uint8_t crcvalue)\r
 {\r
     uint16_t typeID = buf_cmd[1]*256+buf_cmd[2];\r
-    printf("type2AE1Data typeID:0x%x",typeID);\r
+    printf("type2AE1Data typeID:0x%x\r\n",typeID);\r
     switch (typeID) //ID\r
     {\r
-        case ANDROID_ANCS_CMD://app下发的获取用户信息\r
+        case ANDROID_ANCS_CMD://\r
             ancsDataShowCmd(typeID,data,datalen,totalData,crcvalue);\r
             break;\r
     }\r
@@ -4771,7 +4786,7 @@ void type2AE1Data(uint8_t *buf_cmd,uint8_t *data,uint16_t datalen,uint8_t *total
 void bleRecvANCSData(uint8_t *data, uint16_t data_size,uint8_t *buf_cmd,uint8_t *totalData,uint8_t crcvalue)//buf_cmd 指令前17个字节数据\r
 {\r
     uint8_t type = buf_cmd[1];\r
-    printf("type:%d %d data_size:%d data:%d crcvalue:%x",buf_cmd[0],type,data_size,data[0],crcvalue);\r
+    printf("type:%d %d data_size:%d data:%d crcvalue:%x\r\n",buf_cmd[0],type,data_size,data[0],crcvalue);\r
     switch (type)\r
     {\r
         case 0x03://\r
@@ -4787,127 +4802,125 @@ uint32_t totalDataLen = 0;
 uint8_t totalpack = 0;\r
 uint8_t cmd_data[17];\r
 uint8_t *recvData;\r
+#include "los_memory.h"\r
+#define MAX_HANDLE_NUM 10\r
+typedef struct \r
+{\r
+    uint8_t *data;\r
+    int handle;\r
+    int data_len ;\r
+    int totalDataLen;\r
+    uint8_t cmd_data[17];\r
+    uint8_t crcvalue;\r
+} ble_read_data;\r
+//LITE_OS_SEC_TEXT_MINOR UINT32 LOS_MemInfoGet(VOID *pool, LOS_MEM_POOL_STATUS *poolStatus)\r
+//根据特征值分开组合读取的数据,并处理\r
+static ble_read_data handle_l[MAX_HANDLE_NUM]={0};\r
 void bleDataRecv(uint8_t *totalData, uint16_t event_size,uint16_t handle)\r
 {\r
-    \r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "xhandle %d,%d %d",data2ae3Cmd,data2ae4Cmd,handle);\r
     if(sendbigDataBufState == true)//正在发送大数据不接收任何app指令下发的数据\r
     {\r
         return;\r
     }\r
     \r
-    uint8_t crcvalue= 0x00;\r
-    if(1)//长数据接收\r
+    ble_read_data* read_data_tmp = NULL;\r
+    printf("bleDataRecv\r\n");\r
+    for(int i = 0;i<MAX_HANDLE_NUM;i++)\r
     {\r
-        while (1)\r
+        if(handle_l[i].handle == 0)//第一次用 \r
         {\r
-            if(muiltFlag == 0)\r
+            handle_l[i].handle = handle;\r
+            \r
+        }\r
+        if(handle_l[i].handle == handle)//以前用过 2AE4 2AE5 2AE1 2AE3 2AE0 \r
+        {\r
+            if((totalData[0]==0x4a || totalData[0]==0x73)&& totalData[1] <= 0x09){//多包第一包\r
+                if(handle_l[i].data)//保证第一包时释放buf\r
+                {\r
+                    free(handle_l[i].data);\r
+                    memset(&handle_l[i],0,sizeof(ble_read_data));\r
+                    handle_l[i].handle = handle;\r
+                }\r
+                \r
+            }\r
+            if(handle_l[i].data == NULL )//释放过的\r
             {\r
-                //每包的数据长度 如果当前报数的数据小于总的数据包数时认为就发送完成,没有就还有继续接收\r
-                // packdataLen = packdataLen+event_size-18;//  减掉18个数据 0+517 730总的数据长度 517还是小于730 说明还有数据没有接收完成 继续接收\r
-                if(event_size >= 17)//第一包的数据必须大于17个字节\r
+                printf("bleDataRecv!!!!!!!\r\n");\r
+                if(event_size <= 17 || !((totalData[0] ==0x4a || totalData[0] == 0x73) && totalData[1] <= 0x09))//第一包的数据一定要大于17个字节并且第一包的数据头必须为0x73 或者0x4a 并且类型小于0x09 类型根据协议可自行增加或者减少\r
                 {\r
-                    if(bigDataBuf != NULL){\r
-                        free(bigDataBuf);\r
-                        bigDataBuf = NULL;\r
-                    }\r
-                    if(recvData != NULL){\r
-                        free(recvData);\r
-                        recvData = NULL;\r
-                    }\r
-                    packdataLen = event_size;//第一包的数据大小 第二包不走这里 514-17 = 497\r
-                    memcpy(&totalDataLen,totalData+7,4);//总的数据大小\r
-                    printf("totalDataLen;%d totaldataLen:%d",totalDataLen,packdataLen);\r
-                    if(totalDataLen > event_size-18)//如果514-18 = 496 497 > 496 \r
+                    break;\r
+                }\r
+                memcpy(&totalDataLen,totalData+7,4);//总的数据大小\r
+                handle_l[i].totalDataLen = totalDataLen;\r
+                \r
+                \r
+                printf("bleDataRecv!!!!!!!%d\r\n",totalDataLen);\r
+                if(totalDataLen > event_size-17)//多包数据第一包处理,大于一包的数据长度 514-17=494\r
+                {\r
+                    packdataLen = event_size-17;//多包数据第一包数据不带CRC校验和的\r
+                    handle_l[i].data = malloc(totalDataLen+1);\r
+                    memcpy(handle_l[i].data,totalData+17,packdataLen);//从第十七个字节开始接收数据data\r
+                    handle_l[i].data_len = packdataLen;\r
+                    memset(handle_l[i].cmd_data,0,17);\r
+                    memcpy(handle_l[i].cmd_data,totalData,17);\r
+                }else{//一包数据\r
+                    packdataLen = event_size-18;\r
+                    if(totalDataLen != 0)\r
                     {\r
-                        printf("muilt totalDataLen;%d packdataLen:%d",totalDataLen,packdataLen);\r
-\r
-                        recvData = malloc(totalDataLen+18);\r
-                        if(recvData == NULL)return;\r
-                        muiltFlag = 1;//表示有两包以上的数据\r
-                        memcpy(recvData,totalData,event_size);//从第十七个字节开始接收数据data\r
-                        memset(cmd_data,0,17);\r
-                        memcpy(cmd_data,totalData,17);\r
-                        totalpack=1;\r
-                    }else{//直接发送数据解析\r
-                        muiltFlag = 0; \r
-                        packdataLen = event_size-17;\r
-                        memset(cmd_data,0,17);\r
-                        memcpy(cmd_data,totalData,17);\r
-                        printf("muilt totalDataLen11;%d packdataLen:%d",totalDataLen,packdataLen);\r
-                        if(totalDataLen == 0 && event_size == 18)//数据长度为0 没数据数据包 \r
-                        {\r
-                            crcvalue = totalData[event_size-1];\r
-                            bleLongRecvData(NULL,0,cmd_data,totalData,crcvalue);\r
-                        }else{\r
-                            // 73 2 10 1 0 0 0 16 0 0 0 1 0 0 0 16 0\r
-                            recvData = malloc(packdataLen-1);\r
-                            if(recvData != NULL){\r
-                                memcpy(recvData,totalData+17,packdataLen-1);\r
-                                crcvalue = totalData[event_size-1];\r
-                                bleLongRecvData(recvData,packdataLen-1,cmd_data,totalData,crcvalue);\r
-                                if(recvData != NULL){\r
-                                    free(recvData);\r
-                                    recvData = NULL;\r
-                                }\r
-                                packdataLen = 0;\r
-                            }\r
-                        }\r
+                        handle_l[i].data = malloc(totalDataLen+1);\r
+                        memcpy(handle_l[i].data,totalData+17,packdataLen);\r
                     }\r
+                    memset(handle_l[i].cmd_data,0,17);\r
+                    memcpy(handle_l[i].cmd_data,totalData,17);\r
+                    handle_l[i].crcvalue = totalData[event_size-1];\r
+                    handle_l[i].data_len = packdataLen;\r
+                    read_data_tmp = &handle_l[i];//完整包,遍历后需要处理数据\r
                 }\r
-                break;\r
-            }else//这是接收两包以上的数据\r
+            }else//多包数据存储\r
             {\r
-                totalpack+=1;//包数\r
-                printf("muilt 122222;%d packdataLen:%d",totalDataLen,packdataLen);\r
-                memcpy(recvData+packdataLen,totalData,event_size); //先copy再加\r
-                packdataLen = packdataLen+event_size;\r
-                printf("muilt 133333;%d packdataLen:%d",totalDataLen,packdataLen);\r
-                if((packdataLen-18) >= totalDataLen)//总的数据包 packdataLen-18把前面17个字节的包头和一个字节的校验和去掉得到数据部分和校验和部分\r
+                printf("muilt 122222;%d handle_l[i].data_len:%d\r\n",handle_l[i].data_len,handle_l[i].data_len);\r
+                \r
+                handle_l[i].data_len = handle_l[i].data_len+event_size;\r
+                printf("muilt 133333;%d handle_l[i].data_len:%d\r\n",handle_l[i].data_len,handle_l[i].data_len);\r
+                if(handle_l[i].data_len >= handle_l[i].totalDataLen)//接收完整的数据\r
                 {\r
-                    bigDataBuf = malloc(totalDataLen);\r
-                    crcvalue = totalData[event_size-1];\r
-                    memcpy(bigDataBuf,recvData+17,totalDataLen);\r
-                    bleLongRecvData(bigDataBuf,totalDataLen,cmd_data,recvData,crcvalue);\r
-                    totalDataLen = 0;\r
-                    packdataLen = 0;\r
-                    muiltFlag = 0;\r
-                    totalpack = 0; \r
-                    if(bigDataBuf != NULL){\r
-                        free(bigDataBuf);\r
-                        bigDataBuf = NULL;\r
-                    }\r
-                    if(recvData != NULL){\r
-                        free(recvData);\r
-                        recvData = NULL;\r
-                    }\r
-                    break;\r
+                    uint32_t packEndLen = handle_l[i].data_len-event_size;//这是最后一包的起始地址\r
+                    handle_l[i].data_len = handle_l[i].data_len-1;//减去最后一个字节的CRC校验和 才算是总的数据长度\r
+                    \r
+                    memcpy(handle_l[i].data+packEndLen,totalData,handle_l[i].data_len);//为了不把CRC copy到data所以多一步操作\r
+                    \r
+                    printf("muilt END2;!!!!!\r\n");\r
+                    handle_l[i].crcvalue = totalData[event_size-1];//最后一个字节为总的数据包的CRC\r
+                    read_data_tmp = &handle_l[i];\r
+                    \r
                 }else{\r
-\r
-                    break;\r
+                    memcpy(handle_l[i].data+handle_l[i].data_len,totalData,event_size); //这是不带CRC数据说明还有下一包直接copy\r
                 }\r
+                \r
             }\r
-            \r
-        }\r
+            break;\r
+        } \r
+        \r
     }\r
-    if(Bleconnect == false)//断开蓝牙不接收数据\r
-    {\r
-        totalpack = 0;\r
-        muiltFlag = 0; \r
-        ANCSBigBufFlag = 0;\r
-        packdataLen = 0;\r
-        totalDataLen = 0;\r
-        recvBigDataBufState = false;\r
-        sendbigDataBufState = false;\r
-        if(bigDataBuf != NULL){\r
-            free(bigDataBuf);\r
-            bigDataBuf = NULL;\r
-        }\r
-        if(recvData != NULL){\r
-            free(recvData);\r
-            recvData = NULL;\r
+    if(read_data_tmp)//获取到完整数据,处理数据且释放内存\r
+    {\r
+        printf("pack data end!!!!!!\r\n");\r
+        //处理数据..\r
+        if(read_data_tmp->data)\r
+        {\r
+            read_data_tmp->data[read_data_tmp->totalDataLen]=0;\r
         }\r
+        bleLongRecvData(read_data_tmp->data,read_data_tmp->totalDataLen,read_data_tmp->cmd_data,NULL,read_data_tmp->crcvalue);\r
+        free(read_data_tmp->data);\r
+        read_data_tmp->data_len = 0;\r
+        read_data_tmp->data = NULL;\r
+        read_data_tmp->totalDataLen = 0;\r
+        //read_data_tmp->handle = 0;\r
+        read_data_tmp->crcvalue = 0;\r
+        memset(read_data_tmp->cmd_data,0,17);\r
     }\r
+    \r
+\r
 }\r
 void free_ble_data(void)//以防断开蓝牙没有释放数据类型\r
 {\r
@@ -4918,14 +4931,7 @@ void free_ble_data(void)//以防断开蓝牙没有释放数据类型
     ANCSBigBufFlag = 0;\r
     recvBigDataBufState = false;\r
     sendbigDataBufState = false;\r
-    if(bigDataBuf != NULL){\r
-        free(bigDataBuf);\r
-        bigDataBuf = NULL;\r
-    }\r
-    if(recvData != NULL){\r
-        free(recvData);\r
-        recvData = NULL;\r
-    }\r
+    \r
 }\r
 //接收app下发的原始数据 \r
 void revBleOldData(uint8_t *buf, uint16_t event_size,uint16_t handle)//每包的数据大小\r
index fb6d25c..23c0938 100644 (file)
@@ -634,6 +634,8 @@ void sendtraningstatedata(uint8_t state ,uint16_t time);
 
 void sendtraningstateend(void);
 
+int char_to_dec(char ch);//字符数字转换成阿拉伯数字
+void char_to_big(uint8_t *src_str,uint8_t *res_str,uint8_t len);
 #ifdef __cplusplus
 }
 #endif
index 3374ee7..5a035fb 100644 (file)
@@ -35,7 +35,7 @@ extern "C" {
 #include "hidService.h"\r
 #include "factorytestService.h"\r
 #include "ppgBleService.h"\r
-\r
+#include "build_version.h"\r
 // extern void bts_data_to_uuid_len2(uint16_t uuid_data, bt_uuid_t *out_uuid);\r
 // extern void bts_init_128bit_uuid(const bt_uuid_t *uuid);\r
 // #include "ble_hid_take_photo_server.h"\r
@@ -57,14 +57,14 @@ extern "C" {
 #define BLE_CHARACTERISTIC_MAX_LENGTH 256\r
 #define BLE_ADV_ID 1\r
 #define BLE_ADV_DATA_MAX_LENGTH 31\r
-#define BLE_ADV_BLE_NAME_MAX_LENGTH 13 // 31-4-2-3-9 = 13\r
+#define BLE_ADV_BLE_NAME_MAX_LENGTH 31 // 31-4-2-3-9 = 13\r
 #define BLE_NAME_LENGTH 32\r
 #define BLE_ADV_MAC_HEAD_LENTH 4\r
 #define BLE_ADV_MAC_LENTH 10\r
-#define BLE_SCAN_MAC_LENTH 16 //扫描数据\r
+#define BLE_SCAN_DATA_LENTH 31 //扫描数据\r
 #define BLE_ADV_TYPE_LENTH 3\r
 #define BLE_ADV_UUID_LENTH 4\r
-#define BLE_DEFAULT_NAME  "KUMI U6"\r
+#define BLE_DEFAULT_NAME  "WatchSoar"//"KUMI U6"\r
 #define BLE_DEFAULT_NAME_LEN 32\r
 #define BLE_MAC_MAX_LEN 6 //蓝牙mac地址最大个数6个\r
 \r
@@ -85,12 +85,12 @@ uint16_t g_ble_conn_id = 0;
 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, 2};\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
 static bool AdverFlag = false;\r
 \r
-static uint8_t scan_data[BLE_SCAN_MAC_LENTH] = {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
@@ -165,6 +165,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
+\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
@@ -183,12 +184,47 @@ static void svr_ble_adv_data_set(int adv_id)
         memcpy_s(ble_name, BLE_NAME_LENGTH,BLE_DEFAULT_NAME, BLE_DEFAULT_NAME_LEN);\r
         ble_name_len = BLE_DEFAULT_NAME_LEN + 1;        \r
     }\r
+    int k = BD_ADDR_LEN;\r
+    for (int i = 0; i < BD_ADDR_LEN; i++) {\r
+        ble_data_mac_switch[--k] = addr[i];\r
+    }\r
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_get_local_name name:%s,len:%u,ret:%u.", ble_name, ble_name_len, ret);\r
-\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_get_local_addr, ret:%u.", ret);\r
-    memcpy_s(adv_data, sizeof(ble_adv_type), ble_adv_type, sizeof(ble_adv_type));\r
+    memcpy_s(adv_data, sizeof(ble_adv_type), ble_adv_type, sizeof(ble_adv_type));//0x02 0x01 0x02\r
     adv_data_len = sizeof(ble_adv_type);\r
+    // printf("adv_data_len!!!!:%d\r\n",adv_data_len);\r
+\r
+    adv_data[adv_data_len++] = 0x0f;//长度 \r
+    adv_data[adv_data_len++] = 0xff;//数据类型 manufactory data\r
+    adv_data[adv_data_len++] = 'J';\r
+    adv_data[adv_data_len++] = 'H';\r
+    adv_data[adv_data_len++] = bond_flag;//是否绑定\r
+    adv_data[adv_data_len++] = ble_data_mac_switch[5];\r
+    adv_data[adv_data_len++] = ble_data_mac_switch[4];\r
+    adv_data[adv_data_len++] = ble_data_mac_switch[3];\r
+    adv_data[adv_data_len++] = ble_data_mac_switch[2];\r
+    adv_data[adv_data_len++] = ble_data_mac_switch[1];\r
+    adv_data[adv_data_len++] = ble_data_mac_switch[0];\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "adv_data_info.adv_length.adv_data_len:%d\r\n",adv_data_len);\r
+    adv_data[adv_data_len++] = 0x05;//未知 app\r
+    adv_data[adv_data_len++] = 0x05;\r
+    const char str[20];\r
+    sprintf(str,"%s",get_version_string());\r
+    // printf("str:%s\r\n",str);//V1.1\r
+    uint8_t ver1 = 0;//预留\r
+    uint8_t ver2 = 0;\r
+    uint8_t ver3 = 0;\r
+    ver2 = char_to_dec(str[1]);\r
+    ver3 = char_to_dec(str[3]);\r
+    adv_data[adv_data_len++] = 0x00;\r
+    adv_data[adv_data_len++] = ver2;\r
+    adv_data[adv_data_len++] = ver3;\r
+    \r
+    if(adv_data_len > BLE_ADV_DATA_MAX_LENGTH)\r
+    {\r
+        adv_data_len = BLE_ADV_DATA_MAX_LENGTH;\r
+    }\r
 \r
+    //scan_data \r
     if (ble_name_len > BLE_ADV_BLE_NAME_MAX_LENGTH) {\r
         ble_name_len = BLE_ADV_BLE_NAME_MAX_LENGTH;\r
     }\r
@@ -196,46 +232,28 @@ static void svr_ble_adv_data_set(int adv_id)
     ble_data_name[1] = 0x9;\r
     memcpy_s(&ble_data_name[2], ble_name_len - 1, ble_name, ble_name_len - 1);\r
 \r
-    memcpy_s(adv_data + adv_data_len, ble_name_len + 1, ble_data_name, ble_name_len + 1);\r
+    memcpy_s(scan_data + scan_data_len, ble_name_len + 1, ble_data_name, ble_name_len + 1);\r
 \r
-    adv_data_len = adv_data_len + ble_name_len + 1;\r
-    memcpy_s(adv_data + adv_data_len, sizeof(ble_adv_uuid), ble_adv_uuid, sizeof(ble_adv_uuid));//这是tx power\r
-    adv_data_len = adv_data_len + sizeof(ble_adv_uuid);\r
-\r
-    int k = BD_ADDR_LEN;\r
-    for (int i = 0; i < BD_ADDR_LEN; i++) {\r
-        ble_data_mac_switch[--k] = addr[i];\r
-    }\r
+    scan_data_len = scan_data_len + ble_name_len + 1;\r
+    // printf("scan_data_len!!!22:%d ble_name_len:%d\r\n",scan_data_len,ble_name_len);\r
+    memcpy_s(scan_data + scan_data_len, sizeof(ble_adv_uuid), ble_adv_uuid, sizeof(ble_adv_uuid));//这是tx power\r
+    scan_data_len = scan_data_len + sizeof(ble_adv_uuid);\r
+    // printf("scan_data_len!!!!3333:%d\r\n",scan_data_len);\r
+   \r
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble_info:%02x:%02x:%02x:%02x:%02x:%02x", ble_data_mac_switch[0], ble_data_mac_switch[1],\r
         ble_data_mac_switch[2], ble_data_mac_switch[3], ble_data_mac_switch[4], ble_data_mac_switch[5]);\r
+    \r
+    \r
     #ifdef BLE_CHANGE_MODE\r
     memcpy_s(adv_mac_head + BLE_ADV_MAC_HEAD_LENTH, BD_ADDR_LEN, ble_data_mac_switch, BD_ADDR_LEN);\r
 \r
-    memcpy_s(adv_data + adv_data_len, sizeof(adv_mac_head), adv_mac_head, sizeof(adv_mac_head));\r
-    adv_data_len = adv_data_len + sizeof(adv_mac_head);\r
+    memcpy_s(scan_data + scan_data_len, sizeof(adv_mac_head), adv_mac_head, sizeof(adv_mac_head));\r
+    scan_data_len = scan_data_len + sizeof(adv_mac_head);\r
+    // printf("adv_data_len!!!!4444:%d\r\n",scan_data_len);\r
     #endif\r
 \r
-    scan_data[0] = 0x0f;//长度\r
-    scan_data[1] = 0xff;//数据类型 manufactory data\r
-    scan_data[2] = 'J';\r
-    scan_data[3] = 'H';\r
-    scan_data[4] = bond_flag;//是否绑定\r
-    scan_data[5] = ble_data_mac_switch[5];\r
-    scan_data[6] = ble_data_mac_switch[4];\r
-    scan_data[7] = ble_data_mac_switch[3];\r
-    scan_data[8] = ble_data_mac_switch[2];\r
-    scan_data[9] = ble_data_mac_switch[1];\r
-    scan_data[10] = ble_data_mac_switch[0];\r
-    scan_data_len = 11;\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "adv_data_info.adv_length.scan_data_len:%d\r\n",scan_data_len);\r
-    scan_data[scan_data_len++] = 0x05;//未知 app\r
-    scan_data[scan_data_len++] = 0x05;\r
-    scan_data[scan_data_len++] = 0x00;\r
-    scan_data[scan_data_len++] = 0x00;\r
-    scan_data[scan_data_len++] = 0x01;\r
-    \r
-    if (scan_data_len > BLE_SCAN_MAC_LENTH){\r
-        scan_data_len = BLE_SCAN_MAC_LENTH;\r
+    if (scan_data_len > BLE_SCAN_DATA_LENTH){\r
+        scan_data_len = BLE_SCAN_DATA_LENTH;\r
     }\r
     adv_data_info.scan_rsp_data = scan_data;//扫描数据\r
     adv_data_info.scan_rsp_length = scan_data_len;//扫描长度\r
@@ -424,9 +442,27 @@ static void srv_ble_add_chart_decr_battery(uint8_t server_id,uint16_t srv_handle
     battery_point_val[1] = 0;//当前表盘几\r
     battery_point_val[2] = 1;\r
 \r
-    battery_point_val[3] = 0;//固件版本号\r
-    battery_point_val[4] = 0;\r
-    battery_point_val[5] = 1;\r
+    const char str[20];\r
+    sprintf(str,"%s",get_version_string());\r
+    // printf("str:%s\r\n",str);//V1.1.1\r
+    uint8_t ver1 = 0;//预留\r
+    uint8_t ver2 = 0;\r
+    uint8_t ver3 = 0;\r
+    if(strlen(str) == 4)\r
+    {\r
+        ver2 = char_to_dec(str[1]);\r
+        ver3 = char_to_dec(str[3]);\r
+    }else if(strlen(str) == 6)\r
+    {\r
+        ver1= char_to_dec(str[1]);\r
+        ver2 = char_to_dec(str[3]);\r
+        ver3 = char_to_dec(str[5]);\r
+    }\r
+    \r
+\r
+    battery_point_val[3] = ver1;//固件版本号\r
+    battery_point_val[4] = ver2;\r
+    battery_point_val[5] = ver3;\r
 \r
     bd_addr_t addr_info;\r
     ret = gap_ble_get_local_addr(&addr_info);\r
@@ -1004,6 +1040,7 @@ static void svr_ble_bt_gatts_req_write_cb(uint8_t server_id, uint16_t conn_id, g
 static void svr_ble_mtu_exchange(uint8_t server_id, uint16_t conn_id, uint16_t mtu_size, errcode_t status)\r
 {\r
     ble_nus_max_data_len = mtu_size-3;\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
index 24ba5cf..c7b92b6 100644 (file)
@@ -188,23 +188,26 @@ namespace OHOS
         return button;
     }
 
-    void PairingViewEventListener::SetDeviceName( char *Name)
+    void PairingViewEventListener::SetDeviceName(char *Name)
     {
-
-        //DeviceName = Name;
+        // printf("Name:%s\r\n",Name);
+        memset(DeviceName,0,sizeof(DeviceName));
+        if(Name == NULL)
+        {
+            strcpy(DeviceName,"phone");
+            return;
+        }
         int len = strlen(Name);
         if(len > sizeof(DeviceName))
             len = sizeof(DeviceName);
             Name[len]='\0';
-        memset(DeviceName,0,sizeof(DeviceName));
+        
         memcpy(DeviceName,Name,len);
-        // PRINT("set DeviceName:%x\r\n",DeviceName);
     }
 
     /*获取设备名称*/
     char *PairingViewEventListener::GetDeviceName(void)
     {
-        // PRINT("get DeviceName:%x\r\n",DeviceName);
         return DeviceName; //先用固定字符串测试
     }
 
@@ -249,12 +252,12 @@ namespace OHOS
                 return nullptr;
             }
 
-            const char *devanme = PairingViewEventListener::GetInstance().GetDeviceName();
+            char *devanme = PairingViewEventListener::GetInstance().GetDeviceName();
             DeviceBindingName->SetPosition(33, 180, 400, 40);
             DeviceBindingName->SetStyle(STYLE_TEXT_FONT, 30);
             DeviceBindingName->SetStyle(STYLE_LINE_HEIGHT, 35);
 
-            if(devanme != NULL){
+            if(strlen(devanme)){
                 DeviceBindingName->SetText(devanme);
             }else
             {
@@ -378,10 +381,10 @@ namespace OHOS
             DeviceUnBindingName->SetStyle(STYLE_LINE_HEIGHT, 35);
 
             
-            const char *devanme = PairingViewEventListener::GetInstance().GetDeviceName();
+            char *devanme = PairingViewEventListener::GetInstance().GetDeviceName();
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateDeviceUnBindingView] DeviceUnBindingName devanme :%s",devanme);
 
-            if(devanme != NULL){
+            if(strlen(devanme)){
                 DeviceUnBindingName->SetText(devanme);
             }else
             {
@@ -506,6 +509,7 @@ namespace OHOS
             DeviceUnbindingRequestViewLabel[0]->SetStyle(STYLE_LINE_HEIGHT, 40);
             char str[512];
             memset(str, 0, 512);
+            
             sprintf(str, "当前设备已经与 %s 绑定", PairingViewEventListener::GetInstance().GetDeviceName());
             DeviceUnbindingRequestViewLabel[0]->SetText(str);
             DeviceUnbindingRequestViewLabel[0]->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);