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的解釋才能進行。
二、中間協議層
組成:
邏輯鏈路控制和適配協議(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),並負責處理藍牙設備組的移動管理過程。
三、高端應用層
組成:
點對點協議(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)所需的各種應用軟件。
2、android與藍牙協議棧的關系
藍牙系統的核心是BlueZ,因此JNI和上層都圍繞跟BlueZ的溝通進行。JNI和android應用層,跟BlueZ溝通的主要手段是D-BUS,這是一套被廣泛采用的IPC通信機制,跟Android框架使用的Binder類似。BlueZ以D-BUS為基礎,給其他部分提供主要接口。