3 posts / 0 new
Last post
huzhongyi
Offline
Last seen:2 years 2 months ago
Joined:2018-08-25 06:57
14580回复APP两条数据,为什么APP只接收到后面一条?

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:
CYibin
Offline
Last seen:1 month 2 weeks ago
Staff
Joined:2017-12-14 02:48
你好,

你好,

在使用接口 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

huzhongyi
Offline
Last seen:2 years 2 months ago
Joined:2018-08-25 06:57
thanx!

thanx!

Topic locked