14580回复APP两条数据,为什么只接收到后面一条?谢谢!
int newDataLen = strlen("$3{\"ret\":0,\"timeSta");
memcpy(bleData, "$3{\"ret\":0,\"timeSta", newDataLen);
bleData[newDataLen] = 0;
attmdb_att_set_value(param->handle, strlen(bleData), (uint8_t*)&(bleData[0]));
prf_server_send_event((prf_env_struct *)&custs1_env, 0, param->handle);
usDelay(50 * 1000);
newDataLen = strlen("mp\":123456789012}$0");
memcpy(bleData, "mp\":123456789012}$0", newDataLen);
bleData[newDataLen] = 0;
attmdb_att_set_value(param->handle, strlen(bleData), (uint8_t*)&(bleData[0]));
prf_server_send_event((prf_env_struct *)&custs1_env, 0, param->handle);
Device:
你好,
在使用接口 prf_server_send_event 给底层发送消息之后,要先让底层把这个消息处理了,再第二次发送。否则第二次 attmdb_att_set_value 把第一次的 attmdb_att_set_value 覆写了
你可使用我们更上一层的封装接口,来实现数据发送,举例如下:
void send_to_app(uint8_t *buf, uint16_t len)
{
struct custs1_val_ntf_req *req = KE_MSG_ALLOC_DYN(CUSTS1_VAL_NTF_REQ,
TASK_CUSTS1,
TASK_APP,
custs1_val_ntf_req,
len);
req->conhdl = app_env->conhdl;
req->handle = handle;
req->length = len;
memcpy(req->value, buf, len);
ke_msg_send(req);
}
这样,可连续调用该接口,发送两次数据:
send_to_app();
send_to_app();
整个数据发送过程详细列举如下:
1、两次调用 send_to_app 之后,消息队列里就被塞了两个消息:CUSTS1_VAL_NTF_REQ,CUSTS1_VAL_NTF_REQ
2,调度器运行之后(rwip_schedule)处理消息铜STS1_VAL_NTF_REQ,发出 GATTC_SEND_EVT_CMD,然后处理第二个 CUSTS1_VAL_NTF_REQ,发出第二个GATTC_SEND_EVT_CMD,然后处理第一个 GATTC_SEND_EVT_CMD,再处理第二个GATTC_SEND_EVT_CMD
3、消息队列里的变化情况列举如下:
1) CUSTS1_VAL_NTF_REQ CUSTS1_VAL_NTF_REQ
2) CUSTS1_VAL_NTF_REQ GATTC_SEND_EVT_CMD
3) GATTC_SEND_EVT_CMD GATTC_SEND_EVT_CMD // 处理第一条
4) GATTC_SEND_EVT_CMD // 处理第二条
5) NULL
thanx!