考虑一个方案,主机和从站协商20秒的主管超时。如果通过观察RWBE.C中的这些事件的序列,检测到检测到5秒的链路不活动(在SUPERISOR TIMEOUT之前)有5秒的链路不活动,则可以在显式断开代码来显式断开连接。
/ *最后的BLE活动。用于应用程序与BLE Activity的同步* /
typedef枚举
{
ble_evt_slp,
ble_evt_cscnt,
ble_evt_rx,
ble_evt_tx,
ble_evt_finetgtim,
ble_evt_end,
last_ble_evt;
该链接在T = 0处被打破,并使用调试器断点我观察到从代码正确地启动通过内核消息GAPC_DISConnect经过的T = 5秒的断开连接。
但是,我也用调试器观察的是,在T = 10周围之前,确认断开连接完成的GAPC_DISCONNECT_IND不会发生。通过数据包嗅探器,我也看到广告直到t = 10后直到恢复。它看起来好像是在适当时间命令GAPC_DISCONNECT时延迟实际断开连接。在我们的情况下,如果上述条件发生,则断开连接很重要。
谢谢,
设备:
嗨jameshiebert,
出现此行为的最可能原因是连接间隔。连接间隔的配置有哪些?如果连接间隔太大,并且您没有使用延迟,我建议您使用较小的连接间隔并增加延迟。请检查附加的屏幕截图。当从机无需发送时,连接间隔约为2200ms(2000ms延迟+200ms连接间隔)。但是当从机有东西要发送时,在您的情况下,断开消息会唤醒设备,连接间隔大约为t 200ms。
谢谢,PM_DIALOG.
你好对话框,
谢谢(你的)信息。在我们的场景中,CI非常短,11.25ms,从延迟为0。
您是否在长期监督超时期间尝试了实验,而主人则不再将空闲数据包传输到奴隶?
是否有可能发生延迟,因为从站不能将Disconnect命令传输为主和从属奴隶不再交换空闲?
嗨jameshiebert,
不,我从未尝试过这个实验。你能澄清一下吗?哪些配置您正在使用的?
谢谢,PM_DIALOG.
尝试这个:
1.建立与11.25ms CI和20S ST(Master和Slave)的连接。
2.从连接开始,从站设置一个定时器5(或更多)秒。
3.在计时器经过之前,从主机断开天线
4.当计时器到期时,从站发送Gapc_disconnect_cmd。
什么时候是奴隶应用程序收到的gapc_disconnected_ind?
我们希望立即发生这种情况,但它似乎似乎它被延迟显着。
嗨jameshiebert,
发送GAPC_DISCONNECT_CMD命令时,响应是一个GAPC_DISCONNECT_IND事件在连接完成时触发,并且在操作完成后,您将获得GAPC_CMP_EVT事件。GAPC_DISCONNECT_IND事件将被发送到应用程序任务,以便通知链接已断开连接。接收此消息还意味着与链接相关的任务实例是清理的,并且在建立新连接之前,不能使用相应的任务实例。您是否意味着当您从对等外围设备断开主机的连接时,您就不会获得GapC_Disconnect_ind?
谢谢,PM_DIALOG.
PM_DIALOG,
我们确实得到了gapc_disconnect_ind,但不是立即。在指示到来之前似乎需要几秒钟。它几乎好像系统正试图将空气中的断开指示发送回主控,而是因为没有收到主帧,因此在放弃和断开连接之前它会延迟一下?
对话,
我与您的工程经理之一和他的建议相符,发送以下消息而不是GapC_Disconnect解析了延迟问题。
ke_msg_send_basic(llc_le_link_sup_to,ke_build_id(task_llc,gapc_get_conhdl(conn_idx)),task_none);
对话,
我与您的工程经理之一和他的建议相符,发送以下消息而不是GapC_Disconnect解析了延迟问题。
ke_msg_send_basic(llc_le_link_sup_to,ke_build_id(task_llc,gapc_get_conhdl(conn_idx)),task_none);
嗨jameshiebert,
很高兴你识上你的问题,谢谢你的迹象。
谢谢,PM_DIALOG.