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

* changes:
  Add TDSCDMA family
  Telephony: Add TD-SCDMA SignalStrength
This commit is contained in:
Amit Mahajan
2015-09-03 21:24:46 +00:00
committed by Android (Google) Code Review
5 changed files with 182 additions and 8 deletions

View File

@@ -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;

View File

@@ -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:

View File

@@ -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,12 +503,15 @@ 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 = getGsmLevel();
level = getTdScdmaLevel();
if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
level = getGsmLevel();
}
}
} else {
int cdmaLevel = getCdmaLevel();
@@ -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) {
asuLevel = getGsmAsuLevel();
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) {
dBm = getGsmDbm();
if (getTdScdmaLevel() == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
dBm = getGsmDbm();
} else {
dBm = getTdScdmaDbm();
}
}
} else {
int cdmaDbm = getCdmaDbm();
@@ -849,6 +886,54 @@ public class SignalStrength implements Parcelable {
}
/**
* @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
*/
@Override
@@ -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));
}

View File

@@ -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:

View File

@@ -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);