BLE堆栈未收到断开连接通知

6个职位/0个新职位
最后一篇文章
杰扎恩
离线
最后一次见到:4年4个月前
已加入:2015-09-03 20:45
BLE堆栈未收到断开连接通知

首先,一些背景资料。我使用的是5.0.2.1SDK的ble\u app\u外围示例的修改版本。我运行的是一个定制服务,改编自用户\u custs1。我把DA14580作为一个独立的MCU运行,它通过UART与另一个MCU通信。DA14580主要用作中继,接收数据包并通过BLE发送,接收数据包并通过UART发送。DA14580还将数据包发送到第二个MCU,以通知其BLE状态更改(连接、断开连接等)。

我看到的问题是,如果我开始将数据从基于DA14580的系统发送到另一个BLE设备,并将该设备带出范围,BLE连接将断开,但DA14580似乎没有意识到这一点。DA14580不会再次开始播发,也不会将断开连接事件通知第二个MCU。如果我没有通过BLE传输任何数据,那么就可以正确识别连接中断。

有什么想法吗?我正在通知我的第二个MCU custs1\u task.c中gapc\u disconnect\u ind\u handler()函数中的断开连接事件。

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

你好,jzahn,

我不完全理解配置是完全嵌入的还是完全托管的。我假设这是一个完全托管的设备,当从超出范围或主机断开连接时,触发的处理程序是相同的,user\u app\u disconnect()。请检查这是在这两种情况下触发的处理程序(不要使用sleep并放置断点来确认)。另外,为了使设备重新开始播发,有一个条件指示应用程序开始播发如果应用程序的状态处于指定的状态,您也可以检查这个条件,也许您的设备的状态不同。还要检查在custs1\u task.c中触发用户\u app\u disconnect()之后gapc\u disconnect\u ind\u handler()。在ble\u app\u外围设备中,在这两种情况下都应该调用这两个disconnect函数。

谢谢你的对话

杰扎恩
离线
最后一次见到:4年4个月前
已加入:2015-09-03 20:45
嘿,MT\u dialog,

嘿,MT\u dialog,

为了澄清这一点,我将DA14580作为一个独立的cortex M0和BLE一起运行,并使用其上的一个应用程序与另一个独立的cortex M3进行对话。

我已经尝试使用user\u app\u disconnect()回调来检测断开连接,但是该回调也没有被调用。如果我干净地终止BLE连接,那么将按顺序调用user\u app\u disconnect()和gapc\u disconnect\u ind\u handler()处理程序。

我又运行了一些测试,如果每秒发送的数据包不超过两个20字节,那么就可以正确识别超出范围的断开连接。如果发送数据的频率高于此频率,则无法识别超出范围的断开连接。

是否有较低级别的堆栈可以识别我可以尝试连接到的断开连接?

杰扎恩
离线
最后一次见到:4年4个月前
已加入:2015-09-03 20:45
我刚做了个测试

我刚刚用另一个使用DSPS配置文件的设备做了一个测试,我看到了相同的问题。如果数据正在以2Hz或更快的频率传输,并且连接的设备超出范围,则系统不会返回到广告状态。我没有调试访问该设备,所以我不能确切地确认发生了什么,但症状是一样的。

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

你好,jzahn,

现在你已经给了我一些关于你的应用程序的更多信息,我假设当超出范围时你的设备会重置。我假设您分配了太多的数据,当超出范围并且这些数据被累积时,淹没堆,580进入平台重置。您必须对此使用一种流控制,可能在发送下一个通知之前,等待上一个通知成功发送的确认。

谢谢你的对话

杰扎恩
离线
最后一次见到:4年4个月前
已加入:2015-09-03 20:45
成功!

成功!

我在user\u custs1\u impl.c中的user\u custs1\u b\u data\u ntf\u cfm\u handler()中设置了一个标志,以确保不会提交新的BLE通知,除非上一个通知已被确认,并且我的问题已被修复。

谢谢你的帮助,你为我节省了很多时间和精力。

主题已锁定