通过notify向APP连续发送两个数据包,但是APP收到的两个数据包的数据都是第二个数据包的,这是怎么回事?

3 posts / 0 new
Last post
kongxiangmin
Offline
Last seen:1 year 4 months ago
加入:2019-01-02 01:33
通过notify向APP连续发送两个数据包,但是APP收到的两个数据包的数据都是第二个数据包的,这是怎么回事?

Hi Dialog,

我使用的发送函数是 send_ble_data(const uint8_t *data,uint16_t length),

send_ble_data(const uint8_t *data,uint16_t length)

{
struct sps_server_data_tx_req *req = KE_MSG_ALLOC_DYN(SPS_SERVER_DATA_TX_REQ,
TASK_SPS_SERVER,
TASK_APP,
sps_server_data_tx_req,
len);
req->length = len;
memcpy(req->value, buf, len);

ke_msg_send(req);
}

我也参考了这个回答,

https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl...

我第二个数据包应该是把第一个覆盖掉了,然后又发了一次第二个数据包。

请问一下我这样的处理方式哪里错了错误,我这个程序是在DSPS的基础上改的。

谢谢了!

Device:
CYibin
Offline
Last seen:6 months 3 weeks ago
Staff
加入:2017-12-14 02:48
你好,

你好,

从你贴上来的代码,我们只知道:

你从 user 层,向 profile 层发送了一条消息,需要发送一段数据。并附上待发送的数据和数据长度。

至于这个消息由 profile 层接收之后,做什么处理,我们无从得知。

不过,如果你没有对 DSPS 工程的 profile 层做任何修改的话,这种发送数据的方式应该没问题。

DSPS 工程发送数据过程,大概描述如下:

1.用户层发消息给概要文件层,并附上待发送数据和数据长度

2. profile 层接收到 user 层的数据之后,把他们都扔进缓冲

3. profile 层检查一切条件成熟之后(串口没有数据,发送缓冲历史遗留的待数据等),将数据从缓冲中拉出来(ble_pull_data),然后扔给底层(GATTC_NOTIFICATION)

4. 底层发送完数据之后,会给到上层一条成功与否的消息

5. profile 层接收到发送结束消息之后,在回调函数中继续从缓冲中拉数据出来,继续发送。重复 3 4 5,直到数据完毕。

yoshow317
Offline
Last seen:1 year 4 months ago
加入:2019-09-26 06:25
Hi,

Hi,

我使用SDK 5.0.4 ble_app_profile, 也是參考下面回答,連續呼叫兩次send_to_app();

https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bluetooth-low-energy-%E2%80%93-hardware-device-reference-designs-dialog--26

但也是跟一樓一樣,兩筆封包都是第二筆的資料,是不能這樣呼叫嗎?