Android藍牙系統分爲四個層次,內核層、BlueZ庫、BlueTooth的適配庫、BlueTooth的JNI部分、Java框架層、應用層。下面先來分析Android的藍牙協議棧。
Android的藍牙協議棧採用BlueZ來實現,BlueZ分爲兩部分:內核代碼和用戶態程序及工具集。
內核代碼主要由BlueZ核心協議和驅動程序組成;藍牙協議實如今內核源代碼net/bluetooth中,驅動程序位於內核源代碼目錄driver/bluetooth中。用戶態程序及工具集主要包括應用程序接口和BlueZ工具集,位於Android源代碼目錄externel/bluetooth(注:Android版本不同,有的在externel/bluez目錄下)中。
一、藍牙協議棧
藍牙協議棧的體系結構由底層硬件模塊、中間協議層和高端應用層三部分組成。
1、底層硬件模塊
組成:
鏈路管理協議(Link ManagerProtocol,LMP);
基帶(Base Band,BB);
射頻(Radio Frequency,RF)。
功能:
射頻(RF)經過2.4GHz的ISM頻段實現數據流的過濾和傳輸。
基帶(BB)提供兩種不一樣的物理鏈路,即同步面向鏈接鏈路(Synchronous Connection Oriented,SCO)和異步無鏈接鏈路(AsynchronousConnection Less,ACL),負責跳頻和藍牙數據,及信息幀的傳輸,且對全部類型的數據包提供不一樣層次的前向糾錯碼(Frequency Error Correction,FEC)或循環冗餘度差錯校驗(CyclicRedundancy Check,CRC)。
鏈路管理協議(LMP)負責兩個或多個設備鏈路的創建和拆除,及鏈路的安全和控制,如鑑權和加密、控制和協商基帶包的大小等,它爲上層軟件模塊提供了不一樣的訪問入口。
主機控制器接口(HostController Interface,HCI)是藍牙協議中軟硬件之間的接口,提供了一個調用下層BB、LMP、狀態和控制寄存器等硬件的統一命令,上下兩個模塊接口之間的消息和數據的傳遞必須經過HCI的解釋才能進行。
2、中間協議層
組成:
邏輯鏈路控制和適配協議(LogicalLink Control and Adaptation Protocol,L2CAP);
服務發現協議(ServiceDiscovery Protocol,SDP);
串口仿真協議(或稱線纜替換協議RFCOMM);
二進制電話控制協議(TelephonyControlprotocol Spectocol,TCS)。
功能:
L2CAP位於基帶(BB)之上,向上層提供面向鏈接的和無鏈接的數據服務,它主要完成數據的拆裝、服務質量控制、協議的複用、分組的分割和重組,及組提取等功能。
SDP是一個基於客戶/服務器結構的協議,它工做在L2CAP層之上,爲上層應用程序提供一種機制來發現可用的服務及其屬性,服務的屬性包括服務的類型及該服務所需的機制或協議信息。
RFCOMM是一個仿真有線鏈路的無線數據仿真協議,符合ETSI標準的TS07.10串口仿真協議,它在藍牙基帶上仿真RS-232的控制和數據信號,爲原先使用串行鏈接的上層業務提供傳送能力。
TCS定義了用於藍牙設備之間創建語音和數據呼叫的控制信令(Call Control Signalling),並負責處理藍牙設備組的移動管理過程。
3、高端應用層
組成:
點對點協議(Point-to-PointProtocol,PPP);
傳輸控制協議/網絡層協議(TCP/IP);
用戶數據包協議(UserDatagram Protocol,UDP);
對象交換協議(ObjectExchang Protocol,OBEX);
無線應用協議(WirelessApplication Protocol,WAP);
無線應用環境(WirelessApplication Environment,WAE);
功能:
PPP定義了串行點對點鏈路應當如何傳輸因特網協議數據,主要用於LAN接入、撥號網絡及傳真等應用規範。
TCP/IP、UDP定義了因特網與網絡相關的通訊及其餘類型計算機設備和外圍設備之間的通訊。
OBEX支持設備間的數據交換,採用客戶/服務器模式提供與HTTP(超文本傳輸協議)相同的基本功能。可用於交換的電子商務卡、我的日程表、消息和便條等格式。
WAP用於在數字蜂窩電話和其餘小型無線設備上實現因特網業務,支持移動電話瀏覽網頁、收取電子郵件和其餘基於因特網的協議。
WAE提供用於WAP電話和我的數字助理(PersonalDigital Assistant,PDA)所需的各類應用軟件。
二、Android與藍牙協議棧的關係
藍牙系統的核心是BlueZ,所以JNI和上層都圍繞跟BlueZ的溝通進行。JNI和Android應用層,跟BlueZ溝通的主要手段是D-BUS,這是一套被普遍採用的IPC通訊機制,跟Android框架使用的Binder相似。BlueZ以D-BUS爲基礎,給其餘部分提供主要接口。