移动宽带设备的数据处理方法及驱动装置
技术领域
本发明涉及无线通信领域,尤其涉及一种移动宽带设备的数据处理方法及驱动装置。
背景技术
随着技术的演进和移动宽带的普及,移动互联网已经为人们提供了丰富的家庭娱乐、商务办公等业务;基于第3代移动通信(The Third Generation MobileCommunications,简称为3G)和第4代移动通信(The Fourth Generation MobileCommunications,简称为4G)业务的扩展,越来越多的互联网应用得以发展,使得对移动宽带速度的追求成为主要目标之一。基于全球无线芯片的格局,高通和微软主推的网络驱动接口规范(Network Driver Interface Specification,简称为NDIS)+QMI(Qualcomm MSMInterface)的移动宽带设备高速接入方案成为当下移动宽带设备的主流接入方式之一,但限于“NDIS+QMI”的方式,目前只在windows系统上得到了应用,因此,如何将这种接入方式扩展到更多操作系统上成为当前工作努力地方向之一。
随着嵌入式智能设备、手持智能终端、尤其是掌上电脑(Personal DigitalAssistant,简称为PDA)类产品的流行,安卓(Android,也称安致)移动操作系统以其开放性和开源特点受到极大地欢迎和支持,据最新的市场统计,Android系统已经是市场占有率最高的移动操作系统。因此,在Android系统上适配各种移动宽带设备成为目前的主要工作之一。但是,限于Android系统现有的特性,只支持点到点协议(Point to Point Protocol,简称为PPP)等联网方式,无法支持当前更为流行、速度更高的NDIS设备。
虽然Windows系统上已有了基于NDIS驱动的业务处理方式,但NDIS本身是Windows定义的一套规范,很难照搬或者移植到Android操作系统上,因此,如何利用Android系统上现有的软件和特性,开发一套类似于Windows系统上NDIS方案的驱动和软件系统成为最大的目标。
图1是根据相关技术的Android系统移动宽带设备的驱动系统示意图,如图1所示,为了实现数据联网的业务,Android系统采用了传统的拨号连接方式——PPP。但是,这种方式增加了软件的层次和软件开发的难度,降低了软件健壮性;并且,数据传输使用较为底层的PPP协议会增加数据帧的长度,使得传输的数据内容中有效载荷降低,从而降低了移动宽带设备和主机控制器之间的传输速度,限制了移动宽带设备的网络性能。
发明内容
本发明的主要目的在于提供一种移动宽带设备的数据处理方案,以至少解决上述相关技术中采用PPP协议的方式导致软件健壮性差及传输速度低的问题。
为了实现上述目的,根据本发明的一个方面,提供了一种移动宽带设备的下行数据处理方法。
根据本发明的移动宽带设备的下行数据处理方法,包括以下步骤:接收来自RIL层的Android系统的功能调用请求;在功能调用请求为数据业务和配置业务的情况下,通过注册到RIL库中的QMI协议接口使用QMI守护进程将功能调用请求封装为对应的QMI指令,并将封装后的QMI指令数据发送给NDIS设备。
优选地,QMI指令包括以下之一:WDS、CTL、DMS。
优选地,将封装后的QMI指令数据发送给NDIS设备包括:QMI守护进程通过异步机制将封装后的QMI指令数据发送给NDIS设备。
为了实现上述目的,根据本发明的另一方面,还提供了一种移动宽带设备的上行数据处理方法。
根据本发明的移动宽带设备的上行数据处理方法,包括以下步骤:QMI守护进程检测来自NDIS设备的状态数据;根据状态数据的消息类型进行解析,并将解析结果上报给Android系统的RIL模块,其中,状态数据包括至少以下之一:状态的切换数据、状态的转换数据、热插拔事件消息。
为了实现上述目的,根据本发明的再一方面,还提供了一种移动宽带设备的数据处理方法。
根据本发明的移动宽带设备的数据处理方法,包括上述下行数据处理方法和上述上行数据处理方法。
优选地,该方法还包括:在Android系统初始化时启动QMI守护进程。
为了实现上述目的,根据本发明的又一方面,还提供了一种移动宽带设备的驱动装置。
根据本发明的移动宽带设备的驱动装置,包括RIL模块,驱动装置还包括QMI模块和与NDIS设备连接的NDIS驱动模块,其中,RIL模块,用于在接收到的来自RIL层的Android系统的功能调用请求为数据业务和配置业务的情况下,通过注册到RIL库中的QMI协议接口将功能调用请求发送给QMI模块;QMI模块,用于接收来自RIL模块的功能请求,使用QMI守护进程将功能调用请求封装为对应的QMI指令,并将封装后的QMI数据发送给NDIS驱动模块。
优选地,QMI模块包括:QMI客户端,用于提供对RIL层的接口和封装,使得RIL层在处理数据业务和配置业务时调用QMI守护进程;QMI守护进程单元,用于接收来自QMI客户端的功能调用请求,并将功能调用请求封装为对应的QMI指令,其中,QMI指令包括以下之一:WDS、CTL、DMS。
优选地,QMI守护进程单元还用于检测来自NDIS驱动模块的NDIS设备的状态数据,根据检测到的状态数据的消息类型进行解析,并将解析结果上报给RIL模块,其中,状态数据包括至少以下之一:状态的切换数据、状态的转换数据、热插拔事件消息。
优选地,NDIS驱动模块用于在Android系统中的USB CDC-ECM驱动中注册钩子函数,以实现USB CDC-ECM驱动对控制数据的解析,其中,钩子函数在QMI守护进程中实现对QMI数据的发送和解析。
通过本发明,采用“NDIS+QMI”协议的方式,解决了相关技术中采用PPP协议的方式导致软件健壮性差及传输速度低的问题,扩展了Android系统的应用范围,提高了系统的性能。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据相关技术的Android系统移动宽带设备的驱动系统示意图;
图2a是根据本发明实施例的移动宽带设备的下行数据处理方法的流程图;
图2b是根据本发明实施例的移动宽带设备的上行数据处理方法的流程图;
图3是根据本发明实施例的移动宽带设备的驱动装置的结构框图;
图4是根据本发明优选实施例的移动宽带设备的驱动装置的结构框图;
图5是根据本发明实施例一的Android系统移动宽带设备的驱动装置的示意图;
图6是根据本发明实施例三的下行数据流的示意图;
图7是根据本发明实施例四的上行数据流的示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
根据本发明实施例,提供了一种移动宽带设备的下行数据处理方法。图2a是根据本发明实施例的移动宽带设备的下行数据处理方法的流程图,如图2a所示,该方法包括以下步骤:
步骤S202a,接收来自RIL层的Android系统的功能调用请求;
步骤S204a,在该功能调用请求为数据业务和配置业务的情况下,通过注册到RIL库中的QMI协议接口使用QMI守护进程(Daemon)将功能调用请求封装为对应的QMI指令,并将封装后的QMI指令数据发送给NDIS设备。
通过上述步骤,采用“NDIS+QMI”协议的方式,解决了相关技术中采用PPP协议的方式导致软件健壮性差及传输速度低的问题,扩展了Android系统的应用范围,提高了系统的性能。
优选地,上述QMI指令包括以下之一:WDS、CTL、DMS。该方法简单实用、可操作性强。
优选地,将封装后的QMI指令数据发送给NDIS设备包括:QMI Daemon通过异步机制将封装后的QMI指令数据发送给NDIS设备。该方法实现简单、可操作性强。
根据本发明实施例,提供了一种移动宽带设备的上行数据处理方法。图2b是根据本发明实施例的移动宽带设备的上行数据处理方法的流程图,如图2b所示,该方法包括以下步骤:
步骤S202b,QMI Daemon检测来自NDIS设备的状态数据;
步骤S204b,根据该状态数据的消息类型进行解析,并将解析结果上报给Android系统的RIL模块,其中,状态数据包括至少以下之一:状态的切换数据、状态的转换数据、热插拔事件消息。
通过上述步骤,采用“NDIS+QMI”协议的方式,解决了相关技术中采用PPP协议的方式导致软件健壮性差及传输速度低的问题,扩展了Android系统的应用范围,提高了系统的性能。
根据本发明实施例,还提供了一种移动宽带设备的数据处理方法,包括上述下行数据处理方法和上述上行数据处理方法。
优选地,上述方法还包括:在Android系统初始化时启动QMI Daemon。该方法可以提高系统的有效性。
对应于上述方法,本发明实施例还提供了一种移动宽带设备的驱动装置。图3是根据本发明实施例的移动宽带设备的驱动装置的结构框图,如图3所示,该驱动装置,包括RIL模块32,该驱动装置还包括QMI模块34和与NDIS设备连接的NDIS驱动模块36,其中,RIL模块32,用于在接收到的来自RIL层的Android系统的功能调用请求为数据业务和配置业务的情况下,通过注册到RIL库中的QMI协议接口将功能调用请求发送给QMI模块34;QMI模块34,耦合至RIL模块32,用于接收来自RIL模块32的功能请求,使用QMI守护进程(Daemon)将功能调用请求封装为对应的QMI指令,并将封装后的QMI数据发送给NDIS驱动模块36。
通过上述驱动装置,采用“NDIS+QMI”协议的方式,解决了相关技术中采用PPP协议的方式导致软件健壮性差及传输速度低的问题,扩展了Android系统的应用范围,提高了系统的性能。
图4是根据本发明优选实施例的移动宽带设备的驱动装置的结构框图,如图4所示,QMI模块34包括:QMI客户端342,用于提供对RIL层的接口和封装,使得RIL层在处理数据业务和配置业务时调用QMI Daemon;QMI Daemon单元344,耦合至QMI客户端342,用于接收来自QMI客户端342的功能调用请求,并将功能调用请求封装为对应的QMI指令,其中,QMI指令包括以下之一:WDS、CTL、DMS。
优选地,QMI Daemon单元344还用于接收来自NDIS设备的功能调用请求对应的响应,解析该响应中的命令字段,并根据命令字段的不同使用对应的QMI指令将该响应上报给RIL模块。
优选地,QMI Daemon单元344还用于检测来自NDIS驱动模块36的NDIS设备的状态数据,根据检测到的状态数据的消息类型进行解析,并将解析结果上报给RIL模块32,其中,状态数据包括至少以下之一:状态的切换数据、状态的转换数据、热插拔事件消息。
优选地,NDIS驱动模块36用于在Android系统中的通用串行总线(UniversalSerial Bus,简称为USB)通讯设备类以太网控制模型(Class Definitions forCommunication Devices-Ethernet Control Model,简称为CDC-ECM)驱动中注册钩子函数,以实现USB CDC-ECM驱动对控制数据的解析,其中,钩子函数在QMI Daemon中实现对QMI数据的发送和解析。
下面结合优选实施例和附图对上述实施例的实现过程进行详细说明。
实施例一
为了适应高速移动宽带设备的驱动和数据接入,本实施例在Android系统上提供了一种通用的移动宽带设备驱动方法和装置,可以提高移动宽带设备和设备驱动器之间的通讯速度,兼容了现有板侧的NDIS方案,降低了板侧开发的难度和工作量,进而降低了开发成本。
本实施例中的基于Android系统的驱动方法和系统,是一种新的优化和归一化后的驱动方法和装置。图5是根据本发明实施例一的Android系统移动宽带设备的驱动装置的示意图,如图5所示,删除了图1当中的PPP模块12,摈弃了Modem端口和PPP协议,改用性能更好的NDIS端口和QMI协议,将上层管理软件的请求,根据不同的业务类型分别处理。具体地,将上层管理软件的请求根据不同的业务类型分别处理可以为:对于短信、电话本等业务,依旧按照Android系统现有的无线接口层(Radio Interface Layer,简称为RIL)机制,通过AT(attention)命令的方式实现;对于数据和配置等业务,则通过QMI协议实现。
为了实现与现有方式的兼容,将通过QMI协议实现的数据和配置等业务的功能接口也注册到RIL库中,这样在RIL层之上,上层管理软件并不关心底层的实现是PPP协议的方式还是QMI协议的方式,从而在上层管理软件和设备之间实现了透明传输。为了实现这样的功能,删除PPP模块12、修改AT模块51、增加NDIS驱动模块52、QMI Client模块54、QMIDaemon模块53,其中,NDIS驱动模块52是在Android系统USB CDC-ECM驱动的基础上修改而成,QMI Client模块54(即,QMI客户端)、QMI Daemon模块53为新增加模块。
在实施过程中,对于来自RIL层的请求(request),如果是数据和配置等业务,则通过调用QMI Client模块54的接口实现;QMI Client模块54再通过消息机制通知QMI Daemon模块53,具体的QMI协议的封装、解析、数据发送、接收均由QMI Daemon模块53实现;NDIS设备的驱动则由NDIS驱动模块52实现。其中,QMI Daemon模块53作为一个守护进程,在Android系统初始化的时候启动,异步处理来自上层的请求(request)和来自设备的响应事件(response);在处理请求(request)时,QMI Daemon模块53处理完QMI协议数据的封装后、直接调用驱动的接口发送数据;对于响应事件(response),则采用单独的进程检测来自设备的事件,这样既能采用异步的方式处理数据的发送和接收,又能及时的处理响应事件。
本实施例,在现有Android系统的USB CDC-ECM(Class Definitions forCommunication Devices-Ethernet Control Model)的驱动中,增加QMI协议的支持,并实现了与Android系统现有无线宽带业务处理——无线接口层(Radio Interface Layer,简称为RIL)驱动的无缝对接,所以,既能实现对现有NDIS设备的无缝接入,提高移动宽带设备的接入速度,又能较少地修改Android系统框架。另外,扩展Android系统的数据业务接入方式,使其能接入主流的NDIS设备,适应了当前无线宽带设备接入速度越来越高的趋势,扩展了Android系统现有的数据业务接入方式,从而使Android系统更能适应时下的发展趋势。
实施例二
本实施例提供了一种Android系统上通用的设备驱动方法及系统,在实现时,摈弃使用Modem+PPP协议的拨号方式,改采用“NDIS+QMI”协议的方式;驱动方面,通过修改Android系统上已有的USB CDC-ECM驱动,使得Android系统可以支持NDIS设备;并在现有RIL驱动的基础上支持,增加QMI协议的支持,使得数据、配置、短信、电话本等业务可以根据业务类型的不同使用不同的协议(AT、QMI)。其中,QMI协议可以采用异步方式;在实现的方式上,可以将QMI协议对上层的接口融入到Android系统现有的RIL框架中,不修改Android系统RIL和Framework的架构,这样可以增加Android系统的扩展性。
优化后的系统框图如图5所示,优化模块涉及:AT模块51、NDIS驱动模块52、QMIDaemon模块53、QMI Client模块54和PPP模块12,以下进行详细说明。
(1)AT模块51:AT模块作为Android系统RIL框架的基本组成部分,担负着现有数据、短信、电话本、配置、电话等众多业务,尤其是数据业务,完全基于AT命令和PPP协议拨号来实现,无法支持技术更新、速度更快、更流行的NDIS设备。而本系统中,数据业务部分采用NDIS方式,首先要修改AT模块中数据和配置等业务的实现方式和接口,删掉对应的AT命令和接口,改采用调用QMI Client模块提供应用程序接口(the Application ProgrammingInterface,简称为API)的方式;短信、电话本等业务继续使用现有的AT模块。基于上述思想,在AT模块的修改中,需要根据业务的不同选择不同的实现——数据和配置等业务调用QMI Client模块的API实现。
(2)NDIS驱动模块52:用来驱动NDIS设备,使得NDIS设备可以在Android系统上正常通讯。实现上,可以基于Android系统现有的USB CDC-ECM驱动,在USB CDC-ECM驱动中注册钩子函数,在钩子函数中实现USB CDC-ECM驱动控制数据的解析,其中,钩子函数在QMIDaemon模块中实现对QMI数据的发送和解析等处理。
(3)QMI Daemon模块53:负责三种业务处理:一是接收来自QMI Client的请求(request),并将这些request封装成为对应的QMI指令,例如,WDS(QMI Wireless DataService)、CTL(QMI Control Service)、DMS(QMI Device Management Service)等,并通过异步机制发送这些request;二是处理前述request对应的response,解析并反馈结果给上层的RIL框架,使得RIL之上提供的是统一的接口形式;三是负责检测和监测NDIS设备的状态和热插拔等事件,实时处理设备状态的切换和转换。
具体地,对于来自QMI Client的request,根据对应的QMI协议子类,在WDS,CTL、DMS子模块中实现各自的协议封装,封装完成后交由数据处理子模块发送;对于来自NDIS设备的response,数据处理子模块接收到response后,解析response中的命令字段,根据命令字的不同,分别交由WDS,CTL、DMS等子模块处理;对于设备的状态检测,QMI Daemon模块通过单独的线程检测从驱动模块过来的数据,对设备的插拔等操作做出响应。
另外,考虑到QMI协议族的广泛性和扩展性,在对协议的实现部分,通过分层处理的方法,使得对协议的封装和数据的传输处理分开,减少两层之间的接口数量和耦合性,从而在协议实现的扩展性方面更加容易。
(4)QMI Client模块54:提供对RIL层的接口和封装,使得QMI和RIL可以无缝对接;原有系统中,RIL层直接调用AT模块的接口,处理AT指令;而本系统中,增加了QMI协议的支持,具体的实现在QMI Daemon模块中,本模块则提供接口,从而使得RIL层在处理数据和配置等业务的时候,调用QMI Client模块提供的接口即可。
(5)PPP模块12,本模块主要针对Android系统中现有RIL框架采用PPP拨号时使用,由于本系统中采用NDIS+QMI的方式进行数据业务处理,不再使用PPP拨号方式,因此删除本模块。
实施例三
本实施例为业务实现中一种下行数据流的处理方法,图6是根据本发明实施例三的下行数据流的示意图,如图6所示,该方法包括如下步骤:
步骤S602,RIL层接收到Android系统的各种功能调用。
步骤S604,根据不同的业务类型,调用不同的处理流程;如果是数据业务或者配置业务,转往步骤S606;如果短信、电话本等业务,转往步骤S608。
步骤S606,如果是数据业务、配置等业务,进入QMI指令的处理流程,转往步骤S610。
步骤S608,如果是短信、电话本等业务,进入AT指令的处理流程,转往步骤S610。
步骤S610,判断当前的QMI指令是否支持,如果支持转往步骤S612,否则转往步骤S618。
步骤S612,封装QMI指令,成功则转往步骤S614,否则转往步骤S618。
步骤S614,异步发送QMI指令数据,成功则转往步骤S616,否则转往步骤S618。
步骤S616,NDIS驱动模块真正发送QMI协议数据。
步骤S618,QMI异常处理,反馈错误信息给上层。
步骤S620~S626,Android现有的AT指令处理流程。
步骤S628,AT异常处理,反馈错误信息给上层。
实施例四
本实施例为业务实现中一种上行数据流的处理方法,图7是根据本发明实施例四的上行数据流的示意图,如图7所示,该方法包括如下步骤:
步骤S702,采用守护进程机制,启动QMI Daemon的守护进程。
步骤S704,循环判断是否有消息,如果有消息则转入步骤S706处理,否则继续等待并检测消息。
步骤S706,解析收到的消息类型,判断是什么消息,如果是WDS的消息则转入步骤S708,CTL消息则转入步骤S710,DMS消息则转入步骤S712,其他消息则转入步骤S714进行处理。
步骤S708,解析收到的WDS消息,并将解析结果上报给RIL处理流程——步骤S716。
步骤S710,解析收到的CTL消息,并将解析结果上报给RIL处理流程——步骤S716。
步骤S712,解析收到的DMS消息,并将解析结果上报给RIL处理流程——步骤S716。
步骤S714,解析收到的其他类型消息,则进入步骤S718进行异常处理。
步骤S716,Android系统原有RIL处理流程。
步骤S718,其他消息类型的异常处理。
综上所述,本发明实施例中基于Android系统上新的驱动方法和装置,用于实现Android系统上高速移动宽带设备的驱动和数据接入,并具有以下优点:
(1)增加了NDIS驱动模块和QMI协议的支持,使得Android系统增加了对NDIS设备的支持、现有的NDIS设备不需要做任何的修改即可适配到Android系统使用,解决了Android系统现存的RIL驱动无法支持NDIS设备和无法有效提高与移动宽带设备之间传输速度的问题。
(2)通用性:基于高通公司在通信芯片领域的地位,NDIS设备无疑会是后续移动宽带设备主流的接入方式之一,因此,在Android设备上设计和实现对NDIS设备的支持,符合了后续多制式设备的接入方式和技术的发展趋势,扩展了Android系统的功能。
(3)扩展性:本发明实施例的方案是将NDIS设备的接入方式融入到Android系统现有的RIL框架中,没有修改Android系统RIL和Framework的架构,增加了Android系统对移动宽带设备的接入方式,增加了Android系统的扩展性;同时QMI协议部分分成了QMIDaemon模块和QMI Client模块,使得对QMI协议的封装和实现完全在QMI Daemon模块中,增加了QMI协议实现的扩展性。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。