From: DXY <1731678236@qq.com> Date: Fri, 10 May 2024 09:51:33 +0000 (+0800) Subject: 优化蓝牙数据接收:更改蓝牙名称为WatchSoar X-Git-Tag: release_V1.2.70_20241020_135402~1108^2~13 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=4f5b24f0303d3b6829d9e938a1dede4f6eb62d4f;p=mirrors%2FFD230.git 优化蓝牙数据接收:更改蓝牙名称为WatchSoar --- 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 f2f691a7e..6d9621709 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c @@ -163,7 +163,25 @@ int ble_recv_msg_callback(uint8_t writ_read,uint16_t msg_typeID, uint8_t *msg_da int ret = 1; return ret; } - +int char_to_dec(char ch) +{ + int num = 0; + if(ch >= '0' && ch <= '9') { + num = num * 10 + (ch - '0'); + } + return num; +} +void char_to_big(uint8_t *src_str,uint8_t *res_str,uint8_t len) +{ + for(uint8_t i = 0;i= 'a' && src_str[i] <= 'z') { + src_str[i] = src_str[i] - 32; + printf("src_tr:\r\n"); + } + } + memcpy(res_str,src_str,len); +} void cameram_data(void)//拍照发送数据 调用这个接口即可 { uint8_t data[2]={0x01,0x00}; @@ -1874,9 +1892,12 @@ void SetsteptargetParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *to uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据 { + uint8_t *json; json = buf; + printf("jsonCheck_weather:len: json:%f jsonlen:%d\r\n",0.011,strlen((char *)json)); #if 0 + FILE *fp=fopen("user/weather.json","wb+"); printf("jsonCheck_weather len %d",strlen((char *)buf)+1); //fwrite((void*)buf,1,strlen((char *)buf)+1,fp); @@ -1888,6 +1909,7 @@ uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据 printf("天气 JSON解析错误\n"); return 2; } + printf("开始解析天气 JSON\n"); cJSON *now_cjson = cJSON_GetObjectItem(root, "now"); int humidity = cJSON_GetObjectItem(now_cjson, "humidity")->valueint; @@ -1898,7 +1920,7 @@ uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据 int iconNight = cJSON_GetObjectItem(now_cjson, "iconNight")->valueint; set_weather_now_data(humidity,windScale,textNight,uvIndex,temp,iconNight); - + printf("开始解析天气 JSON!!!!\n"); // "address": // {"lat":225737664, // "atm":"1010", @@ -1913,7 +1935,7 @@ uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据 int lat = cJSON_GetObjectItem(address_cjson, "lat")->valueint; int lon = cJSON_GetObjectItem(address_cjson, "lon")->valueint; set_weather_address_data(lat,atm,city,subLocality,lon); - + printf("开始解析天气 JSON11111\n"); cJSON *daily = cJSON_GetObjectItem(root, "daily"); for(int i=0;i<7;i++) { @@ -1926,14 +1948,7 @@ uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据 int tempMax=cJSON_GetObjectItem(data,"tempMax")->valueint; set_weather_one_data(tempMin,iconDay,fxDate,tempMax,textDay,i); } - - //cJSON_GetObjectItem(daily, "daily"); - - - - // if (cJSON_IsString(city_cjson)) { - // printf("city: %s\n", city_cjson->valuestring); - // } + printf("开始解析天气 JSON2222222\n"); cJSON_Delete(root); printf("weather data!!!!!!!!!!end\r\n"); return 1; @@ -1953,7 +1968,7 @@ void GetWeatherCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData, memcpy(sendBuf+7,&tmp,4); memcpy(sendBuf+11,&tmp,4); memcpy(sendBuf+15,&tmp_data,2); - + printf("GetWeatherCmd:len:%d crcnum:%s\r\n",len,crcnum); if(Check_CRC(crcnum,len,crcvalue)) { uint8_t check = 1; @@ -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) { uint16_t typeID = buf_cmd[1]*256+buf_cmd[2]; - printf("type2AE4Data typeID:0x%x",typeID); + printf("type2AE4Data typeID:0x%x\r\n",typeID); switch (typeID) //ID { case USER_INFOR_CMD://app下发的获取用户信息 @@ -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个字节数据 { uint8_t type=buf_cmd[1]; - printf("type:%d %d data_size:%d data:%d crcvalue:%x",buf_cmd[0],type,data_size,data[0],crcvalue); + printf("type:%d %d data_size:%d data:%x crcvalue:%x\r\n",buf_cmd[0],type,data_size,data,crcvalue); switch (type) { case 0x02://获取手机信息 @@ -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) { uint16_t typeID = buf_cmd[1]*256+buf_cmd[2]; - printf("type2AE1Data typeID:0x%x",typeID); + printf("type2AE1Data typeID:0x%x\r\n",typeID); switch (typeID) //ID { - case ANDROID_ANCS_CMD://app下发的获取用户信息 + case ANDROID_ANCS_CMD:// ancsDataShowCmd(typeID,data,datalen,totalData,crcvalue); break; } @@ -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个字节数据 { uint8_t type = buf_cmd[1]; - printf("type:%d %d data_size:%d data:%d crcvalue:%x",buf_cmd[0],type,data_size,data[0],crcvalue); + printf("type:%d %d data_size:%d data:%d crcvalue:%x\r\n",buf_cmd[0],type,data_size,data[0],crcvalue); switch (type) { case 0x03:// @@ -4787,127 +4802,125 @@ uint32_t totalDataLen = 0; uint8_t totalpack = 0; uint8_t cmd_data[17]; uint8_t *recvData; +#include "los_memory.h" +#define MAX_HANDLE_NUM 10 +typedef struct +{ + uint8_t *data; + int handle; + int data_len ; + int totalDataLen; + uint8_t cmd_data[17]; + uint8_t crcvalue; +} ble_read_data; +//LITE_OS_SEC_TEXT_MINOR UINT32 LOS_MemInfoGet(VOID *pool, LOS_MEM_POOL_STATUS *poolStatus) +//根据特征值分开组合读取的数据,并处理 +static ble_read_data handle_l[MAX_HANDLE_NUM]={0}; void bleDataRecv(uint8_t *totalData, uint16_t event_size,uint16_t handle) { - - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "xhandle %d,%d %d",data2ae3Cmd,data2ae4Cmd,handle); if(sendbigDataBufState == true)//正在发送大数据不接收任何app指令下发的数据 { return; } - uint8_t crcvalue= 0x00; - if(1)//长数据接收 + ble_read_data* read_data_tmp = NULL; + printf("bleDataRecv\r\n"); + for(int i = 0;i= 17)//第一包的数据必须大于17个字节 + printf("bleDataRecv!!!!!!!\r\n"); + if(event_size <= 17 || !((totalData[0] ==0x4a || totalData[0] == 0x73) && totalData[1] <= 0x09))//第一包的数据一定要大于17个字节并且第一包的数据头必须为0x73 或者0x4a 并且类型小于0x09 类型根据协议可自行增加或者减少 { - if(bigDataBuf != NULL){ - free(bigDataBuf); - bigDataBuf = NULL; - } - if(recvData != NULL){ - free(recvData); - recvData = NULL; - } - packdataLen = event_size;//第一包的数据大小 第二包不走这里 514-17 = 497 - memcpy(&totalDataLen,totalData+7,4);//总的数据大小 - printf("totalDataLen;%d totaldataLen:%d",totalDataLen,packdataLen); - if(totalDataLen > event_size-18)//如果514-18 = 496 497 > 496 + break; + } + memcpy(&totalDataLen,totalData+7,4);//总的数据大小 + handle_l[i].totalDataLen = totalDataLen; + + + printf("bleDataRecv!!!!!!!%d\r\n",totalDataLen); + if(totalDataLen > event_size-17)//多包数据第一包处理,大于一包的数据长度 514-17=494 + { + packdataLen = event_size-17;//多包数据第一包数据不带CRC校验和的 + handle_l[i].data = malloc(totalDataLen+1); + memcpy(handle_l[i].data,totalData+17,packdataLen);//从第十七个字节开始接收数据data + handle_l[i].data_len = packdataLen; + memset(handle_l[i].cmd_data,0,17); + memcpy(handle_l[i].cmd_data,totalData,17); + }else{//一包数据 + packdataLen = event_size-18; + if(totalDataLen != 0) { - printf("muilt totalDataLen;%d packdataLen:%d",totalDataLen,packdataLen); - - recvData = malloc(totalDataLen+18); - if(recvData == NULL)return; - muiltFlag = 1;//表示有两包以上的数据 - memcpy(recvData,totalData,event_size);//从第十七个字节开始接收数据data - memset(cmd_data,0,17); - memcpy(cmd_data,totalData,17); - totalpack=1; - }else{//直接发送数据解析 - muiltFlag = 0; - packdataLen = event_size-17; - memset(cmd_data,0,17); - memcpy(cmd_data,totalData,17); - printf("muilt totalDataLen11;%d packdataLen:%d",totalDataLen,packdataLen); - if(totalDataLen == 0 && event_size == 18)//数据长度为0 没数据数据包 - { - crcvalue = totalData[event_size-1]; - bleLongRecvData(NULL,0,cmd_data,totalData,crcvalue); - }else{ - // 73 2 10 1 0 0 0 16 0 0 0 1 0 0 0 16 0 - recvData = malloc(packdataLen-1); - if(recvData != NULL){ - memcpy(recvData,totalData+17,packdataLen-1); - crcvalue = totalData[event_size-1]; - bleLongRecvData(recvData,packdataLen-1,cmd_data,totalData,crcvalue); - if(recvData != NULL){ - free(recvData); - recvData = NULL; - } - packdataLen = 0; - } - } + handle_l[i].data = malloc(totalDataLen+1); + memcpy(handle_l[i].data,totalData+17,packdataLen); } + memset(handle_l[i].cmd_data,0,17); + memcpy(handle_l[i].cmd_data,totalData,17); + handle_l[i].crcvalue = totalData[event_size-1]; + handle_l[i].data_len = packdataLen; + read_data_tmp = &handle_l[i];//完整包,遍历后需要处理数据 } - break; - }else//这是接收两包以上的数据 + }else//多包数据存储 { - totalpack+=1;//包数 - printf("muilt 122222;%d packdataLen:%d",totalDataLen,packdataLen); - memcpy(recvData+packdataLen,totalData,event_size); //先copy再加 - packdataLen = packdataLen+event_size; - printf("muilt 133333;%d packdataLen:%d",totalDataLen,packdataLen); - if((packdataLen-18) >= totalDataLen)//总的数据包 packdataLen-18把前面17个字节的包头和一个字节的校验和去掉得到数据部分和校验和部分 + printf("muilt 122222;%d handle_l[i].data_len:%d\r\n",handle_l[i].data_len,handle_l[i].data_len); + + handle_l[i].data_len = handle_l[i].data_len+event_size; + printf("muilt 133333;%d handle_l[i].data_len:%d\r\n",handle_l[i].data_len,handle_l[i].data_len); + if(handle_l[i].data_len >= handle_l[i].totalDataLen)//接收完整的数据 { - bigDataBuf = malloc(totalDataLen); - crcvalue = totalData[event_size-1]; - memcpy(bigDataBuf,recvData+17,totalDataLen); - bleLongRecvData(bigDataBuf,totalDataLen,cmd_data,recvData,crcvalue); - totalDataLen = 0; - packdataLen = 0; - muiltFlag = 0; - totalpack = 0; - if(bigDataBuf != NULL){ - free(bigDataBuf); - bigDataBuf = NULL; - } - if(recvData != NULL){ - free(recvData); - recvData = NULL; - } - break; + uint32_t packEndLen = handle_l[i].data_len-event_size;//这是最后一包的起始地址 + handle_l[i].data_len = handle_l[i].data_len-1;//减去最后一个字节的CRC校验和 才算是总的数据长度 + + memcpy(handle_l[i].data+packEndLen,totalData,handle_l[i].data_len);//为了不把CRC copy到data所以多一步操作 + + printf("muilt END2;!!!!!\r\n"); + handle_l[i].crcvalue = totalData[event_size-1];//最后一个字节为总的数据包的CRC + read_data_tmp = &handle_l[i]; + }else{ - - break; + memcpy(handle_l[i].data+handle_l[i].data_len,totalData,event_size); //这是不带CRC数据说明还有下一包直接copy } + } - - } + break; + } + } - if(Bleconnect == false)//断开蓝牙不接收数据 - { - totalpack = 0; - muiltFlag = 0; - ANCSBigBufFlag = 0; - packdataLen = 0; - totalDataLen = 0; - recvBigDataBufState = false; - sendbigDataBufState = false; - if(bigDataBuf != NULL){ - free(bigDataBuf); - bigDataBuf = NULL; - } - if(recvData != NULL){ - free(recvData); - recvData = NULL; + if(read_data_tmp)//获取到完整数据,处理数据且释放内存 + { + printf("pack data end!!!!!!\r\n"); + //处理数据.. + if(read_data_tmp->data) + { + read_data_tmp->data[read_data_tmp->totalDataLen]=0; } + bleLongRecvData(read_data_tmp->data,read_data_tmp->totalDataLen,read_data_tmp->cmd_data,NULL,read_data_tmp->crcvalue); + free(read_data_tmp->data); + read_data_tmp->data_len = 0; + read_data_tmp->data = NULL; + read_data_tmp->totalDataLen = 0; + //read_data_tmp->handle = 0; + read_data_tmp->crcvalue = 0; + memset(read_data_tmp->cmd_data,0,17); } + + } void free_ble_data(void)//以防断开蓝牙没有释放数据类型 { @@ -4918,14 +4931,7 @@ void free_ble_data(void)//以防断开蓝牙没有释放数据类型 ANCSBigBufFlag = 0; recvBigDataBufState = false; sendbigDataBufState = false; - if(bigDataBuf != NULL){ - free(bigDataBuf); - bigDataBuf = NULL; - } - if(recvData != NULL){ - free(recvData); - recvData = NULL; - } + } //接收app下发的原始数据 void revBleOldData(uint8_t *buf, uint16_t event_size,uint16_t handle)//每包的数据大小 diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h index fb6d25c1a..23c093870 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h @@ -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 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 3374ee70c..5a035fbc6 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c @@ -35,7 +35,7 @@ extern "C" { #include "hidService.h" #include "factorytestService.h" #include "ppgBleService.h" - +#include "build_version.h" // extern void bts_data_to_uuid_len2(uint16_t uuid_data, bt_uuid_t *out_uuid); // extern void bts_init_128bit_uuid(const bt_uuid_t *uuid); // #include "ble_hid_take_photo_server.h" @@ -57,14 +57,14 @@ extern "C" { #define BLE_CHARACTERISTIC_MAX_LENGTH 256 #define BLE_ADV_ID 1 #define BLE_ADV_DATA_MAX_LENGTH 31 -#define BLE_ADV_BLE_NAME_MAX_LENGTH 13 // 31-4-2-3-9 = 13 +#define BLE_ADV_BLE_NAME_MAX_LENGTH 31 // 31-4-2-3-9 = 13 #define BLE_NAME_LENGTH 32 #define BLE_ADV_MAC_HEAD_LENTH 4 #define BLE_ADV_MAC_LENTH 10 -#define BLE_SCAN_MAC_LENTH 16 //扫描数据 +#define BLE_SCAN_DATA_LENTH 31 //扫描数据 #define BLE_ADV_TYPE_LENTH 3 #define BLE_ADV_UUID_LENTH 4 -#define BLE_DEFAULT_NAME "KUMI U6" +#define BLE_DEFAULT_NAME "WatchSoar"//"KUMI U6" #define BLE_DEFAULT_NAME_LEN 32 #define BLE_MAC_MAX_LEN 6 //蓝牙mac地址最大个数6个 @@ -85,12 +85,12 @@ uint16_t g_ble_conn_id = 0; uint16_t g_ble_server_handle = 0; static uint8_t g_ble_character_buf[BLE_CHARACTERISTIC_MAX_LENGTH] = {0}; static bool g_ble_init_flag = false; -static const uint8_t ble_adv_type[BLE_ADV_TYPE_LENTH] = {2, 1, 2}; +static const uint8_t ble_adv_type[BLE_ADV_TYPE_LENTH] = {2, 1, 0xA}; static const uint8_t ble_adv_uuid[BLE_ADV_UUID_LENTH] = {0x3, 0x3, 0xe0, 0x18}; static const uint8_t ble_adv_tx[4] = {0x03,0x03,0xe0,0x18}; static bool AdverFlag = false; -static uint8_t scan_data[BLE_SCAN_MAC_LENTH] = {0}; +static uint8_t scan_data[BLE_SCAN_DATA_LENTH] = {0}; uint8_t phone_mac_data[6]={0}; bd_addr_t phone_addr;//发起配对地址反序 @@ -165,6 +165,7 @@ static void svr_ble_adv_data_set(int adv_id) bluetooth_get_local_addr(&addr[0],len); char watchName[32]; memset_s(watchName, sizeof(watchName), 0, sizeof(watchName)); + (void)sprintf_s(watchName, sizeof(watchName), "%s %02x%02x",BLE_DEFAULT_NAME,addr[1],addr[0]); // (void)sprintf_s(watchName, sizeof(watchName), "%s",BLE_DEFAULT_NAME); @@ -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); ble_name_len = BLE_DEFAULT_NAME_LEN + 1; } + int k = BD_ADDR_LEN; + for (int i = 0; i < BD_ADDR_LEN; i++) { + ble_data_mac_switch[--k] = addr[i]; + } WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_get_local_name name:%s,len:%u,ret:%u.", ble_name, ble_name_len, ret); - - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_get_local_addr, ret:%u.", ret); - memcpy_s(adv_data, sizeof(ble_adv_type), ble_adv_type, sizeof(ble_adv_type)); + memcpy_s(adv_data, sizeof(ble_adv_type), ble_adv_type, sizeof(ble_adv_type));//0x02 0x01 0x02 adv_data_len = sizeof(ble_adv_type); + // printf("adv_data_len!!!!:%d\r\n",adv_data_len); + + adv_data[adv_data_len++] = 0x0f;//长度 + adv_data[adv_data_len++] = 0xff;//数据类型 manufactory data + adv_data[adv_data_len++] = 'J'; + adv_data[adv_data_len++] = 'H'; + adv_data[adv_data_len++] = bond_flag;//是否绑定 + adv_data[adv_data_len++] = ble_data_mac_switch[5]; + adv_data[adv_data_len++] = ble_data_mac_switch[4]; + adv_data[adv_data_len++] = ble_data_mac_switch[3]; + adv_data[adv_data_len++] = ble_data_mac_switch[2]; + adv_data[adv_data_len++] = ble_data_mac_switch[1]; + adv_data[adv_data_len++] = ble_data_mac_switch[0]; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "adv_data_info.adv_length.adv_data_len:%d\r\n",adv_data_len); + adv_data[adv_data_len++] = 0x05;//未知 app + adv_data[adv_data_len++] = 0x05; + const char str[20]; + sprintf(str,"%s",get_version_string()); + // printf("str:%s\r\n",str);//V1.1 + uint8_t ver1 = 0;//预留 + uint8_t ver2 = 0; + uint8_t ver3 = 0; + ver2 = char_to_dec(str[1]); + ver3 = char_to_dec(str[3]); + adv_data[adv_data_len++] = 0x00; + adv_data[adv_data_len++] = ver2; + adv_data[adv_data_len++] = ver3; + + if(adv_data_len > BLE_ADV_DATA_MAX_LENGTH) + { + adv_data_len = BLE_ADV_DATA_MAX_LENGTH; + } + //scan_data if (ble_name_len > BLE_ADV_BLE_NAME_MAX_LENGTH) { ble_name_len = BLE_ADV_BLE_NAME_MAX_LENGTH; } @@ -196,46 +232,28 @@ static void svr_ble_adv_data_set(int adv_id) ble_data_name[1] = 0x9; memcpy_s(&ble_data_name[2], ble_name_len - 1, ble_name, ble_name_len - 1); - memcpy_s(adv_data + adv_data_len, ble_name_len + 1, ble_data_name, ble_name_len + 1); + memcpy_s(scan_data + scan_data_len, ble_name_len + 1, ble_data_name, ble_name_len + 1); - adv_data_len = adv_data_len + ble_name_len + 1; - memcpy_s(adv_data + adv_data_len, sizeof(ble_adv_uuid), ble_adv_uuid, sizeof(ble_adv_uuid));//这是tx power - adv_data_len = adv_data_len + sizeof(ble_adv_uuid); - - int k = BD_ADDR_LEN; - for (int i = 0; i < BD_ADDR_LEN; i++) { - ble_data_mac_switch[--k] = addr[i]; - } + scan_data_len = scan_data_len + ble_name_len + 1; + // printf("scan_data_len!!!22:%d ble_name_len:%d\r\n",scan_data_len,ble_name_len); + memcpy_s(scan_data + scan_data_len, sizeof(ble_adv_uuid), ble_adv_uuid, sizeof(ble_adv_uuid));//这是tx power + scan_data_len = scan_data_len + sizeof(ble_adv_uuid); + // printf("scan_data_len!!!!3333:%d\r\n",scan_data_len); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble_info:%02x:%02x:%02x:%02x:%02x:%02x", ble_data_mac_switch[0], ble_data_mac_switch[1], ble_data_mac_switch[2], ble_data_mac_switch[3], ble_data_mac_switch[4], ble_data_mac_switch[5]); + + #ifdef BLE_CHANGE_MODE memcpy_s(adv_mac_head + BLE_ADV_MAC_HEAD_LENTH, BD_ADDR_LEN, ble_data_mac_switch, BD_ADDR_LEN); - memcpy_s(adv_data + adv_data_len, sizeof(adv_mac_head), adv_mac_head, sizeof(adv_mac_head)); - adv_data_len = adv_data_len + sizeof(adv_mac_head); + memcpy_s(scan_data + scan_data_len, sizeof(adv_mac_head), adv_mac_head, sizeof(adv_mac_head)); + scan_data_len = scan_data_len + sizeof(adv_mac_head); + // printf("adv_data_len!!!!4444:%d\r\n",scan_data_len); #endif - scan_data[0] = 0x0f;//长度 - scan_data[1] = 0xff;//数据类型 manufactory data - scan_data[2] = 'J'; - scan_data[3] = 'H'; - scan_data[4] = bond_flag;//是否绑定 - scan_data[5] = ble_data_mac_switch[5]; - scan_data[6] = ble_data_mac_switch[4]; - scan_data[7] = ble_data_mac_switch[3]; - scan_data[8] = ble_data_mac_switch[2]; - scan_data[9] = ble_data_mac_switch[1]; - scan_data[10] = ble_data_mac_switch[0]; - scan_data_len = 11; - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "adv_data_info.adv_length.scan_data_len:%d\r\n",scan_data_len); - scan_data[scan_data_len++] = 0x05;//未知 app - scan_data[scan_data_len++] = 0x05; - scan_data[scan_data_len++] = 0x00; - scan_data[scan_data_len++] = 0x00; - scan_data[scan_data_len++] = 0x01; - - if (scan_data_len > BLE_SCAN_MAC_LENTH){ - scan_data_len = BLE_SCAN_MAC_LENTH; + if (scan_data_len > BLE_SCAN_DATA_LENTH){ + scan_data_len = BLE_SCAN_DATA_LENTH; } adv_data_info.scan_rsp_data = scan_data;//扫描数据 adv_data_info.scan_rsp_length = scan_data_len;//扫描长度 @@ -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;//当前表盘几 battery_point_val[2] = 1; - battery_point_val[3] = 0;//固件版本号 - battery_point_val[4] = 0; - battery_point_val[5] = 1; + const char str[20]; + sprintf(str,"%s",get_version_string()); + // printf("str:%s\r\n",str);//V1.1.1 + uint8_t ver1 = 0;//预留 + uint8_t ver2 = 0; + uint8_t ver3 = 0; + if(strlen(str) == 4) + { + ver2 = char_to_dec(str[1]); + ver3 = char_to_dec(str[3]); + }else if(strlen(str) == 6) + { + ver1= char_to_dec(str[1]); + ver2 = char_to_dec(str[3]); + ver3 = char_to_dec(str[5]); + } + + + battery_point_val[3] = ver1;//固件版本号 + battery_point_val[4] = ver2; + battery_point_val[5] = ver3; bd_addr_t addr_info; ret = gap_ble_get_local_addr(&addr_info); @@ -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) { ble_nus_max_data_len = mtu_size-3; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_mtu_exchange %d %d %d\r\n",server_id,conn_id,mtu_size); } diff --git a/code/sdk/application/wearable/service/msg_center/src/notify/pairing_notification.cpp b/code/sdk/application/wearable/service/msg_center/src/notify/pairing_notification.cpp index 24ba5cf77..c7b92b609 100644 --- a/code/sdk/application/wearable/service/msg_center/src/notify/pairing_notification.cpp +++ b/code/sdk/application/wearable/service/msg_center/src/notify/pairing_notification.cpp @@ -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);