專利名稱:擴(kuò)展藍(lán)牙芯片的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域,特別是涉及一種擴(kuò)展藍(lán)牙芯片的方法。
背景技術(shù):
目前,藍(lán)牙技術(shù)作為一種開(kāi)放性無(wú)線通信規(guī)范,使用2.4GHzISM(IndustryScience and Medicine)微波頻段,用于各種固定與移動(dòng)數(shù)字化硬件設(shè)備之間。藍(lán)牙技術(shù)以低成本的短距離無(wú)線連接為基礎(chǔ),支持點(diǎn)對(duì)點(diǎn)連接和點(diǎn)對(duì)多點(diǎn)連接,同時(shí)支持?jǐn)?shù)據(jù)和話音業(yè)務(wù)。
藍(lán)牙技術(shù)采用的藍(lán)牙協(xié)議??蓜澐譃榈讓佑布K,中間協(xié)議層(軟件模塊)和高端應(yīng)用層三大部分。其中,底層硬件模塊包括鏈路管理層(LM,LinkManager),基帶層(BB,BaseBand)和射頻層(RF,Radio and Antenna)。中間協(xié)議層包括邏輯鏈路控制和適配協(xié)議(L2CAP,Logical Link Control andAdaptation Protocol),服務(wù)發(fā)現(xiàn)協(xié)議(SDP,Service Discovery Protocol),串口仿真協(xié)議(RFCOMM,radio frequecncy communication)和電話通信協(xié)議(TCS,Telephone Control Protocol)。高端應(yīng)用層位于藍(lán)牙協(xié)議棧的最上部,對(duì)應(yīng)于各種應(yīng)用模型的剖面。
在實(shí)際應(yīng)用中,底層硬件模塊為上層的軟件模塊提供不同的訪問(wèn)入口,但是兩個(gè)模塊接口之間的消息和數(shù)據(jù)傳遞必須通過(guò)藍(lán)牙主機(jī)控制器接口HCI(Host Controller Interface)的解釋才能進(jìn)行。HCI是藍(lán)牙協(xié)議中軟、硬件模塊之間的接口,它提供了調(diào)用底層硬件模塊的統(tǒng)一命令接口。HCI以上的協(xié)議軟件實(shí)體運(yùn)行在主機(jī)(稱為藍(lán)牙主機(jī))上,而HCI以下的功能由藍(lán)牙設(shè)備通常是藍(lán)牙芯片來(lái)完成。藍(lán)牙主機(jī)和藍(lán)牙芯片之間通過(guò)傳輸層進(jìn)行交互。在此,傳輸層可以為UART(Universal Asynchronous Receiver and Transmitter,通用異步收/發(fā)器)串口。
現(xiàn)有的藍(lán)牙系統(tǒng)中,一個(gè)藍(lán)牙主機(jī)通常只帶有一個(gè)連接藍(lán)牙芯片的接口,并且通過(guò)該接口與一個(gè)藍(lán)牙芯片通信。相應(yīng)地,現(xiàn)有技術(shù)中的藍(lán)牙協(xié)議棧的中間協(xié)議層和高端應(yīng)用層也是針對(duì)藍(lán)牙主機(jī)帶有一個(gè)串口、并且只與一個(gè)藍(lán)牙芯片進(jìn)行連接與通信的情況而設(shè)計(jì)的。
請(qǐng)參閱圖1,是現(xiàn)有技術(shù)中藍(lán)牙主機(jī)控制單個(gè)藍(lán)牙芯片的模型示意圖。現(xiàn)有技術(shù)中,藍(lán)牙主機(jī)在硬件上只提供一個(gè)UART串口,并通過(guò)該串口連接一個(gè)藍(lán)牙芯片。在軟件上,藍(lán)牙主機(jī)提供該UART串口的驅(qū)動(dòng),即提供發(fā)送和接收函數(shù)給HCI協(xié)議驅(qū)動(dòng)層和上層的軟件模塊(以下稱上層協(xié)議軟件)。藍(lán)牙主機(jī)側(cè)的上層協(xié)議軟件構(gòu)造數(shù)據(jù)和HCI命令消息,通過(guò)調(diào)用發(fā)送函數(shù)將數(shù)據(jù)和命令發(fā)送到藍(lán)牙芯片;同時(shí)通過(guò)接收函數(shù)接收來(lái)自藍(lán)牙芯片的數(shù)據(jù)和消息以進(jìn)行處理。
請(qǐng)參閱圖2,是現(xiàn)有技術(shù)中藍(lán)牙協(xié)議棧模型示意圖。該模型支持藍(lán)牙主機(jī)帶有一個(gè)接口、并通過(guò)該接口連接一個(gè)藍(lán)牙芯片的形式。該模型中,最底層為藍(lán)牙基帶層110,其上為鏈路管理協(xié)議(LMP)140、邏輯鏈路控制和適配協(xié)議150以及語(yǔ)音(Voice),最上一層包括服務(wù)發(fā)現(xiàn)協(xié)議170、傳輸協(xié)議180、電話控制協(xié)議190以及語(yǔ)音媒體(Audio)100。
其中,藍(lán)牙基帶層110負(fù)責(zé)跳頻和藍(lán)牙數(shù)據(jù)及信息幀的傳輸。藍(lán)牙基帶層110提供了同步面向連接(SCO)鏈路130和異步無(wú)連接(ACL)鏈路120。同步面向連接鏈路130通常傳送語(yǔ)音數(shù)據(jù),而異步無(wú)連接鏈路120傳輸數(shù)字?jǐn)?shù)據(jù)。上層協(xié)議軟件通過(guò)HCI命令來(lái)建立藍(lán)牙設(shè)備間的同步面向連接鏈路和異步無(wú)連接鏈路,得到相應(yīng)的連接句柄以標(biāo)識(shí)所建立的鏈路,同時(shí)通過(guò)連接句柄進(jìn)行數(shù)據(jù)語(yǔ)音傳送。
鏈路管理協(xié)議140,負(fù)責(zé)連接的建立和拆除以及鏈路的安全和控制。
邏輯鏈路控制和適配協(xié)議150,相當(dāng)于鏈路層的協(xié)議。其位于藍(lán)牙基帶層110之上,并向上層提供面向連接的和無(wú)連接的數(shù)據(jù)服務(wù)。
服務(wù)發(fā)現(xiàn)協(xié)議170是所有用戶模式的基礎(chǔ),其上可以有無(wú)繩電話、同步模式等應(yīng)用。通常,服務(wù)發(fā)現(xiàn)協(xié)議170使用邏輯鏈路控制和適配協(xié)議150建立連接,并完成功能。
串口仿真協(xié)議180是基于ETSI標(biāo)準(zhǔn)TS 07.10的傳輸協(xié)議,用于仿真串行電纜接口協(xié)議。通過(guò)串口仿真協(xié)議180,藍(lán)牙可以在無(wú)線環(huán)境下實(shí)現(xiàn)對(duì)高層協(xié)議的支持。
電話控制協(xié)議190,是基于ITU-T建議Q.931的面向比特的協(xié)議,用于實(shí)現(xiàn)對(duì)語(yǔ)音的支持。在藍(lán)牙協(xié)議棧中,電話控制協(xié)議190通過(guò)L2CAP信道實(shí)現(xiàn)點(diǎn)到點(diǎn)和點(diǎn)到多點(diǎn)的語(yǔ)音數(shù)據(jù)呼叫。
語(yǔ)音媒體100,是藍(lán)牙協(xié)議棧提供的語(yǔ)音媒體業(yè)務(wù)。
請(qǐng)參閱圖3,是圖2所示模型的底層模型示意圖。上層協(xié)議軟件包括服務(wù)發(fā)現(xiàn)協(xié)議SDP、電話控制協(xié)議TCS、串口仿真協(xié)議RFCOMM。上層協(xié)議軟件的命令和數(shù)據(jù)流通過(guò)L2CAP信道、HCI驅(qū)動(dòng)程序、URAT串口驅(qū)動(dòng)程序直接下發(fā)至藍(lán)牙芯片。當(dāng)然,藍(lán)牙芯片也可以通過(guò)上述過(guò)程的逆過(guò)程來(lái)上報(bào)狀態(tài)和數(shù)據(jù)。
通常,藍(lán)牙芯片包括基帶控制器、LM固件、HCI固件以及UART串口驅(qū)動(dòng)固件。其中,UART串口驅(qū)動(dòng)固件提供了外部數(shù)據(jù)和語(yǔ)音總線接口。
現(xiàn)有技術(shù)中,藍(lán)牙主機(jī)可以同一個(gè)藍(lán)牙芯片連接、通信。但是,當(dāng)藍(lán)牙主機(jī)需要同多個(gè)藍(lán)牙芯片進(jìn)行通信時(shí),由于藍(lán)牙主機(jī)只提供連接藍(lán)牙芯片的一個(gè)接口,因此在硬件上無(wú)法實(shí)現(xiàn)同多個(gè)藍(lán)牙芯片的連接與通信。并且現(xiàn)有技術(shù)中的藍(lán)牙協(xié)議棧未將鏈路的連接句柄同接口進(jìn)行關(guān)聯(lián),從而導(dǎo)致即使藍(lán)牙主機(jī)將連接藍(lán)牙芯片的接口擴(kuò)展為多個(gè),藍(lán)牙主機(jī)也不能將命令或數(shù)據(jù)發(fā)送到指定的藍(lán)牙芯片上;或者無(wú)法確定接收到的數(shù)據(jù)和命令來(lái)自哪個(gè)藍(lán)牙芯片。因此,現(xiàn)有技術(shù)中的藍(lán)牙主機(jī)無(wú)法實(shí)現(xiàn)同多個(gè)藍(lán)牙芯片連接和通信。
發(fā)明內(nèi)容
為了解決現(xiàn)有技術(shù)存在的問(wèn)題,本發(fā)明提供了一種擴(kuò)展藍(lán)牙芯片的方法,能夠支持一個(gè)藍(lán)牙主機(jī)同多個(gè)藍(lán)牙芯片的連接和通信。
為此,本發(fā)明解決技術(shù)問(wèn)題的技術(shù)方案是一種擴(kuò)展藍(lán)牙芯片的方法,用于實(shí)現(xiàn)一個(gè)藍(lán)牙主機(jī)同至少兩個(gè)藍(lán)牙芯片的連接,包括藍(lán)牙主機(jī)接口擴(kuò)展步驟將藍(lán)牙主機(jī)接口由一個(gè)擴(kuò)展為至少兩個(gè),并擴(kuò)展接口驅(qū)動(dòng);主機(jī)控制器接口驅(qū)動(dòng)軟件擴(kuò)展步驟擴(kuò)展藍(lán)牙主機(jī)側(cè)主機(jī)控制器接口驅(qū)動(dòng)軟件,使之支持至少兩個(gè)藍(lán)牙芯片的連接和通信;連接步驟藍(lán)牙主機(jī)的各個(gè)接口分別連接各個(gè)藍(lán)牙芯片,并建立連接鏈路、生成連接列表;通信步驟通過(guò)命令和數(shù)據(jù)的發(fā)送過(guò)程和接收過(guò)程實(shí)現(xiàn)藍(lán)牙主機(jī)和藍(lán)牙芯片的通信。
所述連接列表是主機(jī)連接句柄、芯片連接句柄和接口編號(hào)的對(duì)應(yīng)列表。所述芯片連接句柄是通過(guò)下發(fā)主機(jī)控制器接口鏈路連接命令,使藍(lán)牙設(shè)備間建立ACL鏈路或SCO鏈路時(shí)產(chǎn)生的鏈路標(biāo)識(shí)。所述主機(jī)連接句柄是芯片連接句柄和藍(lán)牙芯片接口編號(hào)封裝關(guān)聯(lián)后分配的連接標(biāo)識(shí),用于唯一標(biāo)識(shí)所述連接屬于哪個(gè)藍(lán)牙芯片。
所述主機(jī)控制器接口驅(qū)動(dòng)軟件擴(kuò)展步驟具體包括在主機(jī)控制器接口驅(qū)動(dòng)軟件的發(fā)送函數(shù)中增加表示接口編號(hào)的參數(shù),通過(guò)所述發(fā)送函數(shù)將命令和數(shù)據(jù)下發(fā)至指定接口編號(hào)的接口;增加接口編號(hào)上行查詢函數(shù)、接口編號(hào)下行查詢函數(shù)、主機(jī)連接句柄查詢函數(shù)和芯片連接句柄查詢函數(shù)。所述接口編號(hào)下行查詢函數(shù)用于在藍(lán)牙主機(jī)向藍(lán)牙芯片發(fā)送命令和數(shù)據(jù)過(guò)程中查詢接口編號(hào);根據(jù)權(quán)利要求5所述的擴(kuò)展藍(lán)牙芯片的方法,其特征在于,所述接口編號(hào)上行查詢函數(shù)用于在藍(lán)牙主機(jī)接收來(lái)自藍(lán)牙芯片的命令和數(shù)據(jù)過(guò)程中查詢接口編號(hào)。
所述命令和數(shù)據(jù)的發(fā)送過(guò)程具體包括通過(guò)接口編號(hào)下行查詢函數(shù)在連接列表中查詢以得到接口編號(hào);將命令和數(shù)據(jù)發(fā)送到與指定接口編號(hào)的接口相連的藍(lán)牙芯片。
所述命令和數(shù)據(jù)的接收過(guò)程具體包括通過(guò)接口編號(hào)上行查詢函數(shù)在連接列表中查詢得到接口編號(hào);根據(jù)查詢的接口編號(hào)和芯片連接句柄生成主機(jī)連接句柄;將來(lái)自連接指定接口的藍(lán)牙芯片的命令和數(shù)據(jù)上報(bào)給上層軟件。
所述連接步驟之后還包括標(biāo)識(shí)步驟通過(guò)藍(lán)牙芯片的主機(jī)控制器接口控制結(jié)構(gòu)標(biāo)識(shí)連接藍(lán)牙主機(jī)的藍(lán)牙芯片的數(shù)量、每個(gè)藍(lán)牙芯片的地址以及與藍(lán)牙芯片建立連接的藍(lán)牙設(shè)備。
所述接口包括UART串口、USB串口、RS232串口以及PCI接口。
相對(duì)于現(xiàn)有技術(shù),本發(fā)明的有益效果是本發(fā)明提供的擴(kuò)展藍(lán)牙芯片的方法可以將藍(lán)牙主機(jī)的接口由一個(gè)擴(kuò)展為至少兩個(gè)接口,從而使得藍(lán)牙主機(jī)在硬件上支持與至少兩個(gè)藍(lán)牙芯片的連接和通信。
同時(shí),本發(fā)明提供的擴(kuò)展藍(lán)牙芯片的方法中擴(kuò)展了藍(lán)牙主機(jī)側(cè)HCI驅(qū)動(dòng)軟件,建立了主機(jī)連接句柄、芯片連接句柄和接口編號(hào)之間的對(duì)應(yīng)關(guān)系,并生成主機(jī)連接句柄、芯片連接句柄和接口編號(hào)的對(duì)應(yīng)列表。這樣,通過(guò)查詢上述對(duì)應(yīng)列表,可以將HCI命令和數(shù)據(jù)發(fā)送到指定的藍(lán)牙芯片上;也可以接收來(lái)自藍(lán)牙芯片的數(shù)據(jù)和命令,并確定所接收的數(shù)據(jù)和命令來(lái)自哪個(gè)藍(lán)牙芯片。因而,通過(guò)本發(fā)明提供的擴(kuò)展藍(lán)牙芯片的方法可以實(shí)現(xiàn)一個(gè)藍(lán)牙主機(jī)同至少兩個(gè)藍(lán)牙芯片連接和通信。
圖1是現(xiàn)有技術(shù)中藍(lán)牙主機(jī)控制單個(gè)藍(lán)牙芯片的模型示意圖;圖2是現(xiàn)有技術(shù)中藍(lán)牙協(xié)議棧模型示意圖;圖3是圖2所示模型的底層模型示意圖;圖4是本發(fā)明擴(kuò)展藍(lán)牙芯片的方法的流程示意圖;圖5是本發(fā)明中藍(lán)牙協(xié)議棧模型示意圖;圖6是本發(fā)明中藍(lán)牙主機(jī)控制多個(gè)藍(lán)牙芯片的模型示意圖。
具體實(shí)施例方式
本發(fā)明提供了一種擴(kuò)展藍(lán)牙芯片的方法,用于實(shí)現(xiàn)一個(gè)藍(lán)牙主機(jī)同至少兩個(gè)藍(lán)牙芯片的連接和通信。
請(qǐng)參閱圖4,本發(fā)明提供的擴(kuò)展藍(lán)牙芯片的方法包括下述步驟藍(lán)牙主機(jī)接口擴(kuò)展步驟(S410)將藍(lán)牙主機(jī)接口由一個(gè)擴(kuò)展為至少兩個(gè),并擴(kuò)展接口驅(qū)動(dòng)。
由于現(xiàn)有技術(shù)中藍(lán)牙主機(jī)只提供一個(gè)與藍(lán)牙芯片連接、通信的接口,因此,為了支持多個(gè)藍(lán)牙芯片,藍(lán)牙主機(jī)必須擴(kuò)展出多個(gè)接口以同多個(gè)藍(lán)牙芯片進(jìn)行一一對(duì)應(yīng)的物理連接。
在實(shí)際應(yīng)用中,擴(kuò)展藍(lán)牙主機(jī)的接口可以通過(guò)接口擴(kuò)展器來(lái)實(shí)現(xiàn),并且根據(jù)接口的類型選用不同的接口擴(kuò)展器。例如,如果擴(kuò)展UART串口,可以采用UART串口擴(kuò)展器SP2338DP將高波特率的UART擴(kuò)展為3個(gè),從而解決UART串口太少的問(wèn)題。
HCI驅(qū)動(dòng)軟件擴(kuò)展步驟(S420)將藍(lán)牙主機(jī)側(cè)HCI驅(qū)動(dòng)軟件擴(kuò)展為支持至少兩個(gè)藍(lán)牙芯片的連接和通信。
在本步驟中,通過(guò)把HCI命令、芯片連接句柄和標(biāo)識(shí)哪個(gè)藍(lán)牙芯片的標(biāo)志(例如,藍(lán)牙主機(jī)接口編號(hào))進(jìn)行封裝關(guān)聯(lián),重新得到對(duì)上層協(xié)議軟件的主機(jī)連接句柄,從而實(shí)現(xiàn)對(duì)不同藍(lán)牙芯片命令和數(shù)據(jù)的發(fā)送與接收,并使得上層協(xié)議軟件對(duì)多藍(lán)牙芯片的控制同對(duì)單藍(lán)牙芯片的控制一樣,從而減少了上層協(xié)議軟件的修改,屏蔽了上層協(xié)議軟件和底層硬件之間的接口。
在實(shí)際應(yīng)用中,HCI驅(qū)動(dòng)軟件擴(kuò)展步驟(S420)具體包括在HCI驅(qū)動(dòng)軟件的發(fā)送函數(shù)中增加表示接口編號(hào)的參數(shù),通過(guò)所述發(fā)送函數(shù)將命令和數(shù)據(jù)下發(fā)至指定接口編號(hào)的接口。
增加接口編號(hào)上行查詢函數(shù)、接口編號(hào)下行查詢函數(shù)、主機(jī)連接句柄查詢函數(shù)和芯片連接句柄查詢函數(shù)。
下面以UART串口為例,具體講述HCI驅(qū)動(dòng)軟件擴(kuò)展步驟。
在發(fā)送函數(shù)的函數(shù)參數(shù)中加入表示接口編號(hào)的參數(shù)No_of_UART,將原發(fā)送函數(shù)send(data)修改為send(data,No_of_UART)。通過(guò)調(diào)用該發(fā)送函數(shù),可將數(shù)據(jù)下發(fā)到指定的UART串口。若參數(shù)No_of_UART賦值為2,則通過(guò)該函數(shù)可以將數(shù)據(jù)下發(fā)到串口號(hào)為2的UART串口,以此類推。
增加接口編號(hào)上行查詢函數(shù)getUART_from_Chip_Con(Chip_Con)、接口編號(hào)下行查詢函數(shù)getUART_from_Host_Con(Host_Con)、主機(jī)連接句柄查詢函數(shù)getHostCon(No_of_UART,Chip_Con)和芯片連接句柄查詢函數(shù)getChipCon(No_of_UART,Host_Con)。
其中,接口編號(hào)下行查詢函數(shù)用于在藍(lán)牙主機(jī)向藍(lán)牙芯片發(fā)送命令和數(shù)據(jù)過(guò)程中查詢接口編號(hào)。通過(guò)接口編號(hào)下行查詢函數(shù)getUART_from_Host_Con(Host_Con)以及主機(jī)連接句柄Host_Con可以唯一得到與藍(lán)牙芯片相連的UART串口號(hào)。即,No_of_UART=getUART_from_Host_Con(Host_Con)。
接口編號(hào)上行查詢函數(shù),用于在藍(lán)牙主機(jī)接收來(lái)自藍(lán)牙芯片的命令和數(shù)據(jù)過(guò)程中查詢接口編號(hào)。通過(guò)該接口編號(hào)下行查詢函數(shù)getUART_from_Chip_Con(Chip_Con)以及芯片連接句柄Chip_Con可以唯一得到與藍(lán)牙芯片相連的UART串口號(hào)。即,No_of_UART=getUART_from_Chip_Con(Chip_Con)。
主機(jī)連接句柄查詢函數(shù),用于在藍(lán)牙主機(jī)向藍(lán)牙芯片發(fā)送命令和數(shù)據(jù)過(guò)程中查詢主機(jī)連接句柄。通過(guò)主機(jī)連接句柄查詢函數(shù)getHostCon(No_of_UART,Chip_Con),以及參數(shù)No_of_UART和Chip_Con的賦值,可以唯一得到主機(jī)連接句柄。即,Host_Con=getHostCon(No_of_UART,Chip_Con)。
芯片連接句柄查詢函數(shù),用于在藍(lán)牙主機(jī)接收來(lái)自藍(lán)牙芯片的命令和數(shù)據(jù)過(guò)程中查詢芯片連接句柄。通過(guò)芯片連接句柄查詢函數(shù)getChipCon(No_of_UART,Host_Con),以及參數(shù)No_of_UART和Host_Con的賦值,可以唯一得到芯片連接句柄。即,Chip_Con=getChipCon(No_of_UART,Host_Con)。
連接步驟(S430)將藍(lán)牙主機(jī)的各個(gè)接口分別連接各個(gè)藍(lán)牙芯片,并建立連接鏈路、生成連接列表。
所謂連接列表,指的是建立鏈路連接時(shí)生成的主機(jī)連接句柄、芯片連接句柄和接口編號(hào)的對(duì)應(yīng)列表。
連接列表的項(xiàng)目具體參見(jiàn)表1
其中,對(duì)于上層協(xié)議來(lái)講,主機(jī)連接句柄的標(biāo)號(hào)是唯一的。對(duì)于每個(gè)藍(lán)牙芯片來(lái)說(shuō),芯片連接句柄的標(biāo)號(hào)是唯一的,對(duì)于不同的藍(lán)牙芯片,芯片連接句柄的標(biāo)號(hào)可以重復(fù)。
上述連接列表也可以用數(shù)據(jù)結(jié)構(gòu)con_list[Chip_Number*7]表示,即con_list[Chip_Number*7]藍(lán)牙芯片的連接列表,每個(gè)藍(lán)牙芯片支持7路連接{主機(jī)連接句柄;芯片連接句柄;UART串口號(hào);}通過(guò)該結(jié)構(gòu),上層軟件可以根據(jù)主機(jī)連接句柄得到芯片連接句柄和UART串口號(hào),來(lái)對(duì)具體的哪個(gè)芯片哪個(gè)連接進(jìn)行數(shù)據(jù)和命令的發(fā)送與接收。
其中,芯片連接句柄是通過(guò)下發(fā)HCI鏈路連接命令,在藍(lán)牙設(shè)備之間建立ACL鏈路或SCO鏈路時(shí)所產(chǎn)生的鏈路標(biāo)識(shí)。主機(jī)連接句柄(上層連接句柄)是在建立鏈路時(shí),芯片連接句柄和藍(lán)牙芯片接口編號(hào)封裝關(guān)聯(lián)后,分配的連接標(biāo)識(shí),用于唯一標(biāo)識(shí)哪個(gè)藍(lán)牙芯片的一個(gè)連接。
需要指出的是,對(duì)于單個(gè)藍(lán)牙芯片的藍(lán)牙系統(tǒng),芯片連接句柄唯一標(biāo)識(shí)一個(gè)連接。這樣,單個(gè)藍(lán)牙芯片的藍(lán)牙系統(tǒng)中,芯片連接句柄就是主機(jī)連接句柄。
通信步驟(S440)通過(guò)命令和數(shù)據(jù)的發(fā)送過(guò)程和命令接收過(guò)程實(shí)現(xiàn)藍(lán)牙主機(jī)和藍(lán)牙芯片的通信。
其中,命令和數(shù)據(jù)的發(fā)送過(guò)程具體包括通過(guò)接口編號(hào)下行查詢函數(shù)在連接列表中查詢得到接口編號(hào);將命令和數(shù)據(jù)發(fā)送到與指定接口編號(hào)的接口相連的藍(lán)牙芯片。
命令和數(shù)據(jù)的接收過(guò)程具體包括通過(guò)接口編號(hào)上行查詢函數(shù)在連接列表中查詢得到接口編號(hào);根據(jù)查詢的接口編號(hào)和芯片連接句柄生成主機(jī)連接句柄;將來(lái)自與指定接口編號(hào)的接口相連的藍(lán)牙芯片的命令和數(shù)據(jù)上報(bào)給上層協(xié)議軟件。
需要指出的是,連接步驟之后還可以包括標(biāo)識(shí)步驟。通過(guò)藍(lán)牙芯片的HCI控制結(jié)構(gòu)標(biāo)識(shí)藍(lán)牙主機(jī)連接的藍(lán)牙芯片的數(shù)量、每個(gè)藍(lán)牙芯片的地址以及藍(lán)牙芯片建立連接的藍(lán)牙設(shè)備。
請(qǐng)參閱圖5,是本發(fā)明中藍(lán)牙協(xié)議棧模型示意圖。本發(fā)明中采用的藍(lán)牙協(xié)議棧的邏輯鏈路控制和適配協(xié)議L2CAP層150協(xié)議以及該層以上的協(xié)議與單芯片系統(tǒng)的藍(lán)牙協(xié)議棧中的協(xié)議相同。其中,L2CAP協(xié)議層150以上協(xié)議層主要包括服務(wù)發(fā)現(xiàn)協(xié)議170、傳輸協(xié)議180、電話控制協(xié)議190以及語(yǔ)音媒體100。
L2CAP協(xié)議層150之下是多UART串口-HCI驅(qū)動(dòng)層510,該層是本發(fā)明藍(lán)牙協(xié)議棧中擴(kuò)展的。通過(guò)多UART串口-HCI驅(qū)動(dòng)層510,一個(gè)藍(lán)牙主機(jī)可以同時(shí)支持多個(gè)藍(lán)牙芯片,即藍(lán)牙芯片1、藍(lán)牙芯片2等等,直至藍(lán)牙芯片n。在此,藍(lán)牙芯片與單個(gè)藍(lán)牙芯片的藍(lán)牙系統(tǒng)中的藍(lán)牙芯片相同。在實(shí)際應(yīng)用中,藍(lán)牙芯片的實(shí)際數(shù)量可以根據(jù)具體情況而定。
其中,擴(kuò)展的主機(jī)側(cè)HCI驅(qū)動(dòng)軟件主要完成下述功能通過(guò)封裝的串口號(hào)和芯片連接句柄來(lái)區(qū)分各個(gè)藍(lán)牙芯片的數(shù)據(jù)傳輸通道;支持各個(gè)通道進(jìn)行數(shù)據(jù)和命令的收發(fā);支持對(duì)各個(gè)通道收發(fā)的數(shù)據(jù)和命令進(jìn)行處理上報(bào)。
所謂芯片連接句柄,指的是通過(guò)下發(fā)HCI鏈路連接命令,使藍(lán)牙芯片同藍(lán)牙主機(jī)之間建立ACL鏈路和SCO鏈路,而產(chǎn)生的鏈路標(biāo)識(shí)。所謂主機(jī)連接句柄,指的是在建立鏈路時(shí),芯片連接句柄和該芯片串口標(biāo)識(shí)關(guān)聯(lián)并封裝后,所分配的連接標(biāo)識(shí),用以唯一標(biāo)識(shí)哪一個(gè)藍(lán)牙芯片的連接。
當(dāng)建立鏈路時(shí),同時(shí)也建立連接列表。所謂連接列表中包含芯片連接句柄同各個(gè)ACL鏈路或SCO鏈路的對(duì)應(yīng)表;同時(shí)也包含主機(jī)連接句柄同各個(gè)芯片連接句柄和該芯片對(duì)應(yīng)的串口標(biāo)識(shí)之間的對(duì)應(yīng)表。
本發(fā)明中還提供了藍(lán)牙芯片的HCI控制結(jié)構(gòu),即Hci_ctrl[Chip_Number]{藍(lán)牙芯片連接;藍(lán)牙芯片地址;藍(lán)牙芯片所需要的內(nèi)存;}
其中,藍(lán)牙芯片連接指的是該藍(lán)牙芯片同另外的藍(lán)牙設(shè)備之間建立的連接。
通過(guò)藍(lán)牙芯片的HCI控制結(jié)構(gòu),可以標(biāo)識(shí)藍(lán)牙系統(tǒng)中有幾個(gè)藍(lán)牙芯片,每個(gè)藍(lán)牙芯片的地址,以及藍(lán)牙芯片同哪些藍(lán)牙設(shè)備有連接。
下面舉例說(shuō)明一個(gè)藍(lán)牙主機(jī)同多個(gè)藍(lán)牙芯片之間的通信過(guò)程。
例如,藍(lán)牙主機(jī)同三個(gè)藍(lán)牙芯片(即,藍(lán)牙芯片1、藍(lán)牙芯片2和藍(lán)牙芯片3)之間進(jìn)行通信。其中,藍(lán)牙主機(jī)帶有三個(gè)UART串口,即UART串口1、UART串口2和UART串口3。在此,UART串口標(biāo)識(shí)分別設(shè)為1、2和3。
UART串口標(biāo)識(shí)分別為1或2。藍(lán)牙芯片1通過(guò)UART串口1與藍(lán)牙主機(jī)相連;藍(lán)牙芯片2通過(guò)UART串口2與藍(lán)牙主機(jī)相連;藍(lán)牙芯片3通過(guò)UART串口3與藍(lán)牙主機(jī)相連。將與三個(gè)UART串口連接的藍(lán)牙芯片的標(biāo)識(shí)也分別對(duì)應(yīng)設(shè)置為藍(lán)牙芯片1、2和3。
當(dāng)藍(lán)牙芯片1與外部藍(lán)牙設(shè)備建立鏈路連接時(shí),生成連接列表。連接列表示例參見(jiàn)表2
當(dāng)已知主機(jī)連接句柄標(biāo)號(hào)為1時(shí),藍(lán)牙主機(jī)欲通過(guò)UART串口向藍(lán)牙芯片發(fā)送HCI命令。首先根據(jù)主機(jī)連接句柄標(biāo)號(hào)1,通過(guò)接口編號(hào)下行查詢函數(shù)在連接列表中查詢得到UART串口號(hào)為0;根據(jù)主機(jī)連接句柄標(biāo)號(hào)1以及UART串口號(hào)0,通過(guò)芯片連接句柄查詢函數(shù)在連接列表中查詢得到芯片連接句柄為48。根據(jù)芯片連接句柄48和UART串口號(hào)0,藍(lán)牙主機(jī)就可以通過(guò)HCI將命令發(fā)送至指定的藍(lán)牙芯片以及相應(yīng)的鏈路。
當(dāng)主機(jī)側(cè)HCI驅(qū)動(dòng)軟件收到芯片連接句柄標(biāo)號(hào)為48,UART串口號(hào)為1的數(shù)據(jù)時(shí),通過(guò)主機(jī)連接句柄查詢函數(shù)在連接列表中查詢得到主機(jī)連接句柄為2。這樣藍(lán)牙主機(jī)就可以識(shí)別出數(shù)據(jù)來(lái)自哪個(gè)藍(lán)牙芯片的哪一個(gè)鏈路。
藍(lán)牙主機(jī)處理完數(shù)據(jù)后,通過(guò)藍(lán)牙HCI接口向?qū)?yīng)的藍(lán)牙芯片發(fā)送命令或數(shù)據(jù)。即可實(shí)現(xiàn)藍(lán)牙主機(jī)和藍(lán)牙芯片之間的通信了。
擴(kuò)展了藍(lán)牙主機(jī)接口以及藍(lán)牙主機(jī)側(cè)HCI驅(qū)動(dòng)軟件后,就可以實(shí)現(xiàn)一個(gè)藍(lán)牙主機(jī)連接多個(gè)藍(lán)牙芯片并與之通信了。
請(qǐng)參閱圖6,是藍(lán)牙主機(jī)同多個(gè)藍(lán)牙芯片控制模型框圖。藍(lán)牙主機(jī)410帶有多個(gè)接口,分別連接不同的藍(lán)牙芯片420。藍(lán)牙主機(jī)通過(guò)藍(lán)牙HCI接口分別向不同的藍(lán)牙芯片420發(fā)送HCI命令和數(shù)據(jù),同時(shí)接收來(lái)自不同的藍(lán)牙芯片420的HCI命令和數(shù)據(jù)。
對(duì)于底層來(lái)說(shuō),每個(gè)藍(lán)牙芯片420的UART串口(圖未示)分別和藍(lán)牙主機(jī)(圖未示)410側(cè)的UART串口相連。該連接一一對(duì)應(yīng),即每個(gè)UART串口固定連接一個(gè)藍(lán)牙芯片。
在實(shí)際應(yīng)用中,藍(lán)牙主機(jī)設(shè)計(jì)出多個(gè)UART串口以滿足同多個(gè)藍(lán)牙芯片的連接。藍(lán)牙主機(jī)擴(kuò)展多個(gè)UART串口的同時(shí)需要擴(kuò)展相應(yīng)的UART串口驅(qū)動(dòng),以使一個(gè)藍(lán)牙主機(jī)同多個(gè)藍(lán)牙芯片相連。在擴(kuò)展串口時(shí),可以給每一個(gè)串口分配一個(gè)串口標(biāo)識(shí)。所謂串口標(biāo)識(shí)可以是預(yù)先分配的串口編號(hào)。
需要指出的是,本發(fā)明中藍(lán)牙主機(jī)與藍(lán)牙芯片進(jìn)行連接的接口不僅僅局限于實(shí)施方式中的UART串口,還可以是USB串口、RS232串口以及PCI接口。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以作出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種擴(kuò)展藍(lán)牙芯片的方法,用于實(shí)現(xiàn)一個(gè)藍(lán)牙主機(jī)同至少兩個(gè)藍(lán)牙芯片的連接,其特征在于,包括藍(lán)牙主機(jī)接口擴(kuò)展步驟將藍(lán)牙主機(jī)接口由一個(gè)擴(kuò)展為至少兩個(gè),并擴(kuò)展接口驅(qū)動(dòng);主機(jī)控制器接口驅(qū)動(dòng)軟件擴(kuò)展步驟擴(kuò)展藍(lán)牙主機(jī)側(cè)主機(jī)控制器接口驅(qū)動(dòng)軟件,使之支持至少兩個(gè)藍(lán)牙芯片的連接和通信;連接步驟藍(lán)牙主機(jī)的各個(gè)接口分別連接各個(gè)藍(lán)牙芯片,并建立連接鏈路、生成連接列表;通信步驟通過(guò)命令和數(shù)據(jù)的發(fā)送過(guò)程和接收過(guò)程實(shí)現(xiàn)藍(lán)牙主機(jī)和藍(lán)牙芯片的通信。
2.根據(jù)權(quán)利要求1所述的擴(kuò)展藍(lán)牙芯片的方法,其特征在于,所述連接列表是主機(jī)連接句柄、芯片連接句柄和接口編號(hào)的對(duì)應(yīng)列表。
3.根據(jù)權(quán)利要求2所述的擴(kuò)展藍(lán)牙芯片的方法,其特征在于,所述芯片連接句柄是通過(guò)下發(fā)主機(jī)控制器接口鏈路連接命令,使藍(lán)牙設(shè)備間建立ACL鏈路或SCO鏈路時(shí)產(chǎn)生的鏈路標(biāo)識(shí)。
4.根據(jù)權(quán)利要求2所述的擴(kuò)展藍(lán)牙芯片的方法,其特征在于,所述主機(jī)連接句柄是芯片連接句柄和藍(lán)牙芯片接口編號(hào)封裝關(guān)聯(lián)后分配的連接標(biāo)識(shí),用于唯一標(biāo)識(shí)所述連接屬于哪個(gè)藍(lán)牙芯片。
5.根據(jù)權(quán)利要求1所述的擴(kuò)展藍(lán)牙芯片的方法,其特征在于,所述主機(jī)控制器接口驅(qū)動(dòng)軟件擴(kuò)展步驟具體包括在主機(jī)控制器接口驅(qū)動(dòng)軟件的發(fā)送函數(shù)中增加表示接口編號(hào)的參數(shù),通過(guò)所述發(fā)送函數(shù)將命令和數(shù)據(jù)下發(fā)至指定接口編號(hào)的接口;增加接口編號(hào)上行查詢函數(shù)、接口編號(hào)下行查詢函數(shù)、主機(jī)連接句柄查詢函數(shù)和芯片連接句柄查詢函數(shù)。
6.根據(jù)權(quán)利要求5所述的擴(kuò)展藍(lán)牙芯片的方法,其特征在于,所述接口編號(hào)下行查詢函數(shù)用于在藍(lán)牙主機(jī)向藍(lán)牙芯片發(fā)送命令和數(shù)據(jù)過(guò)程中查詢接口編號(hào)。
7.根據(jù)權(quán)利要求5所述的擴(kuò)展藍(lán)牙芯片的方法,其特征在于,所述接口編號(hào)上行查詢函數(shù)用于在藍(lán)牙主機(jī)接收來(lái)自藍(lán)牙芯片的命令和數(shù)據(jù)過(guò)程中查詢接口編號(hào)。
8.根據(jù)權(quán)利要求1所述的擴(kuò)展藍(lán)牙芯片的方法,其特征在于,所述命令和數(shù)據(jù)的發(fā)送過(guò)程具體包括通過(guò)接口編號(hào)下行查詢函數(shù)在連接列表中查詢以得到接口編號(hào);將命令和數(shù)據(jù)發(fā)送到與指定接口編號(hào)的接口相連的藍(lán)牙芯片。
9.根據(jù)權(quán)利要求1所述的擴(kuò)展藍(lán)牙芯片的方法,其特征在于,所述命令和數(shù)據(jù)的接收過(guò)程具體包括通過(guò)接口編號(hào)上行查詢函數(shù)在連接列表中查詢得到接口編號(hào);根據(jù)查詢的接口編號(hào)和芯片連接句柄生成主機(jī)連接句柄;將來(lái)自連接指定接口的藍(lán)牙芯片的命令和數(shù)據(jù)上報(bào)給上層軟件。
10.根據(jù)權(quán)利要求1所述的擴(kuò)展藍(lán)牙芯片的方法,其特征在于,所述連接步驟之后還包括標(biāo)識(shí)步驟通過(guò)藍(lán)牙芯片的主機(jī)控制器接口控制結(jié)構(gòu)標(biāo)識(shí)連接藍(lán)牙主機(jī)的藍(lán)牙芯片的數(shù)量、每個(gè)藍(lán)牙芯片的地址以及與藍(lán)牙芯片建立連接的藍(lán)牙設(shè)備。
11.根據(jù)權(quán)利要求1所述的擴(kuò)展藍(lán)牙芯片的方法,其特征在于,所述接口包括UART串口、USB串口、RS232串口以及PCI接口。
全文摘要
本發(fā)明公開(kāi)了一種擴(kuò)展藍(lán)牙芯片的方法,用于實(shí)現(xiàn)一個(gè)藍(lán)牙主機(jī)同至少兩個(gè)藍(lán)牙芯片的連接,包括藍(lán)牙主機(jī)接口擴(kuò)展步驟將藍(lán)牙主機(jī)接口由一個(gè)擴(kuò)展為至少兩個(gè),并擴(kuò)展接口驅(qū)動(dòng);主機(jī)控制器接口驅(qū)動(dòng)軟件擴(kuò)展步驟擴(kuò)展藍(lán)牙主機(jī)側(cè)主機(jī)控制器接口驅(qū)動(dòng)軟件,使之支持至少兩個(gè)藍(lán)牙芯片的連接和通信;連接步驟藍(lán)牙主機(jī)的各個(gè)接口分別連接各個(gè)藍(lán)牙芯片,并建立連接鏈路、生成連接列表;通信步驟通過(guò)命令和數(shù)據(jù)的發(fā)送過(guò)程和接收過(guò)程實(shí)現(xiàn)藍(lán)牙主機(jī)和藍(lán)牙芯片的通信。
文檔編號(hào)H04L29/06GK1741407SQ200410057249
公開(kāi)日2006年3月1日 申請(qǐng)日期2004年8月26日 優(yōu)先權(quán)日2004年8月26日
發(fā)明者王旭軍 申請(qǐng)人:華為技術(shù)有限公司