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。也就是说Connectable
Directed 必须大于100ms;
advDelay 广播延时,为0到10msz之间的随机数。
3. 广播事件
- 3.1 非定向可连接事件(ADV_IND)
非定向可连接事件是我们最常用到了,它允许Scaner回复扫描请求或Iintiator回复连接请求。Scaner可以回复一个扫描请求(SCAN_REQ PDU) ,要求广播者提供更多的信息。Iintiator可以发送一个连接请求CONNECT_REQ PDU,去要求链路进入连接态。
两个ADV_IND PDUs 之间的间隔必须小于等于10ms.当进入广播间隔后广播状态会关闭。每个广播事件都包含三个不同广播通道的数据包
*** 不存在扫描请求时,时序图如下。***
***2. 收到扫描请求时,时序图如下***
如果广播者收到带有设备地址的SCAN_REQ PDU,并通过了广播过滤策略,则广播者一定(shell 强制)在同一广播通道回复SCAN_RSP PDU ,当SCAN_RSP PDU被发送出去后,广播者会发送下一广播通道的ADV_IND PDU或关闭广播。如果没有通过广播过滤策略,广播者会发送下一广播通道的ADV_IND PDU 或关闭广播。
***3. 收到连接请求时,时序图如下***
如果广播者收到带有设备地址的CONNECT_REQ PDU ,并通过了广播过滤策略,广播者会退出广播态,以Slave Role的角色进入连接态。如果没有通过广播过滤策略,广播者会发送下一广播通道的ADV_IND PDU 或关闭广播。时序图如下
- 3.2 定向可连接事件(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.28s.
- 3.3 非定向扫描事件(ADV_SCAN_IND)
这个广播其实是一个非定向可发现的广播,它和通用广播的时间
控制是一样的,应答也是 SCAN_REQ PDU 和 SCAN_RSP PDU,这个广
播和通用广播的区别是,它不能建立连接, 只能处于广播态或者就绪态。这是一种适用于广播数据的广播形式,动态数据可以包含于广播数据中, 而静态数据可以包含于扫描响应数据之中。 当广播者接收到一个来自扫描者的SCAN_REQ PDU 包,包里含有广播者的设备地址,并通过了广播过滤策略时,广播者回复SCAN_RSP PDU 。如果没有通过广播过滤策略,广播者会发送下一广播通道的ADV_IND PDU 或关闭广播。
3.4 非定向不可连接事件(ADV_NONCONN_IND)
这个事件只广播,不能监听来自扫描者和发起者的信息,不能进入连接态
4.四种状态是否可连接可扫描
由此可以看出
- ADV_IND 可以对扫描请求就行回复,也可以被连接。
- ADV_DIRECT_IND 不会对扫描请求进行回复,可以被正确地址的发起者连接。
- ADV_NONCONN_IND不会对扫描请求进行回复,不能被连接。
- ADV_SCAN_IND 可以对扫描请求进行回复,当不能被连接。