RIL

-------------------------------------------------------------- 本人英语水平一般,只是为了学习才翻译的。有看不懂的,请去看原E文(MSDN帮助)。 刚开始翻译东东,可能有点词的翻译不准确的,请大家拍砖。 -------------------------------------------------------------- 无线接口层(Radio Interface Layer: RIL) RIL提供移动通讯核心和无线之间通讯的控制接口。它提供抽象层,使你可以创建一个能实现不同无线的驱动。同时 RIL抽象出依赖于设备的硬件细节,使OEM厂商整合不同的Modem到设备中,这样产品具有多样性。在一套移动通讯核 心的基础上,驱动容许所有无线工作。 RIL由两部分组成:RIL代理(RIL proxy)和RIL驱动。RIL代理层是一个基于CE的动态链接库(DLL),它管理消息回调 和驱动层中进程内部的功能调用。移动通讯核心模块通过RIL API调用RIL代理DLL。 RIL驱动层做为CE设备驱动来实现,由设备管理器 (Device.exe)来管理。RIL驱动向系统提供无线服务,包括语音、 数据和SMS。RIL驱动同时也通知无线状态的改变,例如服务区(coverage)、信息强度和来电等。 RIL代理由微软提供。你必须自定义RIL驱动,以便使你的无线硬件正常工作。微软提供RIL驱动实现的示例,可以驱 动GSM设备。 一 RIL OS设计 提供关于RIL驱动和RIL实现所需的OS定制信息。 支持无线所需要的组件 下表列出支持无线所需要的组件和示例驱动的位置。 Enfora External Radio Module /platform/DEVICEEMULATOR/src/drivers/rilpdd/enfora /platform/CEPC/src/drivers/rilpdd/enfora TTPCom Radio Module /platform/DEVICEEMULATOR/src/drivers/rilpdd/ttpcom /platform/CEPC/src/drivers/rilpdd/ttpcom 创建内核运行时映像时,通过关联IMG环境变量来指定需要的RIL驱动。同时必须明确的不设置其它RIL的IMG环境变 量。 下表列出支持RIL模块的IMG环境变量 Radio Module RIL Driver IMG Setting(s) Enfora External Radio Module IMGENFORA=1 TTPCom Radio Module IMGTTPCOM=1 下面的示例说明了如何使能Enfora驱动。如果使用Rnfora驱动,必须使能710MUX驱动。 在BaseOSEnv.bat 文件中增加以下行: set IMGFAKERIL= set IMGTTPCOM= set IMGENFORA=1 ------ 开发RIL驱动 你可以开发自定义的RIL驱动,来驱动你的无线模块。提供示例驱动以帮助你来设置和开发新的RIL驱动。 CE6.0提供下面的MDD层示例: Sample Driver Driver Location For Enfora radio stacks /public/Cellcore/ril/driver/mdd 此示例RIL驱动也可以在TTPCOM无线堆栈上工作,然而它仅仅在已经停产且使用过时固件的TTPCOM模块上进行了测试 ,没有在运行CE6.0的设备模拟器上测试过。 CE6.0也可以针对一部分无线模块用PDD层,详细的信息,请考虑Supported Radio Modules。 下面的列表说明一些与成功的设备驱动开发相关的主题。 1.如果开发设备驱动,请考虑Developing a Device Dirver。 2.CETK包含一系列的设备驱动测试工具,关于CETK,请考虑Windows Embedded CE Test Kit。 ------ RIL Miniport Driver (微端口/小端口 : miniport 不直接调用操作系统函数,它们对于操作系统的接口是NDIS。) RIL微端口驱动组件是一个NDIS中间驱动,它创建在TCP/IP堆栈和RIL之间传递IP配置信息的接口。 下图说明在无线硬件和TCP/IP堆栈之间包传递的路径。 TCP/IP Connection Manager | | | NDISUIO |_ _ _| | RIL Miniport Driver | RIL Driver | Radio Hardware RIL微端口驱动暴露的是802.3NIDIS接口,此接口被暴露给TCP/IP和其它协议驱动。微端口驱动同时也暴露一系列 WWAN(wireless Wide Area Network)配置和OIDS(notification NDIS object identifiers)。 微端口驱动使用RIL APIs发送和接收包,配置802.3接口和得到关于802.3接口的状态。 上图也显示了从Connection Manager到RIL微端口驱动的路径。此路径使用NDISUIO(NDIS User-Mode I/O)打包驱动 接口。Connection Manager使用RIL微端口驱动来帮助建立以下任务: 1.建立GPRS连接 2.断开GPRS连接 3.监视GPRS连接状态 ------ 为RIL驱动增加同步(Simultaneous)数据连接的支持 示例的RIL驱动支持同步的基于PPP的GPRS连接,详细的信息请考虑 Configuring Simultaneous Data Connections 中注册表设置项。 如果你想在一个自定义的RIL驱动中使用同步的数据连接,必须在驱动中实现相关的函数。 每个基于PPP的连接都是和COM端口句柄相关的,此COM端口必须在驱动中执行。 RIL代理使用下面的IOCTL调用RIL驱动,得到COM端口描述。 IOCTL_RIL_GETSERIALPORTHANDLEFROMCONTEXTID RIL驱动必须实现一个同步RIL驱动,它的原型如下: HRESULT RILDrv_GetSerialPortHandleFromContextID(DWORD dwContextID, TCHAR *tszDataPortName, DWORD dwSize, DWORD *pdwSizeOut); RIL驱动实现的示例位于RIL Sample Driver代码中。RILDrv_GetSerialPortHandleFromContextID()函数定义在 Data.cpp中,在Rilmain.cpp中调用。 RIL代理初始化端口句柄(使用CreateFile()函数),并返回此句柄用于特定上下文ID(GPRS连接)基于PPP的连接。 ------ 增加Push-To-Talk支持 Push-To-Talk(PTT)是一个半双工通讯方法。用户体验与使用无线电对讲机(walkie-talkie)的体验是一样的。在PTT 通话中,一通讯方在讲话时按下按钮,在听时松开按钮。 通常,为设备增加PTT,OEM必须做以下工作: 1.实现 RILCALLTYPECALLBACK() 函数,它标识PTT通讯。 2.正确设置PTT注册表项,考虑RIL Registry Setting。 PTTExample.exe应用是一个测试程序,演示PPT通话处理。提供此程序的源代码供考虑。 ------ RIL代理日志(Log) RIL代理日志是一个可选的DLL:rillog.dll。它用来减少RIL代理组件ril.dll的运行痕迹,并且提高RIL代理内存的 使用。 可以通过在编译映像文件时设置环境变量SYSGEN_RILPROXY_LOG为1 来增加RIL代理的日志。RIL代理日志也可以在映 像文件生成后手工运行:sysgen -p cellcore rillog 来增加。如果设备与Platform Builder连接,就不必增加 rillog.dll到映像文件中。 注册表项:HKEY_LOCAL_MACHINE/Software/Microsoft/RIL 用于控制RIL代理日志的输出。下表列出命名的值: Value : type Description RILProxyLogDetail : REG_DWORD 设置RIL代理日志的详细级别,设为1使能详细的日志输出。默认值为1。 RILProxyLogNormal : REG_DWORD 设置RIL代理日志输出级别,设为1使能正常日志输出。默认值为1。 注:代理日志输出时,RILProxyLogDetail 或 RILProxyLogNormal 必须有一个为1。 ------ 二 RIL应用开发 应用开发者可以使用RIL函数做出不同特点的手机。RIL功能暴露的函数性的需求,实现了基于无线的手机通讯和数 据连接。本部分包括开发者对实现通讯和数据连接情景感兴趣的概念性信息。 RIL体系 RIL被分成两独立的部分:RIL驱动和RIL代理。RIL驱动处理无线命令和事件。RIL代理执行多用户访问RIL驱动的仲 裁。 RIL驱动体系基于嵌入式Windows CE标准的MDD/PDD驱动模型。分为两个主要的部分,MDD和PDD层。下图说明了RIL体 系: RIL Client(celltsp.dll) | RIL Proxy(ril.dll) | RIL Dirver(rilgsm.dll) RILMDD.lib RILPDD_AT_COMMON.lib RILPDD_AT_OMAP730.lib | Radio MUX(csmi.dll) | Radio Stack(TI TCS 3.x) MDD(Model Device Driver)层独立于无线堆栈,它包含RIL代理接口代码和与RIL驱动无关特性实现的代码。 PDD(Platform Dependent Driver)层是与无线堆栈相关的。它包含为了无线堆栈而实现的RIL APIs接口代码,这是 OEM厂商必须实现的层。为了促进PDD层更容易的实现任务,PDD层自身分成无线类型通用的代码和特定无线类型特有 的代码两部分。例如上图所示的PDD层被分成通用的AT代码和无线特定的AT代码。 虽然RIL驱动被分成2个主要的部分,但输出的文件仍然是一个单独的DLL。 更多信息,请考虑RIL驱动和RIL代理。 ------ TIL呼叫概述 蜂窝电话服务提供者(TSP)可以使用RIL拨出或接通语音通话,就像是远程访问服务(RAS)一样。下面的部分提供一些 典型的呼叫情况的示例。 RIL呼出语音呼叫过程 为了拨打语音呼叫,蜂窝TSP和RIL驱动完成以下步骤: 1. 应用调用电话API(TAPI): lineMakeCall()或lineDial()函数初始化呼叫。 2. TSP在拨号状态中创建一个TAPI呼叫。 3. TSP调用RIL_SetAudioDevices()函数来设置 RIL_AUDIO_HANDSET 常量为呼入和呼出同时的设备。如果此函数执 行成功,返回RIL_RESULT_OK。 4. 连接管理器通过TAPI RIL_GetAudioMuting()函数来得到静音状态。 5. TSP调用RIL_Call(),使用IOCTL_RIL_DIAL IOCTL。在IOCTL_RIL_DIAL 中RIL_IOControl会被调用。 6. RIL驱动向无线发送一个拨号命令,无线知道拨号已经初始化。 7. RIL驱动返回对拨号命令的响应RIL_RESULT_OK。 8. RIL驱动生成RIL_NOTIFY_CONNECT 和 RIL_CALLTYPE_VOICE 变量。 9. 当TSP等待呼叫进入RIL_CALLSTAT_ACTIVE 模式时,循环调用RIL_GetCallList()函数。如果此函数调用成功完成 ,它返回RIL_RESULT_OK和带有以下值的结构体RILCALLINFO。 Member Value DwID 1 DwDirection RIL_CALLDIR_OUTGOING DwStatus RIL_CALLSTAT_DIALING or RIL_CALLSTAT_ACTIVE DwType RIL_CALLTYPE_VOICE DwMultiparty RIL_CALL_SINGLEPARTY RaAddress "14255551212" 如果数据连接是活动的,同时用户请求呼出语音呼叫,如果此数据连接不是可挂起/恢复的话连接管理器将请求中断 数据连接,并且在呼出语音呼叫前等待无线关于数据连接的返回。呼出语音呼叫在无线没有断开数据连接时,是不 会呼叫的。如果数据连接是可挂起/恢复的,连接管理器不要求低层做任何事,使数据连接进入挂起状态。 --- RIL呼入语音呼叫接收过程 为了接呼入的语音呼叫,蜂窝TSP和RIL驱动完成以下步骤: 1. 无线检测呼入呼叫 2. RIL产生RIL_NOTIFY_RING 消息和带有以下值的结构体RILRINGINFO Member Value dwCallType RIL_CALLTYPE_VOICE dwAddressId 0 3. RIL产生RIL_NOTIFY_CALLERID 消息和带有以下值的结构体 RILREMOTEPARTYINFO Member Value raAddress "4255551212" dwValidity RIL_REMOTEPARTYINFO_VALID 4. TAPI调用RIL_GetLineStatus()函数得到呼叫状态,返回值RIL_RESULT_OK 和指向RIL_LINESTAT_RINGING 常量的 lpData 参数。此步骤可以发生多次。 5. 连接管理器请求TAPI RIL_GetAudioMuting()函数得到静音状态,返回值是RIL_RESULT_OK(FALSE: 非静音)。此 步骤可以发生多次。 6. TAPI调用RIL_GetCallList()函数得到有效的呼叫列表。此步骤可以发生多次。返回值是RIL_RESULT_OK 和 指向 带有以下值的结构体 RILCALLINFO 的lpData Member Value dwID 1 dwDirection RIL_CALLDIR_INCOMING dwStatus RIL_CALLSTAT_INCOMING dwType RIL_CALLTYPE_VOICE dwMultiparty RIL_CALL_SINGLEPARTY raAddress "14255551212" 7. 当用户应答时,TAPI调用RIL_Answer()函数。 8. 无线应答此呼叫。 9. RIL驱动返回RIL_RESULT_OK 和 值为空的lpData 做为应答指令。 10. RIL驱动产生RIL_NOTIFY_CONNECT 和 RIL_CALLTYPE_VOICE 常量。 11. TSP调用 RIL_SetAudioDevices()函数设置RIL_AUDIO_HANDSET 使用设备具有输入/输出音频。返回值是 RIL_RESULT_OK。 12. TAPI调用RIL_GetLineStatus()函数来确保呼叫已经被应答。返回值是RIL_RESULT_OK 和指向 RIL_LINESTAT_CALLINPROGRESS 常量的指针lpData。 当数据连接活动时,连接管理器通过TAPI接收到来电通知,在接受收电前连接管理器请求断开数据连接并且等待无 线返回断开的响应。如果数据连接没有断开,则来电不能到达。如果数据连接具有挂起/恢复能力,无线将便数据连 接进入挂起状态。 通常情况下如果语音呼叫已经初始化,同时一个低优先级的连接是不能建立的。但是在特定的条件下也可能发生, 如在来电到达连接管理器的通知前,数据连接被请求。这种情况下,当两种连接不能同时建立,数据连接被拒绝, 合理的语音呼叫被支持。另一种可接受的动作是拒绝语音呼叫和数据连接,但是这可能引起用户不好的感觉。 一些程序可能直接请求无线连接,而不通过连接管理器。如果请求的连接使用无线资源,连接管理器将检测到此连 接,并且保持一个内部伪装的连接对象,它具有比数据连接更高的、但低于连接管理器中语音连接的优先级。从而 ,如果请求一个语音呼叫,此伪装的连接将会被连接连接器断开,一量此伪装的连接被检测到断开,语音呼叫将被 建立。 --- RIL语音呼叫断开过程 挂掉RIL语音呼叫或远程断开连接,蜂窝TSP和RIL驱动将完成以下步骤: 1. 无线检测到远程断开,然后产生lpData带有值为RIL_DISCINIT_REMOTE 的 RIL_NOTIFY_DISCONNECT 常量。 2. TAPI调用 RIL_GetCallList()函数决定改变哪个呼叫的状态。返回值为RIL_RESULT_OK,且lpData 的值为空。 3. TSP调用 RIL_SetAudioDevices()函数设置RIL_AUDIO_NONE ,使设备具有音频输入和输出功能。返回值为 RIL_RESULT_OK。 4. 连接管理器通过调用 RIL_GetAudioMuting()函数得到静音的状态,返回值是RIL_RESULT_OK(TRUE:静音)。 --- 使用RIL发起RAS呼叫(RAS:Remote Access System,远程访问服务) 在建立RAS呼叫时使用RIL,蜂窝TSP和RIL驱动须完成以下步骤: 1. TAPI调用 RIL_SetBearerServiceOptions()函数,带结构体RILBEARERSVCINFO,根据结构体RASDEVINFO 设置承 载业务。以下列出典型的RILBEARERSVCINFO的值: RIL_SPEED_9600_V32 RIL_BSVCNAME_DATACIRCUIT_ASYNC_UDI_MODEM RIL_BSVCCE_NONTRANSPARENT 返回值是RIL_RESULT_OK。 2. TAPI调用 RIL_Dial()函数,参数设置为:"T14255551212", RIL_CALLTYPE_DATA, 和 RIL_DIALOPT_NONE。 3. RIL驱动产生RIL_NOTIFY_DATASVCNEGOTIATED 通知,它的lpData 指结构体 RILSERVICEINFO,设置为异步、不透 明。这样,系统忽略此通知。 4. RIL驱动产生RIL_NOTIFY_CONNECT 通知,它的lpData 指向成员dwCallType 被设置为RIL_CALLTYPE_DATA 和 dwBaudRate 被设置为9600 (或连接的实际速率)的结构体RILCONNECTINFO。 5. 对于拨号命令,驱动返回RIL_RESULT_OK ,lpData 的值为 NULL。 6. RAS打开数据端口,开始点对点(PPP)协商。 7. TAPI调用 RIL_GetCallList()函数确认呼叫是活动的。本步可多次发生。返回值是RIL_RESULT_OK,它有lpData 指向于带有下列值的结构体RILCALLINFO Member Value dwID 1 dwDirection RIL_CALLDIR_OUTGOING dwStatus RIL_CALLSTAT_ACTIVE dwType RIL_CALLTYPE_DATA dwMultiparty RIL_CALL_SINGLEPARTY raAddress "14255551212" ------ (未完,待续......) 三 RIL注册表部分 四 RIL驱动安全性 五 RIL参考

你可能感兴趣的:(工作,manager,Module,dll,audio,通讯)