專利名稱:虛擬rs232接口的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)傳輸?shù)姆椒?,特別是涉及一種在應(yīng)用接口層提供兩個(gè)虛擬的RS232接口訪問同一個(gè)物理的RS232接口的數(shù)據(jù)傳輸方法。
背景技術(shù):
很多成熟的電子設(shè)備的RS232接口可以傳輸不同的數(shù)據(jù),進(jìn)行不同的處理,但它提供的RS232接口數(shù)量少于該電子設(shè)備的RS232接口功能。例如,車載多媒體系統(tǒng)有一個(gè)GSM模塊,它為系統(tǒng)提供無線上網(wǎng)和車載電話的通信功能。若要求車載多媒體系統(tǒng)使用無線上網(wǎng)的同時(shí),也可使用車載電話,這就要求提供這兩項(xiàng)通信功能的GSM模塊至少提供兩個(gè)RS232接口同時(shí)供系統(tǒng)上網(wǎng)和車載電話使用。但實(shí)際上各種車載多媒體設(shè)備中,幾乎所有的GSM模塊只提供了一個(gè)RS232接口。這就意味著用戶在上網(wǎng)時(shí)不能接撥電話,或者用戶在接撥電話時(shí)不能上網(wǎng)。
發(fā)明內(nèi)容
本發(fā)明旨在提供一種可在一個(gè)RS232接口的基礎(chǔ)之上,虛擬出兩個(gè)RS232接口,實(shí)現(xiàn)在應(yīng)用接口層提供兩個(gè)虛擬的RS232接口訪問同一個(gè)物理的RS232接口的虛擬RS232接口的方法。
本發(fā)明的技術(shù)方案是虛擬RS232接口的方法,包括上層應(yīng)用通過兩個(gè)虛擬RS232接口經(jīng)由一個(gè)物理RS232接口向外發(fā)送數(shù)據(jù)的過程和一個(gè)物理RS232接口接收數(shù)據(jù)分配到兩個(gè)虛擬RS232接口之一提交上層應(yīng)用的過程;上述兩個(gè)過程共同使用一個(gè)數(shù)據(jù)協(xié)議規(guī)定所傳送數(shù)據(jù)的格式及區(qū)分該數(shù)據(jù)涉及兩個(gè)虛擬RS232接口中哪一個(gè)的方式。
上層應(yīng)用通過兩個(gè)虛擬RS232接口經(jīng)由一個(gè)物理RS232接口向外發(fā)送數(shù)據(jù)的過程包含步驟A.兩個(gè)虛擬RS232接口中的任何一方接收上層應(yīng)用提交的待發(fā)送的數(shù)據(jù);步驟B.待發(fā)送的數(shù)據(jù)按上述數(shù)據(jù)協(xié)議打包,并添加到屬于本虛擬RS232接口的數(shù)據(jù)發(fā)送隊(duì)列中;步驟C.調(diào)用物理RS232接口驅(qū)動(dòng)程序,由物理RS232接口向外發(fā)送屬于本虛擬RS232接口的數(shù)據(jù)發(fā)送隊(duì)列中的數(shù)據(jù)包。
一個(gè)物理RS232接口接收數(shù)據(jù)分配到兩個(gè)虛擬RS232接口之一提交上層應(yīng)用的過程包含步驟D.調(diào)用物理RS232接口驅(qū)動(dòng)程序,由物理RS232接口讀入一個(gè)數(shù)據(jù)包;步驟E.按上述數(shù)據(jù)協(xié)議判斷該數(shù)據(jù)包屬于哪一個(gè)虛擬RS232接口;步驟F.按上述數(shù)據(jù)協(xié)議將該數(shù)據(jù)包解包,并將該數(shù)據(jù)包中的數(shù)據(jù)內(nèi)容放置到相應(yīng)虛擬RS232接口的數(shù)據(jù)緩沖區(qū);步驟G.通知上層應(yīng)用提取相應(yīng)虛擬RS232接口的數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)內(nèi)容。
為保證優(yōu)先權(quán)高的虛擬RS232接口的數(shù)據(jù)發(fā)送隊(duì)列中的數(shù)據(jù)能及時(shí)發(fā)出在執(zhí)行所述的步驟C之前,要先檢查優(yōu)先權(quán)高的虛擬RS232接口的數(shù)據(jù)發(fā)送隊(duì)列中是否有數(shù)據(jù)要發(fā)送,有則執(zhí)行步驟C向外發(fā)送屬于優(yōu)先權(quán)高的虛擬RS232接口的數(shù)據(jù)發(fā)送隊(duì)列中的數(shù)據(jù)包;否則執(zhí)行步驟C向外發(fā)送屬于優(yōu)先權(quán)較低的虛擬RS232接口的數(shù)據(jù)發(fā)送隊(duì)列中的數(shù)據(jù)包。
特別是所述的虛擬RS232接口的方法還包括上層應(yīng)用通過兩個(gè)虛擬RS232接口與一個(gè)物理RS232接口交換控制信息的規(guī)定,其中兩個(gè)虛擬RS232接口與一個(gè)物理RS232接口的波特率為固定值,上層應(yīng)用調(diào)用設(shè)置串行口的波特率命令不被執(zhí)行,上層應(yīng)用調(diào)用獲取串行口的波特率命令只能得到該固定值;上層應(yīng)用調(diào)用置DTR信號(hào)有效命令和置RTS信號(hào)有效命令除在物理RS232接口驅(qū)動(dòng)程序初始化時(shí)只被執(zhí)行一次,而其它情況下均執(zhí)行上述調(diào)用命令直接置物理RS232接口的對(duì)應(yīng)信號(hào)位有效;上層應(yīng)用調(diào)用置DTR信號(hào)無效命令和置RTS信號(hào)無效命令直接置物理RS232接口的對(duì)應(yīng)信號(hào)位無效;上層應(yīng)用調(diào)用設(shè)置XOFF命令和設(shè)置XON命令不被執(zhí)行;上層應(yīng)用調(diào)用設(shè)置流控信息命令,對(duì)應(yīng)的流控信息將被存入物理RS232接口驅(qū)動(dòng)程序的緩沖區(qū)中;上層應(yīng)用調(diào)用獲取流控信息命令,將從物理RS232接口驅(qū)動(dòng)程序的緩沖區(qū)中取得采用的流控信息;上層應(yīng)用調(diào)用獲取握手信號(hào)狀態(tài)命令,將直接讀取物理RS232接口的DTR、RTS信號(hào)后返回。
一種推薦的數(shù)據(jù)協(xié)議規(guī)定數(shù)據(jù)包的第一個(gè)字節(jié)為幀頭,最后一個(gè)字節(jié)為幀尾,第二和第三個(gè)字節(jié)為幀長度,第四個(gè)字節(jié)為數(shù)據(jù)類型即屬于哪一個(gè)虛擬RS232接口,然后是數(shù)據(jù)內(nèi)容,倒數(shù)第五至倒數(shù)第二個(gè)字節(jié)為校驗(yàn)碼,最后一個(gè)字節(jié)為幀尾。
本發(fā)明虛擬RS232接口的方法,依據(jù)一個(gè)數(shù)據(jù)協(xié)議以軟件產(chǎn)生兩個(gè)虛擬RS232接口經(jīng)由一個(gè)物理RS232接口向外發(fā)送上層應(yīng)用提交數(shù)據(jù)和從一個(gè)物理RS232接口接收數(shù)據(jù)分配到兩個(gè)虛擬RS232接口之一提交上層應(yīng)用。在不改變電子設(shè)備的硬件配置的前提下,就可達(dá)到增加RS232接口數(shù)量的效果,改進(jìn)電子設(shè)備的功能,提高使用效率。它具有兩個(gè)虛擬RS232接口的數(shù)據(jù)發(fā)送優(yōu)先權(quán)處理和兩個(gè)虛擬RS232接口與物理RS232接口控制信息交換的能力,上層應(yīng)用完全可以不考慮虛擬RS232接口的存在,透明地與物理RS232接口交換數(shù)據(jù)和控制信息,因此上層應(yīng)用不需要作任何修改。使改進(jìn)電子設(shè)備的功能、提高使用效率的軟件開發(fā)風(fēng)險(xiǎn)小,簡單易行。使用者察覺不出兩個(gè)虛擬RS232接口的存在,就像獨(dú)占物理RS232接口一樣。
圖1為本發(fā)明虛擬RS232接口的方法一個(gè)實(shí)施例的虛擬RS232接口驅(qū)動(dòng)程序的體系結(jié)構(gòu)圖。
圖2為圖1實(shí)施例的虛擬RS232接口驅(qū)動(dòng)程序的數(shù)據(jù)發(fā)送處理流程圖。
圖3為圖1實(shí)施例的虛擬RS232接口驅(qū)動(dòng)程序的數(shù)據(jù)發(fā)送中斷處理流程圖。
圖4為圖1實(shí)施例的虛擬RS232接口驅(qū)動(dòng)程序的數(shù)據(jù)接收處理流程圖。
具體實(shí)施例本發(fā)明虛擬RS232接口的方法用于車載多媒體系統(tǒng)。
該車載多媒體系統(tǒng)有一個(gè)GSM模塊,它為系統(tǒng)提供無線上網(wǎng)和車載電話的通信功能。但它的GSM模塊只提供了一個(gè)物理的RS232接口。若要求車載多媒體系統(tǒng)使用無線上網(wǎng)的同時(shí),也可使用車載電話,解決的辦法是在使用這個(gè)物理RS232接口的前提下,上網(wǎng)應(yīng)用對(duì)應(yīng)一個(gè)虛擬RS232接口,傳送各種網(wǎng)絡(luò)應(yīng)用相關(guān)的數(shù)據(jù)流;車載電話應(yīng)用對(duì)應(yīng)另一個(gè)虛擬RS232接口,傳送車載電話AT指令數(shù)據(jù)。具體的作法是在該車載多媒體系統(tǒng)的軟件操作系統(tǒng)中加入一個(gè)虛擬RS232接口的驅(qū)動(dòng)程序,這個(gè)虛擬RS232接口驅(qū)動(dòng)程序的體系結(jié)構(gòu)如圖1所示。圖中虛線框內(nèi)是虛擬RS232接口的驅(qū)動(dòng)程序。
物理RS232接口1經(jīng)過物理RS232接口驅(qū)動(dòng)程序2與虛擬RS232驅(qū)動(dòng)程序3交換數(shù)據(jù)。虛擬RS232驅(qū)動(dòng)程序3在應(yīng)用接口層提供了兩個(gè)RS232應(yīng)具有的接口,第一個(gè)虛擬RS232接口31面向上網(wǎng)應(yīng)用41,第二個(gè)虛擬RS232接口32面向車載電話應(yīng)用42。虛擬RS232驅(qū)動(dòng)程序3中內(nèi)含一個(gè)特定的數(shù)據(jù)協(xié)議33,數(shù)據(jù)協(xié)議33規(guī)定所傳送數(shù)據(jù)的格式及區(qū)分該數(shù)據(jù)涉及兩個(gè)虛擬RS232接口中哪一個(gè)的方式。虛擬RS232驅(qū)動(dòng)程序3的物理訪問模塊34在物理訪問層通過對(duì)物理RS232驅(qū)動(dòng)程序2的訪問,從物理RS232接口1獲取數(shù)據(jù)流,并依據(jù)數(shù)據(jù)協(xié)議33將數(shù)據(jù)流分為兩類,分別解包成數(shù)據(jù)組發(fā)送到不同的虛擬RS232接口31、32。虛擬RS232驅(qū)動(dòng)程序3的物理訪問模塊34從不同的虛擬RS232接口31、32接收數(shù)據(jù)組,并依據(jù)數(shù)據(jù)協(xié)議33將數(shù)據(jù)組打包進(jìn)而通過對(duì)物理RS232驅(qū)動(dòng)程序2的訪問,向物理RS232接口1發(fā)送數(shù)據(jù)流。
上層應(yīng)用通過虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32可與物理RS232接口1交換的控制信息,如表1所示。
表1.物理RS232接口的控制信息下面對(duì)于虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32對(duì)上層應(yīng)用程序開放的接口控制命令,分別加以說明。
IOCTL_SERIAL_SET_BAUD_RATE設(shè)置串行口的波特率。因?yàn)閮蓚€(gè)虛擬接口31、32對(duì)應(yīng)的是同一個(gè)物理RS232接口1,因此虛擬RS232接口的驅(qū)動(dòng)程序3中把物理RS232接口1的波特率直接設(shè)置為115200,當(dāng)上層應(yīng)用程序?qū)μ摂MRS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32調(diào)用IOCTL_SERIAL_SET_BAUD_RATE接口控制命令時(shí),虛擬RS232接口的驅(qū)動(dòng)程序3不做任何處理。
IOCTL_SERIAL_GET_BAUD_RATE獲取串行口的波特率。與IOCTL_SERIAL_SET_BAUD_RATE接口控制命令相呼應(yīng),當(dāng)上層應(yīng)用對(duì)虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32調(diào)用該接口控制命令時(shí),虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32均返回115200。
IOCTL_SERIAL_SET_DTR置DTR信號(hào)有效。當(dāng)物理RS232接口驅(qū)動(dòng)程序2初始化過程中,上層應(yīng)用第一次對(duì)虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32調(diào)用該接口控制命令時(shí),虛擬RS232接口的驅(qū)動(dòng)程序3直接設(shè)置物理RS232接口1的DTR信號(hào)有效,上層應(yīng)用第二次對(duì)虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32調(diào)用該接口控制命令時(shí),虛擬RS232接口的驅(qū)動(dòng)程序3不做任何處理;而在其它情況下,上層應(yīng)用第一次對(duì)虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32調(diào)用該接口控制命令時(shí),虛擬RS232接口的驅(qū)動(dòng)程序3直接設(shè)置物理RS232接口1的DTR信號(hào)有效。
IOCTL_SERIAL_CLR_DTR置DTR信號(hào)無效。當(dāng)上層應(yīng)用對(duì)虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32調(diào)用該接口控制命令時(shí),虛擬RS232接口的驅(qū)動(dòng)程序3直接設(shè)置物理RS232接口1的DTR信號(hào)無效。
IOCTL_SERIAL_SET_RTS置RTS信號(hào)有效。當(dāng)物理RS232接口驅(qū)動(dòng)程序2初始化過程中,上層應(yīng)用第一次對(duì)虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32調(diào)用該接口控制命令時(shí),虛擬RS232接口的驅(qū)動(dòng)程序3直接設(shè)置物理RS232接口1的RTS信號(hào)有效,上層應(yīng)用第二次對(duì)虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32調(diào)用該接口控制命令時(shí),虛擬RS232接口的驅(qū)動(dòng)程序3不做任何處理;而在其它情況下,上層應(yīng)用第一次對(duì)虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32調(diào)用該接口控制命令時(shí),虛擬RS232接口的驅(qū)動(dòng)程序3直接設(shè)置物理RS232接口1的RTS信號(hào)有效。
IOCTL_SERIAL_CLR_RTS置RTS信號(hào)無效。當(dāng)上層應(yīng)用對(duì)虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32調(diào)用該接口控制命令時(shí),虛擬RS232接口的驅(qū)動(dòng)程序3直接設(shè)置物理RS232接口1的DTR信號(hào)無效。
IOCTL_SERIAL_SET_XON在本實(shí)施例中,不采用軟流控機(jī)制,因此當(dāng)上層應(yīng)用對(duì)虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32調(diào)用該接口控制命令時(shí),虛擬RS232接口的驅(qū)動(dòng)程序3不做任何處理。
IOCTL_SERIAL_SET_XOFF在本實(shí)施例中,不采用軟流控機(jī)制,因此當(dāng)上層應(yīng)用對(duì)虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32調(diào)用該接口控制命令時(shí),虛擬RS232接口的驅(qū)動(dòng)程序3不做任何處理。
IOCTL_SERIAL_SET_HANDFLOW設(shè)置采用的流控機(jī)制。本實(shí)施例中,采用的是硬件流控機(jī)制,當(dāng)上層應(yīng)用對(duì)虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32調(diào)用該接口控制命令時(shí),虛擬RS232接口的驅(qū)動(dòng)程序3將對(duì)應(yīng)的流控信息存入物理RS232接口驅(qū)動(dòng)程序2的緩沖區(qū)中。
IOCTL_SERIAL_GET_HANDFLOW獲取采用的流控機(jī)制。當(dāng)上層應(yīng)用對(duì)虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32調(diào)用該接口控制命令時(shí),虛擬RS232接口的驅(qū)動(dòng)程序3將從物理RS232接口驅(qū)動(dòng)程序的緩沖區(qū)中取得采用的流控信息通過被調(diào)用的虛擬RS232接口31或虛擬RS232接口32回送。
IOCTL_SERIAL_GET_DTRRTS獲取DTR、RTS信號(hào)的狀態(tài)。當(dāng)上層應(yīng)用對(duì)虛擬RS232接口的驅(qū)動(dòng)程序3的兩個(gè)虛擬RS232接口31、32調(diào)用該接口控制命令時(shí),虛擬RS232接口的驅(qū)動(dòng)程序3直接讀取物理RS232接口1的DTR、RTS信號(hào)后返回通過被調(diào)用的虛擬RS232接口31或虛擬RS232接口32回送。
數(shù)據(jù)協(xié)議33規(guī)定所傳送數(shù)據(jù)幀格式如表2所示。
表2傳輸數(shù)據(jù)的幀格式其中幀頭、幀尾均為0x7e;幀長度除去幀頭幀尾后數(shù)據(jù)幀的字節(jié)數(shù);數(shù)據(jù)類型0x01表示上網(wǎng)應(yīng)用的數(shù)據(jù)流;0x02表示車載電話應(yīng)用的數(shù)據(jù)流;數(shù)據(jù)內(nèi)容上網(wǎng)數(shù)據(jù)或車載電話應(yīng)用的AT指令數(shù)據(jù);校驗(yàn)碼數(shù)據(jù)幀的CRC校驗(yàn)碼;虛擬RS232驅(qū)動(dòng)程序3在物理RS232接口驅(qū)動(dòng)程序2之后加載,以便于物理RS232接口驅(qū)動(dòng)程序2被虛擬RS232接口驅(qū)動(dòng)程序3調(diào)用。
物理訪問模塊4可以調(diào)用物理RS232接口驅(qū)動(dòng)程序2提供的各種接口指令實(shí)現(xiàn)對(duì)數(shù)據(jù)流的收發(fā)。接收的數(shù)據(jù)依據(jù)數(shù)據(jù)協(xié)議33分為兩類,分別發(fā)送到不同的虛擬RS232接口31、32;從虛擬RS232接口31、32接收的數(shù)據(jù)也依據(jù)數(shù)據(jù)協(xié)議33打包后發(fā)往物理RS232接口1。
數(shù)據(jù)發(fā)送處理流程如圖2所示。
步驟301,兩個(gè)虛擬RS232接口中的任何一方接收上層應(yīng)用提交的待發(fā)送的數(shù)據(jù)。
步驟302,判斷是否為第二個(gè)虛擬RS232接口32接收的車載電話數(shù)據(jù),是,轉(zhuǎn)下一步驟;否則轉(zhuǎn)步驟305。
步驟303,待發(fā)送的車載電話數(shù)據(jù)按數(shù)據(jù)協(xié)議33打包。
步驟304,將數(shù)據(jù)包添加到屬于第二個(gè)虛擬RS232接口32的車載電話數(shù)據(jù)發(fā)送隊(duì)列中,轉(zhuǎn)步驟308。
步驟305,判斷是否為第一個(gè)虛擬RS232接口31接收的上網(wǎng)數(shù)據(jù),是,轉(zhuǎn)下一步驟;否則轉(zhuǎn)驟309。
步驟306,待發(fā)送的上網(wǎng)數(shù)據(jù)按數(shù)據(jù)協(xié)議33打包。
步驟307,將數(shù)據(jù)包添加到屬于第一個(gè)虛擬RS232接口31的上網(wǎng)數(shù)據(jù)發(fā)送隊(duì)列中。
步驟308,設(shè)置發(fā)送中斷,等待物理RS232接口驅(qū)動(dòng)程序2的響應(yīng)。
步驟309,結(jié)束。
物理RS232接口驅(qū)動(dòng)程序2作出響應(yīng)產(chǎn)生發(fā)送中斷,表示可向外發(fā)送數(shù)據(jù)后,物理訪問模塊4的發(fā)送中斷處理流程如圖3所示。
步驟310,調(diào)用物理RS232接口驅(qū)動(dòng)程序2檢查物理RS232接口的流控信號(hào)是否有效,是則轉(zhuǎn)下一步驟;否則轉(zhuǎn)步驟314退出。
步驟311,判斷第二個(gè)虛擬RS232接口32的車載電話數(shù)據(jù)發(fā)送隊(duì)列中是否有需要發(fā)送的數(shù)據(jù)包,沒有轉(zhuǎn)下一步驟;有則提取該隊(duì)列前頭的數(shù)據(jù)包到發(fā)送暫存單元,轉(zhuǎn)驟313。
步驟312,判斷第一個(gè)虛擬RS232接口31的上網(wǎng)數(shù)據(jù)發(fā)送隊(duì)列中是否有需要發(fā)送的數(shù)據(jù)包,沒有則轉(zhuǎn)步驟314退出;有則提取該隊(duì)列前頭的數(shù)據(jù)包到發(fā)送暫存單元。
步驟313,調(diào)用物理RS232接口驅(qū)動(dòng)程序2將發(fā)送暫存單元的數(shù)據(jù)包由物理RS232接口1向外發(fā)送。
步驟314,結(jié)束。
由以上發(fā)送處理流程可以看出,第一個(gè)虛擬RS232接口31和第二個(gè)虛擬RS232接口32接收的上層應(yīng)用的數(shù)據(jù)被打包后,將分別添加到上網(wǎng)數(shù)據(jù)發(fā)送隊(duì)列和車載電話數(shù)據(jù)發(fā)送隊(duì)列;當(dāng)兩個(gè)隊(duì)列中均存在數(shù)據(jù)時(shí),將優(yōu)先發(fā)送車載電話數(shù)據(jù)隊(duì)列中的數(shù)據(jù)。
物理RS232接口1接收數(shù)據(jù)分配到兩個(gè)虛擬RS232接口31、32之一提交上層應(yīng)用的物理訪問模塊4數(shù)據(jù)接收處理流程如圖4所示。
步驟320,物理RS232接口驅(qū)動(dòng)程序2產(chǎn)生接收中斷后,傳遞到物理訪問模塊4,表示有數(shù)據(jù)包要經(jīng)第一個(gè)虛擬RS232接口31或第二個(gè)虛擬RS232接口32傳遞給上層應(yīng)用,物理訪問模塊4作出接收中斷響應(yīng)。
步驟321,調(diào)用物理RS232接口驅(qū)動(dòng)程序2,由物理RS232接口1讀入一個(gè)數(shù)據(jù)包到緩沖區(qū)。
步驟322,按數(shù)據(jù)協(xié)議33判斷該數(shù)據(jù)包是否為屬于第二個(gè)虛擬RS232接口32的車載電話數(shù)據(jù),是則轉(zhuǎn)下一步驟;否則轉(zhuǎn)步驟326。
步驟323,按數(shù)據(jù)協(xié)議33將緩沖區(qū)中的數(shù)據(jù)包解包,提取數(shù)據(jù)內(nèi)容。
步驟324,將數(shù)據(jù)內(nèi)容存放到第二個(gè)虛擬RS232接口32的車載電話數(shù)據(jù)緩沖區(qū)。
步驟325,向上層應(yīng)用產(chǎn)生一個(gè)第二個(gè)虛擬RS232接口32的接收中斷,通知上層應(yīng)用提取第二個(gè)虛擬RS232接口32的車載電話數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)內(nèi)容,然后轉(zhuǎn)步驟330退出。
步驟326,按數(shù)據(jù)協(xié)議33判斷該數(shù)據(jù)包是否為屬于第一個(gè)虛擬RS232接口31的上網(wǎng)數(shù)據(jù),是則轉(zhuǎn)下一步驟;否則轉(zhuǎn)步驟330退出。
步驟327,按數(shù)據(jù)協(xié)議33將緩沖區(qū)中的數(shù)據(jù)包解包,提取數(shù)據(jù)內(nèi)容。
步驟328,將數(shù)據(jù)內(nèi)容存放到第一個(gè)虛擬RS232接口31的上網(wǎng)數(shù)據(jù)緩沖區(qū)。
步驟329,向上層應(yīng)用產(chǎn)生一個(gè)第一個(gè)虛擬RS232接口31的接收中斷,通知上層應(yīng)用提取一個(gè)虛擬RS232接口31的上網(wǎng)數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)內(nèi)容。
步驟330,結(jié)束。
以上結(jié)合車載多媒體系統(tǒng)介紹了本發(fā)明虛擬RS232接口的方法,在物理的RS232接口1的另一方也同樣采用本發(fā)明虛擬RS232接口的方法處理,就可用一個(gè)物理的RS232接口1同時(shí)被上網(wǎng)和車載電話使用,這兩種功能的使用者察覺不出兩個(gè)虛擬的RS232接口31、32的存在,就像獨(dú)占物理的RS232接口1一樣。
以上所述,僅為本發(fā)明的一個(gè)較佳實(shí)施例,不以此限定本發(fā)明實(shí)施的范圍,依本發(fā)明的技術(shù)方案及說明書內(nèi)容所作的等效變化與修飾,皆應(yīng)屬于本發(fā)明涵蓋的范圍。
權(quán)利要求
1.虛擬RS232接口的方法,包括上層應(yīng)用通過兩個(gè)虛擬RS232接口經(jīng)由一個(gè)物理RS232接口向外發(fā)送數(shù)據(jù)的過程和一個(gè)物理RS232接口接收數(shù)據(jù)分配到兩個(gè)虛擬RS232接口之一提交上層應(yīng)用的過程;上述兩個(gè)過程共同使用一個(gè)數(shù)據(jù)協(xié)議規(guī)定所傳送數(shù)據(jù)的格式及區(qū)分該數(shù)據(jù)涉及兩個(gè)虛擬RS232接口中哪一個(gè)的方式;上層應(yīng)用通過兩個(gè)虛擬RS232接口經(jīng)由一個(gè)物理RS232接口向外發(fā)送數(shù)據(jù)的過程包含步驟A.兩個(gè)虛擬RS232接口中的任何一方接收上層應(yīng)用提交的待發(fā)送的數(shù)據(jù);步驟B.待發(fā)送的數(shù)據(jù)按上述數(shù)據(jù)協(xié)議打包,并添加到屬于本虛擬RS232接口的數(shù)據(jù)發(fā)送隊(duì)列中;步驟C.調(diào)用物理RS232接口驅(qū)動(dòng)程序,由物理RS232接口向外發(fā)送屬于本虛擬RS232接口的數(shù)據(jù)發(fā)送隊(duì)列中的數(shù)據(jù)包;一個(gè)物理RS232接口接收數(shù)據(jù)分配到兩個(gè)虛擬RS232接口之一提交上層應(yīng)用的過程包含步驟D.調(diào)用物理RS232接口驅(qū)動(dòng)程序,由物理RS232接口讀入一個(gè)數(shù)據(jù)包;步驟E.按上述數(shù)據(jù)協(xié)議判斷該數(shù)據(jù)包屬于哪一個(gè)虛擬RS232接口;步驟F.按上述數(shù)據(jù)協(xié)議將該數(shù)據(jù)包解包,并將該數(shù)據(jù)包中的數(shù)據(jù)內(nèi)容放置到相應(yīng)虛擬RS232接口的數(shù)據(jù)緩沖區(qū);步驟G.通知上層應(yīng)用提取相應(yīng)虛擬RS232接口的數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)內(nèi)容。
2.根據(jù)權(quán)利要求1所述的虛擬RS232接口的方法,其特征在于在執(zhí)行所述的步驟C之前,要先檢查優(yōu)先權(quán)高的虛擬RS232接口的數(shù)據(jù)發(fā)送隊(duì)列中是否有數(shù)據(jù)要發(fā)送,有則執(zhí)行步驟C向外發(fā)送屬于優(yōu)先權(quán)高的虛擬RS232接口的數(shù)據(jù)發(fā)送隊(duì)列中的數(shù)據(jù)包;否則執(zhí)行步驟C向外發(fā)送屬于優(yōu)先權(quán)較低的虛擬RS232接口的數(shù)據(jù)發(fā)送隊(duì)列中的數(shù)據(jù)包。
3.根據(jù)權(quán)利要求1或2所述的虛擬RS232接口的方法,其特征在于還包括上層應(yīng)用通過兩個(gè)虛擬RS232接口與一個(gè)物理RS232接口交換控制信息的規(guī)定,其中兩個(gè)虛擬RS232接口與一個(gè)物理RS232接口的波特率為固定值,上層應(yīng)用調(diào)用設(shè)置串行口的波特率命令不被執(zhí)行,上層應(yīng)用調(diào)用獲取串行口的波特率命令只能得到該固定值;上層應(yīng)用調(diào)用置DTR信號(hào)有效命令和置RTS信號(hào)有效命令除在物理RS232接口驅(qū)動(dòng)程序初始化時(shí)只被執(zhí)行一次,而其它情況下均執(zhí)行上述調(diào)用命令直接置物理RS232接口的對(duì)應(yīng)信號(hào)位有效;上層應(yīng)用調(diào)用置DTR信號(hào)無效命令和置RTS信號(hào)無效命令直接置物理RS232接口的對(duì)應(yīng)信號(hào)位無效;上層應(yīng)用調(diào)用設(shè)置XOFF命令和設(shè)置XON命令不被執(zhí)行;上層應(yīng)用調(diào)用設(shè)置流控信息命令,對(duì)應(yīng)的流控信息將被存入物理RS232接口驅(qū)動(dòng)程序的緩沖區(qū)中;上層應(yīng)用調(diào)用獲取流控信息命令,將從物理RS232接口驅(qū)動(dòng)程序的緩沖區(qū)中取得采用的流控信息;上層應(yīng)用調(diào)用獲取握手信號(hào)狀態(tài)命令,將直接讀取物理RS232接口的DTR、RTS信號(hào)后返回。
4.根據(jù)權(quán)利要求3所述的虛擬RS232接口的方法,其特征在于所述的數(shù)據(jù)協(xié)議規(guī)定數(shù)據(jù)包的第一個(gè)字節(jié)為幀頭,最后一個(gè)字節(jié)為幀尾,第二和第三個(gè)字節(jié)為幀長度,第四個(gè)字節(jié)為數(shù)據(jù)類型即屬于哪一個(gè)虛擬RS232接口,然后是數(shù)據(jù)內(nèi)容,倒數(shù)第五至倒數(shù)第二個(gè)字節(jié)為校驗(yàn)碼,最后一個(gè)字節(jié)為幀尾。
全文摘要
本發(fā)明虛擬RS232接口的方法,涉及一種在應(yīng)用接口層提供兩個(gè)虛擬的RS232接口訪問同一物理的RS232接口的數(shù)據(jù)傳輸方法。本發(fā)明使用一個(gè)數(shù)據(jù)協(xié)議規(guī)定數(shù)據(jù)的格式及區(qū)分兩個(gè)虛擬接口的方式;發(fā)送數(shù)據(jù)的過程兩個(gè)虛擬接口之一接收待發(fā)送的數(shù)據(jù);按該協(xié)議對(duì)數(shù)據(jù)打包,并添加到所屬虛擬接口的數(shù)據(jù)發(fā)送隊(duì)列中;調(diào)用物理接口驅(qū)動(dòng)程序,由物理接口向外發(fā)送所屬數(shù)據(jù)發(fā)送隊(duì)列中的數(shù)據(jù)包。接收數(shù)據(jù)的過程調(diào)用物理接口驅(qū)動(dòng)程序由物理接口讀入一個(gè)數(shù)據(jù)包;按該協(xié)議判斷該數(shù)據(jù)包歸屬并解包,數(shù)據(jù)內(nèi)容存到相應(yīng)虛擬接口的數(shù)據(jù)緩沖區(qū);通知上層應(yīng)用提取數(shù)據(jù)。用軟件實(shí)現(xiàn)一個(gè)物理的RS232接口同時(shí)為兩種功能傳輸數(shù)據(jù),可用于提高現(xiàn)有電子設(shè)備的效率。
文檔編號(hào)H04L29/08GK1787536SQ20041007540
公開日2006年6月14日 申請(qǐng)日期2004年12月6日 優(yōu)先權(quán)日2004年12月6日
發(fā)明者彭勇, 郭偉雄, 陳敏 申請(qǐng)人:廈門雅迅網(wǎng)絡(luò)股份有限公司