summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Mingming Cai <mingcai@google.com> 2020-12-03 19:13:21 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2020-12-03 19:13:21 +0000
commit8dd47fcfc5fea0cdf01c3167f7882936226f350d (patch)
tree4825d6e405e2715b273110fd2824a77c4a67c808
parenta9f7570de6fb8d87da260e4255f13eda91e4aba9 (diff)
parentf4753f637345729e4da6d4264129a0a140c55bec (diff)
Merge "Add CQI and table index to LTE and NR CellSignalStrength"
-rw-r--r--telephony/java/android/telephony/CellInfo.java52
-rw-r--r--telephony/java/android/telephony/CellInfoCdma.java9
-rw-r--r--telephony/java/android/telephony/CellInfoGsm.java8
-rw-r--r--telephony/java/android/telephony/CellInfoLte.java9
-rw-r--r--telephony/java/android/telephony/CellInfoNr.java8
-rw-r--r--telephony/java/android/telephony/CellInfoTdscdma.java8
-rw-r--r--telephony/java/android/telephony/CellInfoWcdma.java8
-rw-r--r--telephony/java/android/telephony/CellSignalStrengthLte.java63
-rw-r--r--telephony/java/android/telephony/CellSignalStrengthNr.java106
-rw-r--r--telephony/java/android/telephony/SignalStrength.java15
10 files changed, 271 insertions, 15 deletions
diff --git a/telephony/java/android/telephony/CellInfo.java b/telephony/java/android/telephony/CellInfo.java
index b381ccecde47..189a4b898886 100644
--- a/telephony/java/android/telephony/CellInfo.java
+++ b/telephony/java/android/telephony/CellInfo.java
@@ -21,7 +21,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.compat.annotation.UnsupportedAppUsage;
import android.hardware.radio.V1_4.CellInfo.Info;
-import android.hardware.radio.V1_5.CellInfo.CellInfoRatSpecificInfo;
import android.os.Parcel;
import android.os.Parcelable;
@@ -352,6 +351,13 @@ public abstract class CellInfo implements Parcelable {
}
/** @hide */
+ protected CellInfo(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) {
+ this.mRegistered = ci.registered;
+ this.mTimeStamp = timeStamp;
+ this.mCellConnectionStatus = ci.connectionStatus;
+ }
+
+ /** @hide */
public static CellInfo create(android.hardware.radio.V1_0.CellInfo ci) {
if (ci == null) return null;
switch(ci.cellInfoType) {
@@ -395,17 +401,49 @@ public abstract class CellInfo implements Parcelable {
public static CellInfo create(android.hardware.radio.V1_5.CellInfo ci, long timeStamp) {
if (ci == null) return null;
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);
+ case android.hardware.radio.V1_5.CellInfo
+ .CellInfoRatSpecificInfo.hidl_discriminator.cdma:
+ return new CellInfoCdma(ci, timeStamp);
+ case android.hardware.radio.V1_5.CellInfo
+ .CellInfoRatSpecificInfo.hidl_discriminator.lte:
+ return new CellInfoLte(ci, timeStamp);
+ case android.hardware.radio.V1_5.CellInfo
+ .CellInfoRatSpecificInfo.hidl_discriminator.wcdma:
+ return new CellInfoWcdma(ci, timeStamp);
+ case android.hardware.radio.V1_5.CellInfo
+ .CellInfoRatSpecificInfo.hidl_discriminator.tdscdma:
+ return new CellInfoTdscdma(ci, timeStamp);
+ 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 CellInfoRatSpecificInfo.hidl_discriminator.cdma:
+ case android.hardware.radio.V1_6.CellInfo
+ .CellInfoRatSpecificInfo.hidl_discriminator.cdma:
return new CellInfoCdma(ci, timeStamp);
- case CellInfoRatSpecificInfo.hidl_discriminator.lte:
+ case android.hardware.radio.V1_6.CellInfo
+ .CellInfoRatSpecificInfo.hidl_discriminator.lte:
return new CellInfoLte(ci, timeStamp);
- case CellInfoRatSpecificInfo.hidl_discriminator.wcdma:
+ case android.hardware.radio.V1_6.CellInfo
+ .CellInfoRatSpecificInfo.hidl_discriminator.wcdma:
return new CellInfoWcdma(ci, timeStamp);
- case CellInfoRatSpecificInfo.hidl_discriminator.tdscdma:
+ case android.hardware.radio.V1_6.CellInfo
+ .CellInfoRatSpecificInfo.hidl_discriminator.tdscdma:
return new CellInfoTdscdma(ci, timeStamp);
- case CellInfoRatSpecificInfo.hidl_discriminator.nr:
+ case android.hardware.radio.V1_6.CellInfo
+ .CellInfoRatSpecificInfo.hidl_discriminator.nr:
return new CellInfoNr(ci, timeStamp);
default: return null;
}
diff --git a/telephony/java/android/telephony/CellInfoCdma.java b/telephony/java/android/telephony/CellInfoCdma.java
index 3ce99facfdb1..dbb30d29eb87 100644
--- a/telephony/java/android/telephony/CellInfoCdma.java
+++ b/telephony/java/android/telephony/CellInfoCdma.java
@@ -87,6 +87,15 @@ public final class CellInfoCdma extends CellInfo implements Parcelable {
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.
*/
diff --git a/telephony/java/android/telephony/CellInfoGsm.java b/telephony/java/android/telephony/CellInfoGsm.java
index e296e613362a..e1d996e87fcf 100644
--- a/telephony/java/android/telephony/CellInfoGsm.java
+++ b/telephony/java/android/telephony/CellInfoGsm.java
@@ -82,6 +82,14 @@ public final class CellInfoGsm extends CellInfo implements Parcelable {
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.
*/
diff --git a/telephony/java/android/telephony/CellInfoLte.java b/telephony/java/android/telephony/CellInfoLte.java
index 6f812341756b..39b320afdac9 100644
--- a/telephony/java/android/telephony/CellInfoLte.java
+++ b/telephony/java/android/telephony/CellInfoLte.java
@@ -91,6 +91,15 @@ public final class CellInfoLte extends CellInfo implements Parcelable {
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.
*/
diff --git a/telephony/java/android/telephony/CellInfoNr.java b/telephony/java/android/telephony/CellInfoNr.java
index e01e8f0d5b51..12e6a38bfdc0 100644
--- a/telephony/java/android/telephony/CellInfoNr.java
+++ b/telephony/java/android/telephony/CellInfoNr.java
@@ -68,6 +68,14 @@ public final class CellInfoNr extends CellInfo {
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.
*/
diff --git a/telephony/java/android/telephony/CellInfoTdscdma.java b/telephony/java/android/telephony/CellInfoTdscdma.java
index 038c49ac37ee..994b317a47fd 100644
--- a/telephony/java/android/telephony/CellInfoTdscdma.java
+++ b/telephony/java/android/telephony/CellInfoTdscdma.java
@@ -85,6 +85,14 @@ public final class CellInfoTdscdma extends CellInfo implements Parcelable {
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.
*/
diff --git a/telephony/java/android/telephony/CellInfoWcdma.java b/telephony/java/android/telephony/CellInfoWcdma.java
index c74955f807b0..62ac0b8ae04e 100644
--- a/telephony/java/android/telephony/CellInfoWcdma.java
+++ b/telephony/java/android/telephony/CellInfoWcdma.java
@@ -80,6 +80,14 @@ public final class CellInfoWcdma extends CellInfo implements Parcelable {
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.
*/
diff --git a/telephony/java/android/telephony/CellSignalStrengthLte.java b/telephony/java/android/telephony/CellSignalStrengthLte.java
index 47a8f72a2337..db7d10ae8ce4 100644
--- a/telephony/java/android/telephony/CellSignalStrengthLte.java
+++ b/telephony/java/android/telephony/CellSignalStrengthLte.java
@@ -86,6 +86,15 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
private int mRsrq;
@UnsupportedAppUsage(maxTargetSdk = android.os.Build.VERSION_CODES.P)
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)
private int mCqi;
@UnsupportedAppUsage(maxTargetSdk = android.os.Build.VERSION_CODES.P)
@@ -120,24 +129,42 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
* @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 cqi,
- int timingAdvance) {
-
+ 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
+ *
+ * @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 cqi [0, 15], UNKNOWN
+ * @param timingAdvance [0, 1282], UNKNOWN
+ *
+ */
+ /** @hide */
+ public CellSignalStrengthLte(int rssi, int rsrp, int rsrq, int rssnr, int cqi,
+ int timingAdvance) {
+ this(rssi, rsrp, rsrq, rssnr, CellInfo.UNAVAILABLE, cqi, timingAdvance);
+ }
+
/** @hide */
public CellSignalStrengthLte(android.hardware.radio.V1_0.LteSignalStrength lte) {
// Convert from HAL values as part of construction.
@@ -148,6 +175,16 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
}
/** @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 */
public CellSignalStrengthLte(CellSignalStrengthLte s) {
copyFrom(s);
}
@@ -159,6 +196,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
mRsrp = s.mRsrp;
mRsrq = s.mRsrq;
mRssnr = s.mRssnr;
+ mCqiTableIndex = s.mCqiTableIndex;
mCqi = s.mCqi;
mTimingAdvance = s.mTimingAdvance;
mLevel = s.mLevel;
@@ -179,6 +217,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
mRsrp = CellInfo.UNAVAILABLE;
mRsrq = CellInfo.UNAVAILABLE;
mRssnr = CellInfo.UNAVAILABLE;
+ mCqiTableIndex = CellInfo.UNAVAILABLE;
mCqi = CellInfo.UNAVAILABLE;
mTimingAdvance = CellInfo.UNAVAILABLE;
mLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
@@ -402,6 +441,17 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
}
/**
+ * 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
*
* @return the CQI if available or
@@ -454,7 +504,8 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
@Override
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();
@@ -476,6 +527,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
&& mRsrp == s.mRsrp
&& mRsrq == s.mRsrq
&& mRssnr == s.mRssnr
+ && mCqiTableIndex == s.mCqiTableIndex
&& mCqi == s.mCqi
&& mTimingAdvance == s.mTimingAdvance
&& mLevel == s.mLevel;
@@ -491,6 +543,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
+ " rsrp=" + mRsrp
+ " rsrq=" + mRsrq
+ " rssnr=" + mRssnr
+ + " cqiTableIndex=" + mCqiTableIndex
+ " cqi=" + mCqi
+ " ta=" + mTimingAdvance
+ " level=" + mLevel
@@ -508,6 +561,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
dest.writeInt(mRsrp);
dest.writeInt(mRsrq);
dest.writeInt(mRssnr);
+ dest.writeInt(mCqiTableIndex);
dest.writeInt(mCqi);
dest.writeInt(mTimingAdvance);
dest.writeInt(mLevel);
@@ -523,6 +577,7 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P
mRsrp = in.readInt();
mRsrq = in.readInt();
mRssnr = in.readInt();
+ mCqiTableIndex = in.readInt();
mCqi = in.readInt();
mTimingAdvance = in.readInt();
mLevel = in.readInt();
diff --git a/telephony/java/android/telephony/CellSignalStrengthNr.java b/telephony/java/android/telephony/CellSignalStrengthNr.java
index 766019ec382a..1518190bb7f7 100644
--- a/telephony/java/android/telephony/CellSignalStrengthNr.java
+++ b/telephony/java/android/telephony/CellSignalStrengthNr.java
@@ -18,6 +18,7 @@ package android.telephony;
import android.annotation.IntDef;
import android.annotation.IntRange;
+import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.PersistableBundle;
@@ -27,7 +28,10 @@ import com.android.telephony.Rlog;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
import java.util.Objects;
+import java.util.stream.Collectors;
/**
* 5G NR signal strength related information.
@@ -109,6 +113,28 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
private int mCsiRsrp;
private int mCsiRsrq;
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 mSsRsrq;
private int mSsSinr;
@@ -138,16 +164,22 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
* @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 ssRsrp, int ssRsrq, int ssSinr) {
+ 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);
@@ -155,6 +187,21 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
}
/**
+ * @param csiRsrp CSI reference signal received power.
+ * @param csiRsrq CSI reference signal received quality.
+ * @param csiSinr CSI signal-to-noise and interference ratio.
+ * @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 ssRsrp, int ssRsrq, int ssSinr) {
+ this(csiRsrp, csiRsrq, csiSinr, CellInfo.UNAVAILABLE, Collections.emptyList(),
+ ssRsrp, ssRsrq, ssSinr);
+ }
+
+ /**
* @hide
* @param ss signal strength from modem.
*/
@@ -164,6 +211,15 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
}
/**
+ * @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
* @param val cell strength value
* @return flipped value
@@ -232,6 +288,36 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
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
public int describeContents() {
return 0;
@@ -243,6 +329,8 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
dest.writeInt(mCsiRsrp);
dest.writeInt(mCsiRsrq);
dest.writeInt(mCsiSinr);
+ dest.writeInt(mCsiCqiTableIndex);
+ dest.writeList(mCsiCqiReport);
dest.writeInt(mSsRsrp);
dest.writeInt(mSsRsrq);
dest.writeInt(mSsSinr);
@@ -253,6 +341,8 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
mCsiRsrp = in.readInt();
mCsiRsrq = in.readInt();
mCsiSinr = in.readInt();
+ mCsiCqiTableIndex = in.readInt();
+ mCsiCqiReport = in.readArrayList(Integer.class.getClassLoader());
mSsRsrp = in.readInt();
mSsRsrq = in.readInt();
mSsSinr = in.readInt();
@@ -265,6 +355,8 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
mCsiRsrp = CellInfo.UNAVAILABLE;
mCsiRsrq = CellInfo.UNAVAILABLE;
mCsiSinr = CellInfo.UNAVAILABLE;
+ mCsiCqiTableIndex = CellInfo.UNAVAILABLE;
+ mCsiCqiReport = Collections.emptyList();
mSsRsrp = CellInfo.UNAVAILABLE;
mSsRsrq = CellInfo.UNAVAILABLE;
mSsSinr = CellInfo.UNAVAILABLE;
@@ -408,6 +500,8 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
mCsiRsrp = s.mCsiRsrp;
mCsiRsrq = s.mCsiRsrq;
mCsiSinr = s.mCsiSinr;
+ mCsiCqiTableIndex = s.mCsiCqiTableIndex;
+ mCsiCqiReport = s.mCsiCqiReport;
mSsRsrp = s.mSsRsrp;
mSsRsrq = s.mSsRsrq;
mSsSinr = s.mSsSinr;
@@ -423,7 +517,8 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
@Override
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();
@@ -439,6 +534,8 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
if (obj instanceof CellSignalStrengthNr) {
CellSignalStrengthNr o = (CellSignalStrengthNr) obj;
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
&& mLevel == o.mLevel;
}
@@ -451,7 +548,8 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa
.append(TAG + ":{")
.append(" csiRsrp = " + mCsiRsrp)
.append(" csiRsrq = " + mCsiRsrq)
- .append(" csiSinr = " + mCsiSinr)
+ .append(" csiCqiTableIndex = " + mCsiCqiTableIndex)
+ .append(" csiCqiReport = " + mCsiCqiReport)
.append(" ssRsrp = " + mSsRsrp)
.append(" ssRsrq = " + mSsRsrq)
.append(" ssSinr = " + mSsSinr)
diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java
index 7bd0bc0b69ce..b317c5557108 100644
--- a/telephony/java/android/telephony/SignalStrength.java
+++ b/telephony/java/android/telephony/SignalStrength.java
@@ -187,6 +187,21 @@ public class SignalStrength implements Parcelable {
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() {
// This behavior is intended to replicate the legacy behavior of getLevel() by prioritizing
// newer faster RATs for default/for display purposes.