陳媛媛
【摘要】 藍牙作為一種短距無線數(shù)據(jù)與語音傳輸?shù)拈_放性全球規(guī)范,目前在整個世界范圍內(nèi)都得到了很廣泛的應(yīng)用。它可以支持便攜式計算機、移動終端以及其他電子設(shè)備之間通過建立無線電空中接口相互通信,可以方便地進行數(shù)據(jù)和語音傳輸。Android是基于Linux的移動操作系統(tǒng),目前在終端市場占據(jù)了70%的市場份額,應(yīng)用相當(dāng)廣泛。本文通過研究Android系統(tǒng)以及藍牙協(xié)議棧,在現(xiàn)有架構(gòu)基礎(chǔ)上平臺實現(xiàn)了in-band ring功能。
【關(guān)鍵字】 藍牙 Android in-band ring
一、引言
藍牙(Bluetooth)技術(shù)規(guī)范由藍牙特別興趣小組(SIG)制訂,在使用通用無線傳輸模塊和數(shù)據(jù)通信協(xié)議的基礎(chǔ)上,開發(fā)交互式服務(wù)和應(yīng)用,多用于便攜式通信設(shè)備。
整個藍牙協(xié)議體系結(jié)構(gòu)自上而下分為高端應(yīng)用層、中間協(xié)議層和底層硬件模塊,結(jié)構(gòu)如圖1所示。
藍牙協(xié)議棧最上層為應(yīng)用層,它對應(yīng)于各種應(yīng)用模型的剖面(Profile)。
中間協(xié)議層由邏輯鏈路控制與適配協(xié)議、服務(wù)發(fā)現(xiàn)協(xié)議、串口仿真協(xié)議和電話控制協(xié)議等規(guī)范組成。它是藍牙協(xié)議棧的核心部分,主要實現(xiàn)了邏輯鏈路控制與適配協(xié)議實現(xiàn)數(shù)據(jù)的拆裝、服務(wù)質(zhì)量的控制和協(xié)議復(fù)用等功能,為上層協(xié)議的實現(xiàn)提供相應(yīng)的基礎(chǔ)。服務(wù)發(fā)現(xiàn)協(xié)議主要為上層應(yīng)用程序提供一種發(fā)現(xiàn)網(wǎng)絡(luò)中可用的服務(wù)及其特性的特殊機制;串口仿真協(xié)議是為運行在不同設(shè)備上的兩個應(yīng)用程序建立一條完整的通信路徑,并保持兩個設(shè)備之間有一個通信段;電話控制協(xié)議則提供藍牙設(shè)備間話音和數(shù)據(jù)的呼叫控制指令[1]。
藍牙射頻、基帶層和鏈路管理層構(gòu)成藍牙的底層模塊。藍牙射頻用于實現(xiàn)數(shù)據(jù)位流的過濾和無線傳輸;基帶層主要控制跳頻和藍牙數(shù)據(jù)信息幀的傳輸;鏈路管理層則用于建立和拆除鏈路,以及鏈接的安全和控制。它們共同為上層軟件模塊提供相應(yīng)的訪問接口。兩個模塊之間的數(shù)據(jù)的傳輸必須通過藍牙主機控制器接口(HCI)的解釋才能進行[2]。
其中免提協(xié)議(HFP) 屬于藍牙應(yīng)用層profile,其中從上到下的協(xié)議棧層次如下圖。本文所述的in-band ring功能是基于HFP協(xié)議來進行開發(fā)的。
二、 Android 藍牙以及開發(fā)平臺
2.1 Android 藍牙
目前基于Linux內(nèi)核的操作系統(tǒng)廣泛采用藍牙協(xié)議棧的Bluez,Android也不例外,但是Android4.2版本以后,谷歌開始采用通信機制更加完善的Bluedroid協(xié)議棧,目前高通平臺采用的就是該協(xié)議棧。
2.2 開發(fā)平臺和Android系統(tǒng)
本文調(diào)試的硬件是采用高通驍龍8X系列平臺,該平臺內(nèi)置8核處理器,平臺主芯片內(nèi)封裝了WCNSS子系統(tǒng)芯片,WCNSS子系統(tǒng)芯片屬于三合一芯片wifi/bt/fm。
WCNSS子系統(tǒng)芯片與AP之間采用高通自定義的總線架構(gòu),其中藍牙音頻數(shù)據(jù)通過PCM接口傳輸。調(diào)試系統(tǒng)是基于Android5.1。
三、In-band ring功能
In-band ring功能定義了如何從AG端播放聲音到HF端的協(xié)議和信令交互過程。其中AG端是指音頻網(wǎng)關(guān),本文指手機端;HF指免提設(shè)備,本文指藍牙耳機或者車載等。聲音是指通過發(fā)送的sco(面向同步連接)音頻數(shù)據(jù)。目前sco音頻廣泛采用的是CVSD編碼,而音頻參數(shù)主要有sco和esco兩大類,每個大類參數(shù)又包含了若干子類參數(shù)。音頻參數(shù)主要由鏈路管理協(xié)議來進行配置。確保AG與HF音頻能夠能夠正常傳輸。
通過該功能可以在來電時將AG端聲音發(fā)送到HF端進行播放,在一些特定的場合可以方便地將來電人信息等轉(zhuǎn)化為語音通知用戶,可以大大提升用戶體驗。
3.1信令過程
AG與HF端信令交互主要通過AT指令進行。
首先AG與HF端連接后,HF端會發(fā)送AT+BRSF獲取AG端支持情況,AG端在收到AT指令后會發(fā)送+BRSF攜帶支持的feature參數(shù),其中in-band ring作為參數(shù)特征值會發(fā)送至HF端[3]。
當(dāng)AG端有來電時,會發(fā)送+ciev指令,并攜帶call的參數(shù)發(fā)送到HF端。然后需要由AG段發(fā)起Audio連接,HF端接受連接請求,建立Audio連接后,由AG端發(fā)送音頻數(shù)據(jù),HF端收到音頻數(shù)據(jù)后進行播放。
當(dāng)HF端發(fā)送ATA或者AT+CHUP指令以及AG端CALL進入idle或者active后,AG需要先停止發(fā)送該音頻流數(shù)據(jù),進行對應(yīng)指令操作[4]。
3.2Android端實現(xiàn)
藍牙開啟后,Bluedroid會進行初始化操作,其中HFP會初始化AG端的服務(wù),對AG支持的功能進行設(shè)置,以便HF端進行獲取。協(xié)議占會調(diào)用initializeFeaturesNative設(shè)置supportfeature,in-band ring屬性設(shè)置完成后,協(xié)議棧會調(diào)用BTA_AgRegister(BTIF_HF_SERVICES, BTIF_HF_ SECURITY,btif_features, p_service_names, bthf_hf_id[i]);來對AG端的支持的feature進行注冊。
當(dāng)AG與HF配對完成后,耳機端會通過RFCOMM鏈路向手機端發(fā)送AT+BRSF指令,手機端檢測到該指令后就會將設(shè)置后的feature返回。來告知耳機端手機支持的功能。其中就包含有in-band ring參數(shù)。當(dāng)AG端有來電時,telephoneservice會調(diào)用藍牙HFP服務(wù)中的phoneStateChangeNative 接口來通知耳機端有來電。協(xié)議棧則是通過AT指令的方式將該信息發(fā)送至耳機端。
完成上述步驟后,根據(jù)in-bandring協(xié)議,需要進行AudioConnection。協(xié)議中的音頻連接就是指sco連接。音頻連接一般是在AG端在發(fā)送完+cie指令后,然后調(diào)用conn ectAudioNative(getByteAddress(mCurrentDevice))發(fā)起連接請求,HF接收連接請求后,AG協(xié)議棧會有連接完成的回調(diào)通知上層,上層服務(wù)再通過Auidostatechange廣播通知其他模塊,做其他處理。而監(jiān)聽到音頻連接完成的狀態(tài)后,可以添加自定義的聲音播放,聲音就會通過sco連接傳到耳機端。在Android系統(tǒng)中sco鏈路屬于通話鏈路,只支持voice類型的聲音數(shù)據(jù),因此在播放時需要先設(shè)置音頻流類型或者降低采樣頻率的方式才能通過sco鏈路進行傳輸。本處采用的是TTS語音引擎,引擎初始化時設(shè)置音頻參數(shù)設(shè)置為voice類型后進行播放。
播放過程中,手機端需要監(jiān)測AG端call的狀態(tài)以及耳機端發(fā)過來的指令來結(jié)束聲音播放或者斷開音頻連接。當(dāng)AG端的call狀態(tài)進入active狀態(tài)時需要終止聲音播放,避免與語音聲音重疊,當(dāng)call進入idle狀態(tài)時,則中斷聲音播放,同時斷開音頻連接。
四、結(jié)果與性能
為測試該功能的實際使用效果以及兼容性,本文選取了市面上主流的藍牙耳機和車載設(shè)備進行測試。耳機品牌包括三星,飛利浦,藍玄,捷布朗等品牌,車載則選取了飛歌,佳藝田,駿歌等車載。并對各種來電場景進行測試。
來電情況下,耳機和車載端能夠清晰發(fā)出AG端自定義的音效,并且能夠消除原先廠家的在HF端的提示音效。在進行掛斷和接聽后,AG端自定義音效能夠正常停止,不影響正常通話和掛斷。in-band ring功能正常實現(xiàn)。
兼容性測試方面,83%耳機和車載能夠正常實現(xiàn)inband ring功能。只有個別型號存在兼容性問題。達到了預(yù)期效果。
五、總結(jié)
本文介紹了藍牙無線通信協(xié)議棧以及Android藍牙實現(xiàn)架構(gòu), 在研究了藍牙in-band ring協(xié)議基礎(chǔ)上,基于現(xiàn)有Android藍牙架構(gòu),通過修改開源協(xié)議棧以及上層應(yīng)用邏輯。比較完整地實現(xiàn)了藍牙 in-band ring協(xié)議功能,并達到了預(yù)期效果。
參 考 文 獻
[1] 金純 林金朝 萬寶紅.藍牙協(xié)議及其源代碼分析.國防工業(yè)出版社,2006
[2] 米勒.藍牙核心技術(shù):全球無線通信開放規(guī)范的權(quán)威性指南.機械工業(yè)出版社,2001
[3] Bluetooth SIG.Core Specification of the Bluetooth 2.0 +EDR,2004
[4] Bluetooth SIG.HANDS-FREE PROFILE 1.5,2007