发送并从未收到过通知

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
3个帖子/ 0新
最后一篇
nhan.ngodinh.
离线
最后一次露面:1年4个月前
加入:2017-03-21 10:20
发送并从未收到过通知

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

当从Pro Devkit运行时,电池模式中的一切顺畅工作。

如果我们附上USB智能手机充电器,我们尝试在该条件下执行此操作,有时候,即使显然他们已被发送(BLE_GATTS_SEND_EVENT返回成功和BLE_EVT_GATTS_EVENT_SENT)也无法到达目的地。

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

任何想法?

问候,
N

设备:
mt_dialog.
离线
最后一次露面:2个月6天前
职员
加入:2015-06-08 11:34
嗨nhan.ngodinh,

嗨nhan.ngodinh,

我不知道如何从电池中提供设备然后直接从USB提供通知的发出,没有明显的原因,您是否有嗅探器日志验证数据包的数量发送到空中?您是否确定您获得的问题与电池或VBUS插入时相关的问题?

谢谢mt_dialog.

nhan.ngodinh.
离线
最后一次露面:1年4个月前
加入:2017-03-21 10: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),&notify_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,&dummyymf,&dummybuf,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),&notify_body);
}