Add support for static RadioCapabilities.

Some RILs don't support RIL_REQUEST_GET_RADIO_CAPABILITY.  Add
code to RIL.java to notice a REQUEST_NOT_SUPPORTED response and
check config.xml (config_radio_access_family) for a static answer.

Also catching GENERIC_FAILURE responses because Hammerhead modem
returns that.  B 21079604 created for this.

If neither Modem nor config.xml provide data, uses RAF_UNKNOWN
so we don't lie about capabilities and also so we fail fast
(setPreferredNetwork won't work).

bug:20561357
Change-Id: I9607e8e99242c6f7a6e330741d4afe8bbd08b1e7
This commit is contained in:
Robert Greenwalt
2015-05-11 17:54:13 -07:00
parent 93bbf2774d
commit a8fc387e20
3 changed files with 47 additions and 1 deletions

View File

@@ -2066,4 +2066,11 @@
<!-- Whether to start in touch mode -->
<bool name="config_defaultInTouchMode">true</bool>
<!-- The RadioAccessFamilies supported by the device.
Empty is viewed as "all". Only used on devices which
don't support RIL_REQUEST_GET_RADIO_CAPABILITY
format is UMTS|LTE|... -->
<string translatable="false" name="config_radio_access_family"></string>
</resources>

View File

@@ -2179,4 +2179,5 @@
<java-symbol type="bool" name="config_use_sim_language_file" />
<java-symbol type="bool" name="config_LTE_eri_for_network_name" />
<java-symbol type="bool" name="config_defaultInTouchMode" />
<java-symbol type="string" name="config_radio_access_family" />
</resources>

View File

@@ -255,5 +255,43 @@ public class RadioAccessFamily implements Parcelable {
return type;
}
}
public static int singleRafTypeFromString(String rafString) {
switch (rafString) {
case "GPRS": return RAF_GPRS;
case "EDGE": return RAF_EDGE;
case "UMTS": return RAF_UMTS;
case "IS95A": return RAF_IS95A;
case "IS95B": return RAF_IS95B;
case "1XRTT": return RAF_1xRTT;
case "EVDO_0": return RAF_EVDO_0;
case "EVDO_A": return RAF_EVDO_A;
case "HSDPA": return RAF_HSDPA;
case "HSUPA": return RAF_HSUPA;
case "HSPA": return RAF_HSPA;
case "EVDO_B": return RAF_EVDO_B;
case "EHRPD": return RAF_EHRPD;
case "LTE": return RAF_LTE;
case "HSPAP": return RAF_HSPAP;
case "GSM": return RAF_GSM;
case "TD_SCDMA":return RAF_TD_SCDMA;
case "HS": return HS;
case "CDMA": return CDMA;
case "EVDO": return EVDO;
case "WCDMA": return WCDMA;
default: return RAF_UNKNOWN;
}
}
public static int rafTypeFromString(String rafList) {
rafList = rafList.toUpperCase();
String[] rafs = rafList.split("\\|");
int result = 0;
for(String raf : rafs) {
int rafType = singleRafTypeFromString(raf.trim());
if (rafType == RAF_UNKNOWN) return rafType;
result |= rafType;
}
return result;
}
}