技术开发 频道

优化RIL驱动,巧解WinCE电话漏接难题

       二.WinCE 6.0 RIL接口驱动详细分析   

  (1)WinCE 6.0新加入的电话功能
    一般来说,要在基于WinCE平台的产品上具备无线通讯功能(如拨号上网、拨打电话、收发短信)的方法有两种:一是选择让用户外接手机模块;二是在嵌入式产品上集成手机模块。如果是外接手机模块,那么手机只是起到在上网浏览期间接收和发送数据的作用,而如果是嵌入式设备自身集成手机模块,那么就可以很方便的实现无线通讯的全部功能。

    因此,为了实现嵌入式设备更好的增加无线通信功能,WinCE 6.0 提供了连接移动电话网络所需的接口函数。例如,WinCE 6.0 提供了cellcore.dll组件,这个动态链接库扩展了 Win32 API函数,其作用是用以支持各种移动电话服务,例如启动数据连接、发送 SMS 消息等。另一个重要组件是无线接口层 RIL驱动程序 ril.dll。该组件为应用层与移动电话硬件的连接提供了低级别接口。在早先几个版本的WinCE是不支持直接拨打电话和发送 SMS文本消息的。因此,在以前要想在WinCE上构建移动电话,OEM厂商就必须开发自己的接口层,然而这并非易事。现在有了这个RIL接口,要想在WinCE平台上构建移动电话程序,就不用OEM厂商再自己开发相应的接口层了,这一功能也大大激发OEM厂商在WinCE平台上构建移动电话程序的热潮。

    (2)什么是RIL(Radio Interface Layer)组件?
    在WinCE 6.0新加的RIL无线接口层组件原本是Windows Mobile里的,它的主要工作为连接WinCE操作系统和电话模块,RIL的主要作用是用于维护和关联无线GSM通讯模块的状态和事件消息。微软的帮助手册是这样介绍RIL的,作为无线通讯的一个非常重要的组件,RIL使各种无线语音和数据应用成为可能,也使到运行在WinCE 6.0上的软件可以通过RIL无缝地与GSM/GPRS或者CDMA2000 1X modem通信。RIL的位置是处于GSM无线基带系统的协议栈之上,而在WinCE系统的CellCore层之下。RIL跟上层通讯主要采用两种方式,一种是通过Socket发送与接收消息的方式来实现,还有另外一种方式是通过TCP/IP直接访问内核中的shared memory,进行RPC调用,这种方式主要应用在数据模式上。因此,RIL组件能隐藏GSM无线基带硬件上的一些细节,也就使到OEM厂商可以根据自己的需要将不同型号的无线modem集成到它们的产品之中。

    简单的说,就是只要采用了RIL驱动模块和底层的GSM通讯模块,WinCE系统就具有了移动电话的功能。一是因为RIL提供了语音、数据、SMS短信、SIM卡管理以及STK应用的功能,也包括了EXTAPI、拔号盘等移动电话的其它功能。二是因为从软件的角度来看,RIL工作在PPP、TCP/IP协议之下,能把AT命令的发送以及Response响应的解析,也能把数据可靠的传输。而且,除了对网络协议的支持,RIL也支持SMS、Voice Call等功能。

    (3)RIL驱动程序的结构解析
    从RIL组件的功能我们可知,开发一个移动电话的设计起点,是需要有效的进行RIL驱动程序的开发。因为RIL驱动程序为应用程序提供无线通信相关的服务,包括呼叫控制、短消息、GPRS等功能。而且对于上层应用程序来说,也可以抽象地把RIL驱动程序看作逻辑设备,它只需要和RIL驱动程序通信就能够获得所需要的服务。因此,RIL接口层驱动可以按照流驱动Stream I/O的规范来设计,这样做的好处是应用程序可以把设备看作文件,通过文件接口来访问RIL。

    在WinCE系统中,一个加载式驱动程序通常会被分成与硬件相关的PDD层和与硬件无关的MDD层两部分。MDD实现的是和平台无关的功能,它描述了一个通用的驱动程序框架,而PDD是和硬件以及平台相关的代码组成。MDD会调用PDD中特定的接口来获取硬件相关的信息。因此,在使用层次型驱动的时候,一般只需要基于相近的样列驱动程序,针对特定的硬件只修改PDD程序,MDD建立的框架可继续使用。

    在根据微软帮助手册的建议,RIL驱动程序的基本框架最好是采用MDD+PDD结构。一般来说,微软在WinCE中提供了很多通用驱动程序的MDD样本,所以关键在于调试PDD层。因为不同的GSM/GPRS通讯模块,其PDD层的实现是不一样的。例如,层次模型RIL_XXX是提供给DeviceManger的 stream Interface。而在RIL Service这一层,Dispather 会将request code 分发给相应的function,例如SMS短信息发送。然后SMS 的function 会发消息给 RIL Device,目的是为了请求以AT命令的形式发送给 GSM modem。也就是说,公用的MDD部分已经做好了,现在只需要针对不同的GSM模块进行不同的PDD驱动开发,这样就可以大大地提高开发效率了。

    (4)WinCE如何通过RIL实现电话功能?
    现在我们从WinCE线程的角度来观察RIL的工作流程。RIL主要包括RIL Stub 和 RIL Driver 两个部份。RIL Stub 和 RIL Driver 都拥有自己的线程,名为RILThread。应用程序调用RIL驱动程序的工作流程如下:①应用程序的进程在自己的进程空间里,以调用RIL Proxy方式发送请求。②RIL Proxy 以IPC方式把请求传给 Device Manager。③Device Mananger 根据操作码,将请求分发到相应的RIL驱动程序。④RIL Stub接收到操作码后根据PID做Context切换,然后把请求转发给RIL Driver。⑤最后,对应于用户进程Context中的RIL Driver会开始处理操作码。例如,RIL Driver将AT命令发给GSM modem,然后等待返回的response。

    因此,从以上的工作流程来看,RIL驱动模块性能的好坏会直接影响着所有无线通信应用相关的软件,而驱动程序设计是否经过优化又影响着RIL驱动程序的性能。
 

0
相关文章