Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a8fc387e authored by Robert Greenwalt's avatar Robert Greenwalt
Browse files

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
parent 93bbf277
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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>
+1 −0
Original line number Diff line number Diff line
@@ -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>
+39 −1
Original line number Diff line number Diff line
@@ -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;
    }
}