RIL我有话说

来源:互联网 发布:链条包 知乎 编辑:程序博客网 时间:2024/04/29 01:25

RIL我有话说(1)

【简介】
RIL是移动通讯核心(cellcore)和无线硬件设备(modem)之间通讯的控制接口,由此集成GSM, CDMA等不同Modem设备,适应不同无线网络。RIL由两部分组成:RIL proxy和RIL driver。RILproxy是一个基于CE的动态链接库(DLL)  --- ril.dll,微软已经提供,它简化上层各个应用对驱动的访问。 而RIL driver即流驱动需要自己实现。RILdriver向系统提供无线服务,包括语音、 数据和SMS。RILdriver同时也通知无线状态的改变,例如服务区(coverage)、信息强度和来电等。 RIL模型类同音频模型,ril proxy好比waveapi, ril driver好比wave流驱动。

RIL我有话说(2)

本帖最后由 max 于 2009-12-4 01:33 编辑

RIL结构和接口】


一:串口驱动。

最下层是串口硬件和串口驱动。Modem串口连接最普遍的说法是需要用到9pin的全功能串口,我的看法,在RIL驱动中对DCD配置的修改,使用3线串口也是可以的,但是在完整的产品还是要通过3线之外的其他io来辅助,不然会牺牲掉硬件流控以及唤醒,通知等功能。


二:可选的mux驱动。

考虑到modem不仅有at控制通道,还有数据传输通道,而串口是无协议的接口,所以从软件实现和性能考虑,最好的方式当然是2个串口分别提供。但实际中常见的都是1个串口的,支持gsm0710协议的modem能够实现在1个物理串口基础上虚拟多路串口。怎么判断是否支持多路复用? modemAT+CMUX命令来完成多路复用协议。Cellcore里面Gsm 07.10协议已经提供源码实现mux07_10.dll,默认的虚拟出2个串口COM7COM9.典型应用中,COM7作为AT命令通道,COM9作为数据通道,这样意味着在gprs状态下语言短信业务有可能可以同时使用,不必退出data模式。如果你的modem本身就已经有2路物理串口,那么710mux驱动是不需要的。如果你的modem并不支持GSM 07.10协议,只有+++退出data模式了。


三:RIL驱动。

710mux驱动之上就是ril驱动了。MS已经抽象了大部分ril驱动的功能,通过了MDD源码,所以写一个ril驱动就是把自己modem相关的代码和MDD链接成一个流驱动rilgsm.dllril驱动与串口驱动的最大不同在于,ril是同时支持多个应用使用的,每次opennew一个Instance对应。

  1. DWORD RIL_Open(DWORD dwData, DWORD dwAccess, DWORD dwShareMode)
  2. {
  3.    pDevice = (CRilHandle)dwData;
  4.    pHandle = new CRilInstanceHandle;
  5.    pHandle->Init(pDevice);
  6.    pDevice->AddToList(pHandle);
  7.    return (DWORD)pHandle;
  8. }
复制代码

上层应用打开RIL之后就可以使用RIL流驱动的IOCTL来使用RIL驱动。


四:RIL代理层

直接使用ril驱动显得不方便,所以MS继续封装了一个RILProxy的层,由它来和驱动打交道,这个RIL Proxy的实体是ril.dll,函数形式都是RIL_XXX(),函数声明在ril.h文件。基本上所有的应用都是使用代理层来实现。


五:应用层

RIL Proxy的上层是TAPI/ExTAPI SIM管理程序,SMS管理程序,电话,以及是基于gprs的网络应用程序。如图1,这些顶层的应用也许并没有直接和RIL驱动打交道,中间还有一些代理层,如下面列出的celltsp.dll, sms.dll等。


tapi-> tsp(celltsp.dll) -> ril代理(ril.dll) –> rilgsm.dll


Sim -> sim api(cellcore.lib) -> ril.dll ->rilgsm.dll


Sms -> sms api(sms.dll) -> sms provider(sms_provider.dll) ->smsdrv.dll -> ril.dll -> rilgsm.dll


再往上,还有connection manager(CE6 R3包含)连接管理器api ATCIAssisted tapi这些。 ATCI是保留给应用一条对modem直接发AT命令的管道,但只在wm中有ce并没有包含。Assisted Tapice6的文档仅仅包含tapiRequestMakeCall,按照理解,这个是提供给系统拨号软件之外的第三方软件一个请求拨号的接口,会转发到系统的拨号软件处理。至于connection manager0910月发布R3版本中的新增内容,如同wm中的CM模块,这对应用而言是很有吸引力的模块,具有自动完成各种网络连接,自动选择网络,自动重拨,永远在线按需使用等功能,遗憾的是根据我目前实验,因为DMProcessConfigXMLCE无实现,CM配置存在困难,如您有答案不吝赐教。

原创粉丝点击