Advertising State:
在广播状态下, 链路层在广播事件中发送广播 PDU 。 广播事件
共有 4 种:
- 非定向可连接事件(ADV_IND)
- 定向可连接事件(ADV_DIRECT_IND)
- 非定向扫描事件(ADV_SCAN_IND)
- 非定向不可连接事件(ADV_NONCONN_IND)
1. 广播通道的选择:
在广播事件中, 每一个广播事件都会在 3 个广播信道中进行数据传输, 而且每一个事件都是以最小的信道编号开始传输。也就是说当广播事件来了,这个 PDU 是依次从广播通道 37、 38、 39 中进行传输。
2. 广播间隔:
对于说有非直连广播事件,两个广播事件之间的间隔即T_advEvent计算如下
T_advEvent = advInterval + advDelay
Advlnterval即广播间隔,广播间隔必须是0.625ms的整数倍,且范围应该是20ms到10.24s之间。如果广播事件既不是非定向扫描事件(ADV_SCAN_IND),也不是非定向不可连接事件(ADV_NONCONN_IND),那么广播间隔不能小于100ms。如果广播事件是非定向可连接,则广播间隔必须大于或等于20ms。
advDelay 广播延时,为0到10msz之间的随机数。
3. 广播事件
- 非定向可连接事件(ADV_IND)
非定向可连接事件是我们最常用到了,它允许Scaner回复扫描请求或Iintiator回复连接请求。Scaner可以回复一个扫描请求(SCAN_REQ PDU) ,要求广播者提供更多的信息。Iintiator可以发送一个连接请求CONNECT_REQ PDU,去要求链路进入连接态。
如果广播者收到带有设备地址的SCAN_REQ PDU,并通过了广播过滤策略,则广播者则在同一广播通道回复SCAN_RSP PDU ,当SCAN_RSP PDU被发送出去后,广播者会发送下一广播通道的ADV_IND PDU 或关闭广播。如果没有通过广播过滤策略,广播者会发送下一广播通道的ADV_IND PDU 或关闭广播
如果广播者收到带有设备地址的CONNECT_REQ PDU ,并通过了广播过滤策略,广播者会退出广播态,以Slave Role的角色进入连接态。如果没有通过广播过滤策略,广播者会发送下一广播通道的ADV_IND PDU 或关闭广播
两个ADV_IND PDUs 之间的间隔必须小于等于10ms.当进入广播间隔后广播状态会关闭。不存在扫描请求时,时序图如下
存在扫描请求和回复是,时序图如下
存在连接请求时,时序图如下
- 定向可连接事件(ADV_DIRECT_IND)
当ADV_DIRECT_IND PDU被发送出去后,广播者会监听CONNECT_REQ PDUs 连接请求包,其他扫描请求包会被忽略。ADV_DIRECT_IND PDU 包含了发起者的设备地址和广播者的设备地址。CONNECT_REQ PDU 也包含了两个地址发送者的地址和广播者的设备地址。只有接收到对应的CONNECT_REQ PDU,广播者才会进入连接态,或者广播者会发送下一广播通道的ADV_DIRECT_IND PDU或关闭广播。
在同一个广播通道广播的ADV_DIRECT_IND PDU 之间的间隔不能大于3.75ms
这种广播事件只能持续1.28ms
- 非定向扫描事件(ADV_SCAN_IND)
这个广播其实是一个非定向可发现的广播,它和通用广播的时间
控制是一样的,应答也是 SCAN_REQ PDU 和 SCAN_RSP PDU,这个广
播和通用广播的区别是,它不能建立连接, 只能处于广播态或者就绪态。这是一种适用于广播数据的广播形式,动态数据可以包含于广播数据中, 而静态数据可以包含于扫描响应数据之中。 当广播者接收到一个来自扫描者的SCAN_REQ PDU 包,包里含有广播者的设备地址,并通过了广播过滤策略时,广播者回复SCAN_RSP PDU 。如果没有通过广播过滤策略,广播者会发送下一广播通道的ADV_IND PDU 或关闭广播。
非定向不可连接事件(ADV_NONCONN_IND)
这个事件只广播,不能监听来自扫描者和发起者的信息,不能进入连接态