overview
爲什麼這篇博文GAP協議不加一個ble修飾?因爲這個協議太重要了,有必要從藍牙整體面詳細整理一下相關東西。
記得之前一個前輩,新人培訓時,用到了三個詞總結什麼是GAP?
“發現,連接,安全” 太深刻。
引用core spec一張圖,無論br/edr何時還是ble 都繞不開GAP協議。
全球藍牙設備都需遵守GAP協議,才能夠正常被發現和連接。
Role
BR/EDR
- 在傳統藍牙中,主要分爲兩種角色,initiator(發起連接的一端) 和acceptor(接受連接的一段)。
- 需要注意的是,同一個設備既可以作爲initiator,也可以作爲acceptor,這種角色並不是固定的,只是針對一次連接過程中的角色定義。
- 同一個設備,同一時間,可以接受連接,也可以發起連接。
BLE
- 在ble中,GAP定義了四種角色:廣播者 broadcast;監聽者observer;外圍設備peripheral;中央設備central。
- 連接過程僅有兩個設備參與,這四種角色也並不是每個設備一個角色。可以成對來看,broadcast-observer,peripheral-central。針對同一次連接的不同時期。在掃描階段,顧名思義,廣播者發送廣播,監聽者掃描監聽周圍設備的廣播。
- 舉例說明,藍牙鼠標與電腦連接,這個過程中,mouse 發送adv,所以是broadcast;pc 進入scan mode 所以是observer;pc 主動發起的連接,作爲master,也是central; 鼠標接受連接,並且提供自己定義的service,是slave ,也是peripheral。
- 同傳統藍牙一樣,根據設備的使用環境,可以自定義實現相關的profile,並不是所有設備都需要實現四種角色。如鼠標,就不需要實現observer 角色,它沒有顯示能力,也發現不了對端設備的名字,所以無法主動發起連接。
- 也有很多多協議的複雜設備,例如我們使用的手機,四種角色都需要實現
用戶接口
主要是藍牙設備呈現給用戶的一些參數
藍牙地址
- BD_ADDR,規定是一個48bit大小,主要分爲public 和random 。 SIG對藍牙地址的各個位段都有詳細規定。
- random address 又可以分爲 static address和 private address private address
可以分爲 non-resolvable 和resolvable - 後續會另起一篇,詳細介紹bt address及RPA
設備名
- 藍牙設備理論上最長可達248字節(UTF-8),但是在ui層次一般被限制在62個字符以內。
- 另外需要注意的是,可能對端設備對名字長度有限制,只會顯示前20個字節
- 一般在adv 中會攜帶device name 信息,br/edr中會remote name request 拿到對端設備名字, ble
中一般會通過ATT 讀到對端設備名字的characteristic
密鑰
- passkey應用在smp或者傳統配對過程中,可能會呈現給用戶,這個需要視設備IO能力而定
- 在smp過程中,passkey是一個6位整數,範圍是000000-999999
- 在legacy pairing過程中,PIN有不同的級別
- ble 主要是smp
設備類型
class of device (COD)
- 在發現設備階段,會得到對端設備的cod,決定對端設備支持的服務
- 同一個設備可能支持多個不同設備類型的服務,但是可能會顯示一種,最期待被對端設備發現的設備類型
圖標
- 一個16bit的數字,能夠映射成一個圖標或字符串
- 屬於GATT裏面的一個特徵,可以查閱sepc,選擇需要顯示的圖標
廣播碼
- broadcast_code用來加密BIS
- 在UI層字符串一般在4個字節到16字節之間
- 在其他所有層,都會轉換爲128bit,不足前面補零