- 在这个函数中 outdata 存储一个输出然后它作为输入传递给这个函数然后更新输出数据再次传递然后像这种方式更新。
- 再次作为输入传递,然后更新输出数据。
char *SSWgetjson_createpacket(struct_json_sensor_buffer_ptr ret_data,struct_json_sensor_buffer_ptr outdata){
cJSON*array=cJSON_CreateArray();
cJSON*temp_root,*root=cJSON_CreateObject();
cJSON*rootout=cJSON_CreateObject();
if((cJSON_Parse(outdata->data)))
{
rootout=cJSON_Parse(outdata->data);
printf("outdata as a input");
}
else{
rootout=cJSON_Parse(ret_data->data);
printf("ret_data as a input\n");
}
//ret_data will works here.
temp_root=cJSON_GetArrayItem(rootout,0);
if(cJSON_GetObjectItem(temp_root,"NumPackets")){
cJSON_Delete(temp_root);
printf("numpacket key is present");
int num_packets=cJSON_GetObjectItem(root,"NumPackets")->valueint;//to check
printf("numpacket key contains value %d ",num_packets);
if(num_packets){
cJSON_SetIntValue(cJSON_GetObjectItem(root,"NumPackets"),++num_packets);
printf("numpacket key contains incremented value %d ",num_packets);
}
}else{
printf("key value not present\n");
cJSON_AddNumberToObject(root,"NumPackets",1);
cJSON_AddStringToObject(root,"Mac_id","12345");
}
ret_data->data=cJSON_Print(array);
int current_len=strlen(ret_data->data);
//printf("\n\noutdata printat packet function before memorycopy:%s\n",outdata->data);
//outdata->len=strlen(outdata->data);
printf("test %s \n",outdata->data);
if(outdata->len==0){
outdata->data=calloc(1,current_len);
outdata->len=current_len;
memcpy(outdata->data,ret_data->data,current_len);
printf("memory allocated outdata->len=%d current_len=%d \n",outdata->len,current_len);
}else{
printf("\n outdata_length:%d\n\n",outdata->len);
struct_json_sensor_buffer_ptr new=calloc(1,outdata->len+current_len);// to allocate memory then add a function.
new->len=ret_data->len +current_len;
printf("memeory reallocated %d \n",new->len);
memcpy(new->data,outdata->data,outdata->len);
memcpy(new->data+outdata->len,ret_data->data,current_len);
//free(outdata->data);
outdata->len=new->len;
outdata->data=new->data;
}
return outdata->data;
}