天天看點

[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中資訊的傳遞