藍牙無(wú)線(xiàn)耳機設計及VxWorks移植方法
程序編寫(xiě)函數主要包括以下7個(gè)。
本文引用地址:http://dyxdggzs.com/article/265769.htm(1)系統引導函數
VxWorks操作系統在一些板級系統初始化后自動(dòng)執行tUsrRoot()函數,以完成初始化。
tUsrRoot()
…… //必要初始化程序
vInitializeLmp(); //LMP初始化完成
vInitializeL2cap(); //L2CAP初始化完成
vInitializeSdp(); //SDP初始化完成
vInitializeRf(); //RFCOMM初始化完成
vInitializeHA(); //HeadsetApplication初始化完成
exit(); //退出
(2)系統初始化函數(以L(fǎng)2CAP為例)
typedet
{MSG_IDSdpToL2cap;
MSG_ID L2capToSdp;
MSG_ID RfToL2cap;
MSG_ID L2capToRf;
MSG_lD HAToSdp;
MSG_ID SdpToHA;
MSG_ID HAToRf;
MSG_ID RfToHA;
}MSG_QUEUE_ID//定義消息隊列1D結構體類(lèi)型
MSG_QUEUE_ID MsgQueueld; //定義全局消息隊列ID結構體,用于存放每個(gè)消息隊列的ID
vInitlalizeL2caD();//L2CAP初始化,包括初始化全局變量、創(chuàng )建定時(shí)器、創(chuàng )建消息
//隊列、創(chuàng )建并啟動(dòng)任務(wù)
(3)LMP軟件設計
基帶程序運行在藍牙芯片的信號處理單元中,而LMP程序運行在藍牙芯片的微處理器中,它們通過(guò)郵箱來(lái)交換信息。只要任何一方向郵箱發(fā)送了信息,郵箱就會(huì )產(chǎn)生中斷信號,另外一方可以在中斷服務(wù)程序中進(jìn)行信息讀取和處理。其處理函數為;
vLmpDealFromBB()
//處理來(lái)自BaseBand層的消息以建立連接,對來(lái)自BaseBand層
//的操作碼
決定接受與否,并進(jìn)行鑒權、加密、處理或斷開(kāi)等操作
(4)L2CAP軟件的設計
tL2capDealMsgFromSdp()
//處理來(lái)自SDP層的消息SdpToL2eap,生成L2CAP數據包,把數據傳BaseBand層
tL2capDealMsgFromRf()
//處理來(lái)自RFCOMM層的消息RfToL2cap,生成L2CAP數據包,把數據傳BaseBand層
vL2capDealMsgFromBB()
//處理來(lái)自BaseBand層的消息,在處理器郵箱中斷程序被調用
(5)SDP軟件的設計
tSdpDealMsgFromL2cap()
//處理來(lái)自L(fǎng)2CAP的消息L2capToSdp,并上報搜索到的服務(wù)的屬性
tSdpDealMsgFromHA()
//處理來(lái)自HeadsetApplieation的消息HAToSdp,對上報信息進(jìn)行應答
(6)RFOOMM軟件的設計
tRfDealMsgFromHA()
//處理來(lái)自HeadsetApplication的消息HAToRf,生成RFCOMM數據包,傳送給L2CAP
tRfDealMsgFromL2cap()
//處理來(lái)自L(fǎng)2CAP的消息L2capToRf,對不同的幀進(jìn)行處理
(7)HeadsetApplication軟件的設計
tHADealMsgFronaSdp()
//處理來(lái)自SDP的消息SdpToHA,判斷是否正常并處理
tHADeaIMsgFromRf()
//處理來(lái)自RFCMM的消息RfToHA,對AT命令及其應答作出處理
5 語(yǔ)音傳輸建立過(guò)程
藍牙耳機系統工作時(shí)總是藍牙語(yǔ)音網(wǎng)關(guān)(AG)和藍牙耳機(HS)成對出現的。其通信所用到的協(xié)議棧及實(shí)體如圖4所示。

藍牙設備連結的建立遵循底層到高層的原則,即搜索藍牙設備、建立鏈路、服務(wù)搜索、建立信道、建立連接和數據傳輸。
以下是音頻連接建立的全過(guò)程。(以AG主動(dòng)發(fā)起連接請求為例。)
?、貯G首先發(fā)起查詢(xún),通過(guò)查詢(xún)AG獲得HS的藍牙地址。
?、贏(yíng)G在應用層的驅動(dòng)下向查詢(xún)到的HS發(fā)起一個(gè)page進(jìn)程。當接收到HS返回的應答信號時(shí),AG與HS之間的ACL鏈接已經(jīng)成功建立。
?、垡坏〢CL鏈接建立,即可以被用來(lái)傳送振鈴信號。振鈴信號的發(fā)送是通過(guò)AT命令RING來(lái)完成的。
?、蹵CL鏈接好后,接著(zhù)建立L2CAP鏈路。AG首先在信令信道上發(fā)送一個(gè)鏈接請求信令L2CAP_req,要求建立信道標號為0x0040的L2CAP。當HS返回鏈接響應信號時(shí),表明0x0040信道已經(jīng)建立好。然后對此信道進(jìn)行配置,配置完信道后,就可以利用此CID(信道標識符)為0x0040的L2CAP信道進(jìn)行SDP查詢(xún)。
?、軦G在L2CAP信道上發(fā)送一個(gè)SDP查詢(xún)包。SDP查詢(xún)包將查詢(xún)SDP服務(wù)器端HS是否具有所需要的服務(wù)。若查詢(xún)成功,在A(yíng)CL鏈路上,AG再建立一條標號為0x0041的l.2CAP鏈路,用來(lái)傳輸RFCOMM數據;同時(shí),斷開(kāi)用作SDP查詢(xún)的標號為0x0040的L2CAP鏈路。
?、蕻擟ID為0x004l的L2CAP信道建立好之后,首先建立控制信道DICIO,AG在信道上發(fā)送一個(gè)SABM幀,即要求建立RFCOMM層上的Channel O。如果響應方HS希望建立鏈接,返回一個(gè)VA幀,表明已經(jīng)建立好了Channel 0這條RFCOMM信道。此信道為控制信道,用來(lái)傳送攜帶控制信息和命令的UIM幀。如果響應方HS不希望建立鏈接,返回一個(gè)DM幀。其次建立數據信道,先是對數據傳送信道的參數進(jìn)行協(xié)商,協(xié)商命令PN參數包括對將要建立的信道Channel 1的優(yōu)先級,最大幀長(cháng)等,當雙方協(xié)商好后建立傳輸數據的信道Channell。
?、咄ㄟ^(guò)RFooMM信道傳輸HS控制層的AT命令,即在RFCOMM數據傳送信道Channe1上利用UIH幀傳送AT+CKPD命令。當接收到對方的響應后,就可以開(kāi)始建立SCO鏈接。
?、郒CI(主機控制接口)發(fā)一個(gè)WRITE_VOICE_SETTING命令,對音頻狀態(tài)進(jìn)行一些設置。當接收到AG的建立SC0鏈接
的請求時(shí),若HS允許,發(fā)送一個(gè)接收的HCI命令,在命令完成之后,傳輸音頻信號的SC0鏈路就建立好了,此時(shí)就可以進(jìn)行語(yǔ)音通信。
結語(yǔ)
本文給出了藍牙及藍牙耳機系統的基本概念及其在軟硬件方面的具體實(shí)現。藍牙耳機使用戶(hù)擺脫線(xiàn)纜的束縛,能夠在較大的自由空間內通話(huà)。由于采用專(zhuān)用的聲音編解碼芯片和標準音頻取樣率44.1 kHz,并經(jīng)過(guò)先進(jìn)的信號處理技術(shù),能夠使聲音效果接近CD音質(zhì),這樣也使藍牙耳機真正取代有線(xiàn)耳機成為可能。
藍牙技術(shù)相關(guān)文章:藍牙技術(shù)原理
評論