BLE堆栈不会收到断开连接通知

6个帖子/ 0新
最后一篇
jzahn.
离线
最后一次露面:4年4个月前
加入:2015-09-03 20:45
BLE堆栈不会收到断开连接通知

首先,一些背景信息。我正在使用5.0.2.1 SDK的BLE_APP_PLEICAINALLAL示例的修改版本。我正在运行一个自定义服务,从user_custs1调整。我正在运行DA14580作为一个独立的MCU,与UART的另一个MCU通信。DA14580主要用作接收数据包并通过BLE发送的继电器,并在UART上发送数据包并将它们发送。DA14580还将数据包发送到第二个MCU,以通知其BLE状态更改(连接,断开连接等)。

我看到的问题是,如果我开始将基于DA14580的系统的数据发送到另一个BLE设备并将该设备超出范围,则BLE连接将下降,但DA14580似乎似乎没有实现它。DA14580再次无法启动广告,并且从未通知第二个MCU断开事件。如果我没有通过BLE流传输任何数据,那么正确识别连接丢弃。

有任何想法吗?我在Custs1_Task.c中通知我的第二个MCU断开的磁带中的函数中的函数。

关键词:
设备:
mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨JZAHN,

嗨JZAHN,

我不完全明白配置是否完全嵌入或完全托管。我假设是一个完全托管的设备,当断开超过范围或主机断开连接时触发的处理程序是相同的,user_app_disconnect()。请检查这是两种情况下触发的处理程序(不要使用睡眠并放置断点以确认)。另外,对于设备重新启动广告,存在一个条件,指示应用程序启动广告如果应用程序的状态是指定的状态,也可以检查此外部,也许设备的状态不同。另请检查user_app_disconnect()后触发Custs1_task.c中的gapc_disconnect_ind_handler()。在ble_app_peripheral中,两种情况都应调用两个断开功能。

谢谢mt_dialog.

jzahn.
离线
最后一次露面:4年4个月前
加入:2015-09-03 20:45
嘿mt_dialog,

嘿mt_dialog,

为了澄清,我正在使用BLE作为独立Cortex M0运行DA14580,并使用它上的应用程序与另一个独立的Cortex M3交谈。

我尝试使用user_app_disconnect()回调来检测断开连接,但是该回调也不会被调用。如果我干净地终止BLE连接,则以该顺序调用user_app_disconnect()和gapc_disconnect_ind_handler()处理程序。

我跑了几次测试,如果我没有每秒发送超过两个20个字节的报文,那么正确识别超出范围的断开连接。如果我更频繁地发送数据,则无法识别超出范围的断开连接。

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

jzahn.
离线
最后一次露面:4年4个月前
加入:2015-09-03 20:45
我刚刚做了一个测试

我刚刚用另一个设备进行了测试,我们使用了DSP配置文件,我看到了什么看起来像同样的问题。如果数据在2Hz或更快地流动数据,并且连接的设备超出范围,则系统不会返回广告状态。我没有调试访问该设备,所以我无法确切地确认发生了什么,但症状是一样的。

mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨JZAHN,

嗨JZAHN,

现在,你已经给了我一些关于你的应用程序的信息,我假设在超出范围时,您的设备重置。我想你正在分配太多的数据,并且超出范围并且累积这些数据时,堆堆和580在平台复位中。您必须使用一种对此的流量控制,或许在发送下一个通知等待确认之前已成功发送了先前通知。

谢谢mt_dialog.

jzahn.
离线
最后一次露面:4年4个月前
加入:2015-09-03 20:45
成功!

成功!

我在user_custs1_b_data_ntf_cfm_b_data_ntf_cfm_b_dathler()中设置一个标志,以确保除非确认前一个,否则未提交新的BLE通知,并且我的问题已得到修复。

谢谢你的帮助Mt_dialog,你已经救了很多时间和理智。

主题锁定