该部分主要描述链路层的状态以及状态的转换
链路层状态
链路层状态机定义了5中状态:
- 就绪态
- 广播态
- 扫描态
- 发起态
- 连接态
状态转换图如下图:
下面会结合这个转换图来介绍各个状态之间相互转换的过程
就绪态
就绪态是链路层的中心态,虽然是非活动状态,但是相对比较重要。能够和其他状态进行相互转化。
其他状态转向就绪态:
- 上电后,链路层进入就绪态
- 广播状态完毕,没有建立连接的话会回到就绪态
- 发起态没有建立连接,也会回到就绪态
- 扫描态完毕后也只能回到就绪态
- 连接态在断开的情况下会回到就绪态。
就绪态转向其他状态
- 设备需要发起扫描时,进入扫描态
- 设备需要发起广播时,进入广播态
- 设备需要发起连接时,进入发起态
广播态
用于设备发起广播,通过广播报文提供自己的信息给其他设备。
在广播态的设备可以发送广播、还可以发送扫描响应回应发起扫描请求的设备。
进入广播态
- 设备发起广播则进入广播态
转向其他态
- 停止广播并且没有建立连接则回到就绪态。
- 有设备发起连接请求则进入连接态
扫描态
扫描态用于设备发起扫描,发现周围的其他设备。在这个状态的设备能够接收广播报文。分为被动扫描
和主动扫描: 被动扫描仅仅监听广播报文,主动扫描则发送扫描请求给广播态设备,获取附加的扫描响应数据
扫描态的设备只能回到就绪态,转换条件爱你是停止扫描。
发起态
用于设备发起连接,链路层需要处于发起态。在这个状态设备可以想广播设备发起连接请求。此时会假设
广播者也进入连接状态,自己也会进入连接状态。
进入发起态
设备需要向广播设备发起连接请求。则进入该状态
退出发起态
设备不再发起连接请求
设备已经建立连接则进入连接态。
连接态
设备从广播态或者发起态建立连接后均会进入连接态。
进入连接态
- 广播者接收连接请求进入连接态
- 发起者发起连接请求进入连接态
退出连接态
- 设备断开连接后则回到就绪态
多状态的情况
指的是一个设备同时被配置为从设备、主设备,即常说的主从一体,可以作为从设备发送广播,也可以作为主设备
扫描接收广播和发起连接。
注意:
1. 同一时刻,要么是主设备、要么是从设备,而不能既是主设备又是从设备。
2. 一个设备不能同时成为两个主设备的从设备。(经典蓝牙另论)