通用訪問規範GAP(Generic Access Profile)是BLE設備內部功能對外的接口層,它規定了三個方面:GAP角色、模式和規程、安全問題。
GAP層將設備分爲四種角色,分別是外圍設備,中央設備,播報設備和觀察設備。這些設備圍繞着廣播和連接的差異性而區分,外圍設備和播報設備對外發出廣播數據,中央設備和觀察設備掃描外部廣播數據,播報設備和觀察設備通常不建立連接,而外圍設備和中央設備可以建立連接。
圍繞着廣播和連接,GAP層定義了許多不同的廣播模式和連接模式,在不同模式下的操作稱爲“規程”。
對於安全問題,GAP層提供了BLE安全管理器的一些列參數設置接口,包括:設備的安全模式、IO能力、安全級別和密鑰長度等參數。設備需要根據實際能力設置GAP的安全管理器參數,從而使用合適的配對方法。
GAP層可以與L2CAP建立聯繫,設置自定義的MTU值。
1. GAP角色
GAP層定義了四種角色:
- 外圍設備(Peripheral)
- 中央設備(Central)
- 播報設備(Broadcaster)
- 觀察設備(Observer)
外圍設備可以發送廣播數據和接收連接請求,進而建立連接,對應着鏈路層的廣播狀態。
中央設備掃描廣播數據和發送連接請求,進而建立連接,對應着鏈路層的掃描狀態或發起狀態。
播報設備可以發送廣播和接收掃描請求,通常不建立連接,對應着鏈路層的廣播狀態。
觀察設備可以掃描廣播和發起掃描請求,通常不建立連接,對應着鏈路層的掃描狀態。
由於鏈路層支持同時擁有多個狀態機,GAP層也支持一個設備同時具有多個GAP角色,比如在一個連接中充當中央設備,同時對外發出廣播充當外圍設備。
2.用戶接口
GAP定義了幾個與用戶操作密切相關的參數:設備地址,設備名,PIN碼和設備外觀。
2.1 設備地址
設備地址在協議棧內部指BD_ADDR,在用戶界面顯示爲“Bluetooth Device Address”。
設備地址爲一個6字節的整形數組成,可以用冒號作爲分隔符,比如00:0C:3E:3A:4B:69。
在用戶界面,設備地址以自然順序顯示,而內部的BD_ADDR則以逆序保存,對於上述地址,BD_ADDR[0]等於0x69而不是0x00。
設備地址分爲共有地址和隨機地址,隨機地址分爲靜態隨機地址和私有地址,私有地址進一步分爲可解析的私有地址和不可解析的私有地址。常用的地址爲共有地址和可解析的私有地址兩種類型。
關於設備地址類型分析,參見鏈路層的文章介紹。
2.2 設備名
設備名稱僅起識別設備的作用,在用戶界面顯示爲“Bluetooth Device Name”。
設備名最長可達248個字節,但是對端設備可能並不能顯示這麼長的名稱。
設備名支持UTF-8編碼,因此設備名可以使用中文。
2.3 PIN碼
PIN碼指兩個設備配對時使用的passkey密碼,在用戶界面顯示爲“Bluetooth Passkey”。
PIN碼爲6位十進制整形數,因此它的有效範圍爲000000-999999(0x00000000 – 0x000F423F)。使用時必須顯示全部6位數字,包括前導0。
2.4 設備外觀
設備外觀僅起識輔助別設備的作用,在用戶界面顯示爲一個圖標或一個字符串。
設備外觀爲一個2字節數,掃描設備可以通過設備外觀值爲設備分配一個合適的圖標或描述。
3. 模式和規程
模式表示一種工作狀態,規程是針對模式實現的一套操作方法。模式和規程成對出現,GAP規定了五種模式和規程,如下:
模式 | 規程 |
---|---|
Broadcast Mode | Observer Procedure |
Discovery Mode | Discovery Procedure |
Connection Mode | Connection Procedure |
Bonding Mode | Bonding Procedure |
Periodic Advertising Mode | Periodic Advertising Procedure |
3.1 播報模式和觀察規程
播報模式並不等同於普通的廣播狀態。
在播報模式下,設備在廣播事件中發送不可連接的廣播數據,播報設備可以響應外部的掃描請求。
播報設備的廣播數據格式與普通的廣播數據相同,但是它不設置LE Limited Discoverable Mode
和LE General Discoverable Mode
這兩個標誌位,即播報設備是Non-discovery
設備,這意味着中央設備掃描到該廣播數據,應該選擇忽略。
觀察規程用於監聽播報設備的廣播數據和掃描響應數據,也可以監聽普通廣播設備。
3.2 可發現模式和發現規程
可發現模式分爲三種,如下:
可發現模式 | 描述 |
---|---|
Non-Discoverable mode | 不可發現模式,掃描設備應該選擇忽略這類廣播數據。 |
Limited Discoverable mode | 有限發現模式,廣播數據僅工作有限時間內是可被發現的。 |
General Discoverable mode | 普通發現模式,沒有額外限制。 |
有限發現模式將廣播數據的LE Limited Discoverable Mode
位置爲1,普通發現模式將廣播數據的LE General Discoverable Mode
位置爲1,如果這兩個標誌位均不設置,就是不可發現模式。
不可發現模式的廣播數據與其他兩種模式相同,所以其廣播數據仍然能夠被掃描設備正確讀取,但由於沒有設置相應的標誌位,掃描設備在解析廣播數據時應該尊重其不願意被發現的意圖,主動忽略該廣播數據。
使用觀察規程的觀察設備,則不會忽略不可發現模式的廣播數據。
有限發現模式通常用於用戶指定的行爲讓設備臨時進入可發現狀態,可發現狀態持續時間爲T_GAP[lim_adv_timeout]
。
普通發現模式是默認模式,它沒有時間限制。
發現規程分爲兩種,如下:
發現規程 | 描述 |
---|---|
Limited Discovery Procedure | 有限發現規程,僅能發現有限發現模式的廣播數據。 |
General Discovery Procedure | 普通發現規程,沒有額外限制。 |
有限發現規程,僅處理有限發現模式下的廣播數據,包括設備地址和廣播數據,忽略其他發現模式下的廣播設備。
常規發現規程,能普通發現模式和有限發現模式下的廣播數據。
此外還有一種發現規程,專用於發現設備名稱,如下:
發現規程 | 描述 |
---|---|
Name Discovery Procedure | 設備名發現規程,用於發現廣播設備的設備名稱。 |
設備名發現規程,可以發現普通發現模式和有限發現模式下的廣播設備名稱。
發現設備名稱的步驟如下:
- 建立連接
- 讀取GATT中的名字特徵值
3.3 可連接模式和連接規程
可連接模式分三種,如下:
可連接模式 | 描述 |
---|---|
Non-Connectable Mode | 不可連接模式,無法與其他設備建立連接。 |
Directed Connectable Mode | 定向可連接模式,可以與指定的中央設備建立連接。 |
Undirected Connectable Mode | 非定向可連接模式,可以與任何中央設備建立連接,這是默認的可連接模式。 |
而相關的連接規程則由四種,如下:
連接規程 | 描述 |
---|---|
Auto Connection Establishment Procedure | 自動連接建立規程,利用中央設備的設備地址白名單,一旦地址匹配就自動建立連接。 |
General Connection Establishment Procedure | 普通連接建立規程,這是默認的連接規程,沒有額外條件。 |
Selective Connection Establishment Procedure | 可選連接建立規程,利用中央設備的設備地址白名單,只有地址匹配的設備才能建立連接。 |
Direct Connection Establishment Procedure | 定向連接建立規程,與指定地址的外圍設備建立連接。 |
此外,還有兩個與連接相關的規程,如下:
規程 | 描述 |
---|---|
Connection Parameter Update Procedure | 連接參數更新規程,更新連接參數信息。 |
Terminate Connection Procedure | 終止連接規程,終止當前連接。 |
3.4 可綁定模式和綁定規程
可綁定模式分爲:
可綁定模式 | 描述 |
---|---|
Non-Bondable mode | 不可綁定模式,設備不支持配對操作,在配對請求命令中清除Bonding_Flags標誌位。 |
Bondable mode | 可綁定模式,設備將設置認證請求命令中的Bonding_Flags標誌位,並且保存綁定信息。 |
兩個未綁定的設備,在訪問需要綁定權限的數據時,執行綁定規程。
3.5 週期廣播模式和週期廣播規程
週期廣播模式分爲:
模式 | 描述 |
---|---|
Periodic Advertising Synchronizability mode | 週期廣播同步模式,發送週期廣播事件的同步信息,適用於播報設備, |
Periodic Advertising mode | 週期廣播模式,發送週期廣播數據,適用於播報設備 |
週期廣播規程爲:
規程 | 描述 |
---|---|
Periodic Advertising Synchronization Establishment procedure | 週期廣播同步建立規程,接收週期廣播事件的同步信息並同步週期廣播事件,適用於觀察設備。 |
3.6 安全模式和認證規程
共有兩種安全模式:
安全模式 | 描述 |
---|---|
LE Security mode 1 | 安全模式1,使用認證信息保證安全。 |
LE Security mode 2 | 安全模式2,使用數字簽名保證安全。 |
安全模式1下有四種安全級別:
- No security (No authentication and no encryption)
- Unauthenticated pairing with encryption
- Authenticated pairing with encryption
- Authenticated LE Secure Connections
四種安全級別圍繞着認證和加密進行,安全級別依次增加,第1種安全級別沒有認證和加密, 第2種安全基本提供未認證的加密,第3、4種安全級別能夠提供認證和加密。
安全模式2下有兩種安全級別:
- Unauthenticated pairing with data signing
- Authenticated pairing with data signing
假如設備同時要求加密和數字簽名,將視認證需求選擇合適的安全模式,比如需要認證則選擇模式1.3,不需要認證則選擇模式1.2,如果需要安全連接則選擇模式1.4。
共有四種安全規程,如下:
規程 | 描述 | 適用安全模式 |
---|---|---|
Authentication procedure | 認證規程,執行認證和加密操作。 | 安全模式1 |
Authorization procedure | 授權規程,用戶行爲確認是否爲某個操作提供授權。 | 安全模式1 |
Connection data signing procedure | 連接數據簽名規程,在未加密的連接中傳輸認證的數據。 | 安全模式2 |
Authenticate signed data procedure | 認證已簽名的數據規程,校驗帶有前面的數據是否有效。 | 安全模式2 |
Encryption procedure | 加密規程,對連接和數據進行加密。 | 安全模式1 |
3.7 隱私規程
隱私與私有地址有密切關係,跟私有地址相關的規程如下:
規程 | 描述 |
---|---|
Non-resolvable private address generation procedure | 不可解析私有地址生成規程 |
Resolvable private address generation procedure | 可解析私有地址生成規程 |
Resolvable private address resolution procedure | 可解析私有地址解析規程 |
4. 廣播包
廣播包和掃描響應使用相同的數據格式,如下:
一個廣播包由多個AD Structure組成,傳統廣播包的最大長度爲31字節,擴展廣播包的最大長度爲255字節,未佔用的數據則補零。
一個AD Structure中包含三個元素:長度、廣播數據類型和廣播數據。
其中長度指廣播數據類型加上廣播數據的總長度,廣播數據類型決定了廣播數據的屬性,可以代表設備名、設備地址或服務的UUID。完整的廣播數據類型可以在官方網站檢索(鏈接)。
動態的廣播數據適合放在廣播包中發送,靜態的廣播數據適合放在掃描響應包中發送。
7. GAP特徵項
每個BLE設備的GATT均包含必要的GAP服務項,GAP服務項包含以下特徵項:
詳細內容,點擊跳轉→ cc2640廣播數據格式簡介