GAP層協議淺析

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,不足前面補零

Modes – BR/EDR physical transport

Discoverability modes

Connectability modes

Bondable modes

Synchronizability modes

Security aspects – BR/EDR physical transport

Authentication

Security modes

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章