Android藍牙系統框架和代碼結構
概述
在 Android 4.2版本中,谷歌公司和博通合作,引入了博通的 BTE/BTA 協議棧,重構了藍牙子系統。新的藍牙協議棧被命名爲 BlueDroid。它包含了兩層:BTE(完成藍牙核心功能)和 BTA(與 Android 藍牙服務層進行通信)。藍牙服務層與 Bluedroid (封裝了 BTIF 層)通過 JNI 進行通信,與上層應用通過 Binder IPC 進行通信。BlueZ 及配套框架在 Android 系統上被移除。
Application Framework
該層代碼主要是利用 android.bluetooth API 和藍牙進程(Bluetooth Process)進行交互,也就是通過 Binder IPC 機制調用了藍牙進程的各個服務(Service)封裝的接口。代碼位於 frameworks/base/core/java/android/bluetooth 下。
Bluetooth Process
該層代碼主要是在 Bluetooth Process 裏實現各種 Bluetooth Service 和各種配置文件(Profile),Service 通過 JNI 調用到硬件抽象(HAL)層。代碼最後編譯形成一個 Android Application 包(Bluetooth.apk)。代碼位於 packages/apps/Bluetooth 下。
Bluetooth JNI
該層代碼位於 packages/apps/bluetooth/jni 下,定義了藍牙適配層和協議層對應的 JNI 服務,直接調用 HAL 層並給 HAL 層提供相應的回調。
Bluetooth HAL
該層代碼定義了 android.bluetooth API 和 Bluetooth Process 調用的標準接口,通過調用這些接口使得硬件(Hardware)運行正常。代碼位於 hardware/libhardware/include/hardware 下。
在 HAL 層並沒有實現定義的藍牙協議與屬性,默認實現在 Bluedroid 中,位於 external/bluetooth/bluedroid 下(6.0版本之後在system/bt),用戶可以根據自己的需求增加屬性。
Bluetooth Stack
該層代碼實現了 HAL 層中的定義,可以通過擴展和改變配置來自定義。代碼位於 external/bluetooth/bluedroid 下(6.0版本之後在system/bt)。
參考資料
《低功耗藍牙智能硬件開發實戰》第2章《Android藍牙系統框架和代碼結構》