发送通知,但从未收到

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
3个帖子/ 0个新
最后发表
nhan.ngodinh
离线
最后看到:一年6个月前
加入:2017-03-21 20
发送通知,但从未收到

我们已经创建了一个具有2个特征的固件(读/通知和写)。您可以使用write(带响应)特征发送命令,并使用read特征获取结果。为了通知读特征包含响应,发送一个通知。

当从PRO DEVKIT运行在电池模式下一切工作顺利。

如果我们连接一个USB智能手机充电器,并尝试在这种情况下做同样的事情,有时通知不能到达目的地,即使它们显然已经发送(ble_gatts_send_event返回成功,而BLE_EVT_GATTS_EVENT_SENT显示正确)。

大约5秒内,写/通知/读事件约为10个。通常最后一个命令是没有得到通知的。

任何想法?

问候,
N

设备:
MT_dialog
离线
最后看到:4个月,1个星期前
工作人员
加入:2015-06-08 34
嗨nhan.ngodinh,

嗨nhan.ngodinh,

我看不出从电池供应设备,然后直接从USB可能会影响通知的发送,这没有明显的原因,你有嗅探日志,以验证发送的数据包数量的空气?你确定你得到的问题是与使用电池或当VBUS插入时有关吗?

由于MT_Dialog

nhan.ngodinh
离线
最后看到:一年6个月前
加入:2017-03-21 20
不幸的是没有嗅探器日志

不幸的是,没有可用的嗅探日志。我确认问题正在按我描述的方式发生。

我找到了一个解决方案,错误的命令序列是(简化):

ble_storage_put_buffer(conn_idx, response_h, length, buf, OS_FREE_FUNC, false);
ble_storage_get_u16 (conn_idx ccc_h, ccc);
if (ccc & GATT_CCC_NOTIFICATIONS) {
ble_gatts_send_event(conn_idx, response_h, GATT_EVENT_NOTIFICATION, sizeof(notify_body), ¬ify_body);//当VBUS应用时,有时不工作

我创建了一个解决方案,在ble_storage_put_buffer()之后立即添加一个无用的ble_storage_get_buffer(),其简化的序列如下:

ble_storage_put_buffer(conn_idx, response_h, length, buf, OS_FREE_FUNC, false);
ble_storage_get_buffer(conn_idx, response_h, &dummylength, &dummybuf, OS_FREE_FUNC, false);//虚拟读取(workaround)
ble_storage_get_u16 (conn_idx ccc_h, ccc);
if (ccc & GATT_CCC_NOTIFICATIONS) {
ble_gatts_send_event(conn_idx, response_h, GATT_EVENT_NOTIFICATION, sizeof(notify_body), ¬ify_body);