新闻中心

EEPW首页>嵌入式系统>设计应用> 基于Android平台的双网双待的设计方法

基于Android平台的双网双待的设计方法

作者: 时间:2015-03-11 来源:网络 收藏

  在PhoneAPP 中new 一个GSMPhone 和一个CDMAPhone,分别对应两种framework (不同的CallTracker)和RIL (不同的RIL),实现单模向双网双待的改进。

本文引用地址://m.amcfsurvey.com/article/270832.htm

  图中CallLiST 主要用来管理两个电话之间的切换,以避免如挂掉某一个通话却导致另一个的通话也结束等一系列界面显示出错问题。CallList 模块管理两个电话以及这两个电话所有的通话,通过一个CallList 表来存储两个电话的所有呼叫。上层界面调用这个CallList 表来处理两个电话的切换。在framework 中new 一个CallList 的类来存储phone 的多个电话以便上层显示。

  CallList 类中包含attached(),detach(),update(),clear(),get-CurrentCall(),getDefault()等方法。使得两个Phone 的Call 得到控制。挂掉的时候就从表中删除,来电话的时候加入表中。

  上层显示的时候,只要调用CallList 中的最后存入Call 就不会出现界面出错的情况。

  在包含GSM 网络和CDMA 网络的双网双待模块中,因为有了CDMA 部分的整合不少代码已经发生改变,原来的CallTracker只被GSM 使用,在这里改为CallTracker 和GsmCallTracker,抽象出CallTracker 基类,使其也可以被CDMA 利用; GSMCall 变成GsmCall,更加符合统一的命名规则; 另外,比如pppd 的启动部分,也从Java 框架层放到RIL 层。

  3. 2RIL 层的改进

  在系统中RIL 是电话系统的本地实现,它提供了电话服务(android. telephony)与无线电硬件之间的抽象层,主要负责AT 命令的发送和响应解析,这也是电话服务的实现基础。另外,RIL 还负责数据的可靠传输。因此RIL 在Android电话部分起核心作用。本方案设计过程中主要涉及到RIL以下四个部分的修改:

  (1)由于本方案维护两个RIL 实例,因此RIL 实例管理者(RIL instance Manager)需要各自负责与android telephony 通过socket 进行连接。每个RIL 实例针对各自的SIM 卡提供专用的通信通道来进行modem 侧的通信服务。

  (2)无线电仲裁管理者(Radio Service Arbitration Manager),这是实现双网双待方案中新增加的模块,主要用来为每个RIL 实例进行语音和短消息业务的仲裁,数据服务的仲裁由MODEM 来进行。

  (3)RIL 事件分配机(RIL Event Dispatcher),用于分配RIL请求及AMSS 事件到通信服务管理模块进行的处理。

  (4)无线电服务管理者(Radio Service Manager),Android 通话应用首先需要通过子系统信息来从framework 层获得通话服务,然后每个SIM 卡子系统将会映射到一个特定的RIL 实例ID上,服务管理将使用RIL 实例的ID 来识别子系统ID 中DSS API的参数。

  3. 3 Android 双网双待通话机制的实现

  Android 系统电话服务的实现基础是RIL.在Android 单模状态下的RIL 同TI 等平台类似,均使用了Google 默认的参考接口,也就是通过打开modem 侧提供的串口或者USB 虚拟串口向modem 侧发送AT 指令的方式,进行实际的无线通信。比如,UI上层向RIL 层发送RIL_REQUEST_DIAL 请求,RIL 层在接收到该请求的时候,通过串口向modem 发送"AT***"命令,发起呼叫,当然,最终真正实现通话的是modem 侧的功能,此时,与Android 就无关了。Android 平台RIL 与modem 的工作原理如图4 所示。



  图4 RIL 与modem 的工作原理

  呼叫(call)构建于电话服务的基本架构之上。

  与呼叫相关的主要用户接口,其实就是基于ITelephony 接口实现Phone 应用中的"Phone"服务,通过TelephonyManager 提供访问接口。此服务内部通过PhonyFactory 获取的GSMPhone /CDMAPhone 来访问RIL,提供诸如拨号、接通、挂断、保持通话等服务功能。Android 双网双待呼叫部分的结构如图5 所示。



  图5 android 双网双待呼叫部分结构

  Android 系统双网双待呼叫部分的实现,从GSMPhone /CDMAPhone到对应RIL 的路径中间主要涉及几个关键数据结构,即GSMCall /CDMACall、CallNotifiter、GSMConnection /CDMAConnection、CallTracker 等类。

  其中GSMCall 和CDMAPhone 都继承Call 基类,提供基本的呼叫控制结构以及呼叫状态,如Hold、Active 等信息,每个接通的GSMCall / CDMACall 都拥有一个或多个(conference call)GSMConnection /CDMAConnection 结构,用于维护呼叫时长等相关信息。CallTracker 是呼叫模块的核心,它提供与呼叫相关的接口,如通话、挂断等。GSMPhone /CDMAPhone 拥有CallTracker的实例,并封装相应的接口,这个接口通过调用GSMPhone /CDMAPhone中的CommandsInterface 实现,即提交的RIL 封装。

  除此之外,CallTracker 还维护当前的GSMCall 和CDMACall列表,保持对所有呼叫状态的追踪,提供对来去电等呼叫状态的管理。实现追踪的方法为pollCallsWhenSafe,通过CommandsInterface的getCurrentCalls 接口获取当前活动的呼叫列表。这一操作的底层实现为AT + CLCC(不同的Modem 实现可能不同),这是从Modem 获取呼叫状态列表的主要接口。回调通过ENENT_ POLL _ CALLS-RESULT 完成,回调函数为handlePollCalls,这是获取Modem 中实际呼叫信息的核心方法,也是Tracker的含义所在。handlePollCalls 完成实际的追踪功能,根据底层上报的Outgoing、Incomming 以及Active、Hold 等状态更新Call列表的信息,每个呼叫在其生命周期内的状态转换,在Call-Tracker 中都可得到体现,并将这些变化信息及时通知其关注者,也就是实现Phone 的应用。

  4 结果分析

  基于Android 操作系统实现的双网双待功能模块设计,利用Android 通用的系统架构和设备无关的应用程序开发平台,实现了双网双待单通系统电话部分的框架设计和上层Phone 应用程序设计。改进后的Android 系统平台同时支持GSM 和CDMA两种网络同时待机,这大大方便了许多拥有两张手机卡并且不在同一制式网络的用户。图6 为Android 系统平台上GSM和CDMA 双网同时待机的状态图。



  图6 GSM 和CDMA 双网同时待机界面

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

linux相关文章:linux教程


cdma相关文章:cdma原理




关键词:AndroidLinux

评论


相关推荐

技术专区

关闭