主机发起连接问题
当系统扫描到设备后,调用GAPCentralRole_EstablishLink向从机发起连接,如果从机工作正常则,可以收到连接成功的系统事件GAP_LINK_ESTABLISHED_EVENT。这是正常的情况。
今天遇到一个问题,在主机扫描后,向从机发起连接。但是这时,从机突然断电了,这时主机就一直在发起连接,而且没有任何相应之类的。
而且我再次扫描后向另外一个地址发起连接,GAPCentralRole_EstablishLink返回bleAlreadyInRequestedMode,说明上次发起连接的任务还在进行,我想知道主机对一个设备发起连接后,如果此设备不存在,系统如何处理,针对这种情况有什么比较好的解决办法?
谢谢!
xianbin,
当主机发起连接请求之后,Link Layer会启动一个20秒的timer, 20秒之后会认为连接建立超时失败。
所以你可以等20试试。如果你要修改这个参数,可以调用 GAP_SetParamValue(TGAP_CONN_EST_SUPERV_TIMEOUT, 数字) ; 这个数字的单位是10ms.
或者,你可以启动一个timer, 一定时间后调用 HCI_LE_CreateConnCancelCmd(),来终结连接过程。
在连接失败后是否会产生GAP_LINK_ESTABLISHED_EVENT事件?
还是生成其它事件?
xianbin,
失败之后不会产生GAP_LINK_ESTABLISHED_EVENT事件。
但是你可以加个断点看一下是否会产生GAP_LINK_TERMINATED_EVENT 事件。
谢谢您的答复!
我实验了,不会产生GAP_LINK_ESTABLISHED_EVENT事件。
这样就是说,如果我对一个地址发起连接后,如果连接成功,可以得到 GAP_LINK_ESTABLISHED_EVENT事件。
但是如果失败就没有任何消息,这样就只有自己在应用层开启一个定时器来监测是否连接成功了!
我的理解对吗?
你好,我有个类似的问题,两个已经建立连接的蓝牙设备,从机突然断电了,主机过了好长时间才触发GAP_LINK_TERMINATED_EVENT,这个触发时间是不是可以设置变短?怎么设置?
是啊。我也遇到这样的问题。不知怎么解决? TI的高手帮助一下。多谢!
上层判断超时后调用:
GAPCentralRole_TerminateLink(0xFFFE) ; //取消当前建立连接过程
后会收到事件:
GAP_LINK_ESTABLISHED_EVENT