專利名稱:一種自動(dòng)安裝藍(lán)牙串口設(shè)備的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式設(shè)備或移動(dòng)終端中的藍(lán)牙技術(shù)和虛擬串口技術(shù),特別是一種自動(dòng)安裝藍(lán)牙串口設(shè)備的方法,該方法用于在基于Windows Mobile或Windows CE操作系統(tǒng)的嵌入式設(shè)備或移動(dòng)終端上自動(dòng)安裝藍(lán)牙串口設(shè)備。
背景技術(shù):
目前,采用Windows Mobile或Windows CE操作系統(tǒng)的各種嵌入式設(shè)備和移動(dòng)終端被廣泛應(yīng)用于各行各業(yè),并且同時(shí)會(huì)使用到很多配套的藍(lán)牙設(shè)備,如藍(lán)牙打印機(jī)、藍(lán)牙鍵盤、藍(lán)牙遙控器等。由于基于虛擬串口實(shí)現(xiàn)藍(lán)牙設(shè)備間的通信,編程簡(jiǎn)單,小數(shù)據(jù)量傳輸方便快捷,因而在行業(yè)應(yīng)用中經(jīng)常會(huì)優(yōu)先考慮藍(lán)牙串口設(shè)備。Windows CE是微軟(Microsoft)公司出品的嵌入式操作系統(tǒng)。它是一種為各種嵌入式系統(tǒng)和產(chǎn)品設(shè)計(jì)的壓縮的、高效的、模塊化的、可升級(jí)的操作系統(tǒng)(OS),其多線性、多任務(wù)、全優(yōu)先的操作系統(tǒng)環(huán)境是專門針對(duì)資源有限而設(shè)計(jì)的。它的模塊化設(shè)計(jì)使嵌入式系統(tǒng)開發(fā)者和應(yīng)用開發(fā)者能夠基于此定制各種產(chǎn)品,例如家用電器,專門的工業(yè)控制器和嵌入式通信設(shè)備以及各種移動(dòng)終端等。Windows Mobile是微軟(Microsoft)公司在Windows CE的基礎(chǔ)上專門為移動(dòng)設(shè)備定制的操作系統(tǒng)。它將熟悉的Windows桌面和應(yīng)用擴(kuò)展到了移動(dòng)設(shè)備中,并為移動(dòng)通訊設(shè)備提供了電話、短信等應(yīng)用,是微軟為手持設(shè)備推出的“移動(dòng)版Windows”。藍(lán)牙,是一種支持設(shè)備短距離通信(一般IOm內(nèi))的無(wú)線電技術(shù),它以低成本的近距離無(wú)線連接為基礎(chǔ),為固定與移動(dòng)設(shè)備通信環(huán)境建立一個(gè)特別連接,能在包括移動(dòng)終端、 PDA、無(wú)線耳機(jī)、筆記本電腦、相關(guān)外設(shè)等眾多設(shè)備之間進(jìn)行無(wú)線信息交換,能夠有效地簡(jiǎn)化移動(dòng)終端設(shè)備之間的通信,也能夠成功地簡(jiǎn)化設(shè)備與因特網(wǎng)^ternet之間的通信,從而數(shù)據(jù)傳輸變得更加迅速高效,為無(wú)線通信拓寬道路。藍(lán)牙技術(shù)包括一系列開放性全球規(guī)范,藍(lán)牙協(xié)議棧是這些規(guī)范的重要組成部分。 藍(lán)牙協(xié)議棧依照其功能可分四層核心協(xié)議層(HCI、LMP、L2CAP、SDP);線纜替換協(xié)議層 (RFCOMM);電話控制協(xié)議層(TCS-BIN);選用協(xié)議層(PPP、TCP、IP、UDP, OBEX、IrMC, WAP、 WAE)。RFCOMM協(xié)議是藍(lán)牙協(xié)議棧的重要組成部分,許多應(yīng)用框架都要使用到該協(xié)議。它在L2CAP協(xié)議之上提供了對(duì)九針RS-232串口的仿真,通過(guò)此協(xié)議可以使得傳統(tǒng)的基于串口的應(yīng)用在外設(shè)變換為藍(lán)牙無(wú)線設(shè)備后仍可使用。在Windows Mobile或Windows CE操作系統(tǒng)中,對(duì)藍(lán)牙技術(shù)提供了比較完整的實(shí)現(xiàn),為上層應(yīng)用打下了堅(jiān)實(shí)的基礎(chǔ),其架構(gòu)如附圖1所示。在應(yīng)用層實(shí)現(xiàn)藍(lán)牙通信時(shí)有兩種方式可以選擇一種通信方式是利用Winsock協(xié)議;二是利用虛擬串口(VCOM),在Windows Mobile或Windows CE中這種虛擬串口建立在 RFCOMM通道上,仿真RS-232控制和數(shù)據(jù)信號(hào)的串行仿真協(xié)議,操作虛擬串口時(shí)如同操作真正的串口。
4
但是,雖然Windows Mobile或Windows CE操作系統(tǒng)提供了藍(lán)牙技術(shù)的完整支持, 雖然基于虛擬串口的編程就如同基于傳統(tǒng)串口一樣簡(jiǎn)單,但就操作系統(tǒng)目前的實(shí)現(xiàn)情況來(lái)看,針對(duì)一個(gè)藍(lán)牙串口設(shè)備從搜索到安裝獲得一個(gè)有效的可操作的虛擬串口還是比較復(fù)雜的這些安裝/卸載選項(xiàng)分散在不同的設(shè)置項(xiàng)中,并且有順序依賴,在某些情況下甚至?xí)枰ㄟ^(guò)ActiveSync直接進(jìn)行注冊(cè)表項(xiàng)的增加或刪除操作,這會(huì)帶來(lái)一些系統(tǒng)安全方面的問(wèn)題,同時(shí)也大大提高了對(duì)終端使用者的技術(shù)要求。在多數(shù)行業(yè)應(yīng)用中,其終端使用者基本不可能具有這樣的技術(shù)素質(zhì),所以這是完全不能接受的。
發(fā)明內(nèi)容
本發(fā)明針對(duì)現(xiàn)有技術(shù)中存在的缺陷或不足,提供一種自動(dòng)安裝藍(lán)牙串口設(shè)備的方法,該方法用于在基于Windows Mobile或Windows CE操作系統(tǒng)的嵌入式設(shè)備或移動(dòng)終端上自動(dòng)安裝藍(lán)牙串口設(shè)備。本發(fā)明創(chuàng)造性地實(shí)現(xiàn)了一步式自動(dòng)安裝藍(lán)牙串口設(shè)備,極大地簡(jiǎn)化了用戶的操作步驟,提高了可用性和終端用戶的使用體驗(yàn)。本發(fā)明的技術(shù)方案如下一種自動(dòng)安裝藍(lán)牙串口設(shè)備的方法,用于在基于Windows Mobile或Windows CE 操作系統(tǒng)的嵌入式設(shè)備或移動(dòng)終端上自動(dòng)安裝藍(lán)牙串口設(shè)備,其特征在于,包括以下步驟①在所述嵌入式設(shè)備或移動(dòng)終端上,開啟本地藍(lán)牙功能,啟動(dòng)對(duì)可用藍(lán)牙設(shè)備的搜索對(duì)于搜索到的可用藍(lán)牙設(shè)備逐一與預(yù)設(shè)名稱進(jìn)行比對(duì),直到找到匹配的預(yù)設(shè)名稱,獲取所述可用藍(lán)牙設(shè)備的地址,然后配對(duì)并獲取該可用藍(lán)牙設(shè)備的RFCOMM通道號(hào);②搜索系統(tǒng)中可供使用的串口號(hào),然后基于所述可用藍(lán)設(shè)備的地址和RFCOMM通道號(hào)為其創(chuàng)建虛擬串口,并將相應(yīng)的虛擬串口號(hào)返回給上層應(yīng)用,表明已經(jīng)成功地安裝了一個(gè)安裝藍(lán)牙串口設(shè)備,直接為上層應(yīng)用提供有效操作目標(biāo)藍(lán)牙串口設(shè)備的虛擬串口。還包括步驟③,啟動(dòng)一個(gè)監(jiān)控線程,實(shí)時(shí)監(jiān)測(cè)當(dāng)前藍(lán)牙串口設(shè)備連接的有效性,一旦連接斷開,則卸載相應(yīng)虛擬串口并銷毀當(dāng)前藍(lán)牙串口設(shè)備,同時(shí)通知上層應(yīng)用,返回步驟 ①重新搜索可用藍(lán)牙設(shè)備,以完成自動(dòng)修復(fù)。所述監(jiān)控線程,是指創(chuàng)建的一個(gè)獨(dú)立線程,具體包括創(chuàng)建一個(gè)消息隊(duì)列;調(diào)用操作系統(tǒng)藍(lán)牙技術(shù)架構(gòu)提供的API-—RequestBluetoothNotifications來(lái)設(shè)置需要關(guān)注的藍(lán)牙狀態(tài),當(dāng)這些狀態(tài)發(fā)生改變時(shí),相應(yīng)的消息就會(huì)進(jìn)入消息隊(duì)列;等待來(lái)自消息隊(duì)列的通知;通過(guò)對(duì)通知消息的分析來(lái)確定藍(lán)牙連接的狀態(tài)。所述連接斷開的判斷,包括采用延時(shí)等待的方式來(lái)處理只是暫時(shí)連接中斷、但連接將恢復(fù)依然有效的情況,以避免誤判。所述啟動(dòng)對(duì)可用藍(lán)牙設(shè)備的搜索,包括調(diào)用操作系統(tǒng)藍(lán)牙技術(shù)架構(gòu)提供的 API-—WSALookupServiceBegin啟動(dòng)一個(gè)搜索過(guò)程它會(huì)初始化對(duì)藍(lán)牙客戶端的搜索并返回一個(gè)句柄;調(diào)用WSALookupServiceNext,它會(huì)依次獲得被搜索到的可用藍(lán)牙設(shè)備的信息,包括該設(shè)備的名稱和地址;所述配對(duì),調(diào)用Bthl^airRequest進(jìn)行配對(duì),配對(duì)時(shí)需要提供藍(lán)牙設(shè)備的配對(duì)識(shí)別碼PIN ;采用以下方式確認(rèn)可用藍(lán)牙設(shè)備是否是一個(gè)藍(lán)牙串口設(shè)備 通過(guò)調(diào)用BthNsLookupServiceBegin和BthNsLookupServiceNext來(lái)搜索這個(gè)藍(lán)牙設(shè)備支持的服務(wù),在搜索結(jié)果返回的數(shù)據(jù)中獲取RFCOMM通道,如果成功獲得則表明這是一個(gè)有效
5的藍(lán)牙串口設(shè)備,調(diào)用BthNsLookupServiceEnd結(jié)束服務(wù)搜索;調(diào)用WSALookupServiceEnd 停止整個(gè)搜索過(guò)程。一種自動(dòng)安裝藍(lán)牙串口設(shè)備的方法,適用于基于Windows Mobile或Windows CE 操作系統(tǒng)的嵌入式設(shè)備和移動(dòng)終端,其特征在于,包括如下步驟A.啟動(dòng)需要使用虛擬串口的上層應(yīng)用,發(fā)起獲取有效虛擬串口的請(qǐng)求;B.檢測(cè)系統(tǒng)中是否有曾經(jīng)被成功使用過(guò)的虛擬串口和藍(lán)牙串口設(shè)備,如果有則繼續(xù)步驟C,否則跳至步驟D ;C.獲取保存的原有虛擬串口和藍(lán)牙串口設(shè)備的信息,并檢測(cè)其有效性。如果仍然可用,則返回有效的虛擬串口號(hào),跳至步驟F;如果原有連接已經(jīng)不可用,則卸載原有虛擬串口并銷毀原有藍(lán)牙串口設(shè)備,繼續(xù)步驟D ;D.開啟本地藍(lán)牙功能,啟動(dòng)對(duì)可用藍(lán)牙設(shè)備的搜索對(duì)于搜索到的可用藍(lán)牙設(shè)備逐一與預(yù)設(shè)名稱進(jìn)行比對(duì),直到名稱匹配,獲取該可用藍(lán)牙設(shè)備的地址,然后配對(duì)并獲取該可用藍(lán)牙設(shè)備的RFCOMM通道號(hào);E.搜索系統(tǒng)中可供使用的串口號(hào),然后基于可用藍(lán)牙串口設(shè)備的地址和RFCOMM 通道號(hào)為其創(chuàng)建虛擬串口,如果成功則返回有效的虛擬串口號(hào),并將所述地址和RFCOMM通道號(hào)信息進(jìn)行保存;否則返回失敗信息,結(jié)束操作;F.啟動(dòng)一個(gè)監(jiān)控線程,實(shí)時(shí)監(jiān)測(cè)當(dāng)前藍(lán)牙設(shè)備連接的有效性,一旦連接斷開,則卸載相應(yīng)虛擬串口并銷毀當(dāng)前藍(lán)牙設(shè)備,同時(shí)通知上層應(yīng)用,返回步驟D重新搜索可用藍(lán)牙設(shè)備。所述藍(lán)牙串口設(shè)備,是指所有能夠通過(guò)串口操作的藍(lán)牙客戶端設(shè)備。所述步驟B中所述檢測(cè)系統(tǒng)中是否有曾經(jīng)被成功使用過(guò)的虛擬串口和藍(lán)牙串口設(shè)備,是通過(guò)檢測(cè)自定義的注冊(cè)表項(xiàng)或文件,和操作系統(tǒng)預(yù)定義的注冊(cè)表項(xiàng)來(lái)完成的。所述步驟D,藍(lán)牙設(shè)備的名稱和配對(duì)碼被保存在注冊(cè)表項(xiàng)或文件中,能夠支持多組名稱和配對(duì)碼,并能夠獨(dú)立于實(shí)現(xiàn)代碼修改;也能夠直接編寫在實(shí)現(xiàn)代碼里不能獨(dú)立于實(shí)現(xiàn)代碼修改。所述步驟E中所述可供使用的串口號(hào),被保存在注冊(cè)表項(xiàng)或文件中,能夠有多個(gè)串口號(hào),并能夠獨(dú)立于實(shí)現(xiàn)代碼修改;也能夠直接編寫在實(shí)現(xiàn)代碼里不能獨(dú)立于實(shí)現(xiàn)代碼修改。所述步驟F,對(duì)藍(lán)牙設(shè)備連接的有效性的監(jiān)測(cè)是通過(guò)響應(yīng)消息隊(duì)列中的藍(lán)牙狀態(tài)通知實(shí)現(xiàn)的。本發(fā)明的技術(shù)效果如下本發(fā)明提供了一種自動(dòng)安裝藍(lán)牙串口設(shè)備的方法。該方法基于Windows Mobile 或Windows CE操作系統(tǒng)提供的藍(lán)牙無(wú)線系統(tǒng)的技術(shù)架構(gòu),特別是對(duì)藍(lán)牙串口設(shè)備的支持技術(shù),集成了從開始檢測(cè)藍(lán)牙設(shè)備到最終可以通過(guò)虛擬串口操作該藍(lán)牙設(shè)備的各個(gè)步驟,使上層應(yīng)用僅通過(guò)一個(gè)調(diào)用接口就可獲得有效的虛擬串口。具體包括對(duì)原有連接有效性的檢測(cè),可用時(shí)直接使用,不可用時(shí)將其刪除以避免其對(duì)建立新連接的干擾;建立新設(shè)備連接時(shí)自動(dòng)檢測(cè)藍(lán)牙功能的開啟狀況,自動(dòng)搜索配對(duì)串口設(shè)備,自動(dòng)建立虛擬串口 ;設(shè)備名稱、 配對(duì)碼和串口號(hào)可通過(guò)注冊(cè)表或文件進(jìn)行動(dòng)態(tài)配置;連接建立后可實(shí)時(shí)監(jiān)控連接的有效性并進(jìn)行自動(dòng)修復(fù)。本發(fā)明創(chuàng)造性地實(shí)現(xiàn)了一步式自動(dòng)安裝藍(lán)牙串口設(shè)備,極大地簡(jiǎn)化了用
6戶的操作步驟,因而極大提高了產(chǎn)品的實(shí)用性,拓展了產(chǎn)品的可推廣領(lǐng)域。在Windows Mobile或Windows CE嵌入式設(shè)備和移動(dòng)終端上,從搜索一個(gè)藍(lán)牙串口設(shè)備到安裝獲得一個(gè)有效的可操作的虛擬串口的過(guò)程需要用戶全程手動(dòng)參與,相當(dāng)繁瑣而不易操作,本發(fā)明給出了一種快速安裝藍(lán)牙串口設(shè)備的方法,可以切實(shí)解決問(wèn)題,提高可用性。更進(jìn)一步的,本發(fā)明還可實(shí)時(shí)監(jiān)控當(dāng)前藍(lán)牙串口設(shè)備的有效性,及時(shí)修復(fù)連接意外中斷的情況,有效提高終端用戶的使用體驗(yàn)。本發(fā)明可直接為上層應(yīng)用提供有效操作目標(biāo)藍(lán)牙串口設(shè)備的虛擬串口,并實(shí)時(shí)檢測(cè)其有效性,完全無(wú)需用戶手動(dòng)參與,非常好地解決了原有操作模式的缺陷。
圖1為Windows Mobile或Windows CE中的藍(lán)牙技術(shù)架構(gòu)示意圖。圖中英文為本領(lǐng)域技術(shù)人員熟知的本領(lǐng)域通用技術(shù)術(shù)語(yǔ)。所述藍(lán)牙技術(shù)架構(gòu)是現(xiàn)有技術(shù)。圖2為實(shí)施本發(fā)明一種自動(dòng)安裝藍(lán)牙串口設(shè)備的方法總體流程圖。
具體實(shí)施例方式本發(fā)明涉及藍(lán)牙技術(shù)和虛擬串口技術(shù),特別是Windows Mobile或Windows CE操作系統(tǒng)中的藍(lán)牙無(wú)線系統(tǒng)的技術(shù)架構(gòu)。1. 一種自動(dòng)安裝藍(lán)牙串口設(shè)備的方法,適用于基于Windows Mobile或Windows CE操作系統(tǒng)的嵌入式設(shè)備和移動(dòng)終端,其特征在于,包括如下步驟A.需要使用虛擬串口的上一級(jí)應(yīng)用通過(guò)某種方式(用戶點(diǎn)擊或自動(dòng)運(yùn)行等)被啟動(dòng),發(fā)起獲取有效虛擬串口的請(qǐng)求;B.檢測(cè)系統(tǒng)中是否有曾經(jīng)被成功使用過(guò)的虛擬串口和藍(lán)牙串口設(shè)備,如果有則繼續(xù)步驟C,否則跳至步驟D ;C.獲取保存的原有虛擬串口和藍(lán)牙串口設(shè)備的信息,并檢測(cè)其有效性。如果仍然可用,則返回有效的虛擬串口號(hào),跳至步驟F;如果原有連接已經(jīng)不可用,則卸載原有虛擬串口并銷毀原有藍(lán)牙設(shè)備,繼續(xù)步驟D ;D.開啟本地藍(lán)牙功能,啟動(dòng)對(duì)可用藍(lán)牙設(shè)備的搜索對(duì)于搜索到的藍(lán)牙設(shè)備逐一與預(yù)設(shè)名稱進(jìn)行比對(duì),直到找到名稱匹配的設(shè)備,獲取該設(shè)備的地址,然后配對(duì)并獲取該設(shè)備的RFCOMM通道號(hào);E.搜索系統(tǒng)中可供使用的串口號(hào),然后基于給定的藍(lán)牙串口設(shè)備的地址和 RFCOMM通道號(hào)為其創(chuàng)建虛擬串口,如果成功則返回有效的虛擬串口號(hào),并將相關(guān)信息進(jìn)行保存;否則返回失敗信息,結(jié)束操作。F.啟動(dòng)一個(gè)監(jiān)控線程,實(shí)時(shí)監(jiān)測(cè)當(dāng)前藍(lán)牙設(shè)備連接的有效性,一旦連接斷開,則卸載相應(yīng)虛擬串口并銷毀當(dāng)前藍(lán)牙設(shè)備,同時(shí)通知上一級(jí)應(yīng)用,返回步驟D重新搜索可用藍(lán)牙設(shè)備。所述藍(lán)牙串口設(shè)備,是指所有可以通過(guò)串口操作的藍(lán)牙客戶端設(shè)備。所述步驟B 中所述檢測(cè)系統(tǒng)中是否有曾經(jīng)被成功使用過(guò)的虛擬串口和藍(lán)牙串口設(shè)備,是通過(guò)檢測(cè)自定義的注冊(cè)表項(xiàng)(或文件)和操作系統(tǒng)預(yù)定義的注冊(cè)表項(xiàng)來(lái)完成的。所述步驟D,藍(lán)牙設(shè)備的名稱和配對(duì)碼被保存在注冊(cè)表項(xiàng)(或文件)中,可以支持多組名稱和配對(duì)碼,并可以獨(dú)立于
7實(shí)現(xiàn)代碼修改;也可以直接編寫在實(shí)現(xiàn)代碼里不能獨(dú)立于實(shí)現(xiàn)代碼修改。所述步驟E中所述可供使用的串口號(hào),被保存在注冊(cè)表項(xiàng)(或文件)中,可以有多個(gè)串口號(hào),并可以獨(dú)立于實(shí)現(xiàn)代碼修改;也可以直接編寫在實(shí)現(xiàn)代碼里不能獨(dú)立于實(shí)現(xiàn)代碼修改。所述步驟F,對(duì)藍(lán)牙設(shè)備連接的有效性的監(jiān)測(cè)是通過(guò)響應(yīng)消息隊(duì)列中的藍(lán)牙狀態(tài)通知實(shí)現(xiàn)的。在本發(fā)明的具體實(shí)施中,充分考慮了軟件的模塊化,僅對(duì)上層應(yīng)用暴露一個(gè)調(diào)用接口和一個(gè)事件通知,但對(duì)于不按此模塊化方法實(shí)施,將本發(fā)明的實(shí)現(xiàn)與上層應(yīng)用代碼混合在一起的方案,同樣保有權(quán)利。如圖2所示,圖2為本發(fā)明的一種自動(dòng)安裝藍(lán)牙串口設(shè)備的方法的總體流程圖。該流程包括步驟21上層應(yīng)用請(qǐng)求可用的虛擬串口。本步驟通過(guò)在上層應(yīng)用中調(diào)用本實(shí)施方案給出的一個(gè)接口函數(shù)來(lái)實(shí)現(xiàn)??梢栽谏蠈討?yīng)用啟動(dòng)(用戶點(diǎn)擊或自動(dòng)啟動(dòng))的時(shí)候發(fā)起調(diào)用,也可以在應(yīng)用的某個(gè)功能項(xiàng)啟動(dòng) (比如在快銷品應(yīng)用中,點(diǎn)擊打印按鈕啟動(dòng)發(fā)票打印功能)的時(shí)候發(fā)起調(diào)用。步驟22判斷是否有原有連接的信息。在收到上層查詢可用的虛擬串口的請(qǐng)求后,首先要確定系統(tǒng)中是否曾經(jīng)成功安裝過(guò)藍(lán)牙串口設(shè)備,這個(gè)設(shè)備是否當(dāng)前仍然可用。這帶來(lái)兩個(gè)好處1.如果設(shè)備仍然可以,可以快速獲得一個(gè)可用設(shè)備;2.如果設(shè)備已經(jīng)不可用,可以徹底刪除其相關(guān)信息,保證不影響對(duì)新設(shè)備安裝的影響。本步驟采用如下方法判斷是否有原有連接的信息1.對(duì)于由本實(shí)施方案安裝的藍(lán)牙串口設(shè)備,將其相關(guān)信息保存在注冊(cè)表中(當(dāng)然也可以保存在文件中),通過(guò)在注冊(cè)表中查詢是否有這些信息就可進(jìn)行判斷;2.當(dāng)1中描述的信息不存在時(shí),我們會(huì)再直接搜索操作系統(tǒng)中預(yù)定義的藍(lán)牙串口設(shè)備相關(guān)的注冊(cè)表項(xiàng),通過(guò)這些注冊(cè)表項(xiàng)的存在情況來(lái)進(jìn)行判斷。如果這些信息都不存在,就直接跳轉(zhuǎn)至步驟沈,否則順序執(zhí)行下面的步驟23。步驟23讀取原有連接的信息并檢測(cè)其有效性。直接從注冊(cè)表(或文件)中讀取原有連接的信息進(jìn)行檢測(cè)。首先,檢測(cè)原來(lái)的虛擬串口是否仍然可用通過(guò)是否可成功打開再關(guān)閉該虛擬串口來(lái)判斷;如果不可用,則檢測(cè)原來(lái)的藍(lán)牙串口設(shè)備的連接是否可用,如果可用則采用步驟觀的方式重新為其創(chuàng)建虛擬串口并更新相關(guān)的信息,否則標(biāo)識(shí)原有連接失效。這個(gè)過(guò)程可以根據(jù)實(shí)際情況進(jìn)行一定次數(shù)的重試。步驟M判斷原有連接是否可用。根據(jù)步驟23的標(biāo)識(shí)進(jìn)行判斷,如果原有連接仍然可用則直接跳轉(zhuǎn)至步驟210,否則順序執(zhí)行下面的步驟25。步驟25銷毀原有連接并刪除相關(guān)信息。銷毀原有連接包括兩步1.卸載原來(lái)使用的虛擬串口 ;2.卸載原來(lái)使用的藍(lán)牙串口設(shè)備的藍(lán)牙連接。刪除相關(guān)信息即刪除步驟22中描述的與此連接相關(guān)的注冊(cè)表項(xiàng)(或文件)信息。步驟沈開啟本地藍(lán)牙功能并搜索可用的藍(lán)牙設(shè)備,配對(duì)并獲取RFCOMM通道。本步驟所做的工作是本實(shí)施方案的核心。具體包括如下內(nèi)容
8
1.獲取本地藍(lán)牙狀態(tài),如果處于關(guān)閉狀態(tài)則強(qiáng)制其打開。2.調(diào)用操作系統(tǒng)藍(lán)牙技術(shù)架構(gòu)提供的API-—WSALookupServiceBegin啟動(dòng)一個(gè)搜索過(guò)程它會(huì)初始化對(duì)藍(lán)牙客戶端的搜索并返回一個(gè)句柄。3.調(diào)用WSALookupServiceNext,會(huì)依次獲得被搜索到的藍(lán)牙設(shè)備的信息,包括該設(shè)備的名稱和地址。4.將該設(shè)備的名稱與預(yù)先設(shè)定的設(shè)備名稱進(jìn)行比對(duì),如果一致則調(diào)用 BthPairRequest進(jìn)行配對(duì),配對(duì)時(shí)需要提供藍(lán)牙設(shè)備的配對(duì)識(shí)別碼(PIN)。由于很多藍(lán)牙設(shè)備客戶端都沒(méi)有輸入,因而這個(gè)配對(duì)識(shí)別碼也都是預(yù)先設(shè)定的。為了靈活支持多種設(shè)備, 本實(shí)施方案采用注冊(cè)表(或文件)來(lái)保存一系列的設(shè)備名稱和配對(duì)識(shí)別碼,在進(jìn)行設(shè)備搜索和配對(duì)時(shí)依次進(jìn)行比對(duì)。5.當(dāng)配對(duì)成功后,還需要確認(rèn)這個(gè)藍(lán)牙設(shè)備是否是一個(gè)串口設(shè)備本實(shí)施方案通過(guò)調(diào)用BthNsLookupServiceBegin和BthNsLookupServiceNext來(lái)搜索這個(gè)藍(lán)牙設(shè)備支持的服務(wù),在搜索結(jié)果返回的數(shù)據(jù)中獲取RFCOMM通道,如果可成功獲得則表明這是一個(gè)有效的藍(lán)牙串口設(shè)備,調(diào)用BthNsLookupServiceEnd結(jié)束服務(wù)搜索。6.重復(fù)上述第3步到第5步,直到獲得一個(gè)有效的藍(lán)牙串口設(shè)備連接,或者已經(jīng)搜索完所有設(shè)備。調(diào)用WSALookupServiceEnd停止整個(gè)搜索過(guò)程。步驟27判斷是否有可用的藍(lán)牙串口設(shè)備。根據(jù)步驟沈的搜索結(jié)果進(jìn)行判斷。如果有可用的藍(lán)牙串口設(shè)備則繼續(xù)執(zhí)行下面的步驟28,否則直接跳轉(zhuǎn)至步驟214。步驟28搜索系統(tǒng)中可用的串口號(hào),并為可用的藍(lán)牙串口設(shè)備創(chuàng)建虛擬串口。本步驟所做的工作也是本實(shí)施方案中比較重要的部分。具體包括如下內(nèi)容1.搜索系統(tǒng)中可用的串口號(hào)包含三部分a.本實(shí)施方案會(huì)自行定義一個(gè)注冊(cè)表項(xiàng)(或一個(gè)配置文件)用來(lái)記錄可進(jìn)行嘗試的串口號(hào),搜索時(shí)首先嘗試加載這些串口作為虛擬串口 ;b.操作系統(tǒng)的藍(lán)牙技術(shù)架構(gòu)也提供了一個(gè)注冊(cè)表項(xiàng)用于記錄藍(lán)牙設(shè)備可用串口號(hào),但并不能確保所有的嵌入式設(shè)備都已經(jīng)正確定義了這個(gè)注冊(cè)表項(xiàng),因此本實(shí)施方案會(huì)在a失敗后再嘗試加載這個(gè)注冊(cè)表項(xiàng)提供的串口作為虛擬串口 ;c.如果a、b均未成功, 則會(huì)依次對(duì)系統(tǒng)中支持的所有串口號(hào)進(jìn)行嘗試。2.如果1中的某次嘗試成功,也就意味著相應(yīng)的虛擬串口已經(jīng)創(chuàng)建成功,本實(shí)施方案通過(guò)是否可成功打開再關(guān)閉該虛擬串口來(lái)進(jìn)一步檢測(cè)其有效性。步驟四判斷虛擬串口是否創(chuàng)建成功并可用。通過(guò)步驟觀的操作結(jié)果進(jìn)行判斷。如果獲得了可用的虛擬串口則繼續(xù)執(zhí)行下面的步驟210,否則直接跳轉(zhuǎn)至步驟214。步驟210返回虛擬串口號(hào)并保存當(dāng)前連接的相關(guān)信息。將步驟23或步驟觀中獲取的有效虛擬串口號(hào)返回給上層應(yīng)用,并保存相關(guān)的信肩、ο 步驟211監(jiān)控藍(lán)牙串口設(shè)備的連接狀態(tài)。 到達(dá)此步驟,表明已經(jīng)成功地按照了一個(gè)藍(lán)牙串口設(shè)備,并已將相應(yīng)的虛擬串口號(hào)返回給上層應(yīng)用。本步驟創(chuàng)建一個(gè)獨(dú)立的線程對(duì)當(dāng)前藍(lán)牙串口設(shè)備連接的有效性進(jìn)行實(shí)時(shí)監(jiān)控,及時(shí)修復(fù)連接意外中斷的情況,具體包括1.創(chuàng)建一個(gè)消息隊(duì)列;2.調(diào)用操作系
9統(tǒng)藍(lán)牙技術(shù)架構(gòu)提供的API-—RequestBluetoothNotifications來(lái)設(shè)置需要關(guān)注的藍(lán)牙狀態(tài),,當(dāng)這些狀態(tài)發(fā)生改變時(shí),相應(yīng)的消息就會(huì)進(jìn)入消息隊(duì)列;3.等待來(lái)自消息隊(duì)列的通知;4.通過(guò)對(duì)通知消息的分析來(lái)確定藍(lán)牙連接的狀態(tài)。步驟212判斷連接是否有效。通過(guò)步驟211中對(duì)藍(lán)牙連接的通知消息的分析來(lái)判斷。這個(gè)過(guò)程中,要注意判斷連接中斷是否只是暫時(shí)的,比如藍(lán)牙設(shè)備偶然離開了有效連接范圍,但很快又回來(lái)。本實(shí)施方案采用延時(shí)等待來(lái)處理這種情況,以避免誤判。當(dāng)連接依然有效時(shí),會(huì)返回步驟211繼續(xù)監(jiān)控消息隊(duì)列的通知;如果連接不再有效,則繼續(xù)執(zhí)行下面的步驟213。步驟213通知應(yīng)用停止使用當(dāng)前虛擬串口并銷毀當(dāng)前連接。當(dāng)確認(rèn)當(dāng)前的藍(lán)牙連接無(wú)效后,監(jiān)控線程會(huì)通過(guò)設(shè)置預(yù)定的事件立即通知上層應(yīng)用停止使用當(dāng)前虛擬串口,然后通過(guò)如下工作銷毀當(dāng)前連接1.卸載當(dāng)前虛擬串口;2.卸載當(dāng)前使用的藍(lán)牙串口設(shè)備的藍(lán)牙連接;3.刪除步驟210中保持的與此連接相關(guān)的注冊(cè)表項(xiàng)(或文件)信息。這些工作完成后會(huì)直接跳轉(zhuǎn)回步驟26,重新建立新的藍(lán)牙連接和虛擬串口,完成自動(dòng)修復(fù)。步驟214返回失敗,并終止操作。當(dāng)搜索不到藍(lán)牙設(shè)備,或沒(méi)有可用串口,無(wú)法創(chuàng)建虛擬串口時(shí)就只能執(zhí)行這一步驟了。值得注意的是,對(duì)藍(lán)牙設(shè)備、虛擬串口的搜索與創(chuàng)建,都可進(jìn)行多次嘗試,以提高成功的概率。在此指明,以上敘述有助于本領(lǐng)域技術(shù)人員理解本發(fā)明創(chuàng)造,但并非限制本發(fā)明創(chuàng)造的保護(hù)范圍。任何沒(méi)有脫離本發(fā)明創(chuàng)造實(shí)質(zhì)內(nèi)容的對(duì)以上敘述的等同替換、修飾改進(jìn)和/或刪繁從簡(jiǎn)而進(jìn)行的實(shí)施,均落入本發(fā)明創(chuàng)造的保護(hù)范圍。
10
權(quán)利要求
1.一種自動(dòng)安裝藍(lán)牙串口設(shè)備的方法,用于在基于Windows Mobile或Windows CE操作系統(tǒng)的嵌入式設(shè)備或移動(dòng)終端上自動(dòng)安裝藍(lán)牙串口設(shè)備,其特征在于,包括以下步驟①在所述嵌入式設(shè)備或移動(dòng)終端上,開啟本地藍(lán)牙功能,啟動(dòng)對(duì)可用藍(lán)牙設(shè)備的搜索 對(duì)于搜索到的可用藍(lán)牙設(shè)備逐一與預(yù)設(shè)名稱進(jìn)行比對(duì),直到找到匹配的預(yù)設(shè)名稱,獲取所述可用藍(lán)牙設(shè)備的地址,然后配對(duì)并獲取該可用藍(lán)牙設(shè)備的RFCOMM通道號(hào);②搜索系統(tǒng)中可供使用的串口號(hào),然后基于所述可用藍(lán)設(shè)備的地址和RFCOMM通道號(hào)為其創(chuàng)建虛擬串口,并將相應(yīng)的虛擬串口號(hào)返回給上層應(yīng)用,表明已經(jīng)成功地安裝了一個(gè)安裝藍(lán)牙串口設(shè)備,直接為上層應(yīng)用提供有效操作目標(biāo)藍(lán)牙串口設(shè)備的虛擬串口。
2.根據(jù)權(quán)利要求1所述的自動(dòng)安裝藍(lán)牙串口設(shè)備的方法,其特征在于,還包括步驟③, 啟動(dòng)一個(gè)監(jiān)控線程,實(shí)時(shí)監(jiān)測(cè)當(dāng)前藍(lán)牙串口設(shè)備連接的有效性,一旦連接斷開,則卸載相應(yīng)虛擬串口并銷毀當(dāng)前藍(lán)牙串口設(shè)備,同時(shí)通知上層應(yīng)用,返回步驟①重新搜索可用藍(lán)牙設(shè)備,以完成自動(dòng)修復(fù)。
3.根據(jù)權(quán)利要求2所述的自動(dòng)安裝藍(lán)牙串口設(shè)備的方法,其特征在于,所述監(jiān)控線程, 是指創(chuàng)建的一個(gè)獨(dú)立線程,具體包括創(chuàng)建一個(gè)消息隊(duì)列;調(diào)用操作系統(tǒng)藍(lán)牙技術(shù)架構(gòu)提供的API-—RequestBluetoothNotifications來(lái)設(shè)置需要關(guān)注的藍(lán)牙狀態(tài),當(dāng)這些狀態(tài)發(fā)生改變時(shí),相應(yīng)的消息就會(huì)進(jìn)入消息隊(duì)列;等待來(lái)自消息隊(duì)列的通知;通過(guò)對(duì)通知消息的分析來(lái)確定藍(lán)牙連接的狀態(tài)。
4.根據(jù)權(quán)利要求1所述的自動(dòng)安裝藍(lán)牙串口設(shè)備的方法,其特征在于,所述連接斷開的判斷,包括采用延時(shí)等待的方式來(lái)處理只是暫時(shí)連接中斷、但連接將恢復(fù)依然有效的情況,以避免誤判。
5.根據(jù)權(quán)利要求1所述的自動(dòng)安裝藍(lán)牙串口設(shè)備的方法,其特征在于, 所述啟動(dòng)對(duì)可用藍(lán)牙設(shè)備的搜索,包括調(diào)用操作系統(tǒng)藍(lán)牙技術(shù)架構(gòu)提供的 API-—WSALookupServiceBegin啟動(dòng)一個(gè)搜索過(guò)程它會(huì)初始化對(duì)藍(lán)牙客戶端的搜索并返回一個(gè)句柄;調(diào)用WSALookupServiceNext,它會(huì)依次獲得被搜索到的可用藍(lán)牙設(shè)備的信息,包括該設(shè)備的名稱和地址;所述配對(duì),調(diào)用Bthl^airRequest進(jìn)行配對(duì),配對(duì)時(shí)需要提供藍(lán)牙設(shè)備的配對(duì)識(shí)別碼PIN ;采用以下方式確認(rèn)可用藍(lán)牙設(shè)備是否是一個(gè)藍(lán)牙串口設(shè)備 通過(guò)調(diào)用BthNsLookupServiceBegin和BthNsLookupServiceNext來(lái)搜索這個(gè)藍(lán)牙設(shè)備支持的服務(wù),在搜索結(jié)果返回的數(shù)據(jù)中獲取RFCOMM通道,如果成功獲得則表明這是一個(gè)有效的藍(lán)牙串口設(shè)備,調(diào)用BthNsLookupServiceEnd結(jié)束服務(wù)搜索;調(diào)用WSALookupServiceEnd 停止整個(gè)搜索過(guò)程。
6.一種自動(dòng)安裝藍(lán)牙串口設(shè)備的方法,適用于基于Windows Mobile或Windows CE操作系統(tǒng)的嵌入式設(shè)備和移動(dòng)終端,其特征在于,包括如下步驟A.啟動(dòng)需要使用虛擬串口的上層應(yīng)用,發(fā)起獲取有效虛擬串口的請(qǐng)求;B.檢測(cè)系統(tǒng)中是否有曾經(jīng)被成功使用過(guò)的虛擬串口和藍(lán)牙串口設(shè)備,如果有則繼續(xù)步驟C,否則跳至步驟D ;C.獲取保存的原有虛擬串口和藍(lán)牙串口設(shè)備的信息,并檢測(cè)其有效性。如果仍然可用, 則返回有效的虛擬串口號(hào),跳至步驟F;如果原有連接已經(jīng)不可用,則卸載原有虛擬串口并銷毀原有藍(lán)牙串口設(shè)備,繼續(xù)步驟D ;D.開啟本地藍(lán)牙功能,啟動(dòng)對(duì)可用藍(lán)牙設(shè)備的搜索對(duì)于搜索到的可用藍(lán)牙設(shè)備逐一與預(yù)設(shè)名稱進(jìn)行比對(duì),直到名稱匹配,獲取該可用藍(lán)牙設(shè)備的地址,然后配對(duì)并獲取該可用藍(lán)牙設(shè)備的RFCOMM通道號(hào);E.搜索系統(tǒng)中可供使用的串口號(hào),然后基于可用藍(lán)牙串口設(shè)備的地址和RFCOMM通道號(hào)為其創(chuàng)建虛擬串口,如果成功則返回有效的虛擬串口號(hào),并將所述地址和RFCOMM通道號(hào)信息進(jìn)行保存;否則返回失敗信息,結(jié)束操作;F.啟動(dòng)一個(gè)監(jiān)控線程,實(shí)時(shí)監(jiān)測(cè)當(dāng)前藍(lán)牙設(shè)備連接的有效性,一旦連接斷開,則卸載相應(yīng)虛擬串口并銷毀當(dāng)前藍(lán)牙設(shè)備,同時(shí)通知上層應(yīng)用,返回步驟D重新搜索可用藍(lán)牙設(shè)備。
7.根據(jù)權(quán)利要求6所述的自動(dòng)安裝藍(lán)牙串口設(shè)備的方法,其特征在于,所述藍(lán)牙串口設(shè)備,是指所有能夠通過(guò)串口操作的藍(lán)牙客戶端設(shè)備。
8.根據(jù)權(quán)利要求6所述的自動(dòng)安裝藍(lán)牙串口設(shè)備的方法,其特征在于,所述步驟B中所述檢測(cè)系統(tǒng)中是否有曾經(jīng)被成功使用過(guò)的虛擬串口和藍(lán)牙串口設(shè)備,是通過(guò)檢測(cè)自定義的注冊(cè)表項(xiàng)或文件,和操作系統(tǒng)預(yù)定義的注冊(cè)表項(xiàng)來(lái)完成的。
9.根據(jù)權(quán)利要求6所述的自動(dòng)安裝藍(lán)牙串口設(shè)備的方法,其特征在于,所述步驟D,藍(lán)牙設(shè)備的名稱和配對(duì)碼被保存在注冊(cè)表項(xiàng)或文件中,能夠支持多組名稱和配對(duì)碼,并能夠獨(dú)立于實(shí)現(xiàn)代碼修改;也能夠直接編寫在實(shí)現(xiàn)代碼里不能獨(dú)立于實(shí)現(xiàn)代碼修改。
10.根據(jù)權(quán)利要求6所述的自動(dòng)安裝藍(lán)牙串口設(shè)備的方法,其特征在于,所述步驟E中所述可供使用的串口號(hào),被保存在注冊(cè)表項(xiàng)或文件中,能夠有多個(gè)串口號(hào),并能夠獨(dú)立于實(shí)現(xiàn)代碼修改;也能夠直接編寫在實(shí)現(xiàn)代碼里不能獨(dú)立于實(shí)現(xiàn)代碼修改;所述步驟F,對(duì)藍(lán)牙設(shè)備連接的有效性的監(jiān)測(cè)是通過(guò)響應(yīng)消息隊(duì)列中的藍(lán)牙狀態(tài)通知實(shí)現(xiàn)的。
全文摘要
一種自動(dòng)安裝藍(lán)牙串口設(shè)備的方法,該方法用于在基于Windows Mobile或Windows CE操作系統(tǒng)的嵌入式設(shè)備或移動(dòng)終端上自動(dòng)安裝藍(lán)牙串口設(shè)備,包括以下步驟①在所述嵌入式設(shè)備或移動(dòng)終端上,開啟本地藍(lán)牙功能,啟動(dòng)對(duì)可用藍(lán)牙設(shè)備的搜索對(duì)于搜索到的可用藍(lán)牙設(shè)備逐一與預(yù)設(shè)名稱進(jìn)行比對(duì),直到找到匹配的預(yù)設(shè)名稱,獲取所述可用藍(lán)牙設(shè)備的地址,然后配對(duì)并獲取該可用藍(lán)牙設(shè)備的RFCOMM通道號(hào);②搜索系統(tǒng)中可供使用的串口號(hào),然后基于所述可用藍(lán)設(shè)備的地址和RFCOMM通道號(hào)為其創(chuàng)建虛擬串口,并將相應(yīng)的虛擬串口號(hào)返回給上層應(yīng)用,表明已經(jīng)成功地安裝了一個(gè)安裝藍(lán)牙串口設(shè)備,直接為上層應(yīng)用提供有效操作目標(biāo)藍(lán)牙串口設(shè)備的虛擬串口。
文檔編號(hào)H04M1/725GK102394942SQ20111022554
公開日2012年3月28日 申請(qǐng)日期2011年8月8日 優(yōu)先權(quán)日2011年8月8日
發(fā)明者楊艷紅 申請(qǐng)人:北京登合科技有限公司