RIL

一、概念

 

二、疑问

1. Android底层如何跟GSM模块通信?

2. RIL是一种怎样的设计想法?

3. RIL跟上层是怎样通信,跟底层是怎样通信?

4. 举例说明设置通话音量 的流程。

 

三、讨论

 

 

 

1. Android底层如何跟GSM模块通信?

     对于大部分独立的通信模块而言,模块化都已经非常完善,接口灰常简单,也有统一的软件接口 。一般Modem装上SIM卡,上电即可工作。自动完成初始的找网,网络注册等工作,完成后可打电话,发短信等。

      Modem硬件傻姑娘一般提供两个通信通道:一个用于AT指令,一个用于数据传输。

      Modem驱动比较简单,复杂的AT相关处理一般不放在驱动层,而是通过其上的RIL层去处理 。在Linux下,Modern驱动就是建立在UART或USB上的几个tty通道,提供与Modem直接的数据交互。

 

2. RIL是一种怎样的设计想法?

 

3. RIL跟上层是怎样通信,跟底层是怎样通信?

 

4. 举例说明设置通话音量 的代码编写流程。

 

[继承关系]

 

                                               --CDMAPhone.java

                   --PhoneBase.java--

Phone.java--                            -- GSMPhone.java

                   --PhoneProxy.java

 

Phone.java 描述了对Phone的所有接口。PhoneBase实现了Phone接口 ,而又派生出CDMAPhone和GSMPhone分别对CDMA和GSM操作; PhoneProxy也实现了Phone接口,当不需要区分CDMA和GSM操作时使用。

 

(1)根据这样的类继承关系,所以在JAVA框架层中,设置音量放在PhoneBase和PhoneProxy类中实现,更确切说是RIL.java实现了设置音量的方法。在此说一个插曲---RIL.java RIL类中有3个比较重要的对象,分别是RILR equest、RILSender和RILReceiver。

RILRequest是一个命令请求。

RILSender 负责AT指令发送。

RILReceiver 负责处理上报的信息。当有上报信息来到时,系统将通过RILReciver来得到信息,并进行处理。

当发送一个设置音量的请求时,获得一个类型为EVENT_SEND的RILRequest请求来发送该命令,通过跟踪代码发现最终将命令写入了socket 进行发送。

          s.getOutputStream().write(dataLength);

 

(2)其实RIL.java的作用相当于代理,起到转发命令 的作用。它通过socket往约定的端口发送命令,而Native RIL正是监听同一个端口

ril.cpp:

    s_fdListen = android_get_control_socket(SOCKET_NAME_RIL );

Native RIL的实现文件是 reference-ril.c .

 

5.扩展 -

[参考]

http://www.kandroid.org/android_pdk/telephony.html

http://blog.csdn.net/yinlijun2004/archive/2010/11/18/6019860.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值