轉自:http://blog.csdn.net/xubin341719/article/details/40378205linux
版權聲明:本文爲博主原創文章,未經博主容許不得轉載。android
關鍵詞:bluedroid bluez
做者:xubin341719(歡迎轉載,請註明做者,請尊重版權,謝謝!)
歡迎指正錯誤,共同窗習、共同進步!!
架構
1、名詞解釋:(有用信息增長中……)app
BTI F: Bluetooth Interface
BTU : Bluetooth Upper Layer
BTM: Bluetooth Manager
BTE :Bluetooth embedded system
BTA :Blueetooth application layer
CO: call out\CI: call in
HF : Handsfree Profile
HH: HID Host Profile
HL: Health Device Profile
AV:audio\vidio
ag: audio gateway
ar: audio/video registration
gattc: GATT client
BLE:框架
2、 BlueDroid && BlueZ
Android 4.2以前,Google一直使用的是Linux官方藍牙協議棧BlueZ。BlueZ其實是由高通公司在2001年5月基於GPL協議發佈的一個開源項目,作爲Linux 2.4.6內核的官方藍牙協議棧。隨着Android設備的流行,BlueZ也獲得了極大的完善和擴展。例如Android 4.1中BlueZ的版本升級爲4.93,它支持藍牙核心規範4.0,並實現了絕大部分的Profiles。
從Android 4.2開始,Google便在Android源碼中推出了它和博通公司一塊兒開發的BlueDroid以替代BlueZ。BlueZ的創始者,高通公司也將在基於其芯片的Android參考設計中去除BlueZ,支持BlueDroid。
相比BlueZ,BlueDroid最值得稱道的地方就是其框架結構變得更爲簡潔和清晰。對咱們工程師來講這也是個不錯的福利,清晰、簡潔的架構使咱們在debug過程當中思路更清晰;
一、Android 4.2中BlueDroid的框架結構圖:(Google官方提供)。
ide
(1)、應用程序經過android.bluetooth package下的API來調用系統的Bluetooth功能。
(2)、應用層空間增長了一個名爲Bluetooth的App。它作爲系統的bluetooth核心進程而存在。其內部將經過JNI來調用Bluetooth HAL層以完成各類藍牙請求。
(3)、Bluetooth HAL也屬於Android 4.2新增模塊,它由藍牙核心規範硬件抽象層和藍牙應用規範硬件抽象層組成。因爲HAL層的隔離做用,上層代碼可輕鬆移植到不一樣芯片平臺。
(4)、做爲整個藍牙服務的核心,Bluetooth Stack模塊則由Bluetooth Application Layer(縮寫爲BTA)和Bluetooth Embedded System(縮寫爲BTE)兩大部分組成。BTA實現了藍牙設備管理、狀態管理及一些應用規範。而BTE則經過HCI與廠商藍牙芯片交互以實現了藍牙協議棧的通用功能和相關協議。另外,BTE還包括一個統一內核接口(GKI),藍牙芯片廠商可藉助GKI快速輕鬆得移植藍牙協議棧到其餘操做系統或手機平臺上。
(5)、Vendor Extentions(廠商擴展):開發者能夠添加自定義擴展以實現廠商特定的模塊和組件。
(6)、bluedroid 總體協議棧架構:學習
整個系統的架構很簡單,由於大多的事情都是在Bluedroid層裏面作的,上層只管去Call和Callback就是了,這部分咱們在後面分析代碼作詳細分析。
二、BlueZ 代碼架構
和Bluedroid相似,BlueZ也是按照標準流程從應用一直走下來,不過二者惟一的區別是BlueZ的DBUS。blueDroid中取出DBUS是代碼結構變的更加清晰,看起來跟順暢。以下圖藍牙代碼架構(Google官方提供):網站
三、BlueDrod PK BlueZ
BlueDroid雖然對BlueZ大有取而代之的趨勢,但如今它對藍牙應用規範的支持還不夠完善。例如BlueDroid僅支持AVRCP 1.0,而非最新的AVRCP 1.5。因此,國內某些芯片或手機廠商若能及早完成BlueZ相關模塊到BlueDroid的移植工做,相信能幫助它們在競爭日趨白日化的移動世界中拔得先機。另外,做爲一種成熟、低功耗無線通訊技術的先鋒,藍牙將來在可穿戴設備領域中也將扮演愈來愈重要的做用。spa