王德望 鄧一偉
摘 要:針對現(xiàn)有4G全網(wǎng)通終端卡2不支持全網(wǎng)制式,提出一種基于Android5.0的雙卡切換設(shè)計方案,實現(xiàn)可以將卡2接入到4G網(wǎng)絡(luò)中,充分利用底層協(xié)議棧資源。
關(guān)鍵詞:終端;雙卡;切換;協(xié)議棧
1 概述
現(xiàn)有的4G全網(wǎng)通終端中,芯片廠商普遍采用的技術(shù)方案是卡1映射支持多種網(wǎng)絡(luò)制式的協(xié)議棧,包括支持TDD-LTE、FDD-LTE、TDSCDMA、WCDMA、EVDO、GSM、CDMA 1X其中多種制式,而卡2只能支持GSM網(wǎng)絡(luò)的協(xié)議棧。這樣就造成無論是支持全網(wǎng)的終端還是非全網(wǎng)終端,都只能用卡1接入更高的網(wǎng)絡(luò)制式,卡2只能接入GSM。即使只插入卡2,用戶也只能使用GSM網(wǎng)絡(luò),這樣會造成資源浪費,用戶只能通過關(guān)機后手動換卡將卡2的SIM/USIM卡插入卡1才能接入到其支持的最高網(wǎng)絡(luò)制式。
出于成本考慮,目前芯片廠商還沒有底層協(xié)議棧能夠雙卡同時支持全網(wǎng)制式。為了解決上述技術(shù)方案缺陷,我們提出了一種4G全網(wǎng)通終端的雙卡切換方案,所謂的雙卡分為主卡和副卡,其中主卡指該卡接入能夠支持多網(wǎng)絡(luò)制式,副卡只能支持GSM網(wǎng)絡(luò),該方案也可以稱為主副卡切換。用戶可以通過手動切換主副卡選擇使用哪張卡接入4G網(wǎng)絡(luò),而不必關(guān)機換卡;同時,該方案能夠在用戶插入單卡的情況下(無論是插入到卡1還是卡2),自動將該卡設(shè)置為主卡,接入其支持的最高網(wǎng)絡(luò)制式,充分利用了底層的協(xié)議棧資源,避免浪費。
2 雙卡切換方案基本原理
文中所述雙卡切換方案是在Android5.0系統(tǒng)上實現(xiàn)的。在芯片廠商中協(xié)議棧stack id和物理上卡槽card id是一一對應(yīng)的,卡1是一直映射支持多種網(wǎng)絡(luò)制式的協(xié)議棧的,而雙卡切換方案就是依靠切換card id與stack id的對應(yīng)關(guān)系來實現(xiàn)雙卡的協(xié)議棧切換,如下圖2.1。
3 雙卡切換方案基本流程
雙卡切換方案主要包括Framework,RIL,以及Modem三大模塊處理
3.1 Framework處理
在開機后Framework會去查詢雙卡的相關(guān)信息,查詢結(jié)束之后根據(jù)雙卡的信息去更新數(shù)據(jù)庫。在插雙卡的場景中,需要用戶去手動切換設(shè)置3/4G主卡,目前Android5.0原生就提供了主副卡的切換入口,實際上原生代碼中有兩種方案可以實現(xiàn)4G主卡的切換。第一種方案是同時顯示雙卡的優(yōu)選網(wǎng)絡(luò)模式設(shè)置,在優(yōu)選網(wǎng)絡(luò)設(shè)置中先將主卡設(shè)為GSM ONLY,再將副卡設(shè)為2/3/4G就可以將4G主卡切到副卡上。第二種方案是專門提供一個專門的3/4G主卡切換選項,用戶可以選擇一張卡設(shè)為3/4G主卡,實際原理也是將主卡設(shè)為GSM ONLY,將副卡設(shè)為2/3/4G。本文選擇使用第二種方案,該方案對兩次優(yōu)選網(wǎng)絡(luò)設(shè)置做了串行化處理,比較可靠。對于插單卡的場景中,將有卡的優(yōu)先網(wǎng)絡(luò)設(shè)置為2/3/4G,另外一張無卡的設(shè)置為GSM ONLY。
在設(shè)置完優(yōu)選網(wǎng)絡(luò)模式后,需要判斷是否要切換協(xié)議棧,例如在手動切換卡2為主卡時,設(shè)置卡2為2/3/4G,但是其綁定的協(xié)議棧只支持GSM ONLY,這時就需要切換協(xié)議棧,F(xiàn)ramework會去激活卡,去綁定協(xié)議棧,并下發(fā)交叉重綁定協(xié)議棧給RIL處理,按照新的協(xié)議棧綁定關(guān)系激活卡,最終正常起網(wǎng)。
3.2 RIL處理
在RIL層雙卡切換主要分發(fā)三個階段:初始化階段,去綁定階段,綁定階段。
RIL在開機初始化客戶端時會通過系統(tǒng)屬性去獲取當(dāng)前rild的stack id,在客戶端初始化結(jié)束階段調(diào)用函數(shù)綁定stack id和相應(yīng)的客戶端,綁定完成后會更新RIL中保存的stack id全局變量。RIL收到Framework下發(fā)的去綁定協(xié)議棧后,會更新自己的狀態(tài)并清除掉還處于pending狀態(tài)的請求,并將結(jié)果返回給framework。在綁定階段,RIL會判斷framework下發(fā)綁定的stack id和RIL中保存的全局變量是否一致,如果不一致,處理流程與開機流程類似,調(diào)用函數(shù)綁定framework下發(fā)新stack id和相應(yīng)的客戶端,綁定完成后,更新RIL中保存的stack id全局變量,并將綁定結(jié)果返回給framework;對于framework下發(fā)綁定的stack id和RIL中保存的全局變量一致時,RIL會獲取modem協(xié)議棧信息并更新相應(yīng)狀態(tài),最后將綁定結(jié)果返回給framework。
3.3 Modem處理
在Modem層雙卡切換主要是通過framework下發(fā)激活卡時攜帶stack id,物理卡槽card id等信息,告知modem當(dāng)前主副卡關(guān)系,modem發(fā)現(xiàn)當(dāng)前的stack id與上一次保存的stack id不一致時,啟動一個2s的定時器,當(dāng)定時器超時或者兩張卡都激活完成,就需要重新加載modem配置文件,復(fù)位modem并觸發(fā)重新搜網(wǎng)。
4 總結(jié)
雙卡切換方案是當(dāng)前及以后很長一段時間內(nèi)的發(fā)展趨勢。只要使用該方案的終端,就沒有必要開發(fā)支持兩套全網(wǎng)協(xié)議棧的芯片,降低了使用兩套全網(wǎng)制式網(wǎng)絡(luò)協(xié)議棧的開發(fā)成本和硬件成本。
參考文獻:
[1]楊青平編著.深入理解Android: Telephony原理剖析與最佳實踐[M].北京:機械工業(yè)出版社,2013.1.
[2]Android5.0源代碼.