王德望 邓一伟

摘 要:针对现有4G全网通终端卡2不支持全网制式,提出一种基于Android5.0的双卡切换设计方案,实现可以将卡2接入到4G网络中,充分利用底层协议栈资源。

关键词:终端;双卡;切换;协议栈

1 概述

现有的4G全网通终端中,芯片厂商普遍采用的技术方案是卡1映射支持多种网络制式的协议栈,包括支持TDD-LTE、FDD-LTE、TDSCDMA、WCDMA、EVDO、GSM、CDMA 1X其中多种制式,而卡2只能支持GSM网络的协议栈。这样就造成无论是支持全网的终端还是非全网终端,都只能用卡1接入更高的网络制式,卡2只能接入GSM。即使只插入卡2,用户也只能使用GSM网络,这样会造成资源浪费,用户只能通过关机后手动换卡将卡2的SIM/USIM卡插入卡1才能接入到其支持的最高网络制式。

出于成本考虑,目前芯片厂商还没有底层协议栈能够双卡同时支持全网制式。为了解决上述技术方案缺陷,我们提出了一种4G全网通终端的双卡切换方案,所谓的双卡分为主卡和副卡,其中主卡指该卡接入能够支持多网络制式,副卡只能支持GSM网络,该方案也可以称为主副卡切换。用户可以通过手动切换主副卡选择使用哪张卡接入4G网络,而不必关机换卡;同时,该方案能够在用户插入单卡的情况下(无论是插入到卡1还是卡2),自动将该卡设置为主卡,接入其支持的最高网络制式,充分利用了底层的协议栈资源,避免浪费。

2 双卡切换方案基本原理

文中所述双卡切换方案是在Android5.0系统上实现的。在芯片厂商中协议栈stack id和物理上卡槽card id是一一对应的,卡1是一直映射支持多种网络制式的协议栈的,而双卡切换方案就是依靠切换card id与stack id的对应关系来实现双卡的协议栈切换,如下图2.1。

3 双卡切换方案基本流程

双卡切换方案主要包括Framework,RIL,以及Modem三大模块处理

3.1 Framework处理

在开机后Framework会去查询双卡的相关信息,查询结束之后根据双卡的信息去更新数据库。在插双卡的场景中,需要用户去手动切换设置3/4G主卡,目前Android5.0原生就提供了主副卡的切换入口,实际上原生代码中有两种方案可以实现4G主卡的切换。第一种方案是同时显示双卡的优选网络模式设置,在优选网络设置中先将主卡设为GSM ONLY,再将副卡设为2/3/4G就可以将4G主卡切到副卡上。第二种方案是专门提供一个专门的3/4G主卡切换选项,用户可以选择一张卡设为3/4G主卡,实际原理也是将主卡设为GSM ONLY,将副卡设为2/3/4G。本文选择使用第二种方案,该方案对两次优选网络设置做了串行化处理,比较可靠。对于插单卡的场景中,将有卡的优先网络设置为2/3/4G,另外一张无卡的设置为GSM ONLY。

在设置完优选网络模式后,需要判断是否要切换协议栈,例如在手动切换卡2为主卡时,设置卡2为2/3/4G,但是其绑定的协议栈只支持GSM ONLY,这时就需要切换协议栈,Framework会去激活卡,去绑定协议栈,并下发交叉重绑定协议栈给RIL处理,按照新的协议栈绑定关系激活卡,最终正常起网。

3.2 RIL处理

在RIL层双卡切换主要分发三个阶段:初始化阶段,去绑定阶段,绑定阶段。

RIL在开机初始化客户端时会通过系统属性去获取当前rild的stack id,在客户端初始化结束阶段调用函数绑定stack id和相应的客户端,绑定完成后会更新RIL中保存的stack id全局变量。RIL收到Framework下发的去绑定协议栈后,会更新自己的状态并清除掉还处于pending状态的请求,并将结果返回给framework。在绑定阶段,RIL会判断framework下发绑定的stack id和RIL中保存的全局变量是否一致,如果不一致,处理流程与开机流程类似,调用函数绑定framework下发新stack id和相应的客户端,绑定完成后,更新RIL中保存的stack id全局变量,并将绑定结果返回给framework;对于framework下发绑定的stack id和RIL中保存的全局变量一致时,RIL会获取modem协议栈信息并更新相应状态,最后将绑定结果返回给framework。

3.3 Modem处理

在Modem层双卡切换主要是通过framework下发激活卡时携带stack id,物理卡槽card id等信息,告知modem当前主副卡关系,modem发现当前的stack id与上一次保存的stack id不一致时,启动一个2s的定时器,当定时器超时或者两张卡都激活完成,就需要重新加载modem配置文件,复位modem并触发重新搜网。

4 总结

双卡切换方案是当前及以后很长一段时间内的发展趋势。只要使用该方案的终端,就没有必要开发支持两套全网协议栈的芯片,降低了使用两套全网制式网络协议栈的开发成本和硬件成本。

参考文献:

[1]杨青平编着.深入理解Android: Telephony原理剖析与最佳实践[M].北京:机械工业出版社,2013.1.

[2]Android5.0源代码.