天天看点

[BLE--GAP]Advertising中信息的传递

简述

低功耗蓝牙中,数据传输的协议是ATT和GATT,这两者都是在连线建立完成之后才会进行数据传输的,即处于Connection的状态下。而有些情景,比如还没有建立连线,或者根本就不需要建立连线时,其实也可以通过Advertising来传递一些信息的。

关于GAP

GAP即Generic Access Profile,这一层也是属于Host的,从字面意思,就看出它是负责如何帮助设备进行接入用的,具体的就是连线建立过程,加密过程的处理了(加密还涉及了SMP协议),因为在连线建立过程中是少不了加密过程的,无线通信若没有加密,那是非常糟糕的。

Advertising如何传送信息

其实在Link Layer层可以看到Advertising的包的结构的,其中就有Advertising的类型等等啦,其数据就是在那个包的Adv Data payload部分了。即一个Advertiser一直向外发广播,这个广播中是包含了较少量的必要的信息的,此时,scanner和initiator这两者都有侦听这些广播包的功能,它们都可以收到Advertising包的内容,并从中解析出Adv Data的含义,如果觉得其中是自己感兴趣的,那么就可能会发起进一步的请求咯。

而sanner还可以发一个scan request包给Advertiser,用来请求可能更多一点信息的scan response包。Advertising和Scan response的包结构是一样的,只是可能填入的数据信息会不一样,下面可以看下它们的结构:

[BLE--GAP]Advertising中信息的传递

这个结构的数据是以AD Structure为单位的,一般都只放入一个AD Structure(当然也有放多个的),不同的应用会有不同的做法。AD Structure第一个字节是长度,表明剩余Data长度了,而Data部分也分AD type和AD Data两部分,即表明某数据类型以及所对应的数据内容。这个还是很容易理解的。

另外,因为此时还没有建立连接,所以这些数据的传递都是发生在Advertising channel的。

Advertising可传递什么信息

这个是比较重要的,也即上图中的AD Type和AD Data部分的含义了。不仅Advertiser要很明确这部分应当填入哪些值,而感兴趣的Scanner和Initiator也会解析出其中的值来做一些必要的判断。

AD Type

大概有30来种,而且为了编码方便,SIG是为每种AD Type都分配了number的,这个可以直接在number分配这里直接看。

AD Data

首先看下都有哪些吧:

[BLE--GAP]Advertising中信息的传递