国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于藍(lán)牙的遙控智能音樂播放器的實(shí)現(xiàn)

2017-10-21 00:32呂品品
東方教育 2017年16期
關(guān)鍵詞:藍(lán)牙

呂品品

摘要:本文介紹了一款基于藍(lán)牙、ARM 平臺和Java虛擬機(jī)手持設(shè)備的遙控智能音樂播放器的具體實(shí)現(xiàn)。詳細(xì)闡述了系統(tǒng)藍(lán)牙遙控的實(shí)現(xiàn);為了在客戶端進(jìn)行音樂播放,討論了基于OBEX協(xié)議的音樂文件的下載功能模塊的實(shí)現(xiàn);設(shè)計(jì)實(shí)現(xiàn)了對客戶端音樂播放進(jìn)度的控制,并對客戶端接收過程中遇到的藍(lán)牙字符串亂碼問題加以解決。

關(guān)鍵詞:音樂播放器;藍(lán)牙;OBEX

1.藍(lán)牙遙控的實(shí)現(xiàn)

藍(lán)牙通信實(shí)現(xiàn)不同設(shè)備之間的數(shù)據(jù)共享與數(shù)據(jù)交換,提供的是近距離設(shè)備之間的通信。藍(lán)牙鏈接的建立依據(jù)藍(lán)牙設(shè)備所處的地位分為主動鏈接和被動鏈接。對于每一次藍(lán)牙通信鏈接的建立,服務(wù)器總是出于被動鏈接的地位,服務(wù)器必須先行啟動,時(shí)刻監(jiān)聽,只要有客戶機(jī)請求,就立即處理并響應(yīng)回傳信息,但決不會主動提供服務(wù)??蛻魴C(jī)可以隨時(shí)提出請求,通過網(wǎng)絡(luò)得到服務(wù),也可以關(guān)機(jī)離開,一次請求與服務(wù)的過程是由客戶機(jī)首先激發(fā)的。在客戶端建立主動鏈接的過程中,需要首先進(jìn)行設(shè)備發(fā)現(xiàn)和服務(wù)發(fā)現(xiàn),然后進(jìn)行數(shù)據(jù)傳輸。在服務(wù)器建立被動鏈接的過程中,需要首先選擇傳輸協(xié)議,然后監(jiān)聽到來的鏈接請求,之后接收鏈接請求,建立鏈接,開始進(jìn)行數(shù)據(jù)的傳輸。

由于系統(tǒng)端口資源有限,對一個(gè)服務(wù)器應(yīng)用程序不能獨(dú)自占用一個(gè)端口號,而且獨(dú)占端口會導(dǎo)致兩個(gè)不同的server程序在同一個(gè)端口進(jìn)行監(jiān)聽,出現(xiàn)端口沖突。為了解決這一問題,藍(lán)牙協(xié)議在標(biāo)準(zhǔn)端口運(yùn)行SDP服務(wù)解決。當(dāng)服務(wù)器程序啟動時(shí)會注冊服務(wù)記錄到SDP服務(wù),SDP為其動態(tài)分配端口。當(dāng)遠(yuǎn)程客戶端鏈接到設(shè)備時(shí),首先向服務(wù)器提供所搜索的服務(wù)的UUID,SDP server然后返回符合的服務(wù)列表,這樣就避免了問題的發(fā)生。

2.基于OBEX的客戶端文件推送與音樂文件下載

OBEX 傳輸協(xié)議定義了數(shù)據(jù)對象及兩個(gè)設(shè)備用來交換這些對象的通信協(xié)議。OBEX 使應(yīng)用程序能在 Bluetooth 技術(shù)協(xié)議棧及 IrDA棧上工作。對于Bluetooth設(shè)備,僅支持面向連接的 OBEX。藍(lán)牙協(xié)議棧的RFCOMM協(xié)議可以仿效RS-232 串行端口的狀態(tài)和串行電纜線設(shè)置,用于提供串行數(shù)據(jù)傳輸。通過提供串行端口仿真,RFCOMM 可以同時(shí)支持系統(tǒng)保留串行端口應(yīng)用程序以及應(yīng)用程序中的OBEX協(xié)議。因此,選用了基于RFCOMM的OBEX實(shí)現(xiàn)文件的傳輸。

播放器服務(wù)器端在向進(jìn)入服務(wù)區(qū)內(nèi)的藍(lán)牙設(shè)備發(fā)送文件之前,需要先判斷該設(shè)備是否支持OBEX協(xié)議。若發(fā)現(xiàn)設(shè)備支持OBEX_FILE_PUSH服務(wù)并獲得其端口號,則推送客戶端給用戶,若沒有發(fā)現(xiàn)響應(yīng)的端口則進(jìn)行下一次的推送,直到所有被發(fā)現(xiàn)設(shè)備全部執(zhí)行結(jié)束為止,客戶端推送結(jié)束。服務(wù)器對進(jìn)入服務(wù)范圍內(nèi)的藍(lán)牙手持設(shè)備,發(fā)送廣播信息,獲取設(shè)備的MAC地址。而后根據(jù)MAC地址,使用SDP協(xié)議,查詢手持設(shè)備上用于支持OBEX協(xié)議傳輸?shù)腞FCOMM所使用的channel號。通過該channel號,服務(wù)器與手持終端建立了面向連接的傳輸。服務(wù)器首先使用這個(gè)鏈接管道向手持終端發(fā)送提示信息,如果手持終端確認(rèn)接受文件下載,那么服務(wù)器向管道寫入文件數(shù)據(jù)流,直至傳輸完畢;如果用戶選擇拒絕接受,服務(wù)器將與該客戶斷開連接,選擇下一個(gè)藍(lán)牙設(shè)備進(jìn)行發(fā)送。

音樂下載功能的實(shí)現(xiàn)利用了文件推送模塊??蛻舳随溄庸芾砭€程收到下載音樂命令后通過OBEX協(xié)議對對應(yīng)的音樂進(jìn)行下載,為了實(shí)現(xiàn)代碼的復(fù)用,對當(dāng)前客戶端的物理地址信息進(jìn)行了標(biāo)識,若搜索的設(shè)備地址信息與客戶端匹配,則建立鏈接并發(fā)送對應(yīng)的歌曲到手機(jī)客戶端中。客戶端推送和音樂下載過程中都用到OBEX推送。在實(shí)現(xiàn)的過程中首先通過系統(tǒng)調(diào)用fork( )建立子進(jìn)程,在子進(jìn)程中再通過系統(tǒng)調(diào)用執(zhí)行/mnt/yaffs目錄下的obex_test程序完成文件的具體推送。

3.客戶端歌曲播放進(jìn)度的實(shí)現(xiàn)

為了實(shí)現(xiàn)歌曲播放時(shí)間的動態(tài)顯示,使用了java.util包下的Timer類和TimerTask類。首先通過timer = new Timer();初始化計(jì)時(shí)器對象。通過task = new ClockTask(this);初始化定時(shí)任務(wù)的對象實(shí)例。ClockTask擴(kuò)展java.util包中的TimerTask類并且實(shí)現(xiàn)其中的run()方法,在run()方法中編寫邏輯代碼,ClockTask維持一個(gè)實(shí)例變量count,在每次run()運(yùn)行的時(shí)候把count加1,這樣就可以記錄時(shí)間。為了實(shí)現(xiàn)暫停以及重新啟動,在ClockTask中添加一個(gè)boolean類型的標(biāo)記。

通過timer.schedule(task, 0, 1000); 方法設(shè)定計(jì)時(shí)開始,每經(jīng)過1s調(diào)用clocktask對象的run方法更新客戶端界面歌曲當(dāng)前時(shí)間。由此實(shí)現(xiàn)了歌曲的播放時(shí)間進(jìn)度顯示功能。

4. 客戶端接收藍(lán)牙字符串亂碼的解決

服務(wù)器通過L2CAP協(xié)議傳輸給客戶端信息的編碼方式為UNICODE,為了實(shí)現(xiàn)傳輸中文。需要將客戶端接收的信息進(jìn)行處理。各種編碼格式如下,

UTF-8: 1-3字節(jié)可變;

UNICODE: 2字節(jié)一個(gè)字符;

GB2312: 2字節(jié)一個(gè)字符。

為了區(qū)分不同的字符,在服務(wù)器端對發(fā)送信息做了進(jìn)一步的處理,在各個(gè)字符之間使用"#"進(jìn)行間隔,在客戶端首先將接收字符串用"#"分割。對獲得的每個(gè)字符單獨(dú)處理,如字符長度為4則傳輸數(shù)據(jù)為整型數(shù)據(jù),通過Java中靜態(tài)的處理方法,將其轉(zhuǎn)換為整形,并進(jìn)一步追加到返回字符串中去,若本身為字符數(shù)據(jù),則直接追加至返回字符串,由此實(shí)現(xiàn)了中文信息的傳輸。

參考文獻(xiàn):

[1]博創(chuàng)科技.UP-NETARM2410-S Linux 嵌入式系統(tǒng)實(shí)驗(yàn)指導(dǎo)書[M].北京: 博創(chuàng)興業(yè)科

[2]金純、林金朝,藍(lán)牙協(xié)議及其源代碼分析. 國防工業(yè)出版社,2006年第 1 版.

[3]孫瓊.嵌入式Linux應(yīng)用程序開發(fā)詳解.人民郵電出版社,2006.

[4]周立功等.ARM嵌入式系統(tǒng)基礎(chǔ)教程.第1版.北京航空航天大學(xué)出版社.2005.

[5]高建華,王殊. 基于 S3C2410 型微處理器和 UDAl341 型立體聲音頻編解碼器的嵌入式音頻系統(tǒng)設(shè)計(jì). 國外電子與元器件,2006.endprint

猜你喜歡
藍(lán)牙
藍(lán)牙為什么叫“藍(lán)牙”
古老無線再升級深入了解藍(lán)牙5.0技術(shù)
關(guān)于藍(lán)牙音質(zhì)你知道多少
幫你輕松找到AirPods的神奇工具
藍(lán)牙音箱
挑選個(gè)無線藍(lán)牙鼠標(biāo)
Nordic藍(lán)牙5 SoC及相關(guān)軟件開啟藍(lán)牙5設(shè)備開發(fā)序幕
無線連接的飛躍 藍(lán)牙技術(shù)4.2揭密
藍(lán)牙4.0落地加速
藍(lán)牙4.0:更快速更節(jié)能