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

Commit 364018f2 authored by Chaitanya Saggurthi's avatar Chaitanya Saggurthi Committed by Linux Build Service Account
Browse files

Telephony: Add TD-SCDMA network modes

1) TD-SCDMA Signal Strength support.
2) Add TD-SCDMA to the list of supported network modes.

CRs-Fixed: 403258, 479310

Conflicts:
telephony/java/android/telephony/SignalStrength.java
Change-Id: I158821574484bfaf47d1660406e591e2afb3be5e
parent 94aa4fd2
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -775,6 +775,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
                        // fall through
                    }
                case TelephonyManager.NETWORK_TYPE_UMTS:
                case TelephonyManager.NETWORK_TYPE_TD_SCDMA:
                    mDataIconList = TelephonyIcons.DATA_3G[inetCondition];
                    mDataTypeIconId = showDataTypeIcon ?
                                R.drawable.stat_sys_data_fully_connected_3g : 0;
+5 −0
Original line number Diff line number Diff line
@@ -535,6 +535,9 @@ public class ServiceState implements Parcelable {
            case RIL_RADIO_TECHNOLOGY_GSM:
                rtString = "GSM";
                break;
            case RIL_RADIO_TECHNOLOGY_TD_SCDMA:
                rtString = "TD-SCDMA";
                break;
            default:
                rtString = "Unexpected";
                Rlog.w(LOG_TAG, "Unexpected radioTechnology=" + rt);
@@ -801,6 +804,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;
        default:
            return TelephonyManager.NETWORK_TYPE_UNKNOWN;
        }
+98 −8
Original line number Diff line number Diff line
@@ -62,6 +62,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

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

@@ -125,6 +127,7 @@ public class SignalStrength implements Parcelable {
        mLteRsrq = INVALID;
        mLteRssnr = INVALID;
        mLteCqi = INVALID;
        mTdScdmaRscp = INVALID;
        isGsm = gsmFlag;
    }

@@ -143,6 +146,22 @@ public class SignalStrength implements Parcelable {
                lteRsrq, lteRssnr, lteCqi, 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
     *
@@ -227,6 +246,7 @@ public class SignalStrength implements Parcelable {
        mLteRsrq = lteRsrq;
        mLteRssnr = lteRssnr;
        mLteCqi = lteCqi;
        mTdScdmaRscp = INVALID;
        isGsm = gsm;
        if (DBG) log("initialize: " + toString());
    }
@@ -247,6 +267,7 @@ public class SignalStrength implements Parcelable {
        mLteRsrq = s.mLteRsrq;
        mLteRssnr = s.mLteRssnr;
        mLteCqi = s.mLteCqi;
        mTdScdmaRscp = s.mTdScdmaRscp;
        isGsm = s.isGsm;
    }

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

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

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

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

@@ -371,6 +394,10 @@ 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);
    }
@@ -468,13 +495,16 @@ public class SignalStrength implements Parcelable {
     * @hide
     */
    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();
@@ -499,10 +529,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();
            }
@@ -530,12 +564,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();
@@ -829,6 +867,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
     */
@@ -841,7 +927,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));
    }

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

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

@@ -916,6 +1004,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");
    }

@@ -938,6 +1027,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));
    }

+20 −1
Original line number Diff line number Diff line
@@ -876,12 +876,22 @@ public class TelephonyManager {
        case RILConstants.NETWORK_MODE_GSM_UMTS:
        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_TD_SCDMA_ONLY:
        case RILConstants.NETWORK_MODE_TD_SCDMA_WCDMA:
        case RILConstants.NETWORK_MODE_TD_SCDMA_LTE:
        case RILConstants.NETWORK_MODE_TD_SCDMA_GSM:
        case RILConstants.NETWORK_MODE_TD_SCDMA_GSM_LTE:
        case RILConstants.NETWORK_MODE_TD_SCDMA_GSM_WCDMA:
        case RILConstants.NETWORK_MODE_TD_SCDMA_WCDMA_LTE:
        case RILConstants.NETWORK_MODE_TD_SCDMA_GSM_WCDMA_LTE:
            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_LTE_CDMA_EVDO_GSM_WCDMA:
        case RILConstants.NETWORK_MODE_TD_SCDMA_CDMA_EVDO_GSM_WCDMA:
        case RILConstants.NETWORK_MODE_TD_SCDMA_LTE_CDMA_EVDO_GSM_WCDMA:
            return PhoneConstants.PHONE_TYPE_CDMA;

        case RILConstants.NETWORK_MODE_LTE_ONLY:
@@ -1124,6 +1134,9 @@ public class TelephonyManager {
    public static final int NETWORK_TYPE_HSPAP = 15;
    /** Current network is GSM {@hide} */
    public static final int NETWORK_TYPE_GSM = 16;
    /** Current network is TD_SCDMA {@hide} */
    public static final int NETWORK_TYPE_TD_SCDMA = 17;


    /**
     * @return the NETWORK_TYPE_xxxx for current data connection.
@@ -1155,6 +1168,9 @@ public class TelephonyManager {
     * @see #NETWORK_TYPE_LTE
     * @see #NETWORK_TYPE_EHRPD
     * @see #NETWORK_TYPE_HSPAP
     * @see #NETWORK_TYPE_TD_SCDMA
     *
     * @hide
     */
    /** {@hide} */
   public int getNetworkType(long subId) {
@@ -1309,6 +1325,7 @@ public class TelephonyManager {
            case NETWORK_TYPE_EVDO_B:
            case NETWORK_TYPE_EHRPD:
            case NETWORK_TYPE_HSPAP:
            case NETWORK_TYPE_TD_SCDMA:
                return NETWORK_CLASS_3_G;
            case NETWORK_TYPE_LTE:
                return NETWORK_CLASS_4_G;
@@ -1370,6 +1387,8 @@ public class TelephonyManager {
                return "HSPA+";
            case NETWORK_TYPE_GSM:
                return "GSM";
            case NETWORK_TYPE_TD_SCDMA:
                return "TD_SCDMA";
            default:
                return "UNKNOWN";
        }
+11 −0
Original line number Diff line number Diff line
@@ -86,6 +86,17 @@ 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_TD_SCDMA_ONLY            = 13; /* TD-SCDMA only */
    int NETWORK_MODE_TD_SCDMA_WCDMA           = 14; /* TD-SCDMA and WCDMA */
    int NETWORK_MODE_TD_SCDMA_LTE             = 15; /* TD-SCDMA and LTE */
    int NETWORK_MODE_TD_SCDMA_GSM             = 16; /* TD-SCDMA and GSM */
    int NETWORK_MODE_TD_SCDMA_GSM_LTE         = 17; /* TD-SCDMA,GSM and LTE */
    int NETWORK_MODE_TD_SCDMA_GSM_WCDMA       = 18; /* TD-SCDMA, GSM/WCDMA */
    int NETWORK_MODE_TD_SCDMA_WCDMA_LTE       = 19; /* TD-SCDMA, WCDMA and LTE */
    int NETWORK_MODE_TD_SCDMA_GSM_WCDMA_LTE   = 20; /* TD-SCDMA, GSM/WCDMA and LTE */
    int NETWORK_MODE_TD_SCDMA_CDMA_EVDO_GSM_WCDMA  = 21; /*TD-SCDMA,EvDo,CDMA,GSM/WCDMA*/
    int NETWORK_MODE_TD_SCDMA_LTE_CDMA_EVDO_GSM_WCDMA = 22; /* TD-SCDMA/LTE/GSM/WCDMA, CDMA, and
                                                               EvDo */
    int PREFERRED_NETWORK_MODE      = NETWORK_MODE_WCDMA_PREF;

    int CDMA_CELL_BROADCAST_SMS_DISABLED = 1;