天天看點

[BLE--GAP]GAP Service及其使用

簡述

GAP本身是一個Profile,并不是Protocol,其作用是定義了如何來使用藍牙的Host的各層的Protocol。GAP中有一個GAP Service,是用來表明裝置的基本資訊的,隻要作為GATT Server,就需要實作這個GAP Service。

GAP Service

先看一張圖,對GAP Service有個整體了解:

[BLE--GAP]GAP Service及其使用

從此圖可看到,BR/EDR可以選擇實作GAP Service的Device Name和Appearance屬性。對于BLE而言,是分角色進行對待的,Broadcaster和Observer不需要GAP Service。對于Peripheral和Central角色,則可能會需要實作其中部分或全部實作:

Peripheral

Device Name和Appearance必須要實作,Peripheral Preferred Connection Parameters是可選的,而Central Address Resolution則要看Link Layer Privacy是否支援。

Central

Device Name和Appearance必須要實作,Peripheral Preferred Connection Parameters不需要,因為是針對peripheral的,而Central Address Resolution則要看Link Layer Privacy是否支援。

多GAP Role模式下

對于支援多GAP Role的:GAP Service必須支援所有Role的需求,即為所有Role需求的總和。而當操作于不支援某些Characteristic的Role下時,裝置也必須繼續暴露出其所支援的所有GAP Service的Characteristics。

Characteristic介紹

GAP Service的4個Characteristic的介紹。

Device Name

[BLE--GAP]GAP Service及其使用

雖然這裡規定Device Name長度可以到248位元組,但一般不會需要那麼長的名字,一般會建議最長到達40位元組就好了。

Appearance

[BLE--GAP]GAP Service及其使用

Appearance即表明這是個什麼裝置,如滑鼠?鍵盤?等等,用2個位元組可以表示很多種類的,某個代碼對應某個具體的Appearance表示,這個需要參考SIG的Assigned Numbers,上面有清單的。另外,Device Name和Appearance都是表示本地裝置屬性的,是以隻會有一份執行個體。對于多GAP Role的狀況,應當還是隻會維護一份Device Name和Appearance,不然一個裝置有多個名字和多個Appearance,就不好表示了。

Peripheral Preferred Connection Parameters(PPCP)

[BLE--GAP]GAP Service及其使用

主要是表明Peripheral裝置這邊比較偏好的一個連接配接參數,包括:

- Minimum connection interval

- Maximum connection interval

- Slave Latency

- Connection Supervision timeout multiplier

關于連接配接參數的介紹涉及的地方很多了,這裡不再贅述。其實最關注的還是在哪使用這個參數?如何使用呢?我的想法是,這個是供Central來獲知的。不過有點略為奇怪,Central在鍊路建立時是通過CONN_REQ來設定好連接配接參數的,而此時兩者并未建立連接配接,是以Central此時并不同通過ATT_Read來擷取Peripheral上的這個PPCP,難道是建立連接配接後Central有需要知道這個PPCP的必要?因為Peripheral也有直接更新連接配接參數的過程的啊,這樣看來具體應用估計也不是必要吧。

Central Address Resolution

這個看來是BT 4.2添加的新特性了。因為在BT 4.2中,為了提高BT的安全性(原來SMP的方式是可以破解的),加入了Random Address的内容。這裡的Central Address Resolution就是用來表明暴露GAP Service的這個Central裝置,是否支援Resolvable Private Address(RPA)的。

Peripheral裝置通過讀對方Central裝置的GAP Service的Central Address Resolution,就能知道其是否支援RPA了,如果其支援,那Peripheral就可以在自己的Directed Advertisement中使用RPA了。如果不支援,那還是隻能使用public位址了。

關于藍牙的public位址,private位址,請參考​​裝置藍牙位址​​這篇文章。

來看下Central Address Resolution的内容:

一份執行個體

繼續閱讀