傳統藍牙BR/EDR的搜索Inquiry

傳統藍牙BR/EDR的搜索Inquiry

在這裏插入圖片描述

一提到藍牙想必大家都會隨口而出藍牙音樂、藍牙免提電話等等藍牙技術提供的這些功能,這也是用戶使用藍牙的目的。但所有這些功能得以正常使用,有一個必要條件——藍牙搜索。操作藍牙的這些功能必須得知道對端藍牙設備的存在,再與之建立ACL連接,那這就離不開這期的主題,本篇文章就簡單介紹下傳統藍牙搜索Inquiry。

藍牙搜索協議簡介

參考文件:藍牙核心協議《Core_v5.0.pdf》,第二卷,F部分

搜索Inquiry顧名思義就是檢測和收集周圍環境中的藍牙設備,根據詢問的方式可分爲 One-Time Inquiry(一次性詢問)Periodic inquiry(週期性詢問) 兩種搜索模式。需要週期性地搜索藍牙設備的情況下才會採用週期性詢問這種方式,但是由於該種模式使用的場景有限且對功耗是個不小的負擔,所以現在市面上的藍牙設備基本不採用這種搜索模式,接下來就主要介紹下一次性詢問。

One-Time Inquiry
步驟1:藍牙Host通過命令HCI_Inquiry告知控制器Controller進入查詢模式,用於發現周圍環境中的其他藍牙設備。
在這裏插入圖片描述

步驟2:藍牙控制器Controller接收到上層開啓搜索指令後將以指定的查詢訪問代碼(IAC)和查詢時長啓動藍牙基帶搜索查詢流程,對外發送ID包。周圍環境中的藍牙設備接收到ID包後會自己的設備信息封裝到FHS包中做出響應,控制器解析FHS包獲取所需的信息,並使用一個或多個查詢結果事件將找到的設備相關信息返回給主機Host。
在這裏插入圖片描述

步驟3(a):如果主機Host希望停止搜索查詢,則使用HCI_Inquiry_Cancel命令通知控制器Controller立即停止查詢過程,控制器接收到指令就會停止對外發送ID包執行停止查詢流程。
在這裏插入圖片描述

步驟3(b):如果主機Host沒有主動停止查詢,則控制器Controller會在查詢上報的結果已達數量限制或者查詢時長已到而停止查詢,並將查詢的完成事件上報給Host。
在這裏插入圖片描述

經過以上三步,一個完整的搜索查詢Inquiry流程就完成了。對於流程中涉及到的HCI命令或事件再做如下說明:

1、 HCI_Inquiry
在這裏插入圖片描述

命令中三個參數的含義如下所示

LAP:上述步驟2中的查詢訪問代碼就是從該值派生得到的,具體取值範圍爲是 0x9E8B00 ~ 0x9E8B3F,但是隻有 0x9E8B000x9E8B33 這兩個數值是有效的,其他值保留供將來使用。

  • 0x9E8B33 代表一般/無限制查詢訪問代碼(GIAC)
  • 0x9E8B00 代表有限的專用查詢訪問代碼(LIAC)

由於LIAC的使用有其侷限性,所以參數LAP基本上都是使用GIAC這一固定參數。

詳細介紹可以參考藍牙SIG官網Assigned Numbers中的Baseband部分。
鏈接:https://www.bluetooth.com/specifications/assigned-numbers/baseband/
在這裏插入圖片描述

Inquiry_Length:查詢模式的總持續時間,當此時間超時後查詢將被停止,該參數的取值範圍及對應的超時時間如下圖:
在這裏插入圖片描述

Num_Responses:在查詢停止之前可以接收的響應數,當響應數達到該值後,控制器Controller停止當前的查詢,並上報Host查詢完成事件。該參數的取值範圍如下:
在這裏插入圖片描述

2、 上報查詢的結果
在當前查詢期間響應的藍牙設備如果未被上報過且該設備沒有被命令Set_Event_Filter過濾掉應始終以如下三種事件之一(Inquiry Result、Inquiry Result with RSSI或者Extended Inquiry Result)上報主機Host查詢的結果,不管採用哪個事件上報Host,都是將查詢到的設備信息告知主機。事件中具體包含什麼信息感興趣的同學可以執行查看具體協議中HCI COMMANDS AND EVENTS部分。主機協議棧依次接收到這些設備信息後,解析出相應的數據保存並上報藍牙服務層。

如果搜索到的藍牙設備在當前查詢或查詢期間已經被上報過,則該設備這次可能被上報,也可能不被上報,這取決於控制器Controller中的實現(對同一設備是隻上報一次,還是隻要設備響應就上報)。

最後隨着HCI_Inquiry_Complete事件的上報,查詢流程就完結了。那本篇傳統藍牙查詢協議分享就到這,感興趣的小夥伴歡迎私信留言一起討論。

更多互聯互通技術,歡迎關注微信公衆號:Connectivity
在這裏插入圖片描述

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