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
\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
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
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
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
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
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
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
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
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
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
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
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
#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
#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
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
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
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
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
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
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