ble_recv_data_info_t ble_recv_data;\r
ble_recv_msg_callback_t g_recv_msg_toUI = NULL;\r
#if 1\r
+#include "app_msg_manager.h"\r
+#include "app_tx_process.h"\r
+static int ym_malloc_count = 0,ym_free_count = 0;\r
+static void *ym_malloc(unsigned int size)\r
+{\r
+ // app_pkg_msg_send(HEAPINFO, DIAG_CONTROL_FALSE, NULL, 0);\r
\r
+ return malloc(size);\r
+}\r
+static void ym_free(void * p)\r
+{\r
+ free(p);\r
+}\r
+void malloc_test(void)\r
+{\r
+ for(int i = 0;i<1000;i++)\r
+ {\r
+ char * temp = ym_malloc(i*10);\r
+ printf("i:%d,addr:%x\r\n",i,temp);\r
+ \r
+ }\r
+ app_pkg_msg_send(HEAPINFO, DIAG_CONTROL_FALSE, NULL, 0);\r
+}\r
// typedef void (*hx3695_msg_callback_t)(uint8_t msg_type, uint8_t *msg_data, int32_t msg_datalen);\r
uint32_t ble_recv_register_msg_callback(ble_recv_msg_callback_t func)\r
{\r
drink_info.end_hour = msg_data[6];\r
drink_info.end_min = msg_data[7];\r
drink_info.frequenc = msg_data[8];\r
- printf("drink_info %d %d %d %d %d %d\r\n",drink_info.drink_on,drink_info.alarm_mode,\r
- drink_info.target_drink,drink_info.start_hour,drink_info.startt_min,drink_info.end_hour,\r
- drink_info.end_min,drink_info.frequenc);\r
// memcpy(msg_data,&drink_info,sizeof(msg_drink_set_param_info_t));\r
break;\r
case GET_DRINK_SWITCH_CMD:\r
break;\r
}\r
}\r
- for(uint16_t i = 0;i<msg_datalen;i++)\r
- {\r
- printf("%02x ",msg_data[i]);\r
- }\r
int ret = 1;\r
return ret;\r
}\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
osal_msleep(100); /* wait 100 ms */\r
memset(data,0,2);\r
(void)ble_hid_server_send_input_report(&data, 2); /* 上报按下按键 把停止发送指令也要发送 防止一直拍照*/\r
- printf("cameram_send_data:0x%x",ret);\r
}\r
\r
bool bigDataBufState=false;//大数据传输状态\r
errcode_t ret = ERRCODE_FAIL;\r
printf("bigDataBufState:%d and sendbigDataBufState %d\r\n",bigDataBufState,sendbigDataBufState);\r
if(bigDataBufState == true || sendbigDataBufState == true)return ERRCODE_FAIL; //在手表发送分包数据时 手表不允许发指令给app\r
- for(uint16_t i = 0;i<len;i++)\r
- { \r
- printf("%02x ",buf[i]);\r
- }\r
if(Bleconnect == true )\r
{\r
ret = svr_ble_bt_gatts_noyify(buf,len);\r
{\r
if(Bleconnect == true )\r
{\r
- for(uint16_t i = 0;i<len;i++)\r
- { \r
- printf("%02x ",buf[i]);\r
- }\r
-\r
svr_ble_bt_gatts_noyify(buf,len);\r
}\r
}\r
void send_big_data(uint8_t flag, char *data, int datalen, int total, uint32_t Packet_id, uint32_t packet_total, uint8_t type_id, uint8_t type)\r
{\r
// 动态分配内存空间,防止堆栈溢出\r
- uint8_t *buf = malloc(17 + datalen + 1); \r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send_big_data!!!\r\n");\r
+ uint8_t *buf = ym_malloc(17 + datalen + 1); \r
if (buf == NULL) {\r
printf("内存分配失败\n");\r
return;\r
sendBleData(buf, 17 + datalen + 1); // 判断是否在传输或接收多包数据\r
}\r
\r
- free(buf); // 释放内存空间\r
+ ym_free(buf); // 释放内存空间\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "send_big_data1111!!!\r\n");\r
}\r
//发送训练状态[app发起的运动]\r
void sendtraningstatedata(uint8_t state ,uint16_t time)\r
memcpy((uint8_t *)devname,(uint8_t *)pn->valuestring,strlen(pn->valuestring));\r
}\r
\r
- printf("设备名称: %s\n", pn->valuestring);\r
+ // printf("设备名称: %s\n", pn->valuestring);\r
}\r
\r
cJSON* tp = cJSON_GetObjectItem(root, "tp");\r
void getDeviceState(void)\r
{\r
bool ret = bt_is_acl_connected(&phone_addr);\r
- printf("remove11111!!!!!!:%d",ret);\r
}\r
\r
void clearPaireFlag(uint8_t flag)\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
+ // 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
errcode_t code = gap_ble_pair_remote_device(&phone_addr);\r
if(code!=ERRCODE_SUCC)\r
{\r
printf("gap_ble_pair_remote_device fail %X\r\n",code);\r
}\r
-\r
}else{\r
first_bond = 0;\r
errcode_t ret = 0;\r
ret = gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接\r
- printf("gap_ble_disconnect_remote_device %x\r\n",ret);\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
- printf("gap_remove_all_pairs %x %x\r\n",ret,ret_ok);\r
+ // printf("gap_remove_all_pairs %x %x\r\n",ret,ret_ok);\r
if(savephonename != NULL)\r
{\r
- free(savephonename);\r
+ ym_free(savephonename);\r
+ savephonename = NULL;\r
}\r
}\r
}\r
long fileSize = ftell(jsfile);\r
fseek(jsfile, 0, SEEK_SET);\r
\r
- char *jsonData = (char *)malloc(fileSize + 1);\r
+ char *jsonData = (char *)ym_malloc(fileSize + 1);\r
fread(jsonData, 1, fileSize, jsfile);\r
jsonData[fileSize] = '\0';\r
fclose(jsfile);\r
\r
// 解析JSON数据\r
cJSON *root = cJSON_Parse(jsonData);\r
- free(jsonData);\r
+ ym_free(jsonData);\r
\r
if (root != NULL) {\r
cJSON *modifiedJson = cJSON_GetObjectItem(root,"mac");\r
uint8_t datalen = strlen(pn->valuestring)+1; \r
if(datalen - 1 > 0){\r
pn->valuestring[datalen-1]='\0';\r
- str = malloc(sizeof(char)*datalen);\r
- savephonename = malloc(sizeof(char)*datalen);\r
+ str = ym_malloc(sizeof(char)*datalen);\r
+ savephonename = ym_malloc(sizeof(char)*datalen);\r
memcpy(str,(uint8_t *)pn->valuestring,datalen);\r
// strcpy(str,pn->valuestring);\r
memcpy(savephonename,(uint8_t *)pn->valuestring,datalen);\r
// strcpy(savephonename,pn->valuestring);\r
- printf("str:%s savephonename:%s\n",str,savephonename);\r
+ // printf("str:%s savephonename:%s\n",str,savephonename);\r
}\r
printf("设备名称: %s\n", pn->valuestring);\r
}\r
long fileSize = ftell(jsfile);\r
fseek(jsfile, 0, SEEK_SET);\r
\r
- char *jsonData = (char *)malloc(fileSize + 1);\r
+ char *jsonData = (char *)ym_malloc(fileSize + 1);\r
fread(jsonData, 1, fileSize, jsfile);\r
jsonData[fileSize] = '\0';\r
fclose(jsfile);\r
// 解析JSON数据\r
cJSON *root = cJSON_Parse(jsonData);\r
// 释放资源\r
- free(jsonData);\r
+ ym_free(jsonData);\r
if (root != NULL) {\r
cJSON *modifiedJson = cJSON_GetObjectItem(root,"mac");\r
if (cJSON_IsArray(modifiedJson)) {\r
long fileSize = ftell(jsfile);\r
fseek(jsfile, 0, SEEK_SET);\r
\r
- char *jsonData = (char *)malloc(fileSize + 1);\r
+ char *jsonData = (char *)ym_malloc(fileSize + 1);\r
fread(jsonData, 1, fileSize, jsfile);\r
jsonData[fileSize] = '\0';\r
fclose(jsfile);\r
\r
// 解析JSON数据\r
cJSON *root = cJSON_Parse(jsonData);\r
- free(jsonData);\r
-\r
+ ym_free(jsonData);\r
if (root != NULL) {\r
cJSON *pn = cJSON_GetObjectItem(root,"pn");\r
if(cJSON_IsString(pn))\r
long fileSize = ftell(jsfile);\r
fseek(jsfile, 0, SEEK_SET);\r
\r
- char *jsonData = (char *)malloc(fileSize + 1);\r
+ char *jsonData = (char *)ym_malloc(fileSize + 1);\r
fread(jsonData, 1, fileSize, jsfile);\r
jsonData[fileSize] = '\0';\r
fclose(jsfile);\r
\r
// 解析JSON数据\r
cJSON *root = cJSON_Parse(jsonData);\r
- free(jsonData);\r
-\r
+ ym_free(jsonData);\r
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ym_free ym_malloc_count:%d ym_free_count:%d\r\n",ym_malloc_count,ym_free_count);\r
if (root != NULL) {\r
cJSON *pn = cJSON_GetObjectItem(root,"pn");\r
if(cJSON_IsString(pn))\r
{\r
uint8_t showname_len = strlen(pn->valuestring)+1;\r
if(showname_len-1 > 0){\r
- str = malloc(sizeof(char)*showname_len);\r
+ str = ym_malloc(sizeof(char)*showname_len);\r
pn->valuestring[showname_len-1]='\0';\r
str[showname_len]=0;\r
memcpy(str,(uint8_t *)pn->valuestring,showname_len);\r
CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,(uint8_t *)buf,devnamelen+2);\r
if(devname)\r
{ \r
- free(devname);\r
+ ym_free(devname);\r
+ devname = NULL;\r
}\r
}else{\r
printf("phone devname is no name11111!!!!!!!!!:");\r
CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,(uint8_t *)buf,devnamelen+2);\r
if(devname)\r
{\r
- free(devname);\r
+ ym_free(devname);\r
+ devname = NULL;\r
}\r
}else{\r
uint8_t buf[2]; \r
if(savephonename != NULL)\r
{\r
cJSON_AddStringToObject(dataJSON,"pn",(char *)savephonename);\r
- free(savephonename);\r
+ ym_free(savephonename);\r
savephonename = NULL;\r
}\r
cJSON_AddNumberToObject(dataJSON,"phoneType",phoneType);\r
}\r
fclose(file);\r
}\r
- free(jsonString);\r
+ // ym_free(jsonString);\r
+ cJSON_free(jsonString);\r
cJSON_Delete(dataJSON);\r
// 读取JSON文件\r
\r
cJSON* time = cJSON_GetObjectItem(root, "time");\r
if (cJSON_IsNumber(time)) {\r
printf("time: %d\n", time->valueint);\r
- printf("time: %d\n", time->valueint);\r
+ // printf("time: %d\n", time->valueint);\r
}\r
cJSON* jsweek = cJSON_GetObjectItem(root, "week");\r
if (cJSON_IsNumber(jsweek)) {\r
\r
}\r
\r
-uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据\r
+uint8_t jsonCheck_weather(uint8_t *buf,uint8_t *check)//json 格式解析 天气数据\r
{\r
-\r
+ uint8_t flag = 0;\r
+ // flag = 2;\r
+ // memcpy(check,&flag,1);\r
+ // return 0;\r
uint8_t *json;\r
json = buf;\r
- printf("jsonCheck_weather:len: json:%f jsonlen:%d\r\n",0.011,strlen((char *)json));\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
fputs((char *)buf,fp);\r
fclose(fp);\r
#endif\r
+ printf("开始解析天气数据\n");\r
cJSON* root = cJSON_Parse((const char *)json);\r
if (root == NULL) {\r
printf("天气 JSON解析错误\n");\r
- return 2;\r
+ flag = 2;\r
+ memcpy(check,&flag,1);\r
+ return 0;\r
}\r
printf("开始解析天气 JSON\n");\r
cJSON *now_cjson = cJSON_GetObjectItem(root, "now");\r
int iconNight = cJSON_GetObjectItem(now_cjson, "iconNight")->valueint;\r
\r
set_weather_now_data(humidity,windScale,textNight,uvIndex,temp,iconNight);\r
- printf("开始解析天气 JSON!!!!\n");\r
+\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
- printf("开始解析天气 JSON11111\n");\r
+\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
- printf("开始解析天气 JSON2222222\n");\r
cJSON_Delete(root);\r
- printf("weather data!!!!!!!!!!end\r\n");\r
+ flag = 1;\r
+ memcpy(check,&flag,1);\r
return 1;\r
}\r
\r
memcpy(sendBuf+7,&tmp,4);\r
memcpy(sendBuf+11,&tmp,4);\r
memcpy(sendBuf+15,&tmp_data,2);\r
- printf("GetWeatherCmd:len:%d crcnum:%s\r\n",len,crcnum);\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
- check = jsonCheck_weather(crcnum);\r
+ jsonCheck_weather(crcnum,&check);\r
sendBuf[17] = check;\r
sendBuf[18] = Calculate_CRC(sendBuf,18);\r
sendBleData(sendBuf,19);\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\r\n",typeID);\r
+ // printf("type2AE4Data typeID:0x%x\r\n",typeID);\r
switch (typeID) //ID\r
{\r
case USER_INFOR_CMD://app下发的获取用户信息\r
}else{\r
if(data_len != 0){\r
memcpy(value+17,json_format,data_len);\r
- free(json_format);\r
+ cJSON_free(json_format);\r
}\r
\r
}\r
if(Check_CRC(crcnum,len,crcvalue))\r
{\r
memcpy(value+17,(uint8_t *)json_format,data_len);//17+69 = 86\r
- free(json_format);\r
+ cJSON_free(json_format);\r
value[data_len+17] = Calculate_CRC(value,data_len+17);//\r
// printf("data_len:%d %x %d!!!!!\r\n",data_len,value[data_len+17],data_len+17);\r
sendBleData(value,data_len+18);\r
if(Check_CRC(crcnum,len,crcvalue))\r
{\r
memcpy(value+17,(uint8_t *)json_format,data_len);\r
- free(json_format);\r
+ cJSON_free(json_format);\r
uint8_t lrc = Calculate_CRC(value,data_len+17);\r
printf("lrc:%d",lrc);\r
value[data_len+18] = lrc;\r
memcpy(value+15,&tmp_data,2);\r
if(Check_CRC(crcnum,len,crcvalue))\r
{\r
- uint8_t switch_on = crcnum[0];//0 关闭 1 开启\r
+ uint8_t file_type= crcnum[0];//1 ota 2 MP3\r
\r
- value[17] = 1; //1 操作成功 2 操作失败\r
+ value[17] = 1; //\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
}else\r
}\r
pack_id++;\r
}\r
- free(json_format);\r
+ cJSON_free(json_format);\r
+ // ym_free(json_format);\r
}\r
//同步睡眠数据\r
static void sleepDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
void Read_file_buf_send_bin_Data(uint8_t num,uint16_t id,char *data_item)\r
{\r
sendbigDataBufState = true;//分包同步数据不允许打断\r
- char *buf=(char *)malloc(sizeof(char)*512);\r
+ char *buf=NULL;\r
const char *path=NULL;\r
uint8_t timeBit = 4;//默认是4个字节的时间戳\r
uint8_t dataBit = 1;//默认是1个字节的数据\r
{\r
send_big_data(1,NULL,0,0,1,1,id,1);\r
sendbigDataBufState = false;//分包同步数据不允许打断\r
- free(buf);\r
return;\r
}\r
\r
{\r
send_big_data(1,NULL,0,0,1,1,id,1);\r
printf("打开文件失败%s\r\n",path);\r
- free(buf);\r
+ if(path)\r
+ {\r
+ free(path);\r
+ path = NULL;\r
+ }\r
sendbigDataBufState = false;//分包同步数据不允许打断\r
return;\r
}\r
+ buf = (char *)ym_malloc(sizeof(char)*512);\r
int ret=fread(buf,1,512,fp);\r
uint8_t count=1;\r
while (ret==512)\r
count++;\r
}\r
cJSON *heart_data=cJSON_Parse(buf);\r
- free(buf);\r
+ ym_free(buf);\r
+\r
printf("读文件\r\n");\r
if(heart_data==NULL)\r
{\r
printf("解析失败\r\n");\r
+ return;\r
}\r
cJSON * heart_data_list=cJSON_GetObjectItem(heart_data,data_item);\r
int item_num=cJSON_GetArraySize(heart_data_list);\r
- char *send_buf=(char *)malloc(sizeof(char)*HEART_DATA_LEN);\r
+ char *send_buf=(char *)ym_malloc(sizeof(char)*HEART_DATA_LEN);\r
int send_len=0;\r
uint32_t Packet_id=1;\r
uint16_t packet_total;\r
{\r
printf("sendbuf :%s sendbuf_len%d\r\n",send_buf,send_len);\r
send_big_data(1,send_buf,send_len,item_num*5,Packet_id,packet_total,id,1);\r
- free(send_buf);\r
+ if(send_buf)\r
+ {\r
+ ym_free(send_buf);\r
+ send_buf = NULL;\r
+ }\r
sendbigDataBufState=false;\r
\r
}else\r
{\r
send_big_data(1,send_buf,send_len,item_num*5,Packet_id,packet_total,id,1);\r
- free(send_buf);\r
- send_buf=(char *)malloc(sizeof(char)*HEART_DATA_LEN);\r
+ if(send_buf)\r
+ {\r
+ ym_free(send_buf);\r
+ send_buf = NULL;\r
+ }\r
+ \r
+ send_buf=(char *)ym_malloc(sizeof(char)*HEART_DATA_LEN);\r
send_len=0;\r
Packet_id++;\r
}\r
}\r
send_buf=realloc(send_buf,i*5+10);\r
}\r
- cJSON_free(heart_data);\r
+ if(send_buf)\r
+ {\r
+ ym_free(send_buf);\r
+ send_buf = NULL;\r
+ }\r
+ cJSON_Delete(heart_data);\r
\r
}\r
//type\r
fseek(jsfile, 0, SEEK_END);\r
long fileSize = ftell(jsfile);\r
fseek(jsfile, 0, SEEK_SET);\r
- char *jsonData = (char *)malloc(fileSize + 1);\r
+ char *jsonData = (char *)ym_malloc(fileSize + 1);\r
fread(jsonData, 1, fileSize, jsfile);\r
jsonData[fileSize] = '\0';\r
fclose(jsfile);\r
// printf("jsonData %s",jsonData);\r
data_root= cJSON_Parse(jsonData);\r
// data_root = cJSON_GetObjectItem(modifiedJson,"infor");\r
- free(jsonData);\r
+ ym_free(jsonData);\r
\r
}else{\r
data_root = cJSON_Parse("{\\r
fwrite(jsonString, 1, strlen(jsonString), fp);\r
fclose(fp);\r
}\r
- free(jsonString);\r
+ cJSON_free(jsonString);\r
+ cJSON_Delete(data_root);\r
read_message_data();\r
\r
+\r
}\r
int uft8_check(char *chinese_string,int length)\r
{\r
for (i = 0; i < length;) {\r
// 判断是否为ASCII字符\r
if ((unsigned char)chinese_string[i] < 0x80) {\r
- printf("ASCII character: %d\n", (int)(unsigned char)chinese_string[i]);\r
+ // printf("ASCII character: %d\n", (int)(unsigned char)chinese_string[i]);\r
i++;\r
} else {\r
// 假设这里我们只处理3字节的UTF-8字符\r
//安卓消息接收解析数据 //ANCS 2AE1\r
uint8_t jscheck_ancs(uint8_t *data)\r
{\r
- \r
uint8_t *json;\r
json = data;\r
cJSON* root = cJSON_Parse((const char *)json);\r
int hasCode_t = 0;\r
char *titleBuf;\r
char *msgBuf;\r
- titleBuf = malloc(TITLE_BUF_LEN);\r
- msgBuf = malloc(MSG_BUF_LEN);\r
+ titleBuf = ym_malloc(TITLE_BUF_LEN);\r
+ msgBuf = ym_malloc(MSG_BUF_LEN);\r
if(titleBuf == NULL || msgBuf == NULL)//申请内存失败不在申请\r
{\r
return 2;\r
cJSON_Delete(root);\r
message_data(uid_t,appid_t,titleBuf,msgBuf,hasCode_t);\r
if(titleBuf != NULL){\r
- free(titleBuf);\r
+ ym_free(titleBuf);\r
titleBuf = NULL;\r
}\r
if(msgBuf != NULL){\r
- free(msgBuf);\r
+ ym_free(msgBuf);\r
msgBuf = NULL;\r
}\r
return 1;\r
{\r
return;\r
}\r
- \r
+ printf("bleDataRecv handle:%d\r\n",handle);\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
if(handle_l[i].handle == 0)//第一次用 \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
+ ym_free(handle_l[i].data);\r
+ handle_l[i].data = NULL;\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
- printf("bleDataRecv!!!!!!!\r\n");\r
+ printf("bleDataRecv!!!!!!!!!!!!!recv %x %x\r\n",totalData[0],totalData[1]);\r
if(event_size <= 17 || !((totalData[0] ==0x4a || totalData[0] == 0x73) && totalData[1] <= 0x09))//第一包的数据一定要大于17个字节并且第一包的数据头必须为0x73 或者0x4a 并且类型小于0x09 类型根据协议可自行增加或者减少\r
{\r
break;\r
handle_l[i].totalDataLen = totalDataLen;\r
\r
\r
- printf("bleDataRecv!!!!!!!%d\r\n",totalDataLen);\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
+ \r
+ handle_l[i].data = ym_malloc(totalDataLen+1);\r
+ printf("bleDataRecv!!!!!!!%d\r\n",totalDataLen);\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
+ printf("bleDataRecv one %d\r\n",totalDataLen);\r
packdataLen = event_size-18;\r
if(totalDataLen != 0)\r
{\r
- handle_l[i].data = malloc(totalDataLen+1);\r
+ handle_l[i].data =ym_malloc(totalDataLen+1);\r
memcpy(handle_l[i].data,totalData+17,packdataLen);\r
}\r
memset(handle_l[i].cmd_data,0,17);\r
}\r
}else//多包数据存储\r
{\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
+\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
+ printf("muilt 133333 handle_l[i].data_len:%d\r\n",handle_l[i].data_len);\r
if(handle_l[i].data_len >= handle_l[i].totalDataLen)//接收完整的数据\r
{\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
memcpy(handle_l[i].data+handle_l[i].data_len,totalData,event_size); //这是不带CRC数据说明还有下一包直接copy\r
}\r
- \r
}\r
break;\r
} \r
}\r
if(read_data_tmp)//获取到完整数据,处理数据且释放内存\r
{\r
- printf("pack data end!!!!!!\r\n");\r
+ printf("pack data start!!!!!\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
+ if(read_data_tmp->data)//只有数据不为NULL的才释放\r
+ {\r
+ ym_free(read_data_tmp->data);\r
+ }\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
+ printf("pack data end!!!!!!\r\n");\r
}\r
\r
\r
//接收app下发的原始数据 \r
void revBleOldData(uint8_t *buf, uint16_t event_size,uint16_t handle)//每包的数据大小\r
{\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "xxxxxxxxxxxxxxxx");\r
printf("handle :%d data2ae3Cmd:%d data2ae4Cmd:%d event_size %d\r\n",handle,data2ae3Cmd,data2ae4Cmd,event_size);\r
bleDataRecv(buf,event_size,handle);\r
}\r
#include "ppgBleService.h"\r
#include "build_version.h"\r
#include "custom_runtime.h"\r
+#include "custom_utils.h"\r
+\r
+\r
\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
uint16_t data2ae4Cmd = 0;\r
uint16_t data2ae5Cmd = 0;\r
uint16_t data2ae1Cmd = 0;//安卓消息来电\r
+uint16_t data2ae0Cmd = 0;//OTA\r
\r
-#if 1//def SUPPORT_BLE_SERVICE\r
static void set_phone_info(bd_addr_t *addr)//保存手机信息 包含手机mac地址\r
{\r
memcpy(&phone_addr,addr,sizeof(bd_addr_t));\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 %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
if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data4))\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "2ae0 result->value_handle4 %d\r\n",result->value_handle);\r
- // shortCmdChara = result->value_handle;\r
+ if(data2ae0Cmd == 0)\r
+ {\r
+ data2ae0Cmd = result->value_handle;\r
+ }\r
}\r
if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data5))\r
{\r
- if(data2ae3Cmd == 0)\r
+ if(data2ae1Cmd == 0)\r
{\r
data2ae1Cmd = result->value_handle;\r
}\r
\r
\r
static uint8_t falg = 0;\r
+\r
static void svr_ble_bt_gatts_req_write_cb(uint8_t server_id, uint16_t conn_id, gatts_req_write_cb_t *write_cb_para,\r
errcode_t status)\r
{ \r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_ble_server_handle %d conn_id :%d write_cb_para->length:%d write_cb_para->handle %d write_cb_para->request_id:%d",g_ble_server_handle,conn_id,write_cb_para->length,\r
write_cb_para->handle,write_cb_para->request_id);\r
// printf("alipay_handle%d",alipay_handle);\r
- for(uint16_t i = 0;i<write_cb_para->length;i++)\r
+ #if 0\r
+ char *hex_str_tmp = malloc(10*1024);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"hex_str_tmp:%x\r\n",hex_str_tmp);\r
+ uint16_t i=0;\r
+ for( i = 0;i<write_cb_para->length;i++)\r
{ \r
- printf("%x ",write_cb_para->value[i]);\r
- \r
- }\r
- //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"handle :%d %d %d".write_cb_para->handle,get_factory_ate_write_handl(),get_factory_ota_write_handl());\r
- if (write_cb_para->handle == get_factory_ate_write_handl()) \r
- {\r
- factory_recv_cmd_data(write_cb_para->value,write_cb_para->length,write_cb_para->handle);\r
- }\r
- else if (write_cb_para->handle == get_factory_ota_write_handl())\r
- {\r
- factory_recv_ota_data(write_cb_para->value,write_cb_para->length,write_cb_para->handle);\r
- }else if(write_cb_para->handle == alipay_handle)\r
- {\r
- printf("alipay wirte!!!!!");\r
- // svr_alipay_bt_gatts_noyify(buf,5);\r
- errcode_t ret = svr_alipay_msg_write(ALIPAY_MSG_BT, write_cb_para->value, write_cb_para->length, false);\r
-\r
- }else{\r
- revBleOldData(write_cb_para->value,write_cb_para->length,write_cb_para->handle);\r
+ //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"%x ",write_cb_para->value[i]);\r
+ sprintf(hex_str_tmp+i*3,"%02X ",write_cb_para->value[i]);\r
}\r
+ hex_str_tmp[i*3] = 0;\r
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"hex_str_tmp:%s\r\n",hex_str_tmp);\r
+ free(hex_str_tmp);\r
+ #endif\r
+ blesrv_service_recv_msg_handler(write_cb_para->handle,write_cb_para->value,write_cb_para->length);\r
}\r
static void svr_ble_mtu_exchange(uint8_t server_id, uint16_t conn_id, uint16_t mtu_size, errcode_t status)\r
{\r
break;\r
}\r
}\r
-#endif\r
+/**=================protocol recv decode service (task)=============================================================================================*/\r
+typedef struct\r
+{\r
+ uint16_t service_handle;\r
+ uint32_t msg_len;\r
+ uint8_t *msg_data;\r
+} blesrv_custom_cmd_t;\r
+\r
+#define MAX_BUF_LEN (2+4+4) //sizeof(blesrv_custom_cmd_t) /*MTU max 514 , sizeof(blesrv_custom_cmd_t)*/\r
+static unsigned long g_blesrv_queue = 0xFFFFFFFF;\r
+static uint8_t g_blesrv_queue_created = 0;\r
+void blesrv_service_recv_msg_handler(uint16_t srv_handle, uint8_t * msg_data, uint32_t msg_len)\r
+{\r
+ int ret;\r
+ \r
+ if( g_blesrv_queue_created == 0) return ;\r
+ if (msg_data == NULL) return ;\r
+\r
+ blesrv_custom_cmd_t mail={0};\r
+ uint32_t sendlen = MAX_BUF_LEN;\r
+\r
+ \r
+ mail.service_handle = srv_handle;\r
+ mail.msg_len = msg_len;\r
+ mail.msg_data = (uint8_t*)malloc(msg_len);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble_recv:mail.msg_data %x\r\n",mail.msg_data);\r
+ if(mail.msg_data==NULL)\r
+ {\r
+ return ;\r
+ }\r
+ memcpy_s(mail.msg_data,msg_len,msg_data,msg_len);\r
+\r
+ ret = osal_msg_queue_write_copy(g_blesrv_queue, (void *)&mail, MAX_BUF_LEN , 0);\r
+ if (ret != OSAL_SUCCESS)\r
+ {\r
+ PRINT("Error blesrv Check send failed! err=0x%x! \r\n", ret);\r
+ }\r
+ \r
+}\r
+\r
+static void blesrv_service_check_task(void const *arg)\r
+{\r
+ unused(arg);\r
+ int32_t ret;\r
+ blesrv_custom_cmd_t mail={0};\r
+ uint32_t msgsize = MAX_BUF_LEN;\r
+\r
+ while (1)\r
+ {\r
+ ret = osal_msg_queue_read_copy(g_blesrv_queue, (void *)&mail, &msgsize,\r
+ OSAL_MSGQ_WAIT_FOREVER);\r
+ if (ret != OSAL_SUCCESS)\r
+ {\r
+ continue;\r
+ }\r
+ \r
+ uint8_t *p_msgbuf = mail.msg_data;\r
+ uint16_t server_handle = mail.service_handle;\r
+ uint32_t msg_len = mail.msg_len;\r
+\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble_recv:%d %d %x %x %x\r\n",msg_len,server_handle,p_msgbuf[0],p_msgbuf[1],p_msgbuf[2]);\r
+ #if 0\r
+ if (server_handle == get_factory_ate_write_handl()) \r
+ {\r
+ factory_recv_cmd_data(p_msgbuf,msg_len,server_handle);\r
+ }\r
+ else if (server_handle == get_factory_ota_write_handl())\r
+ {\r
+ factory_recv_ota_data(p_msgbuf,msg_len,server_handle);\r
+ }else if(server_handle == alipay_handle)\r
+ {\r
+ printf("alipay wirte!!!!!");\r
+ // svr_alipay_bt_gatts_noyify(buf,5);\r
+ errcode_t ret = svr_alipay_msg_write(ALIPAY_MSG_BT, p_msgbuf, msg_len, false);\r
+\r
+ }else{\r
+ revBleOldData(p_msgbuf,msg_len,server_handle);\r
+ }\r
+ #endif\r
+\r
+ // free(mail.msg_data);\r
+ // mail.msg_data = NULL;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble_recv:end\r\n");\r
+ }\r
+}\r
+#define BLESRV_APP_BOARD_MSG_COUNT 50\r
+#define BLESRV_APP_BOARD_TASK_SIZE 0x2000\r
+#define BLESRV_BOARD_TASK_PRIO 7\r
+void create_blesrv_queue(void)\r
+{\r
+ if (osal_msg_queue_create("blesrv_service_queue", BLESRV_APP_BOARD_MSG_COUNT, &g_blesrv_queue,\r
+ 0, MAX_BUF_LEN) != ERRCODE_SUCC)\r
+ {\r
+ printf("[blesrv][service] app create mail fail\n");\r
+ g_blesrv_queue_created = 0;\r
+ }else{\r
+ g_blesrv_queue_created = 1;\r
+ }\r
+\r
+}\r
+errcode_t uapi_blesrv_service_init(void)\r
+{\r
+\r
+ PRINT("uapi_blesrv_service_init !\r\n");\r
+ app_task_definition_t taskcfg = {0};\r
+ taskcfg.create_queue_handle = create_blesrv_queue;\r
+ taskcfg.attr.name = "blesrv_recv_service";\r
+ taskcfg.attr.priority = osPriorityNormal;\r
+ taskcfg.attr.stack_size = BLESRV_APP_BOARD_TASK_SIZE;\r
+ taskcfg.func = blesrv_service_check_task;\r
+ taskcfg.use_mem = USE_DTCM_MEM;\r
+\r
+ errcode_t ret = uapi_create_osThread_custom(&taskcfg);\r
+ if (ret != ERRCODE_SUCC)\r
+ {\r
+ PRINT("create blesrv_service failed %d!\r\n", ret);\r
+ return ERRCODE_FAIL;\r
+ }\r
+\r
+ return ERRCODE_SUCC;\r
+}\r
+\r
+\r
+\r
+\r
#ifdef __cplusplus\r
}\r
#endif
\ No newline at end of file