Merge "Add CQI and table index to LTE and NR CellSignalStrength"
This commit is contained in:
@@ -21,7 +21,6 @@ import android.annotation.IntDef;
|
|||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.compat.annotation.UnsupportedAppUsage;
|
import android.compat.annotation.UnsupportedAppUsage;
|
||||||
import android.hardware.radio.V1_4.CellInfo.Info;
|
import android.hardware.radio.V1_4.CellInfo.Info;
|
||||||
import android.hardware.radio.V1_5.CellInfo.CellInfoRatSpecificInfo;
|
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
|
||||||
@@ -351,6 +350,13 @@ public abstract class CellInfo implements Parcelable {
|
|||||||
this.mCellConnectionStatus = ci.connectionStatus;
|
this.mCellConnectionStatus = ci.connectionStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
protected CellInfo(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) {
|
||||||
|
this.mRegistered = ci.registered;
|
||||||
|
this.mTimeStamp = timeStamp;
|
||||||
|
this.mCellConnectionStatus = ci.connectionStatus;
|
||||||
|
}
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
public static CellInfo create(android.hardware.radio.V1_0.CellInfo ci) {
|
public static CellInfo create(android.hardware.radio.V1_0.CellInfo ci) {
|
||||||
if (ci == null) return null;
|
if (ci == null) return null;
|
||||||
@@ -395,17 +401,49 @@ public abstract class CellInfo implements Parcelable {
|
|||||||
public static CellInfo create(android.hardware.radio.V1_5.CellInfo ci, long timeStamp) {
|
public static CellInfo create(android.hardware.radio.V1_5.CellInfo ci, long timeStamp) {
|
||||||
if (ci == null) return null;
|
if (ci == null) return null;
|
||||||
switch (ci.ratSpecificInfo.getDiscriminator()) {
|
switch (ci.ratSpecificInfo.getDiscriminator()) {
|
||||||
case CellInfoRatSpecificInfo.hidl_discriminator.gsm:
|
case android.hardware.radio.V1_5.CellInfo
|
||||||
|
.CellInfoRatSpecificInfo.hidl_discriminator.gsm:
|
||||||
return new CellInfoGsm(ci, timeStamp);
|
return new CellInfoGsm(ci, timeStamp);
|
||||||
case CellInfoRatSpecificInfo.hidl_discriminator.cdma:
|
case android.hardware.radio.V1_5.CellInfo
|
||||||
|
.CellInfoRatSpecificInfo.hidl_discriminator.cdma:
|
||||||
return new CellInfoCdma(ci, timeStamp);
|
return new CellInfoCdma(ci, timeStamp);
|
||||||
case CellInfoRatSpecificInfo.hidl_discriminator.lte:
|
case android.hardware.radio.V1_5.CellInfo
|
||||||
|
.CellInfoRatSpecificInfo.hidl_discriminator.lte:
|
||||||
return new CellInfoLte(ci, timeStamp);
|
return new CellInfoLte(ci, timeStamp);
|
||||||
case CellInfoRatSpecificInfo.hidl_discriminator.wcdma:
|
case android.hardware.radio.V1_5.CellInfo
|
||||||
|
.CellInfoRatSpecificInfo.hidl_discriminator.wcdma:
|
||||||
return new CellInfoWcdma(ci, timeStamp);
|
return new CellInfoWcdma(ci, timeStamp);
|
||||||
case CellInfoRatSpecificInfo.hidl_discriminator.tdscdma:
|
case android.hardware.radio.V1_5.CellInfo
|
||||||
|
.CellInfoRatSpecificInfo.hidl_discriminator.tdscdma:
|
||||||
return new CellInfoTdscdma(ci, timeStamp);
|
return new CellInfoTdscdma(ci, timeStamp);
|
||||||
case CellInfoRatSpecificInfo.hidl_discriminator.nr:
|
case android.hardware.radio.V1_5.CellInfo
|
||||||
|
.CellInfoRatSpecificInfo.hidl_discriminator.nr:
|
||||||
|
return new CellInfoNr(ci, timeStamp);
|
||||||
|
default: return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public static CellInfo create(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) {
|
||||||
|
if (ci == null) return null;
|
||||||
|
switch (ci.ratSpecificInfo.getDiscriminator()) {
|
||||||
|
case android.hardware.radio.V1_6.CellInfo
|
||||||
|
.CellInfoRatSpecificInfo.hidl_discriminator.gsm:
|
||||||
|
return new CellInfoGsm(ci, timeStamp);
|
||||||
|
case android.hardware.radio.V1_6.CellInfo
|
||||||
|
.CellInfoRatSpecificInfo.hidl_discriminator.cdma:
|
||||||
|
return new CellInfoCdma(ci, timeStamp);
|
||||||
|
case android.hardware.radio.V1_6.CellInfo
|
||||||
|
.CellInfoRatSpecificInfo.hidl_discriminator.lte:
|
||||||
|
return new CellInfoLte(ci, timeStamp);
|
||||||
|
case android.hardware.radio.V1_6.CellInfo
|
||||||
|
.CellInfoRatSpecificInfo.hidl_discriminator.wcdma:
|
||||||
|
return new CellInfoWcdma(ci, timeStamp);
|
||||||
|
case android.hardware.radio.V1_6.CellInfo
|
||||||
|
.CellInfoRatSpecificInfo.hidl_discriminator.tdscdma:
|
||||||
|
return new CellInfoTdscdma(ci, timeStamp);
|
||||||
|
case android.hardware.radio.V1_6.CellInfo
|
||||||
|
.CellInfoRatSpecificInfo.hidl_discriminator.nr:
|
||||||
return new CellInfoNr(ci, timeStamp);
|
return new CellInfoNr(ci, timeStamp);
|
||||||
default: return null;
|
default: return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,6 +87,15 @@ public final class CellInfoCdma extends CellInfo implements Parcelable {
|
|||||||
new CellSignalStrengthCdma(cic.signalStrengthCdma, cic.signalStrengthEvdo);
|
new CellSignalStrengthCdma(cic.signalStrengthCdma, cic.signalStrengthEvdo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public CellInfoCdma(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) {
|
||||||
|
super(ci, timeStamp);
|
||||||
|
final android.hardware.radio.V1_2.CellInfoCdma cic = ci.ratSpecificInfo.cdma();
|
||||||
|
mCellIdentityCdma = new CellIdentityCdma(cic.cellIdentityCdma);
|
||||||
|
mCellSignalStrengthCdma =
|
||||||
|
new CellSignalStrengthCdma(cic.signalStrengthCdma, cic.signalStrengthEvdo);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return a {@link CellIdentityCdma} instance.
|
* @return a {@link CellIdentityCdma} instance.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -82,6 +82,14 @@ public final class CellInfoGsm extends CellInfo implements Parcelable {
|
|||||||
mCellSignalStrengthGsm = new CellSignalStrengthGsm(cig.signalStrengthGsm);
|
mCellSignalStrengthGsm = new CellSignalStrengthGsm(cig.signalStrengthGsm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public CellInfoGsm(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) {
|
||||||
|
super(ci, timeStamp);
|
||||||
|
final android.hardware.radio.V1_5.CellInfoGsm cig = ci.ratSpecificInfo.gsm();
|
||||||
|
mCellIdentityGsm = new CellIdentityGsm(cig.cellIdentityGsm);
|
||||||
|
mCellSignalStrengthGsm = new CellSignalStrengthGsm(cig.signalStrengthGsm);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return a {@link CellIdentityGsm} instance.
|
* @return a {@link CellIdentityGsm} instance.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -91,6 +91,15 @@ public final class CellInfoLte extends CellInfo implements Parcelable {
|
|||||||
mCellConfig = new CellConfigLte();
|
mCellConfig = new CellConfigLte();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public CellInfoLte(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) {
|
||||||
|
super(ci, timeStamp);
|
||||||
|
final android.hardware.radio.V1_6.CellInfoLte cil = ci.ratSpecificInfo.lte();
|
||||||
|
mCellIdentityLte = new CellIdentityLte(cil.cellIdentityLte);
|
||||||
|
mCellSignalStrengthLte = new CellSignalStrengthLte(cil.signalStrengthLte);
|
||||||
|
mCellConfig = new CellConfigLte();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return a {@link CellIdentityLte} instance.
|
* @return a {@link CellIdentityLte} instance.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -68,6 +68,14 @@ public final class CellInfoNr extends CellInfo {
|
|||||||
mCellSignalStrength = new CellSignalStrengthNr(cil.signalStrengthNr);
|
mCellSignalStrength = new CellSignalStrengthNr(cil.signalStrengthNr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public CellInfoNr(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) {
|
||||||
|
super(ci, timeStamp);
|
||||||
|
final android.hardware.radio.V1_6.CellInfoNr cil = ci.ratSpecificInfo.nr();
|
||||||
|
mCellIdentity = new CellIdentityNr(cil.cellIdentityNr);
|
||||||
|
mCellSignalStrength = new CellSignalStrengthNr(cil.signalStrengthNr);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return a {@link CellIdentityNr} instance.
|
* @return a {@link CellIdentityNr} instance.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -85,6 +85,14 @@ public final class CellInfoTdscdma extends CellInfo implements Parcelable {
|
|||||||
mCellSignalStrengthTdscdma = new CellSignalStrengthTdscdma(cit.signalStrengthTdscdma);
|
mCellSignalStrengthTdscdma = new CellSignalStrengthTdscdma(cit.signalStrengthTdscdma);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public CellInfoTdscdma(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) {
|
||||||
|
super(ci, timeStamp);
|
||||||
|
final android.hardware.radio.V1_5.CellInfoTdscdma cit = ci.ratSpecificInfo.tdscdma();
|
||||||
|
mCellIdentityTdscdma = new CellIdentityTdscdma(cit.cellIdentityTdscdma);
|
||||||
|
mCellSignalStrengthTdscdma = new CellSignalStrengthTdscdma(cit.signalStrengthTdscdma);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return a {@link CellIdentityTdscdma} instance.
|
* @return a {@link CellIdentityTdscdma} instance.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -80,6 +80,14 @@ public final class CellInfoWcdma extends CellInfo implements Parcelable {
|
|||||||
mCellSignalStrengthWcdma = new CellSignalStrengthWcdma(ciw.signalStrengthWcdma);
|
mCellSignalStrengthWcdma = new CellSignalStrengthWcdma(ciw.signalStrengthWcdma);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public CellInfoWcdma(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) {
|
||||||
|
super(ci, timeStamp);
|
||||||
|
final android.hardware.radio.V1_5.CellInfoWcdma ciw = ci.ratSpecificInfo.wcdma();
|
||||||
|
mCellIdentityWcdma = new CellIdentityWcdma(ciw.cellIdentityWcdma);
|
||||||
|
mCellSignalStrengthWcdma = new CellSignalStrengthWcdma(ciw.signalStrengthWcdma);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return a {@link CellIdentityWcdma} instance.
|
* @return a {@link CellIdentityWcdma} instance.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -86,6 +86,15 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
private int mRsrq;
|
private int mRsrq;
|
||||||
@UnsupportedAppUsage(maxTargetSdk = android.os.Build.VERSION_CODES.P)
|
@UnsupportedAppUsage(maxTargetSdk = android.os.Build.VERSION_CODES.P)
|
||||||
private int mRssnr;
|
private int mRssnr;
|
||||||
|
/**
|
||||||
|
* CSI channel quality indicator (CQI) table index. There are multiple CQI tables.
|
||||||
|
* The definition of CQI in each table is different.
|
||||||
|
*
|
||||||
|
* Reference: 3GPP TS 136.213 section 7.2.3.
|
||||||
|
*
|
||||||
|
* Range [1, 6].
|
||||||
|
*/
|
||||||
|
private int mCqiTableIndex;
|
||||||
@UnsupportedAppUsage(maxTargetSdk = android.os.Build.VERSION_CODES.P)
|
@UnsupportedAppUsage(maxTargetSdk = android.os.Build.VERSION_CODES.P)
|
||||||
private int mCqi;
|
private int mCqi;
|
||||||
@UnsupportedAppUsage(maxTargetSdk = android.os.Build.VERSION_CODES.P)
|
@UnsupportedAppUsage(maxTargetSdk = android.os.Build.VERSION_CODES.P)
|
||||||
@@ -113,6 +122,32 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
setDefaultValues();
|
setDefaultValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct a cell signal strength
|
||||||
|
*
|
||||||
|
* @param rssi in dBm [-113,-51], UNKNOWN
|
||||||
|
* @param rsrp in dBm [-140,-43], UNKNOWN
|
||||||
|
* @param rsrq in dB [-34, 3], UNKNOWN
|
||||||
|
* @param rssnr in dB [-20, +30], UNKNOWN
|
||||||
|
* @param cqiTableIndex [1, 6], UNKNOWN
|
||||||
|
* @param cqi [0, 15], UNKNOWN
|
||||||
|
* @param timingAdvance [0, 1282], UNKNOWN
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/** @hide */
|
||||||
|
public CellSignalStrengthLte(int rssi, int rsrp, int rsrq, int rssnr, int cqiTableIndex,
|
||||||
|
int cqi, int timingAdvance) {
|
||||||
|
mRssi = inRangeOrUnavailable(rssi, -113, -51);
|
||||||
|
mSignalStrength = mRssi;
|
||||||
|
mRsrp = inRangeOrUnavailable(rsrp, -140, -43);
|
||||||
|
mRsrq = inRangeOrUnavailable(rsrq, -34, 3);
|
||||||
|
mRssnr = inRangeOrUnavailable(rssnr, -20, 30);
|
||||||
|
mCqiTableIndex = inRangeOrUnavailable(cqiTableIndex, 1, 6);
|
||||||
|
mCqi = inRangeOrUnavailable(cqi, 0, 15);
|
||||||
|
mTimingAdvance = inRangeOrUnavailable(timingAdvance, 0, 1282);
|
||||||
|
updateLevel(null, null);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a cell signal strength
|
* Construct a cell signal strength
|
||||||
*
|
*
|
||||||
@@ -127,15 +162,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
/** @hide */
|
/** @hide */
|
||||||
public CellSignalStrengthLte(int rssi, int rsrp, int rsrq, int rssnr, int cqi,
|
public CellSignalStrengthLte(int rssi, int rsrp, int rsrq, int rssnr, int cqi,
|
||||||
int timingAdvance) {
|
int timingAdvance) {
|
||||||
|
this(rssi, rsrp, rsrq, rssnr, CellInfo.UNAVAILABLE, cqi, timingAdvance);
|
||||||
mRssi = inRangeOrUnavailable(rssi, -113, -51);
|
|
||||||
mSignalStrength = mRssi;
|
|
||||||
mRsrp = inRangeOrUnavailable(rsrp, -140, -43);
|
|
||||||
mRsrq = inRangeOrUnavailable(rsrq, -34, 3);
|
|
||||||
mRssnr = inRangeOrUnavailable(rssnr, -20, 30);
|
|
||||||
mCqi = inRangeOrUnavailable(cqi, 0, 15);
|
|
||||||
mTimingAdvance = inRangeOrUnavailable(timingAdvance, 0, 1282);
|
|
||||||
updateLevel(null, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@@ -147,6 +174,16 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
convertRssnrUnitFromTenDbToDB(lte.rssnr), lte.cqi, lte.timingAdvance);
|
convertRssnrUnitFromTenDbToDB(lte.rssnr), lte.cqi, lte.timingAdvance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public CellSignalStrengthLte(android.hardware.radio.V1_6.LteSignalStrength lte) {
|
||||||
|
// Convert from HAL values as part of construction.
|
||||||
|
this(convertRssiAsuToDBm(lte.base.signalStrength),
|
||||||
|
lte.base.rsrp != CellInfo.UNAVAILABLE ? -lte.base.rsrp : lte.base.rsrp,
|
||||||
|
lte.base.rsrq != CellInfo.UNAVAILABLE ? -lte.base.rsrq : lte.base.rsrq,
|
||||||
|
convertRssnrUnitFromTenDbToDB(lte.base.rssnr), lte.cqiTableIndex, lte.base.cqi,
|
||||||
|
lte.base.timingAdvance);
|
||||||
|
}
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
public CellSignalStrengthLte(CellSignalStrengthLte s) {
|
public CellSignalStrengthLte(CellSignalStrengthLte s) {
|
||||||
copyFrom(s);
|
copyFrom(s);
|
||||||
@@ -159,6 +196,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
mRsrp = s.mRsrp;
|
mRsrp = s.mRsrp;
|
||||||
mRsrq = s.mRsrq;
|
mRsrq = s.mRsrq;
|
||||||
mRssnr = s.mRssnr;
|
mRssnr = s.mRssnr;
|
||||||
|
mCqiTableIndex = s.mCqiTableIndex;
|
||||||
mCqi = s.mCqi;
|
mCqi = s.mCqi;
|
||||||
mTimingAdvance = s.mTimingAdvance;
|
mTimingAdvance = s.mTimingAdvance;
|
||||||
mLevel = s.mLevel;
|
mLevel = s.mLevel;
|
||||||
@@ -179,6 +217,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
mRsrp = CellInfo.UNAVAILABLE;
|
mRsrp = CellInfo.UNAVAILABLE;
|
||||||
mRsrq = CellInfo.UNAVAILABLE;
|
mRsrq = CellInfo.UNAVAILABLE;
|
||||||
mRssnr = CellInfo.UNAVAILABLE;
|
mRssnr = CellInfo.UNAVAILABLE;
|
||||||
|
mCqiTableIndex = CellInfo.UNAVAILABLE;
|
||||||
mCqi = CellInfo.UNAVAILABLE;
|
mCqi = CellInfo.UNAVAILABLE;
|
||||||
mTimingAdvance = CellInfo.UNAVAILABLE;
|
mTimingAdvance = CellInfo.UNAVAILABLE;
|
||||||
mLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
mLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
|
||||||
@@ -401,6 +440,17 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
return mRsrp;
|
return mRsrp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get table index for channel quality indicator
|
||||||
|
*
|
||||||
|
* @return the CQI table index if available or
|
||||||
|
* {@link android.telephony.CellInfo#UNAVAILABLE UNAVAILABLE} if unavailable.
|
||||||
|
*/
|
||||||
|
/** @hide */
|
||||||
|
public int getCqiTableIndex() {
|
||||||
|
return mCqiTableIndex;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get channel quality indicator
|
* Get channel quality indicator
|
||||||
*
|
*
|
||||||
@@ -454,7 +504,8 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(mRssi, mRsrp, mRsrq, mRssnr, mCqi, mTimingAdvance, mLevel);
|
return Objects.hash(mRssi, mRsrp, mRsrq, mRssnr, mCqiTableIndex, mCqi, mTimingAdvance,
|
||||||
|
mLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final CellSignalStrengthLte sInvalid = new CellSignalStrengthLte();
|
private static final CellSignalStrengthLte sInvalid = new CellSignalStrengthLte();
|
||||||
@@ -476,6 +527,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
&& mRsrp == s.mRsrp
|
&& mRsrp == s.mRsrp
|
||||||
&& mRsrq == s.mRsrq
|
&& mRsrq == s.mRsrq
|
||||||
&& mRssnr == s.mRssnr
|
&& mRssnr == s.mRssnr
|
||||||
|
&& mCqiTableIndex == s.mCqiTableIndex
|
||||||
&& mCqi == s.mCqi
|
&& mCqi == s.mCqi
|
||||||
&& mTimingAdvance == s.mTimingAdvance
|
&& mTimingAdvance == s.mTimingAdvance
|
||||||
&& mLevel == s.mLevel;
|
&& mLevel == s.mLevel;
|
||||||
@@ -491,6 +543,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
+ " rsrp=" + mRsrp
|
+ " rsrp=" + mRsrp
|
||||||
+ " rsrq=" + mRsrq
|
+ " rsrq=" + mRsrq
|
||||||
+ " rssnr=" + mRssnr
|
+ " rssnr=" + mRssnr
|
||||||
|
+ " cqiTableIndex=" + mCqiTableIndex
|
||||||
+ " cqi=" + mCqi
|
+ " cqi=" + mCqi
|
||||||
+ " ta=" + mTimingAdvance
|
+ " ta=" + mTimingAdvance
|
||||||
+ " level=" + mLevel
|
+ " level=" + mLevel
|
||||||
@@ -508,6 +561,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
dest.writeInt(mRsrp);
|
dest.writeInt(mRsrp);
|
||||||
dest.writeInt(mRsrq);
|
dest.writeInt(mRsrq);
|
||||||
dest.writeInt(mRssnr);
|
dest.writeInt(mRssnr);
|
||||||
|
dest.writeInt(mCqiTableIndex);
|
||||||
dest.writeInt(mCqi);
|
dest.writeInt(mCqi);
|
||||||
dest.writeInt(mTimingAdvance);
|
dest.writeInt(mTimingAdvance);
|
||||||
dest.writeInt(mLevel);
|
dest.writeInt(mLevel);
|
||||||
@@ -523,6 +577,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
|
|||||||
mRsrp = in.readInt();
|
mRsrp = in.readInt();
|
||||||
mRsrq = in.readInt();
|
mRsrq = in.readInt();
|
||||||
mRssnr = in.readInt();
|
mRssnr = in.readInt();
|
||||||
|
mCqiTableIndex = in.readInt();
|
||||||
mCqi = in.readInt();
|
mCqi = in.readInt();
|
||||||
mTimingAdvance = in.readInt();
|
mTimingAdvance = in.readInt();
|
||||||
mLevel = in.readInt();
|
mLevel = in.readInt();
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package android.telephony;
|
|||||||
|
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
import android.annotation.IntRange;
|
import android.annotation.IntRange;
|
||||||
|
import android.annotation.NonNull;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.os.PersistableBundle;
|
import android.os.PersistableBundle;
|
||||||
@@ -27,7 +28,10 @@ import com.android.telephony.Rlog;
|
|||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 5G NR signal strength related information.
|
* 5G NR signal strength related information.
|
||||||
@@ -109,6 +113,28 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
|
|||||||
private int mCsiRsrp;
|
private int mCsiRsrp;
|
||||||
private int mCsiRsrq;
|
private int mCsiRsrq;
|
||||||
private int mCsiSinr;
|
private int mCsiSinr;
|
||||||
|
/**
|
||||||
|
* CSI channel quality indicator (CQI) table index. There are multiple CQI tables.
|
||||||
|
* The definition of CQI in each table is different.
|
||||||
|
*
|
||||||
|
* Reference: 3GPP TS 138.214 section 5.2.2.1.
|
||||||
|
*
|
||||||
|
* Range [1, 3].
|
||||||
|
*/
|
||||||
|
private int mCsiCqiTableIndex;
|
||||||
|
/**
|
||||||
|
* CSI channel quality indicators (CQI) for all subbands.
|
||||||
|
*
|
||||||
|
* If the CQI report is for the entire wideband, a single CQI index is provided.
|
||||||
|
* If the CQI report is for all subbands, one CQI index is provided for each subband,
|
||||||
|
* in ascending order of subband index.
|
||||||
|
* If CQI is not available, the CQI report is empty.
|
||||||
|
*
|
||||||
|
* Reference: 3GPP TS 138.214 section 5.2.2.1.
|
||||||
|
*
|
||||||
|
* Range [0, 15] for each CQI.
|
||||||
|
*/
|
||||||
|
private List<Integer> mCsiCqiReport;;
|
||||||
private int mSsRsrp;
|
private int mSsRsrp;
|
||||||
private int mSsRsrq;
|
private int mSsRsrq;
|
||||||
private int mSsSinr;
|
private int mSsSinr;
|
||||||
@@ -134,6 +160,32 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
|
|||||||
setDefaultValues();
|
setDefaultValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param csiRsrp CSI reference signal received power.
|
||||||
|
* @param csiRsrq CSI reference signal received quality.
|
||||||
|
* @param csiSinr CSI signal-to-noise and interference ratio.
|
||||||
|
* @param csiCqiTableIndex CSI CSI channel quality indicator (CQI) table index.
|
||||||
|
* @param csiCqiReport CSI channel quality indicators (CQI) for all subbands.
|
||||||
|
* @param ssRsrp SS reference signal received power.
|
||||||
|
* @param ssRsrq SS reference signal received quality.
|
||||||
|
* @param ssSinr SS signal-to-noise and interference ratio.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public CellSignalStrengthNr(int csiRsrp, int csiRsrq, int csiSinr, int csiCqiTableIndex,
|
||||||
|
List<Integer> csiCqiReport, int ssRsrp, int ssRsrq, int ssSinr) {
|
||||||
|
mCsiRsrp = inRangeOrUnavailable(csiRsrp, -140, -44);
|
||||||
|
mCsiRsrq = inRangeOrUnavailable(csiRsrq, -20, -3);
|
||||||
|
mCsiSinr = inRangeOrUnavailable(csiSinr, -23, 23);
|
||||||
|
mCsiCqiTableIndex = inRangeOrUnavailable(csiCqiTableIndex, 1, 3);
|
||||||
|
mCsiCqiReport = csiCqiReport.stream()
|
||||||
|
.map(cqi -> new Integer(inRangeOrUnavailable(cqi.intValue(), 1, 3)))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
mSsRsrp = inRangeOrUnavailable(ssRsrp, -140, -44);
|
||||||
|
mSsRsrq = inRangeOrUnavailable(ssRsrq, -43, 20);
|
||||||
|
mSsSinr = inRangeOrUnavailable(ssSinr, -23, 40);
|
||||||
|
updateLevel(null, null);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param csiRsrp CSI reference signal received power.
|
* @param csiRsrp CSI reference signal received power.
|
||||||
* @param csiRsrq CSI reference signal received quality.
|
* @param csiRsrq CSI reference signal received quality.
|
||||||
@@ -145,13 +197,8 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
|
|||||||
*/
|
*/
|
||||||
public CellSignalStrengthNr(
|
public CellSignalStrengthNr(
|
||||||
int csiRsrp, int csiRsrq, int csiSinr, int ssRsrp, int ssRsrq, int ssSinr) {
|
int csiRsrp, int csiRsrq, int csiSinr, int ssRsrp, int ssRsrq, int ssSinr) {
|
||||||
mCsiRsrp = inRangeOrUnavailable(csiRsrp, -140, -44);
|
this(csiRsrp, csiRsrq, csiSinr, CellInfo.UNAVAILABLE, Collections.emptyList(),
|
||||||
mCsiRsrq = inRangeOrUnavailable(csiRsrq, -20, -3);
|
ssRsrp, ssRsrq, ssSinr);
|
||||||
mCsiSinr = inRangeOrUnavailable(csiSinr, -23, 23);
|
|
||||||
mSsRsrp = inRangeOrUnavailable(ssRsrp, -140, -44);
|
|
||||||
mSsRsrq = inRangeOrUnavailable(ssRsrq, -43, 20);
|
|
||||||
mSsSinr = inRangeOrUnavailable(ssSinr, -23, 40);
|
|
||||||
updateLevel(null, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -163,6 +210,15 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
|
|||||||
ss.ssSinr);
|
ss.ssSinr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hide
|
||||||
|
* @param ss signal strength from modem.
|
||||||
|
*/
|
||||||
|
public CellSignalStrengthNr(android.hardware.radio.V1_6.NrSignalStrength ss) {
|
||||||
|
this(flip(ss.base.csiRsrp), flip(ss.base.csiRsrq), ss.base.csiSinr, ss.csiCqiTableIndex,
|
||||||
|
ss.csiCqiReport, flip(ss.base.ssRsrp), flip(ss.base.ssRsrq), ss.base.ssSinr);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flip sign cell strength value when taking in the value from hal
|
* Flip sign cell strength value when taking in the value from hal
|
||||||
* @param val cell strength value
|
* @param val cell strength value
|
||||||
@@ -232,6 +288,36 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
|
|||||||
return mCsiSinr;
|
return mCsiSinr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return CSI channel quality indicator (CQI) table index. There are multiple CQI tables.
|
||||||
|
* The definition of CQI in each table is different.
|
||||||
|
*
|
||||||
|
* Reference: 3GPP TS 138.214 section 5.2.2.1.
|
||||||
|
*
|
||||||
|
* Range [1, 3].
|
||||||
|
*/
|
||||||
|
/** @hide */
|
||||||
|
public int getCsiCqiTableIndex() {
|
||||||
|
return mCsiCqiTableIndex;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Return a list of CSI channel quality indicators (CQI) for all subbands.
|
||||||
|
*
|
||||||
|
* If the CQI report is for the entire wideband, a single CQI index is provided.
|
||||||
|
* If the CQI report is for all subbands, one CQI index is provided for each subband,
|
||||||
|
* in ascending order of subband index.
|
||||||
|
* If CQI is not available, the CQI report is empty.
|
||||||
|
*
|
||||||
|
* Reference: 3GPP TS 138.214 section 5.2.2.1.
|
||||||
|
*
|
||||||
|
* Range [0, 15] for each CQI.
|
||||||
|
*/
|
||||||
|
/** @hide */
|
||||||
|
@NonNull
|
||||||
|
public List<Integer> getCsiCqiReport() {
|
||||||
|
return mCsiCqiReport;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int describeContents() {
|
public int describeContents() {
|
||||||
return 0;
|
return 0;
|
||||||
@@ -243,6 +329,8 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
|
|||||||
dest.writeInt(mCsiRsrp);
|
dest.writeInt(mCsiRsrp);
|
||||||
dest.writeInt(mCsiRsrq);
|
dest.writeInt(mCsiRsrq);
|
||||||
dest.writeInt(mCsiSinr);
|
dest.writeInt(mCsiSinr);
|
||||||
|
dest.writeInt(mCsiCqiTableIndex);
|
||||||
|
dest.writeList(mCsiCqiReport);
|
||||||
dest.writeInt(mSsRsrp);
|
dest.writeInt(mSsRsrp);
|
||||||
dest.writeInt(mSsRsrq);
|
dest.writeInt(mSsRsrq);
|
||||||
dest.writeInt(mSsSinr);
|
dest.writeInt(mSsSinr);
|
||||||
@@ -253,6 +341,8 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
|
|||||||
mCsiRsrp = in.readInt();
|
mCsiRsrp = in.readInt();
|
||||||
mCsiRsrq = in.readInt();
|
mCsiRsrq = in.readInt();
|
||||||
mCsiSinr = in.readInt();
|
mCsiSinr = in.readInt();
|
||||||
|
mCsiCqiTableIndex = in.readInt();
|
||||||
|
mCsiCqiReport = in.readArrayList(Integer.class.getClassLoader());
|
||||||
mSsRsrp = in.readInt();
|
mSsRsrp = in.readInt();
|
||||||
mSsRsrq = in.readInt();
|
mSsRsrq = in.readInt();
|
||||||
mSsSinr = in.readInt();
|
mSsSinr = in.readInt();
|
||||||
@@ -265,6 +355,8 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
|
|||||||
mCsiRsrp = CellInfo.UNAVAILABLE;
|
mCsiRsrp = CellInfo.UNAVAILABLE;
|
||||||
mCsiRsrq = CellInfo.UNAVAILABLE;
|
mCsiRsrq = CellInfo.UNAVAILABLE;
|
||||||
mCsiSinr = CellInfo.UNAVAILABLE;
|
mCsiSinr = CellInfo.UNAVAILABLE;
|
||||||
|
mCsiCqiTableIndex = CellInfo.UNAVAILABLE;
|
||||||
|
mCsiCqiReport = Collections.emptyList();
|
||||||
mSsRsrp = CellInfo.UNAVAILABLE;
|
mSsRsrp = CellInfo.UNAVAILABLE;
|
||||||
mSsRsrq = CellInfo.UNAVAILABLE;
|
mSsRsrq = CellInfo.UNAVAILABLE;
|
||||||
mSsSinr = CellInfo.UNAVAILABLE;
|
mSsSinr = CellInfo.UNAVAILABLE;
|
||||||
@@ -408,6 +500,8 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
|
|||||||
mCsiRsrp = s.mCsiRsrp;
|
mCsiRsrp = s.mCsiRsrp;
|
||||||
mCsiRsrq = s.mCsiRsrq;
|
mCsiRsrq = s.mCsiRsrq;
|
||||||
mCsiSinr = s.mCsiSinr;
|
mCsiSinr = s.mCsiSinr;
|
||||||
|
mCsiCqiTableIndex = s.mCsiCqiTableIndex;
|
||||||
|
mCsiCqiReport = s.mCsiCqiReport;
|
||||||
mSsRsrp = s.mSsRsrp;
|
mSsRsrp = s.mSsRsrp;
|
||||||
mSsRsrq = s.mSsRsrq;
|
mSsRsrq = s.mSsRsrq;
|
||||||
mSsSinr = s.mSsSinr;
|
mSsSinr = s.mSsSinr;
|
||||||
@@ -423,7 +517,8 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(mCsiRsrp, mCsiRsrq, mCsiSinr, mSsRsrp, mSsRsrq, mSsSinr, mLevel);
|
return Objects.hash(mCsiRsrp, mCsiRsrq, mCsiSinr, mCsiCqiTableIndex,
|
||||||
|
mCsiCqiReport, mSsRsrp, mSsRsrq, mSsSinr, mLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final CellSignalStrengthNr sInvalid = new CellSignalStrengthNr();
|
private static final CellSignalStrengthNr sInvalid = new CellSignalStrengthNr();
|
||||||
@@ -439,6 +534,8 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
|
|||||||
if (obj instanceof CellSignalStrengthNr) {
|
if (obj instanceof CellSignalStrengthNr) {
|
||||||
CellSignalStrengthNr o = (CellSignalStrengthNr) obj;
|
CellSignalStrengthNr o = (CellSignalStrengthNr) obj;
|
||||||
return mCsiRsrp == o.mCsiRsrp && mCsiRsrq == o.mCsiRsrq && mCsiSinr == o.mCsiSinr
|
return mCsiRsrp == o.mCsiRsrp && mCsiRsrq == o.mCsiRsrq && mCsiSinr == o.mCsiSinr
|
||||||
|
&& mCsiCqiTableIndex == o.mCsiCqiTableIndex
|
||||||
|
&& mCsiCqiReport.equals(o.mCsiCqiReport)
|
||||||
&& mSsRsrp == o.mSsRsrp && mSsRsrq == o.mSsRsrq && mSsSinr == o.mSsSinr
|
&& mSsRsrp == o.mSsRsrp && mSsRsrq == o.mSsRsrq && mSsSinr == o.mSsSinr
|
||||||
&& mLevel == o.mLevel;
|
&& mLevel == o.mLevel;
|
||||||
}
|
}
|
||||||
@@ -451,7 +548,8 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
|
|||||||
.append(TAG + ":{")
|
.append(TAG + ":{")
|
||||||
.append(" csiRsrp = " + mCsiRsrp)
|
.append(" csiRsrp = " + mCsiRsrp)
|
||||||
.append(" csiRsrq = " + mCsiRsrq)
|
.append(" csiRsrq = " + mCsiRsrq)
|
||||||
.append(" csiSinr = " + mCsiSinr)
|
.append(" csiCqiTableIndex = " + mCsiCqiTableIndex)
|
||||||
|
.append(" csiCqiReport = " + mCsiCqiReport)
|
||||||
.append(" ssRsrp = " + mSsRsrp)
|
.append(" ssRsrp = " + mSsRsrp)
|
||||||
.append(" ssRsrq = " + mSsRsrq)
|
.append(" ssRsrq = " + mSsRsrq)
|
||||||
.append(" ssSinr = " + mSsSinr)
|
.append(" ssSinr = " + mSsSinr)
|
||||||
|
|||||||
@@ -187,6 +187,21 @@ public class SignalStrength implements Parcelable {
|
|||||||
new CellSignalStrengthNr(signalStrength.nr));
|
new CellSignalStrengthNr(signalStrength.nr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for Radio HAL V1.6.
|
||||||
|
*
|
||||||
|
* @param signalStrength signal strength reported from modem.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public SignalStrength(android.hardware.radio.V1_6.SignalStrength signalStrength) {
|
||||||
|
this(new CellSignalStrengthCdma(signalStrength.cdma, signalStrength.evdo),
|
||||||
|
new CellSignalStrengthGsm(signalStrength.gsm),
|
||||||
|
new CellSignalStrengthWcdma(signalStrength.wcdma),
|
||||||
|
new CellSignalStrengthTdscdma(signalStrength.tdscdma),
|
||||||
|
new CellSignalStrengthLte(signalStrength.lte),
|
||||||
|
new CellSignalStrengthNr(signalStrength.nr));
|
||||||
|
}
|
||||||
|
|
||||||
private CellSignalStrength getPrimary() {
|
private CellSignalStrength getPrimary() {
|
||||||
// This behavior is intended to replicate the legacy behavior of getLevel() by prioritizing
|
// This behavior is intended to replicate the legacy behavior of getLevel() by prioritizing
|
||||||
// newer faster RATs for default/for display purposes.
|
// newer faster RATs for default/for display purposes.
|
||||||
|
|||||||
Reference in New Issue
Block a user