學習資料:官方手冊
Vol 3: Core System Package [Host volume]
Part C: Generic Access Profile
下面這個圖是BLE協議各層跟醫院的各個科室的類比圖:
每個醫院的大堂都有些約定:
① 大堂里有醫院的介紹,你可以根據它確定這個醫院是否適合你;
② 有急救通道
③ 要掛號,掛號后你跟醫院才建立了聯系,才能去找醫生看病。
重點在於:怎么確定醫院(是否適合你)、怎么建立聯系。
在BLE里,也有一些約定用來發現設備、連接設備,在GAP里定義這些約定。GAP是一個Profile(規范)。這個規范里,它要用到LL層、L2CAP層、SM層、ATT層、GATT層的功能。
想想這4個設備:
1. 超市每個貨架那里有一個藍牙設備,它不斷向周邊發出廣告信息:你肯定不想連接它
2. 用電池供電的手環:平時它為了省電什么都不做,你要發現、連接它,首先要按一下按鈕
3. 家里用插座供電的鬧鍾:它不需要省電,它可以一直發出廣播信息。
4. 你的手機
上述設備的角色(Role)、所處的模式(Mode)、能執行的操作或規程(Procedure),由GAP定義。比如:
1. 貨架上的藍牙設備:
它的角色是:Broadcaster,廣播者。只廣播信息,別人不可能也沒必要去連接它。
2. 手環:
它的角色是:Peripheral,外圍設備。它可以處於這種模式:Limited Discoverable Mode,有限可發現模式。按下它的按鈕的一小段時間里,可以用手機去發現它;超時之后,手機無法發現它。
對應的,手機的Role是Central,中央設備,它要執行這2種規程(Procedure)之一才能發現這個手環:
① Limited Discovery Procedure
② General Discovery Procedure
3. 鬧鍾:
它的角色是:Peripheral,外圍設備。它可以處於這種模式:General Discoverable Mode,普通可發現模式,一直發出廣播信號。
對應的,手機的Role是Central,中央設備,它要執行這種規程(Procedure)才能發現這個手環:General Discovery Procedure
4. 手機
即可能是Observer,也可能是Central。
當它去獲得貨架廣告機的信息時,它是Observer;
當它去嘗試連接手環、鬧鍾時,它是Central。
下面細說。
一、廣播數據的格式定義:
在LL層里對廣播包的格式有過定義,但是對於其中傳輸的廣播數據,它的格式是在GAP中定義的。
對於ADV_IND類型的廣播包,它的Payload也是在LL層定義的,如下:
但是,其中的AdvData格式是在GAP層定義的:
總結起來有2個概念:PDU Type、AD Type,如下:
1. LL層可以發出各種不同PDU Type的廣播包,比如:可連接的、不可連接的等等
2. 某種PDU Type的廣播包中,還可以進一步定義它的AD Type:
在GAP中,可以設置廣播類型(AD Type),比如Discoverable Mode
二、BLE GAP層中的角色(Role):
GATT層從數據的提供、使用者角度,提出了server、client的概念。
GAP則從數據的發起、接收者角度,提出了以下4個角色(Role)的概念:
1. Broadcaster,廣播者
發出廣播信號,可以沒有無線接收器。
2. Observer,觀察者
接收廣播信號,可以沒有無線發送器。
3. Peripheral,外圍設備
可以跟其他設備建立連接,建立連接時它是被動的一方。
既含有無線發送器,也含有無線接收器。
4. Central,中央設備
可以跟其他設備建立連接,建立連接時它是主動的一方。
既含有無線發送器,也含有無線接收器。
這些角色在物理層、LL層上能進行的操作如下:
三、Broadcast Mode and Observation Procedure:
處於Broadcast Mode的設備,可以發出這2種事件之一:
① non-connectable and non-scannable undirected events
② non-connectable and non-scannable directed advertising events
怎么發出呢?在LL層規范里顯示,是使用ADV_NONCONN_IND的廣播包實現第①種事件的:
在上圖中的ADV_NONCONN_IND的廣播包里,廣播數據中的AD Type要設置這2個位為0:
① LE General Discoverable Mode
② LE Limited Discoverable Mode
對於第②種事件,在LL層規范里也有描述,但是沒有圖。它是使用ADV_EXT_IND廣播包實現來實現的。ADV_EXT_IND廣播包是在BLE 5.0規范里才引入了,我們沒有講解它。
處於Broadcast Mode的設備發出的廣播操作,別人怎樣來接收它們?要使用Observation Procedure來接收。
Observation Procedure有2種方法:主動掃描(active scanning)、被動掃描(passive scanning)。
四、Discoverability modes and procedures:
1. Non-Discoverable Mode
不可發現模式,這很少用到。
在這種模式下,其發出的廣播包中的AD Type要設置這2個位為0:
① LE General Discoverable Mode
② LE Limited Discoverable Mode
問題就來了,既然“不想被別人發現”,為何還要發出廣播包?
這完全是各個藍牙設備都遵守這樣的君子約定:
① 設備A發出廣播報文,但是在其中的AD Type中表示自己是“不可發現”的
② 設備B的Controller,肯定可以接收到這個廣播包,上傳到Host,解析出其中的AD Type
③ 設備B的Host,是個“君子”,不在UI界面中顯示設備A;但是也許設備B可以自動連接設備A。
2. Limited Discoverable Mode
有限可發現模式,為了省電,某些設備可能要先按一下按鍵,它才發出廣播報文;並且過一段時間后,它就繼續休眠。
我們使用手機查找藍牙設備時,可能會列出很多個設備,處於“有限可發現模式”的設備應該顯示在列表的最上面,因為它最緊迫。
在這種模式下,其發出的廣播包中的AD Type要設置這個位為1:
LE Limited Discoverable Mode
3. General Discoverable Mode
一般可發現模式,跟“有限可發現模式”相比,它可以一直發出廣播報文。
在這種模式下,其發出的廣播包中的AD Type要設置這個位為1:
LE General Discoverable Mode
4. Limited Discovery Procedure
5. General Discovery Procedure
五、Connection modes and procedures:
1. Non-Connectable Mode
不可連接模式
2. Directed Connectable Mode
定向連接模式,
如果希望快速連接中央設備,外圍設備可以使用該模式。
在該模式下,它發出ADV_DIRECT_ADV廣播報文,直接發給指定的中央設備。
所以,該外圍設備應該曾經與該中央設備建立過連接。
ADV_DIRECT_ADV廣播報文的發送頻率很快,該模式最多持續1.28S,之后控制器自動停止廣播。
3. Undirected Connectable Mode
無向連接模式。
如果一個外圍設備無需快速建立連接,或者打算盡可能地省電,則可以使用該模式。
它發出ADV_IND廣播報文。
4. Auto Connection Establishment Procedure
自動連接建立規程。
中央設備使用該規程來設置控制器,從而向一個或多個外圍設備,自動地建立連接。Host需要事先把想要連接的設備,寫入“白名單”中。
它有個缺點:對所有的設備,都只能使用一套基本連接參數。
5. General Connection Establishment Procedure
一般連接建立規程。
這是我們常用的規程,先掃描出設備,選中某一個,然后使用“直接連接建立規程”去連接它。
6. Selective Connection Establishment Procedure
選擇性連接建立規程。
Host先把想連接的設備放入Controller的“白名單”。正在廣播的設備,只有在白名單上的才會被提交給Host。
Host決定是否連接該設備,並使用不同的參數去連接它。相比於“自動連接建立規程”,“選擇性連接建立規程”可以使用不同的參數連接每一個設備。
7. Direct Connection Establishment Procedure
定向連接建立規程,直接去連接指定的設備。
8. Connection Parameter Update Procedure
連接參數更新規程。
參考 VOL6, Part B, 5.1 LINK LAYER CONTROL PROCEDURES
9. Terminate Connection Procedure
終止連接規程。
中央設備或外圍設備都可以執行該規程,通過LL層向對方發出LL_TERMINATE_IND PDU就可以。
六、Security modes and procedures:
留待SM層再講。
七、GAP服務:
每一個中央設備或外圍設備中,都有一個GAP Service。
GAP Service中,至少有這2項Characteristic:
① Device Name,設備名字
② Appearance,中央設備根據它來顯示一個圖標、字符串等,用來形象地描述設備的功能。