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

Commit 8a670f1d authored by Amit Mahajan's avatar Amit Mahajan Committed by Android (Google) Code Review
Browse files

Merge changes from topic 'TDSCDMA support' into mnc-dr-dev

* changes:
  Add TDSCDMA family
  Telephony: Add TD-SCDMA SignalStrength
parents 34411e8f dd8efa82
Loading
Loading
Loading
Loading
+60 −0
Original line number Diff line number Diff line
@@ -185,6 +185,36 @@ public class RadioAccessFamily implements Parcelable {
            case RILConstants.NETWORK_MODE_GLOBAL:
                raf = GSM | WCDMA | CDMA | EVDO;
                break;
            case RILConstants.NETWORK_MODE_TDSCDMA_ONLY:
                raf = RAF_TD_SCDMA;
                break;
            case RILConstants.NETWORK_MODE_TDSCDMA_WCDMA:
                raf = RAF_TD_SCDMA | WCDMA;
                break;
            case RILConstants.NETWORK_MODE_LTE_TDSCDMA:
                raf = RAF_LTE | RAF_TD_SCDMA;
                break;
            case RILConstants.NETWORK_MODE_TDSCDMA_GSM:
                raf = RAF_TD_SCDMA | GSM;
                break;
            case RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
                raf = RAF_LTE | RAF_TD_SCDMA | GSM;
                break;
            case RILConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
                raf = RAF_TD_SCDMA | GSM | WCDMA;
                break;
            case RILConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
                raf = RAF_LTE | RAF_TD_SCDMA | WCDMA;
                break;
            case RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
                raf = RAF_LTE | RAF_TD_SCDMA | GSM | WCDMA;
                break;
            case RILConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
                raf = RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA;
                break;
            case RILConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
                raf = RAF_LTE | RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA;
                break;
            default:
                raf = RAF_UNKNOWN;
                break;
@@ -248,6 +278,36 @@ public class RadioAccessFamily implements Parcelable {
            case (GSM | WCDMA | CDMA | EVDO):
                type = RILConstants.NETWORK_MODE_GLOBAL;
                break;
            case RAF_TD_SCDMA:
                type = RILConstants.NETWORK_MODE_TDSCDMA_ONLY;
                break;
            case (RAF_TD_SCDMA | WCDMA):
                type = RILConstants.NETWORK_MODE_TDSCDMA_WCDMA;
                break;
            case (RAF_LTE | RAF_TD_SCDMA):
                type = RILConstants.NETWORK_MODE_LTE_TDSCDMA;
                break;
            case (RAF_TD_SCDMA | GSM):
                type = RILConstants.NETWORK_MODE_TDSCDMA_GSM;
                break;
            case (RAF_LTE | RAF_TD_SCDMA | GSM):
                type = RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM;
                break;
            case (RAF_TD_SCDMA | GSM | WCDMA):
                type = RILConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA;
                break;
            case (RAF_LTE | RAF_TD_SCDMA | WCDMA):
                type = RILConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA;
                break;
            case (RAF_LTE | RAF_TD_SCDMA | GSM | WCDMA):
                type = RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA;
                break;
            case (RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA):
                type = RILConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
                break;
            case (RAF_LTE | RAF_TD_SCDMA | RAF_LTE | CDMA | EVDO | GSM | WCDMA):
                type = RILConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
                break;
            default:
                type = RILConstants.PREFERRED_NETWORK_MODE ;
                break;
+5 −0
Original line number Diff line number Diff line
@@ -731,6 +731,9 @@ public class ServiceState implements Parcelable {
            case RIL_RADIO_TECHNOLOGY_IWLAN:
                rtString = "IWLAN";
                break;
            case RIL_RADIO_TECHNOLOGY_TD_SCDMA:
                rtString = "TD-SCDMA";
                break;
            default:
                rtString = "Unexpected";
                Rlog.w(LOG_TAG, "Unexpected radioTechnology=" + rt);
@@ -1068,6 +1071,8 @@ public class ServiceState implements Parcelable {
            return TelephonyManager.NETWORK_TYPE_HSPAP;
        case ServiceState.RIL_RADIO_TECHNOLOGY_GSM:
            return TelephonyManager.NETWORK_TYPE_GSM;
        case ServiceState.RIL_RADIO_TECHNOLOGY_TD_SCDMA:
            return TelephonyManager.NETWORK_TYPE_TD_SCDMA;
        case ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN:
            return TelephonyManager.NETWORK_TYPE_IWLAN;
        default:
+97 −8
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ public class SignalStrength implements Parcelable {
    private int mLteRsrq;
    private int mLteRssnr;
    private int mLteCqi;
    private int mTdScdmaRscp;

    private boolean isGsm; // This value is set by the ServiceStateTracker onSignalStrengthResult

@@ -107,6 +108,7 @@ public class SignalStrength implements Parcelable {
        mLteRsrq = INVALID;
        mLteRssnr = INVALID;
        mLteCqi = INVALID;
        mTdScdmaRscp = INVALID;
        isGsm = true;
    }

@@ -131,9 +133,26 @@ public class SignalStrength implements Parcelable {
        mLteRsrq = INVALID;
        mLteRssnr = INVALID;
        mLteCqi = INVALID;
        mTdScdmaRscp = INVALID;
        isGsm = gsmFlag;
    }

    /**
     * Constructor
     *
     * @hide
     */
    public SignalStrength(int gsmSignalStrength, int gsmBitErrorRate,
            int cdmaDbm, int cdmaEcio,
            int evdoDbm, int evdoEcio, int evdoSnr,
            int lteSignalStrength, int lteRsrp, int lteRsrq, int lteRssnr, int lteCqi,
            int tdScdmaRscp, boolean gsmFlag) {
        initialize(gsmSignalStrength, gsmBitErrorRate, cdmaDbm, cdmaEcio,
                evdoDbm, evdoEcio, evdoSnr, lteSignalStrength, lteRsrp,
                lteRsrq, lteRssnr, lteCqi, gsmFlag);
        mTdScdmaRscp = tdScdmaRscp;
    }

    /**
     * Constructor
     *
@@ -233,6 +252,7 @@ public class SignalStrength implements Parcelable {
        mLteRsrq = lteRsrq;
        mLteRssnr = lteRssnr;
        mLteCqi = lteCqi;
        mTdScdmaRscp = INVALID;
        isGsm = gsm;
        if (DBG) log("initialize: " + toString());
    }
@@ -253,6 +273,7 @@ public class SignalStrength implements Parcelable {
        mLteRsrq = s.mLteRsrq;
        mLteRssnr = s.mLteRssnr;
        mLteCqi = s.mLteCqi;
        mTdScdmaRscp = s.mTdScdmaRscp;
        isGsm = s.isGsm;
    }

@@ -276,6 +297,7 @@ public class SignalStrength implements Parcelable {
        mLteRsrq = in.readInt();
        mLteRssnr = in.readInt();
        mLteCqi = in.readInt();
        mTdScdmaRscp = in.readInt();
        isGsm = (in.readInt() != 0);
    }

@@ -302,7 +324,7 @@ public class SignalStrength implements Parcelable {
        ss.mLteRsrq = in.readInt();
        ss.mLteRssnr = in.readInt();
        ss.mLteCqi = in.readInt();

        ss.mTdScdmaRscp = in.readInt();
        return ss;
    }

@@ -322,6 +344,7 @@ public class SignalStrength implements Parcelable {
        out.writeInt(mLteRsrq);
        out.writeInt(mLteRssnr);
        out.writeInt(mLteCqi);
        out.writeInt(mTdScdmaRscp);
        out.writeInt(isGsm ? 1 : 0);
    }

@@ -377,6 +400,9 @@ public class SignalStrength implements Parcelable {
        mLteRsrq = ((mLteRsrq >= 3) && (mLteRsrq <= 20)) ? -mLteRsrq : SignalStrength.INVALID;
        mLteRssnr = ((mLteRssnr >= -200) && (mLteRssnr <= 300)) ? mLteRssnr
                : SignalStrength.INVALID;

        mTdScdmaRscp = ((mTdScdmaRscp >= 25) && (mTdScdmaRscp <= 120))
                ? -mTdScdmaRscp : SignalStrength.INVALID;
        // Cqi no change
        if (DBG) log("Signal after validate=" + this);
    }
@@ -477,13 +503,16 @@ public class SignalStrength implements Parcelable {
     *     while 4 represents a very strong signal strength.
     */
    public int getLevel() {
        int level;
        int level = 0;

        if (isGsm) {
            level = getLteLevel();
            if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
                level = getTdScdmaLevel();
                if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
                    level = getGsmLevel();
                }
            }
        } else {
            int cdmaLevel = getCdmaLevel();
            int evdoLevel = getEvdoLevel();
@@ -508,10 +537,14 @@ public class SignalStrength implements Parcelable {
     * @hide
     */
    public int getAsuLevel() {
        int asuLevel;
        int asuLevel = 0;
        if (isGsm) {
            if (getLteLevel() == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
                if (getTdScdmaLevel() == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
                    asuLevel = getGsmAsuLevel();
                } else {
                    asuLevel = getTdScdmaAsuLevel();
                }
            } else {
                asuLevel = getLteAsuLevel();
            }
@@ -539,12 +572,16 @@ public class SignalStrength implements Parcelable {
     * @hide
     */
    public int getDbm() {
        int dBm;
        int dBm = INVALID;

        if(isGsm()) {
            dBm = getLteDbm();
            if (dBm == INVALID) {
                if (getTdScdmaLevel() == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
                    dBm = getGsmDbm();
                } else {
                    dBm = getTdScdmaDbm();
                }
            }
        } else {
            int cdmaDbm = getCdmaDbm();
@@ -848,6 +885,54 @@ public class SignalStrength implements Parcelable {
        return this.isGsm;
    }

    /**
     * @return get TD_SCDMA dbm
     *
     * @hide
     */
    public int getTdScdmaDbm() {
        return this.mTdScdmaRscp;
    }

    /**
     * Get TD-SCDMA as level 0..4
     * Range : 25 to 120
     * INT_MAX: 0x7FFFFFFF denotes invalid value
     * Reference: 3GPP TS 25.123, section 9.1.1.1
     *
     * @hide
     */
    public int getTdScdmaLevel() {
        final int tdScdmaDbm = getTdScdmaDbm();
        int level;

        if ((tdScdmaDbm > -25) || (tdScdmaDbm == SignalStrength.INVALID))
                level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
        else if (tdScdmaDbm >= -49) level = SIGNAL_STRENGTH_GREAT;
        else if (tdScdmaDbm >= -73) level = SIGNAL_STRENGTH_GOOD;
        else if (tdScdmaDbm >= -97) level = SIGNAL_STRENGTH_MODERATE;
        else if (tdScdmaDbm >= -120) level = SIGNAL_STRENGTH_POOR;
        else level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;

        if (DBG) log("getTdScdmaLevel = " + level);
        return level;
     }

    /**
     * Get the TD-SCDMA signal level as an asu value.
     *
     * @hide
     */
    public int getTdScdmaAsuLevel() {
        final int tdScdmaDbm = getTdScdmaDbm();
        int tdScdmaAsuLevel;

        if (tdScdmaDbm == INVALID) tdScdmaAsuLevel = 255;
        else tdScdmaAsuLevel = tdScdmaDbm + 120;
        if (DBG) log("TD-SCDMA Asu level: " + tdScdmaAsuLevel);
        return tdScdmaAsuLevel;
    }

   /**
     * @return hash code
     */
@@ -860,7 +945,7 @@ public class SignalStrength implements Parcelable {
                + (mEvdoDbm * primeNum) + (mEvdoEcio * primeNum) + (mEvdoSnr * primeNum)
                + (mLteSignalStrength * primeNum) + (mLteRsrp * primeNum)
                + (mLteRsrq * primeNum) + (mLteRssnr * primeNum) + (mLteCqi * primeNum)
                + (isGsm ? 1 : 0));
                + (mTdScdmaRscp * primeNum) + (isGsm ? 1 : 0));
    }

    /**
@@ -892,6 +977,7 @@ public class SignalStrength implements Parcelable {
                && mLteRsrq == s.mLteRsrq
                && mLteRssnr == s.mLteRssnr
                && mLteCqi == s.mLteCqi
                && mTdScdmaRscp == s.mTdScdmaRscp
                && isGsm == s.isGsm);
    }

@@ -913,6 +999,7 @@ public class SignalStrength implements Parcelable {
                + " " + mLteRsrq
                + " " + mLteRssnr
                + " " + mLteCqi
                + " " + mTdScdmaRscp
                + " " + (isGsm ? "gsm|lte" : "cdma"));
    }

@@ -935,6 +1022,7 @@ public class SignalStrength implements Parcelable {
        mLteRsrq = m.getInt("LteRsrq");
        mLteRssnr = m.getInt("LteRssnr");
        mLteCqi = m.getInt("LteCqi");
        mTdScdmaRscp = m.getInt("TdScdma");
        isGsm = m.getBoolean("isGsm");
    }

@@ -957,6 +1045,7 @@ public class SignalStrength implements Parcelable {
        m.putInt("LteRsrq", mLteRsrq);
        m.putInt("LteRssnr", mLteRssnr);
        m.putInt("LteCqi", mLteCqi);
        m.putInt("TdScdma", mTdScdmaRscp);
        m.putBoolean("isGsm", Boolean.valueOf(isGsm));
    }

+10 −0
Original line number Diff line number Diff line
@@ -1059,11 +1059,21 @@ public class TelephonyManager {
        case RILConstants.NETWORK_MODE_LTE_GSM_WCDMA:
        case RILConstants.NETWORK_MODE_LTE_WCDMA:
        case RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
        case RILConstants.NETWORK_MODE_TDSCDMA_ONLY:
        case RILConstants.NETWORK_MODE_TDSCDMA_WCDMA:
        case RILConstants.NETWORK_MODE_LTE_TDSCDMA:
        case RILConstants.NETWORK_MODE_TDSCDMA_GSM:
        case RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
        case RILConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
        case RILConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
        case RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
        case RILConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
            return PhoneConstants.PHONE_TYPE_GSM;

        // Use CDMA Phone for the global mode including CDMA
        case RILConstants.NETWORK_MODE_GLOBAL:
        case RILConstants.NETWORK_MODE_LTE_CDMA_EVDO:
        case RILConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
            return PhoneConstants.PHONE_TYPE_CDMA;

        case RILConstants.NETWORK_MODE_LTE_ONLY:
+10 −0
Original line number Diff line number Diff line
@@ -96,6 +96,16 @@ public interface RILConstants {
    int NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA = 10; /* LTE, CDMA, EvDo, GSM/WCDMA */
    int NETWORK_MODE_LTE_ONLY       = 11; /* LTE Only mode. */
    int NETWORK_MODE_LTE_WCDMA      = 12; /* LTE/WCDMA */
    int NETWORK_MODE_TDSCDMA_ONLY            = 13; /* TD-SCDMA only */
    int NETWORK_MODE_TDSCDMA_WCDMA           = 14; /* TD-SCDMA and WCDMA */
    int NETWORK_MODE_LTE_TDSCDMA             = 15; /* TD-SCDMA and LTE */
    int NETWORK_MODE_TDSCDMA_GSM             = 16; /* TD-SCDMA and GSM */
    int NETWORK_MODE_LTE_TDSCDMA_GSM         = 17; /* TD-SCDMA,GSM and LTE */
    int NETWORK_MODE_TDSCDMA_GSM_WCDMA       = 18; /* TD-SCDMA, GSM/WCDMA */
    int NETWORK_MODE_LTE_TDSCDMA_WCDMA       = 19; /* TD-SCDMA, WCDMA and LTE */
    int NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA   = 20; /* TD-SCDMA, GSM/WCDMA and LTE */
    int NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA  = 21; /*TD-SCDMA,EvDo,CDMA,GSM/WCDMA*/
    int NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA = 22; /* TD-SCDMA/LTE/GSM/WCDMA, CDMA, and EvDo */
    int PREFERRED_NETWORK_MODE      = SystemProperties.getInt("ro.telephony.default_network",
            NETWORK_MODE_WCDMA_PREF);