连接多个从机时 创建连接超时问题

连接多从机例程里,创建连接超时用 0xFFFF应该会断开所有连接吧,这不会导致断开已有连接吗?可以只断开创建失败的连接吗?

    if(events & ESTABLISH_LINK_TIMEOUT_EVT)
    {
        GAPRole_TerminateLink(INVALID_CONNHANDLE);
        return (events ^ ESTABLISH_LINK_TIMEOUT_EVT);
    }


建立连接后是会分配不同的连接给不同的handle,在断开连接的时候同样需要调用该handle进行断开。因此是在填写为对应handle则对应的连接断开,GAPRole_TerminateLink,直接传入0xFF是没有意义的。


这个不是连接建立成功后执行断开连接的任务,而是创建连接超时后执行的。


GAPRole_CentralEstablishLink(DEFAULT_LINK_HIGH_DUTY_CYCLE,
?????????????????????????????DEFAULT_LINK_WHITE_LIST,
?????????????????????????????centralDevList[i].addrType,
?????????????????????????????centralDevList[i].addr);
tmos_start_task(centralTaskId,?ESTABLISH_LINK_TIMEOUT_EVT,?ESTABLISH_LINK_TIMEOUT);
case?GAP_LINK_ESTABLISHED_EVENT:
{
????tmos_stop_task(centralTaskId,?ESTABLISH_LINK_TIMEOUT_EVT);
if(events?&?ESTABLISH_LINK_TIMEOUT_EVT)
{
????GAPRole_TerminateLink(INVALID_CONNHANDLE);
????return?(events?^?ESTABLISH_LINK_TIMEOUT_EVT);
}

而且0xFFFF也是在头文件有定义的,所以是废弃了?

/** @defgroup GAP_CONN_HANDLE_DEFINES GAP Special Connection Handles
* Used by GAP_TerminateLinkReq()
* @{
*/
#define GAP_CONNHANDLE_INIT ? ? ? ? ? ? ? ? ? ? 0xFFFE ?//!< terminates a link create
#define GAP_CONNHANDLE_ALL ? ? ? ? ? ? ? ? ? ? ?0xFFFF ?//!< terminates all links for the matching task ID.
/** @} End GAP_CONN_HANDLE_DEFINES */


所以现在问题的关键是,如何在没有获取到handle的时候,断开连接。


最后,这个是例程中的代码,如果是超时断开有意义的,希望能提供一个对多从机的解决方案。

如果没有意义,那我就把这部分代码删除了


  1. 蓝牙建立连接是一个过程。在建立连接的过程中(此时还没有完全建立连接),也就是打印Connecting...的地方。这里还没有分配连接的handle。如果连接超时没有成功建立连接,则会由主机主动发起断开,也就是调用GAPRole_TerminateLink(INVALID_CONNHANDLE)。

  2. 如果蓝牙已经建立连接,也就是打印Connected...的地方,则不同的连接会分配不同的handle。在彻底建立连接后,需要断开则需要传递在建立连接地方的handle,如果传输INVALID是无法断开连接的。

  3. 针对你的问题,INVALID_CONNHANDLE会断开当前连接过程中的连接,理论上不会断开已经建立连接(因为已有建立连接会重新分配handle)。

  4. 上面你的说法,在建立连接过程中使用INVALID_CONNHANDLE进行断开是没问题的。如依此思路使用存在问题,可以发送邮件至邮箱lpc@wch.cn,我们这里进行查看。


只有登录才能回复,可以选择微信账号登录