通知已发送但从未收到

⚠️
你好。。谢谢你来参加论坛。令人兴奋的消息!我们现在正在移动到我们的新论坛平台,将提供更好的功能,并包含在主对话网站的过程。所有帖子和账号都已迁移。我们现在只接受新论坛上的流量-请在//www.wsdof.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
3个职位/0个新职位
最后一篇文章
nhan.ngodinh
离线
最后一次见到:1年4个月前
已加入:2017-03-21 10:20
通知已发送但从未收到

我们创建了一个具有2个特性(读/通知和写)的固件。您可以使用write(with response)特性发送命令,并使用read特性返回结果。要通知读取特征包含响应,将发送通知。

当在电池模式下从PRO-DEVKIT运行时,一切工作都很顺利。

如果我们连接了一个USB智能手机充电器,并尝试在这种情况下进行相同的操作,有时即使通知已发送,也无法到达目的地(ble\u gatts\u send\u event返回success,ble\u EVT\u gatts\u event\u sent正确显示)。

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

你知道吗?

当做,

设备:
MT\u对话框
离线
最后一次见到:2个月1周前
工作人员
已加入:2015-06-08 11:34
你好nhan.ngodinh,

你好nhan.ngodinh,

我不明白如何从电池供电的设备,然后直接从USB可能会影响通知的发送,没有明显的原因,你有一个嗅探器日志来验证通过空气发送的数据包的数量?您确定您遇到的问题与使用电池或VBUS插入时的操作有关吗?

谢谢你的对话

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

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

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

ble\ u storage\ u put\ u buffer(conn\ u idx,response\ u h,length,buf,OS\ u FREE\ u FUNC,false);
ble\ U storage\ U get\ U 16(连接idx、ccc\ h和ccc);
国际单项体育联合会(ccc和GATT\ ccc\ U通知){
ble_gatts_send_event(conn_idx,response_h,GATT_event_NOTIFICATION,sizeof(notify_body),¬ify_body);//当VBUS应用时,这有时不起作用
}

我创建了一个解决方法,在ble\u storage\u put\u buffer()之后立即添加一个无用的ble\u storage\u get\u buffer(),其简化顺序如下:

ble\ u storage\ u put\ u buffer(conn\ u idx,response\ u h,length,buf,OS\ u FREE\ u FUNC,false);
ble_storage_get_buffer(conn_idx,response_h,&dummylength,&dummybuf,OS_FREE_FUNC,false);//虚拟读取(解决方法)
ble\ U storage\ U get\ U 16(连接idx、ccc\ h和ccc);
国际单项体育联合会(ccc和GATT\ ccc\ U通知){
ble\ u gatts\ u send\ u event(conn\ u idx、response\ u h、GATT\ u event\ u NOTIFICATION、sizeof(notify\ body)和notify\ body);
}