[FAQ09807][NW]设定默认开机时的network mode

来源:互联网 发布:win7无损分区软件 编辑:程序博客网 时间:2024/05/16 00:49

[DESCRIPTION]

network mode的常见类型有

WCDMA preferred : 0

GSM only : 1

WCDMA only : 2

GSM UMTS : 3

CDMA : 4

... (参考RILConstants.java)

是透过AT+ERATmode的值丢给modem,让modem设定对应的mode 如果是TDD手机,那么其network mode的值和TD-SCDMA是对应的。

WCDMA preferred -- TD-SCDMA preferred

WCDMA only -- TD-SCDMA only

这个network mode在第一次开机时会有一个参数来记录默认值,这个参数就是PREFERRED_NETOK_MODE,该参数定义在在RILConstants.java中。在SettingProvider loading的时候,这个参数的值就写到Settings.Global.PREFERRED_NETWOK_MODE当中(参考SettingsProvider中的DatabasHelper.java)。然后在make default phone的时候就根据Settings.Global.PREFERRED_NETWOK_MODE取出来的值来使用。

 

注:因为network modeEnd user可以通过操作setting菜单切换的,所以本FAQ只是修改download完第一次开机的network mode默认值

 
[SOLUTION]
  这部分的修改分为两部分:
      一、修改第一次开机默认的网络模式
      二、修改3G switch/SIM switch后主卡默认的网络模式
  具体可以参考下面的修改说明。

一、修改第一次开机默认的网络模式
  修改第一次开机默认的网络模式,分为两种情况:
      1.   修改为系统默认支持的网络模式
      2.   修改为系统默认不支持的网络模式
  需要根据实际的需求,参考对应的情况进行修改。

1、修改为系统默认支持的网络模式
在RILConstants.java (path: alps/framework/base/telephony/java/com/android/internal/telephony/)中把PREFERRED_NETWORK_MODE的值修改成需要的值;例如默认设成GSM only:

2、修改为系统默认不支持的网络模式

原生的NETWORK_MODE_*宏只定义了部分网络模式,一些特殊的网络模式组合可能不支持,例如L版本默认不支持2G/4G这种模式。如果要新增一种网络模式,可以参考下面的修改方案(KK版本默认支持4G/2G模式).

2.1. Java层改动
(1)alps\frameworks\base\telephony\java\com\android\internal\telephony\RILConstants.java
增加"4G/2G" network mode
//MTK-START: add for LTE
int NETWORK_MODE_MTK_BASE = 30;

// "4G/2G" item
int NETWORK_MODE_LTE_GSM = NETWORK_MODE_MTK_BASE+5;
int NETWORK_MODE_LTE_GSM_MMDC = NETWORK_MODE_MTK_BASE+6;
//MTK-END: add for LTE

(2)alps\frameworks\opt\telephony\src\java\com\android\internal\telephony\Phone.java
增加"4G/2G" 
int NT_MODE_LTE_GSM = RILConstants.NETWORK_MODE_LTE_GSM;

2.2. RILD的处理
(1)alps\vendor\mediatek\proprietary\hardware\ril\mtk-ril\Ril_nw.h
typedef enum
{
NT_WCDMA_PREFERRED_TYPE, // WCDMA preferred (auto mode)
NT_GSM_TYPE, // GSM only
NT_WCDMA_TYPE, // WCDMA only
NT_AUTO_TYPE, // AUTO
NT_LTE_GSM_WCDMA_TYPE = 9,
NT_LTE_ONLY_TYPE = 11,
NT_LTE_WCDMA_TYPE = 12

增加"4G/2G" item 
//MTK-START: add for LTE
,NT_MODE_MTK_BASE_TYPE = 30

//for "4G/2G" item 
,NT_LTE_GSM_TYPE = (NT_MODE_MTK_BASE_TYPE+5) 
,NT_LTE_GSM_MMDC_TYPE = (NT_MODE_MTK_BASE_TYPE+6)
//MTK-END: add for LTE
} NETWORK_TYPE;


(2)alps\vendor\mediatek\proprietary\hardware\ril\mtk-ril\Ril_nw.c
void requestSetPreferredNetworkType(void * data, size_t datalen, RIL_Token t) {
switch(req_type)
{
......
增加"4G/2G" item 的处理
//for "4G/2G" item rat only mode
case NT_LTE_GSM_TYPE:
rat = 4;
rat1= 0;
break;
}

(3)alps\vendor\mediatek\proprietary\hardware\ril\mtk-ril\Ril_nw.c
void requestGetPreferredNetworkType(void * data, size_t datalen, RIL_Token t)
{
......
} else if(nt_type == 5 && prefer_type == 0) {
// 4G/3G
return_type = NT_LTE_WCDMA_TYPE;
} else {
goto error;
}
修改为:
} else if(nt_type == 5 && prefer_type == 0) {
// 4G/3G
return_type = NT_LTE_WCDMA_TYPE;
} else if(nt_type == 4 && prefer_type == 0) {
// 4G/2G (auto)
return_type = NT_LTE_GSM_TYPE;
//for LTE -- END

} else {
goto error;
}

2.3.将添加的2G/4G模式设置为开机的默认模式
alps/framework/base/telephony/java/com/android/internal/telephony/RILConstants.java
//for LTE the preferred nw tyep is "4G preferred"
int PREFERRED_NETWORK_MODE = FeatureOption.MTK_LTE_SUPPORT? NETWORK_MODE_LTE_GSM_WCDMA:NETWORK_MODE_WCDMA_PREF;
改为 "4G/2G":
int PREFERRED_NETWORK_MODE = FeatureOption.MTK_LTE_SUPPORT? NETWORK_MODE_LTE_GSM:NETWORK_MODE_WCDMA_PREF;

由于NETWORK_MODE_LTE_GSM的定义在 int PREFERRED_NETWORK_MODE 之后
麻烦把int PREFERRED_NETWORK_MODE 的定义移到 NETWORK_MODE_LTE_GSM之后,否则会有编译错误。

二、修改3G switch/SIM switch后主卡默认的网络模式

1.KK版本

如果在发生3G switch/SIM switch时也需要修改默认network mode,那么请在GSMPhone.java中的getMaxPreferredNetworkType方法中返回需要的值。 

2.L0版本
如果在发生3G switch/SIM switch时也需要修改默认network mode,那么请在DataSubSelector.java中的setCapability方法中修改switch后具备3G/4G capability的sim卡的network mode:

            PhoneRatFamily[] rat = new PhoneRatFamily[mPhoneNum];

            for (int i = 0; i < mPhoneNum; i++) {

                if (phoneId == i) {

                    log("SIM switch to Phone" + i);

                    phoneRat[i] = PhoneRatFamily.PHONE_RAT_FAMILY_4G

                            | PhoneRatFamily.PHONE_RAT_FAMILY_3G

                            | PhoneRatFamily.PHONE_RAT_FAMILY_2G;

                } else {

                    phoneRat[i] = PhoneRatFamily.PHONE_RAT_FAMILY_2G;

                }

3.L1版本
如果在发生3G switch/SIM switch时也需要修改默认network mode,那么请在DataSubSelector.java中的setCapability方法中修改switch后具备3G/4G capability的sim卡的network mode---如下图红色圈起部分:

原创粉丝点击