1、连接的控制
对连接的控制涉及到很多方面,而最直接的必然是连接的建立和连接的断开。
1.1 连接的建立
连接建立的过程如下图2-1所示:
图2-1 连接的建立
在page过程和一系列的信息交互之后就是连接的建立。master(paging的设备)就会发送LMP_host_connection_req来请求建立连接,slave可以回应LMP_accepted或者LMP_not_accepted来完成或者拒绝连接的建立。在这之间,其实还可能有一个role switch的过程,一般而言,是在slave收到LMP_host_conenction_req之后发送slot_offset和switch_req的PDU。若是role_switch失败,连接的建立仍然需要继续,除非paged一方不支持成为slave的角色,会回应low resource并断开连接。
1.2 连接的断开
蓝牙设备的断开是可以发生在任何时刻的,它可以由master发起也可以由slave发起。不过有一点,就是他必须有一个理由。因此断开连接的PDU——LMP_detach有一个error code的部分。
在断开连接之前,需要先把ACL-U的链路暂停,然后把LMP_detach放入到传输的队列中,紧接着发动断开的一端启动了一个6*Tpoll的timer,若是在这个timer超时前得到对方的ack,则启动一个3*Tpoll的timer,在3*Tpoll的timer超时后,LT_ADDR能够被re_use(发动断开端是master)。若是在6*Tpoll的timer超时后还没有得到ack,则丢弃link,启动一个新的Tlinksupervisiontimeout,这个timeout后LT_ADDR被re_use(发动断开端是master)。
至于在接收端,若是接收端是master,则启动一个6*Tpoll的timer,若是slave,则启动3*Tpoll的timer