虚拟rs232接口的方法

文档序号:7597221阅读:258来源:国知局
专利名称:虚拟rs232接口的方法
技术领域
本发明涉及一种数据传输的方法,特别是涉及一种在应用接口层提供两个虚拟的RS232接口访问同一个物理的RS232接口的数据传输方法。
背景技术
很多成熟的电子设备的RS232接口可以传输不同的数据,进行不同的处理,但它提供的RS232接口数量少于该电子设备的RS232接口功能。例如,车载多媒体系统有一个GSM模块,它为系统提供无线上网和车载电话的通信功能。若要求车载多媒体系统使用无线上网的同时,也可使用车载电话,这就要求提供这两项通信功能的GSM模块至少提供两个RS232接口同时供系统上网和车载电话使用。但实际上各种车载多媒体设备中,几乎所有的GSM模块只提供了一个RS232接口。这就意味着用户在上网时不能接拨电话,或者用户在接拨电话时不能上网。

发明内容
本发明旨在提供一种可在一个RS232接口的基础之上,虚拟出两个RS232接口,实现在应用接口层提供两个虚拟的RS232接口访问同一个物理的RS232接口的虚拟RS232接口的方法。
本发明的技术方案是虚拟RS232接口的方法,包括上层应用通过两个虚拟RS232接口经由一个物理RS232接口向外发送数据的过程和一个物理RS232接口接收数据分配到两个虚拟RS232接口之一提交上层应用的过程;上述两个过程共同使用一个数据协议规定所传送数据的格式及区分该数据涉及两个虚拟RS232接口中哪一个的方式。
上层应用通过两个虚拟RS232接口经由一个物理RS232接口向外发送数据的过程包含步骤A.两个虚拟RS232接口中的任何一方接收上层应用提交的待发送的数据;步骤B.待发送的数据按上述数据协议打包,并添加到属于本虚拟RS232接口的数据发送队列中;步骤C.调用物理RS232接口驱动程序,由物理RS232接口向外发送属于本虚拟RS232接口的数据发送队列中的数据包。
一个物理RS232接口接收数据分配到两个虚拟RS232接口之一提交上层应用的过程包含步骤D.调用物理RS232接口驱动程序,由物理RS232接口读入一个数据包;步骤E.按上述数据协议判断该数据包属于哪一个虚拟RS232接口;步骤F.按上述数据协议将该数据包解包,并将该数据包中的数据内容放置到相应虚拟RS232接口的数据缓冲区;步骤G.通知上层应用提取相应虚拟RS232接口的数据缓冲区中的数据内容。
为保证优先权高的虚拟RS232接口的数据发送队列中的数据能及时发出在执行所述的步骤C之前,要先检查优先权高的虚拟RS232接口的数据发送队列中是否有数据要发送,有则执行步骤C向外发送属于优先权高的虚拟RS232接口的数据发送队列中的数据包;否则执行步骤C向外发送属于优先权较低的虚拟RS232接口的数据发送队列中的数据包。
特别是所述的虚拟RS232接口的方法还包括上层应用通过两个虚拟RS232接口与一个物理RS232接口交换控制信息的规定,其中两个虚拟RS232接口与一个物理RS232接口的波特率为固定值,上层应用调用设置串行口的波特率命令不被执行,上层应用调用获取串行口的波特率命令只能得到该固定值;上层应用调用置DTR信号有效命令和置RTS信号有效命令除在物理RS232接口驱动程序初始化时只被执行一次,而其它情况下均执行上述调用命令直接置物理RS232接口的对应信号位有效;上层应用调用置DTR信号无效命令和置RTS信号无效命令直接置物理RS232接口的对应信号位无效;上层应用调用设置XOFF命令和设置XON命令不被执行;上层应用调用设置流控信息命令,对应的流控信息将被存入物理RS232接口驱动程序的缓冲区中;上层应用调用获取流控信息命令,将从物理RS232接口驱动程序的缓冲区中取得采用的流控信息;上层应用调用获取握手信号状态命令,将直接读取物理RS232接口的DTR、RTS信号后返回。
一种推荐的数据协议规定数据包的第一个字节为帧头,最后一个字节为帧尾,第二和第三个字节为帧长度,第四个字节为数据类型即属于哪一个虚拟RS232接口,然后是数据内容,倒数第五至倒数第二个字节为校验码,最后一个字节为帧尾。
本发明虚拟RS232接口的方法,依据一个数据协议以软件产生两个虚拟RS232接口经由一个物理RS232接口向外发送上层应用提交数据和从一个物理RS232接口接收数据分配到两个虚拟RS232接口之一提交上层应用。在不改变电子设备的硬件配置的前提下,就可达到增加RS232接口数量的效果,改进电子设备的功能,提高使用效率。它具有两个虚拟RS232接口的数据发送优先权处理和两个虚拟RS232接口与物理RS232接口控制信息交换的能力,上层应用完全可以不考虑虚拟RS232接口的存在,透明地与物理RS232接口交换数据和控制信息,因此上层应用不需要作任何修改。使改进电子设备的功能、提高使用效率的软件开发风险小,简单易行。使用者察觉不出两个虚拟RS232接口的存在,就像独占物理RS232接口一样。


图1为本发明虚拟RS232接口的方法一个实施例的虚拟RS232接口驱动程序的体系结构图。
图2为图1实施例的虚拟RS232接口驱动程序的数据发送处理流程图。
图3为图1实施例的虚拟RS232接口驱动程序的数据发送中断处理流程图。
图4为图1实施例的虚拟RS232接口驱动程序的数据接收处理流程图。
具体实施例本发明虚拟RS232接口的方法用于车载多媒体系统。
该车载多媒体系统有一个GSM模块,它为系统提供无线上网和车载电话的通信功能。但它的GSM模块只提供了一个物理的RS232接口。若要求车载多媒体系统使用无线上网的同时,也可使用车载电话,解决的办法是在使用这个物理RS232接口的前提下,上网应用对应一个虚拟RS232接口,传送各种网络应用相关的数据流;车载电话应用对应另一个虚拟RS232接口,传送车载电话AT指令数据。具体的作法是在该车载多媒体系统的软件操作系统中加入一个虚拟RS232接口的驱动程序,这个虚拟RS232接口驱动程序的体系结构如图1所示。图中虚线框内是虚拟RS232接口的驱动程序。
物理RS232接口1经过物理RS232接口驱动程序2与虚拟RS232驱动程序3交换数据。虚拟RS232驱动程序3在应用接口层提供了两个RS232应具有的接口,第一个虚拟RS232接口31面向上网应用41,第二个虚拟RS232接口32面向车载电话应用42。虚拟RS232驱动程序3中内含一个特定的数据协议33,数据协议33规定所传送数据的格式及区分该数据涉及两个虚拟RS232接口中哪一个的方式。虚拟RS232驱动程序3的物理访问模块34在物理访问层通过对物理RS232驱动程序2的访问,从物理RS232接口1获取数据流,并依据数据协议33将数据流分为两类,分别解包成数据组发送到不同的虚拟RS232接口31、32。虚拟RS232驱动程序3的物理访问模块34从不同的虚拟RS232接口31、32接收数据组,并依据数据协议33将数据组打包进而通过对物理RS232驱动程序2的访问,向物理RS232接口1发送数据流。
上层应用通过虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32可与物理RS232接口1交换的控制信息,如表1所示。

表1.物理RS232接口的控制信息下面对于虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32对上层应用程序开放的接口控制命令,分别加以说明。
IOCTL_SERIAL_SET_BAUD_RATE设置串行口的波特率。因为两个虚拟接口31、32对应的是同一个物理RS232接口1,因此虚拟RS232接口的驱动程序3中把物理RS232接口1的波特率直接设置为115200,当上层应用程序对虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32调用IOCTL_SERIAL_SET_BAUD_RATE接口控制命令时,虚拟RS232接口的驱动程序3不做任何处理。
IOCTL_SERIAL_GET_BAUD_RATE获取串行口的波特率。与IOCTL_SERIAL_SET_BAUD_RATE接口控制命令相呼应,当上层应用对虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32调用该接口控制命令时,虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32均返回115200。
IOCTL_SERIAL_SET_DTR置DTR信号有效。当物理RS232接口驱动程序2初始化过程中,上层应用第一次对虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32调用该接口控制命令时,虚拟RS232接口的驱动程序3直接设置物理RS232接口1的DTR信号有效,上层应用第二次对虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32调用该接口控制命令时,虚拟RS232接口的驱动程序3不做任何处理;而在其它情况下,上层应用第一次对虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32调用该接口控制命令时,虚拟RS232接口的驱动程序3直接设置物理RS232接口1的DTR信号有效。
IOCTL_SERIAL_CLR_DTR置DTR信号无效。当上层应用对虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32调用该接口控制命令时,虚拟RS232接口的驱动程序3直接设置物理RS232接口1的DTR信号无效。
IOCTL_SERIAL_SET_RTS置RTS信号有效。当物理RS232接口驱动程序2初始化过程中,上层应用第一次对虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32调用该接口控制命令时,虚拟RS232接口的驱动程序3直接设置物理RS232接口1的RTS信号有效,上层应用第二次对虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32调用该接口控制命令时,虚拟RS232接口的驱动程序3不做任何处理;而在其它情况下,上层应用第一次对虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32调用该接口控制命令时,虚拟RS232接口的驱动程序3直接设置物理RS232接口1的RTS信号有效。
IOCTL_SERIAL_CLR_RTS置RTS信号无效。当上层应用对虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32调用该接口控制命令时,虚拟RS232接口的驱动程序3直接设置物理RS232接口1的DTR信号无效。
IOCTL_SERIAL_SET_XON在本实施例中,不采用软流控机制,因此当上层应用对虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32调用该接口控制命令时,虚拟RS232接口的驱动程序3不做任何处理。
IOCTL_SERIAL_SET_XOFF在本实施例中,不采用软流控机制,因此当上层应用对虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32调用该接口控制命令时,虚拟RS232接口的驱动程序3不做任何处理。
IOCTL_SERIAL_SET_HANDFLOW设置采用的流控机制。本实施例中,采用的是硬件流控机制,当上层应用对虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32调用该接口控制命令时,虚拟RS232接口的驱动程序3将对应的流控信息存入物理RS232接口驱动程序2的缓冲区中。
IOCTL_SERIAL_GET_HANDFLOW获取采用的流控机制。当上层应用对虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32调用该接口控制命令时,虚拟RS232接口的驱动程序3将从物理RS232接口驱动程序的缓冲区中取得采用的流控信息通过被调用的虚拟RS232接口31或虚拟RS232接口32回送。
IOCTL_SERIAL_GET_DTRRTS获取DTR、RTS信号的状态。当上层应用对虚拟RS232接口的驱动程序3的两个虚拟RS232接口31、32调用该接口控制命令时,虚拟RS232接口的驱动程序3直接读取物理RS232接口1的DTR、RTS信号后返回通过被调用的虚拟RS232接口31或虚拟RS232接口32回送。
数据协议33规定所传送数据帧格式如表2所示。

表2传输数据的帧格式其中帧头、帧尾均为0x7e;帧长度除去帧头帧尾后数据帧的字节数;数据类型0x01表示上网应用的数据流;0x02表示车载电话应用的数据流;数据内容上网数据或车载电话应用的AT指令数据;校验码数据帧的CRC校验码;虚拟RS232驱动程序3在物理RS232接口驱动程序2之后加载,以便于物理RS232接口驱动程序2被虚拟RS232接口驱动程序3调用。
物理访问模块4可以调用物理RS232接口驱动程序2提供的各种接口指令实现对数据流的收发。接收的数据依据数据协议33分为两类,分别发送到不同的虚拟RS232接口31、32;从虚拟RS232接口31、32接收的数据也依据数据协议33打包后发往物理RS232接口1。
数据发送处理流程如图2所示。
步骤301,两个虚拟RS232接口中的任何一方接收上层应用提交的待发送的数据。
步骤302,判断是否为第二个虚拟RS232接口32接收的车载电话数据,是,转下一步骤;否则转步骤305。
步骤303,待发送的车载电话数据按数据协议33打包。
步骤304,将数据包添加到属于第二个虚拟RS232接口32的车载电话数据发送队列中,转步骤308。
步骤305,判断是否为第一个虚拟RS232接口31接收的上网数据,是,转下一步骤;否则转骤309。
步骤306,待发送的上网数据按数据协议33打包。
步骤307,将数据包添加到属于第一个虚拟RS232接口31的上网数据发送队列中。
步骤308,设置发送中断,等待物理RS232接口驱动程序2的响应。
步骤309,结束。
物理RS232接口驱动程序2作出响应产生发送中断,表示可向外发送数据后,物理访问模块4的发送中断处理流程如图3所示。
步骤310,调用物理RS232接口驱动程序2检查物理RS232接口的流控信号是否有效,是则转下一步骤;否则转步骤314退出。
步骤311,判断第二个虚拟RS232接口32的车载电话数据发送队列中是否有需要发送的数据包,没有转下一步骤;有则提取该队列前头的数据包到发送暂存单元,转骤313。
步骤312,判断第一个虚拟RS232接口31的上网数据发送队列中是否有需要发送的数据包,没有则转步骤314退出;有则提取该队列前头的数据包到发送暂存单元。
步骤313,调用物理RS232接口驱动程序2将发送暂存单元的数据包由物理RS232接口1向外发送。
步骤314,结束。
由以上发送处理流程可以看出,第一个虚拟RS232接口31和第二个虚拟RS232接口32接收的上层应用的数据被打包后,将分别添加到上网数据发送队列和车载电话数据发送队列;当两个队列中均存在数据时,将优先发送车载电话数据队列中的数据。
物理RS232接口1接收数据分配到两个虚拟RS232接口31、32之一提交上层应用的物理访问模块4数据接收处理流程如图4所示。
步骤320,物理RS232接口驱动程序2产生接收中断后,传递到物理访问模块4,表示有数据包要经第一个虚拟RS232接口31或第二个虚拟RS232接口32传递给上层应用,物理访问模块4作出接收中断响应。
步骤321,调用物理RS232接口驱动程序2,由物理RS232接口1读入一个数据包到缓冲区。
步骤322,按数据协议33判断该数据包是否为属于第二个虚拟RS232接口32的车载电话数据,是则转下一步骤;否则转步骤326。
步骤323,按数据协议33将缓冲区中的数据包解包,提取数据内容。
步骤324,将数据内容存放到第二个虚拟RS232接口32的车载电话数据缓冲区。
步骤325,向上层应用产生一个第二个虚拟RS232接口32的接收中断,通知上层应用提取第二个虚拟RS232接口32的车载电话数据缓冲区中的数据内容,然后转步骤330退出。
步骤326,按数据协议33判断该数据包是否为属于第一个虚拟RS232接口31的上网数据,是则转下一步骤;否则转步骤330退出。
步骤327,按数据协议33将缓冲区中的数据包解包,提取数据内容。
步骤328,将数据内容存放到第一个虚拟RS232接口31的上网数据缓冲区。
步骤329,向上层应用产生一个第一个虚拟RS232接口31的接收中断,通知上层应用提取一个虚拟RS232接口31的上网数据缓冲区中的数据内容。
步骤330,结束。
以上结合车载多媒体系统介绍了本发明虚拟RS232接口的方法,在物理的RS232接口1的另一方也同样采用本发明虚拟RS232接口的方法处理,就可用一个物理的RS232接口1同时被上网和车载电话使用,这两种功能的使用者察觉不出两个虚拟的RS232接口31、32的存在,就像独占物理的RS232接口1一样。
以上所述,仅为本发明的一个较佳实施例,不以此限定本发明实施的范围,依本发明的技术方案及说明书内容所作的等效变化与修饰,皆应属于本发明涵盖的范围。
权利要求
1.虚拟RS232接口的方法,包括上层应用通过两个虚拟RS232接口经由一个物理RS232接口向外发送数据的过程和一个物理RS232接口接收数据分配到两个虚拟RS232接口之一提交上层应用的过程;上述两个过程共同使用一个数据协议规定所传送数据的格式及区分该数据涉及两个虚拟RS232接口中哪一个的方式;上层应用通过两个虚拟RS232接口经由一个物理RS232接口向外发送数据的过程包含步骤A.两个虚拟RS232接口中的任何一方接收上层应用提交的待发送的数据;步骤B.待发送的数据按上述数据协议打包,并添加到属于本虚拟RS232接口的数据发送队列中;步骤C.调用物理RS232接口驱动程序,由物理RS232接口向外发送属于本虚拟RS232接口的数据发送队列中的数据包;一个物理RS232接口接收数据分配到两个虚拟RS232接口之一提交上层应用的过程包含步骤D.调用物理RS232接口驱动程序,由物理RS232接口读入一个数据包;步骤E.按上述数据协议判断该数据包属于哪一个虚拟RS232接口;步骤F.按上述数据协议将该数据包解包,并将该数据包中的数据内容放置到相应虚拟RS232接口的数据缓冲区;步骤G.通知上层应用提取相应虚拟RS232接口的数据缓冲区中的数据内容。
2.根据权利要求1所述的虚拟RS232接口的方法,其特征在于在执行所述的步骤C之前,要先检查优先权高的虚拟RS232接口的数据发送队列中是否有数据要发送,有则执行步骤C向外发送属于优先权高的虚拟RS232接口的数据发送队列中的数据包;否则执行步骤C向外发送属于优先权较低的虚拟RS232接口的数据发送队列中的数据包。
3.根据权利要求1或2所述的虚拟RS232接口的方法,其特征在于还包括上层应用通过两个虚拟RS232接口与一个物理RS232接口交换控制信息的规定,其中两个虚拟RS232接口与一个物理RS232接口的波特率为固定值,上层应用调用设置串行口的波特率命令不被执行,上层应用调用获取串行口的波特率命令只能得到该固定值;上层应用调用置DTR信号有效命令和置RTS信号有效命令除在物理RS232接口驱动程序初始化时只被执行一次,而其它情况下均执行上述调用命令直接置物理RS232接口的对应信号位有效;上层应用调用置DTR信号无效命令和置RTS信号无效命令直接置物理RS232接口的对应信号位无效;上层应用调用设置XOFF命令和设置XON命令不被执行;上层应用调用设置流控信息命令,对应的流控信息将被存入物理RS232接口驱动程序的缓冲区中;上层应用调用获取流控信息命令,将从物理RS232接口驱动程序的缓冲区中取得采用的流控信息;上层应用调用获取握手信号状态命令,将直接读取物理RS232接口的DTR、RTS信号后返回。
4.根据权利要求3所述的虚拟RS232接口的方法,其特征在于所述的数据协议规定数据包的第一个字节为帧头,最后一个字节为帧尾,第二和第三个字节为帧长度,第四个字节为数据类型即属于哪一个虚拟RS232接口,然后是数据内容,倒数第五至倒数第二个字节为校验码,最后一个字节为帧尾。
全文摘要
本发明虚拟RS232接口的方法,涉及一种在应用接口层提供两个虚拟的RS232接口访问同一物理的RS232接口的数据传输方法。本发明使用一个数据协议规定数据的格式及区分两个虚拟接口的方式;发送数据的过程两个虚拟接口之一接收待发送的数据;按该协议对数据打包,并添加到所属虚拟接口的数据发送队列中;调用物理接口驱动程序,由物理接口向外发送所属数据发送队列中的数据包。接收数据的过程调用物理接口驱动程序由物理接口读入一个数据包;按该协议判断该数据包归属并解包,数据内容存到相应虚拟接口的数据缓冲区;通知上层应用提取数据。用软件实现一个物理的RS232接口同时为两种功能传输数据,可用于提高现有电子设备的效率。
文档编号H04L29/08GK1787536SQ20041007540
公开日2006年6月14日 申请日期2004年12月6日 优先权日2004年12月6日
发明者彭勇, 郭伟雄, 陈敏 申请人:厦门雅迅网络股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1