1. 程式人生 > >轉載_Android Bluetooth藍芽開發\藍芽協議\藍芽通訊例子

轉載_Android Bluetooth藍芽開發\藍芽協議\藍芽通訊例子

一、Android Bluetooth現狀

(1)Android2.2版 支援的藍芽核心版本是Bluetooth 2.0 + EDR。

(2)Android 的藍芽 使用了BlueZ協議棧,但只實現了Handset/Handfree和A2DP/AVRCP等Profile。

(一些常用的Profile(如HID/DUN/SPP/OPP/FTP/PAN等)在現在的Android2.2版中並沒有實現。需要自己在Android中實現Profile)。

(3)目前版本(Android2.2) 只支援 繫結裝置(bonded devices)之間通訊,而不支援ad-hoc網路通訊。

(4)目前版本(Android2.2) emulator(模擬器、模擬器)不支援藍芽的除錯,只能通過LOG和BlueZ帶的工具來除錯。

(5)Android2.0 API level5 之後的版本才支援Bluetooth。

(6)Android 的Bluetooth通訊API是BlueZ 的RFCOMM的封裝。

RfcommSocket 在 API level7 之後的版本才提供Bluetooth 的通訊

RfcommSocket 使用JAVA 的IputStream 和OutputStream物件

二、Android Bluetooth 架構

1、面向庫的架構檢視

clip_image001

2、面向程序的架構檢視

clip_image002

LinuxKernel層:

bluez協議棧、uart驅動, h4協議, hci,l2cap, sco, rfcomm

Library層:

libbluedroid.so 等

Framework層:

實現了Headset /Handsfree 和 A2DP/AVRCP profile,但其實現方式不同Handset/Handfree是直接 在bluez的RFCOMM Socket上開發的,沒有利用bluez的audio plugin,而A2DP/AVRCP是在bluez的audio plugin基礎上開發的,大大降低了實現的難度。

三、 BlueZ介紹

(詳見http://www.bluez.org/):

BlueZ 是Linux OS開放的bluetooth 協議棧主要包括IBM公司的BlueDrekar, Nokia公司的Affix, Axis公司的OpenBT和官方的協議棧BlueZ.

Bluetooth協議棧BlueZ分為兩部分:核心程式碼和使用者態程式及工具集。

核心程式碼:由BlueZ核心協議和驅動程式組 成;Bluetooth協議實現在核心原始碼 /net/bluetooth中。包括hci,l2cap,hid,rfcomm,sco,SDP,BNEP等協議的實現。驅動程式放在 /driver/bluetooth中,包含Linux kernel對各種介面的Bluetooth device的驅動。例如:USB介面,串列埠等。

使用者態程式及工具集:包括應用程式介面和BlueZ工具集。BlueZ提供函式庫以及應用程式介面,便於程式設計師開發bluetooth應用程式。BlueZ utils是主要工具集,實現對bluetooth裝置的初始化和控制。

四、幾個術語:

HFP(Hands-free Profile)耳機模式:

讓藍芽裝置可以控制電話,如接聽、結束通話、拒接、語音撥號等,拒接、語音撥號要視藍芽耳機及電話是否支援。

HSP(Handset Profile)耳機模式

用於支援藍芽耳機與行動電話之間使用

HID() 人機介面裝置配置檔案

HID 配置檔案定義了 Bluetooth HID(如鍵盤、指向裝置、遊戲裝置及遠端監視裝置)使用的協議、程式及功能

撥號網路配置檔案 (DUN)

DUN 提供了通過 Bluetooth 無線技術接入 Internet 和其它撥號服務的標準。最常見的情況是在手機上撥號,從膝上型計算機以無線方式接入 Internet。

個人區域網配置檔案 (PAN)

PAN 描述了兩個或更多個 Bluetooth 裝置如何構成一個即時網路,以及如何使用同一機制通過網路接入點接入遠端網路。配置檔案角色包括網路接入點、組即時網路及個人區域網使用者。

SDP( Service Discovery Protocol )服務發現協議

提供應用程式在藍芽環境中發現哪個服務可用和決定那些可用服務的特徵。

GAP(Generic Access Profile)通用訪問應用

一般訪問應用規範定義了藍芽裝置如何發現和建立與其他裝置的安全(或不安全)連線。它處理一些一般模式的業務(如詢問、命名和搜尋)和一些安全性問題(如擔保),同時還處理一些有關連線的業務(如鏈路建立、通道和連線建立)。GAP規定的是一些一般性的執行任務。因此,它具有強制性,並作為所有其它藍芽應用規範的基礎。

三、藍芽協議棧


藍芽技術規範的目的是使符合該規範的各種應用之間能夠實現互操作。互操作的遠端裝置需要使用相同的協議棧,不同的應用需要不同的協議棧。但是,所有的應用都要使用藍芽技術規範中的資料鏈路層和物理層。

完整的藍芽協議棧如圖1所示,不是任何應用都必須使用全部協議,而是可以只使用其中的一列或多列。圖1顯示了所有協議之間的相互關係,但這種關係在某些應用中是有變化的。

clip_image001

藍芽協議體系中的協議

藍芽協議體系中的協議按SIG的關注程度分為四層:

    1. 核心協議:BaseBand、LMP、L2CAP、SDP;
    2. 電纜替代協議:RFCOMM;
    3. 電話傳送控制協議:TCS-Binary、AT命令集;
    4. 選用協議:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、WAE。

除上述協議層外,規範還定義了主機控制器介面(HCI),它為基帶控制器、連線管理器、硬體狀態和控制暫存器提供命令介面。在圖1中,HCI位於L2CAP的下層,但HCI也可位於L2CAP上層。

藍芽核心協議由SIG制定的藍芽專用協議組成。絕大部分藍芽裝置都需要核心協議(加上無線部分),而其他協議則根據應用的需要而定。總之,電纜替代協議、電話控制協議和被採用的協議在核心協議基礎上構成了面向應用的協議。

1.藍芽核心協議

基帶協議

基帶和鏈路控制層確保微微網內各藍芽裝置單元之間由射頻構成的物理連線。藍芽的射頻系統是一個跳頻系統,其任一分組在指定時隙、指定頻率上傳送。它使用查詢和分頁程序同步不同裝置間的傳送頻率和時鐘,為基帶資料分組提供了兩種物理連線方式,即面向連線(SCO)和無連線(ACL),而且,在同一射頻上可實現多路資料傳送。ACL適用於資料分組,SCO適用於話音以及話音與資料的組合,所有的話音和資料分組都附有不同級別的前向糾錯(FEC)或迴圈冗餘校驗(CRC),而且可進行加密。此外,對於不同資料型別(包括連線管理資訊和控制資訊)都分配一個特殊通道。

可使用各種使用者模式在藍芽裝置間傳送話音,面向連線的話音分組只需經過基帶傳輸,而不到達L2CAP。話音模式在藍芽系統內相對簡單,只需開通話音連線就可傳送話音。

連線管理協議(LMP)

該協議負責各藍芽裝置間連線的建立。它通過連線的發起、交換、核實,進行身份認證和加密,通過協商確定基帶資料分組大小。它還控制無線裝置的電源模式和工作週期,以及微微網內裝置單元的連線狀態。

邏輯鏈路控制和適配協議(L2CAP)

該協議是基帶的上層協議,可以認為它與LMP並行工作,它們的區別在於,當業務資料不經過LMP時,L2CAP為上層提供服務。L2CAP向上層提供面向連線的和無連線的資料服務,它採用了多路技術、分割和重組技術、群提取技術。L2CAP允許高層協議以64k位元組長度收發資料分組。雖然基帶協議提供了SCO和ACL兩種連線型別,但L2CAP只支援ACL。

    ·服務發現協議(SDP)

發現服務在藍芽技術框架中起著至關緊要的作用,它是所有使用者模式的基礎。使用SDP可以查詢到裝置資訊和服務型別,從而在藍芽裝置間建立相應的連線。

2.電纜替代協議(RFCOMM)

RFCOMM是基於ETSI-07.10規範的序列線模擬協議。它在藍芽基帶協議上模擬RS-232控制和資料訊號,為使用序列線傳送機制的上層協議(如OBEX)提供服務。

3.電話控制協議

二元電話控制協議(TCS-Binary或TCSBIN)

該協議是面向位元的協議,它定義了藍芽裝置間建立語音和資料呼叫的控制信令,定義了處理藍芽TCS裝置群的移動管理程序。基於ITU TQ.931建議的TCSBinary被指定為藍芽的二元電話控制協議規範。

AT命令集電話控制協議

       SIG定義了控制多使用者模式下行動電話和調變解調器的AT命令集,該AT命令集基於ITU TV.250建議和GSM07.07,它還可以用於傳真業務。

4.選用協議

點對點協議(PPP)

在藍芽技術中,PPP位於RFCOMM上層,完成點對點的連線。

TCP/UDP/IP

該協議是由網際網路工程任務組制定,廣泛應用於網際網路通訊的協議。在藍芽裝置中,使用這些協議是為了與網際網路相連線的裝置進行通訊。

物件交換協議(OBEX)

       IrOBEX(簡寫為OBEX)是由紅外資料協會(IrDA)制定的會話層協議,它採用簡單的和自發的方式交換目標。OBEX是一種類似於HTTP的協議,它假設傳輸層是可靠的,採用客戶機/伺服器模式,獨立於傳輸機制和傳輸應用程式介面(API)。

電子名片交換格式(vCard)、電子日曆及日程交換格式(vCal)都是開放性規範,它們都沒有定義傳輸機制,而只是定義了資料傳輸格式。SIG採用vCard/vCal規範,是為了進一步促進個人資訊交換。

無線應用協議(WAP)

該協議是由無線應用協議論壇制定的,它融合了各種廣域無線網路技術,其目的是將網際網路內容和電話傳送的業務傳送到數字蜂窩電話和其他無線終端上。

使用者模式及協議棧

       1.檔案傳輸模式

檔案傳輸模式提供兩終端間的資料通訊功能,可傳輸字尾為.xls、.ppt、.wav、.jpg和.doc的檔案(但並不限於這幾種),以及完整的資料夾、目錄或多媒體資料流等,提供遠端資料夾瀏覽功能。檔案傳輸協議棧如圖2所示。

clip_image002

       2.因特網網橋模式

這種使用者模式可通過手機或無線調變解調器向PC提供撥號入網和收發傳真的功能,而不必與PC有物理上的連線。撥號上網需要兩列協議棧(不包括SDP),如圖3所示。AT命令集用來控制行動電話或調變解調器以及傳送其他業務資料的協議棧。傳真採用類似協議棧,但不使用PPP及基於PPP的其他網路協議,而由應用軟體利用RFCOMM直接傳送。

clip_image003

       3.區域網訪問模式

該使用者模式下,多功能資料終端(DTs)經區域網訪問點(LAP)無線接入區域網,然後,DTs的操作與通過撥號方式接入區域網的裝置的操作一樣,其協議棧如圖4所示。

clip_image004

       4.同步模式

同步使用者模式提供裝置到裝置的個人資料管理(PIM)的同步更新功能,其典型應用如電話簿、日曆、通知和記錄等。它要求PC、蜂窩電話和個人數字助理(PDA)在傳輸和處理名片、日曆及任務通知時,使用通用的協議和格式。其協議棧如圖5所示,其中同步應用模組代表紅外行動通訊(IrMC)客戶機或伺服器。

clip_image005

       5.一機三用電話模式

手持電話機有三種使用方法:第一,接入公用電話網,作為普通電話使用;第二,作為不計費的內部電話使用;第三,作為蜂窩行動電話使用。無線電話和內部電話使用相同的協議棧;語音資料流直接與基帶協議介面,不經過L2CAP層,如圖6所示。

clip_image006

       6.頭戴式裝置模式

使用該模式,使用者打電話時可自由移動。通過無線連線,頭戴式裝置通常作為蜂窩電話、無線電話或PC的音訊輸入輸出裝置。頭戴式裝置協議棧如圖7所示,語音資料流不經過L2CAP層而直接接入基帶協議層。頭戴式裝置必須能收發並處理AT命令。

clip_image007

完整的協議棧包括藍芽專用協議(如連線管理協議LMP和邏輯鏈路控制應用協議L2CAP)以及非專用協議(如物件交換協議OBEX和使用者資料報協議UDP)。設計協議和協議棧的主要原則是儘可能利用現有的各種高層協議,保證現有協議與藍芽技術的融合以及各種應用之間的互操作,充分利用相容藍芽技術規範的軟硬體系統。藍芽技術規範的開放性保證了裝置製造商可以自由地選用其專用協議或習慣使用的公共協議,在藍芽技術規範基礎上開發新的應用。

Android藍芽系統分為四個層次,核心層、BlueZ庫、BlueTooth的適配庫、BlueTooth的JNI部分、Java框架層、應用層。下面先來分析Android的藍芽協議棧。

Android的藍芽協議棧採用BlueZ來實現,BlueZ分為兩部分:核心程式碼和使用者態程式及工具集。

核心程式碼主要由BlueZ核心協議和驅動程式組成;藍芽協議實現在核心原始碼net/bluetooth中,驅動程式位於核心原始碼目錄 driver/bluetooth中。使用者態程式及工具集主要包括應用程式介面和BlueZ工具集,位於Android原始碼目錄externel /bluetooth(注:Android版本不一樣,有的在externel/bluez目錄下)中。

1、藍芽協議棧

藍芽協議棧的體系結構由底層硬體模組、中間協議層和高階應用層三部分組成。

Android

協議

一、底層硬體模組

組成:

鏈路管理協議(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為基礎,給其他部分提供主要介面。



四、藍芽各種版本區別

藍芽目前暫時共有四個版本 V1.1/1.2/2.0/2.1。以通訊距離來在不同版本可再分為 Class A(1)/Class B(2)

     1)藍芽目前暫時共有四個版本 V1.1/1.2/2.0/2.1。  2)以通訊距離來在不同版本可再分為 Class A(1)/Class B(2)。  3)版本的區別         1.1為最早期版本,傳輸率約在748~810kpbs8,因是早期設計,容易受到同頻率之產品所幹擾下影響通訊質量。  1.2 同樣是只有 748~810kpbs 的傳輸率,但在加上了(改善 Software)抗干擾跳頻功能。(太深入之技術理論不再詳述!)

   
   4)通訊距離版本  a)Class A 是用在大功率/遠距離的藍芽產品上,但因成本高和耗電量大,不適合作個人通訊產品之用(手機/藍芽耳機/藍芽 Dongle 等等),故多用在部份商業特殊用途上,通訊距離大約在 80~100M 距離之間。  b)Class B 是目前最流行的制式,通訊距離大約在 8~30M 之間,視乎產品的設計而定,多用於手機內/藍芽耳機/藍芽 Dongle 的個人通訊產品上,耗電量和體積較細,方便攜帶。  5)無論 1.1/1.2 版本的藍芽產品,本身基本是可以支援 Stereo 音效的傳輸要求,但只能夠作(單工)方式工作,加上音帶頻率響應不太足夠,並未算是最好之 Stereo 傳輸工具。  6)版本 2.0  1.2 的改良提升版,傳輸率約在 1.8Mpbs~2.1Mpbs,可以有(雙工)的工作方式。即一面作語音通訊,同時亦可以傳輸檔案/高質素圖片,臺灣有部份藍芽 Dongle 已經有在市面發售,但在手機內有支援藍芽 2.0 版本則是很少。藍芽耳機能夠真正使用的亦不多,部份藍芽產品自稱是 2.0 版本,但仍然要利用外加配件才能達到。 2.0 版本當然也支援 Stereo 運作。  7)稍後藍芽 2.0 版本的晶片,是有機會加入了 Stereo 譯碼晶片,則連 A2DPAdvanced Audio Distribution Profile)也可以不需要了。

藍芽,是一種支援裝置短距離通訊(一般10m內)的無線電技術。能在包括行動電話、PDA、無線耳機、膝上型電腦、相關外設等眾多裝置之間進行無線資訊交換。利用“藍芽”技術,能夠有效地簡化行動通訊終端裝置之間的通訊,也能夠成功地簡化裝置與因特網Internet之間的通訊,從而資料傳輸變得更加迅速高效,為無線通訊拓寬道路。藍芽採用分散式網路結構以及快跳頻和短包技術,支援點對點及點對多點通訊,工作在全球通用的2.4GHz ISM(即工業、科學、醫學)頻段。其資料速率為1Mbps。採用時分雙工傳輸方案實現全雙工傳輸

低耗電藍芽相關規範
技術規範 典型的藍芽 低耗電的藍芽
無線電頻率 2.4 GHz 2.4 GHz
距離 10米 10米
空中資料速率 1-3 Mb/s 1 Mb/s
應用吞吐量 0.7-2.1 Mb/s 0.2 Mb/s
Nodes/Active slaves 7-16,777,184 無限
安全 64/128-bit及使用者自定義的應用層 128-bitAES及使用者自定義的應用層
魯棒性 自動適應快速跳頻,FEC,快速 ACK 自動適應快速跳頻
延遲(非連線狀態)
傳送資料的總時間 100 m/s <6 m/s
政府監管 全球 全球
認證機構 藍芽技術聯盟(Bluetooth SIG) 藍芽技術聯盟(Bluetooth SIG)
語音能力 沒有
網路拓撲 分散網 Star-bus
耗電量 1(作為參考) 0.01至0.5(視符使用情況)
Peak current consumption <30 mA <15 mA (最高執行時為15 mA)
Service discovery
簡介概念
主要用途 手機,遊戲機,耳機,stereo audio streaming, 
汽車和PC等
手機,遊戲機,PC,表,體育和健身,醫療保健, 
汽車,家用電子,自動化和工業等

雖然製造商對各種裝置實施的特定使用者介面因裝置而異,但首次連線兩個裝置的一些基本步驟是相同的。使用者應保持在安全環境下進行配對。

  裝置充電

  如果裝置是新的 Bluetooth 裝置,確保在進行連線或開啟前已充電。尤其是 Bluetooth 耳機,使用前必須充電。

  裝置開機

  開啟需要配對裝置的電源。對於某些裝置,如 Bluetooth 無線耳機,裝置開機的同時即啟動配對過程。

  開啟 Bluetooth 功能

  在您收到裝置時,該裝置的 Bluetooth 功能可能已經開啟,也可能尚未開啟。對於多數計算機,使用者需要從控制面板或系統首選項中開啟 Bluetooth 射頻功能。

  將裝置設定為可見

  作為安全措施,某些裝置可將 Bluetooth 功能設定為關閉、隱藏或可見。嘗試連線裝置時,使用者應將裝置設定為可見,這樣才能為彼此所發現。完成裝置配對後,如果使用者擔心裝置會被其它裝置發現,可以將裝置設定為隱藏。

  將兩個裝置設為連線模式

  兩個裝置都充好電後,開啟裝置電源並開啟 Bluetooth 功能,每個裝置都需要初始化通訊會話。通常,在兩個裝置之間連線時,一個裝置會作為“主機”,而另一個裝置則作為“訪客”。主機裝置是具有使用者介面的裝置,多數連線設定都將從此進行。一個裝置可以是另一個裝置的主機,也可以作為其它裝置的訪客。例如,手機與無線耳機配對時,該手機就是主機。但是,手機與膝上型計算機配對時,膝上型計算機就是主機。

  輸入密碼

  裝置彼此發現對方後,使用者將被要求在一個或兩個裝置中輸入密碼。某些情況下,如連線無線耳機時,密碼是由製造商為耳機指定的固定密碼。此時,使用者需要在主機裝置中輸入此指定的密碼。使用者可在使用者手冊中找到此密碼。在其它情況下,使用者可輸入他/她自己的密碼。在這些情況下,使用者將在兩個裝置中輸入密碼各一次。強烈建議使用者為一次配對過程設定 8 位字母數字字元密碼。輸入密碼後,裝置將彼此驗證並完成建立信任連線。

  刪除或斷開與信任裝置的連線

  使用者應何時刪除或斷開與信任裝置的連線?如果您的其中一個 Bluetooth 裝置丟失或被偷,您應取消以前與該裝置配對的所有裝置的配對設定。

  如何取消配對或刪除信任裝置?對於手機或計算機之類裝置,使用者應進入裝置的連線設定,然後查詢信任裝置列表。使用者隨後便能選擇新增新裝置或刪除信任裝置。突出顯示需要刪除的裝置,然後按刪除按鈕。鍵盤或滑鼠之類裝置只有一個按鈕或開關作為使用者介面,因此每次只能連線到一個裝置。要刪除其原來的信任裝置,只需將滑鼠或鍵盤連線到新裝置。