天天看點

BLE 掃描結果的上報

BLE Scan 上報

BLE 掃描結果的上報

BLE掃描的目的是為了擷取到周圍環境中的BLE裝置資訊上報給應用層apk使用,本篇就來簡單聊聊scan上報的那點事。

根據協定可知,藍牙晶片層會将掃描到的裝置資訊通過 LE Advertising Report event 事件上報到bluedroid,單個或者多個BLE裝置的資訊都可以同時上報,但是現行的晶片層處理方式都是依次上報,是以上報事件中參數Num_Reports都為1。還有同學不清楚 HCI_LE_Advertising_Repor 事件的直接點選這裡《低功耗藍牙BLE掃描》,裡面詳細介紹了該事件中各參數的具體含義。

BLE 掃描結果的上報

藍牙晶片通過初始化設定的回調函數上報HCI事件,啥?你問我哪個回調函數……好家夥我直接一個連結 瘋狂點我點我,還懵逼的同學裡面請啊。HCI事件上報到協定棧無非就是解析資料,繼續上報到藍牙服務層進行資料封裝處理,最後服務層再通過應用設定的回調函數直接上報這幾個步驟,接下來就以時序圖簡單過下安卓系統中scan上報流程:

BLE 掃描結果的上報

經過如上流程,藍牙晶片依次上報 HCI_LE_Advertising_Repor 事件

BLE 掃描結果的上報

應用層apk就成功接收到周圍環境中所掃描到的BLE裝置資訊,這些資料中相對而言比較重要的有如下兩種資料:

  • Event Types:對方BLE裝置所發廣播的類型,決定了該廣播的用途
  • Addresses:BLE裝置的位址值
    BLE 掃描結果的上報

在藍牙服務層GattService處理上報資料時,會再次過濾資料将符合條件的BLE裝置上報給相對應的應用apk,是以BLE掃描一般會有如下兩個地方進行過濾操作:

  1. 藍牙晶片,晶片裡有多個過濾器,是以可以同時過濾多個條件,多個過濾器是或的關系,隻要符合一個過濾器的要求,則該BLE裝置資訊就會上報
  2. 藍牙服務層,過濾符合單個apk的要求,并将達标的BLE裝置資訊上報給該應用

Scan filter 過濾器功能能夠最大程度上避免不必要的裝置資訊上報,進而隻關注自己感興趣的資訊,大大提高了效率。

本期分享到這兒就結束了,感興趣的小夥伴歡迎私信留言一起讨論,共同學習,一起進步!

更多互聯互通技術,歡迎關注微信公衆号:Connectivity

BLE 掃描結果的上報

繼續閱讀