Merge "Implement physicalChannelConfig framework/base"
am: c291d32338
Change-Id: Ic5c677aafb196d4a2d896b70f15d2e6925fc2f5c
diff --git a/telephony/java/android/telephony/PhysicalChannelConfig.java b/telephony/java/android/telephony/PhysicalChannelConfig.java
index d2001ae..22ddb4a 100644
--- a/telephony/java/android/telephony/PhysicalChannelConfig.java
+++ b/telephony/java/android/telephony/PhysicalChannelConfig.java
@@ -16,11 +16,15 @@
package android.telephony;
+import android.annotation.IntDef;
import android.os.Parcel;
import android.os.Parcelable;
-import android.annotation.IntDef;
+import android.telephony.TelephonyManager.NetworkType;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.util.Arrays;
+import java.util.Objects;
/**
* @hide
@@ -50,6 +54,7 @@
*
* <p>One of {@link #CONNECTION_PRIMARY_SERVING}, {@link #CONNECTION_SECONDARY_SERVING}.
*/
+ @ConnectionStatus
private int mCellConnectionStatus;
/**
@@ -57,15 +62,33 @@
*/
private int mCellBandwidthDownlinkKhz;
- public PhysicalChannelConfig(int status, int bandwidth) {
- mCellConnectionStatus = status;
- mCellBandwidthDownlinkKhz = bandwidth;
- }
+ /**
+ * The radio technology for this physical channel.
+ */
+ @NetworkType
+ private int mRat;
- public PhysicalChannelConfig(Parcel in) {
- mCellConnectionStatus = in.readInt();
- mCellBandwidthDownlinkKhz = in.readInt();
- }
+ /**
+ * The rough frequency range for this physical channel.
+ */
+ @ServiceState.FrequencyRange
+ private int mFrequencyRange;
+
+ /**
+ * The absolute radio frequency channel number, {@link Integer#MAX_VALUE} if unknown.
+ */
+ private int mChannelNumber;
+
+ /**
+ * A list of data calls mapped to this physical channel. An empty list means the physical
+ * channel has no data call mapped to it.
+ */
+ private int[] mContextIds;
+
+ /**
+ * The physical cell identifier for this cell - PCI, PSC, {@link Integer#MAX_VALUE} if known.
+ */
+ private int mPhysicalCellId;
@Override
public int describeContents() {
@@ -76,6 +99,11 @@
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(mCellConnectionStatus);
dest.writeInt(mCellBandwidthDownlinkKhz);
+ dest.writeInt(mRat);
+ dest.writeInt(mChannelNumber);
+ dest.writeInt(mFrequencyRange);
+ dest.writeIntArray(mContextIds);
+ dest.writeInt(mPhysicalCellId);
}
/**
@@ -86,6 +114,60 @@
}
/**
+ * Get the list of data call ids mapped to this physical channel. This list is sorted into
+ * ascending numerical order. Each id in this list must match the id in
+ * {@link com.android.internal.telephony.dataconnection.DataConnection}. An empty list means the
+ * physical channel has no data call mapped to it.
+ *
+ * @return an integer list indicates the data call ids.
+ */
+ public int[] getContextIds() {
+ return mContextIds;
+ }
+
+ /**
+ * @return the rough frequency range for this physical channel.
+ * @see {@link ServiceState#FREQUENCY_RANGE_LOW}
+ * @see {@link ServiceState#FREQUENCY_RANGE_MID}
+ * @see {@link ServiceState#FREQUENCY_RANGE_HIGH}
+ * @see {@link ServiceState#FREQUENCY_RANGE_MMWAVE}
+ */
+ @ServiceState.FrequencyRange
+ public int getFrequencyRange() {
+ return mFrequencyRange;
+ }
+
+ /**
+ * @return the absolute radio frequency channel number for this physical channel,
+ * {@link Integer#MAX_VALUE} if unknown.
+ */
+ public int getChannelNumber() {
+ return mChannelNumber;
+ }
+
+ /**
+ * In UTRAN, this value is primary scrambling code. The range is [0, 511].
+ * Reference: 3GPP TS 25.213 section 5.2.2.
+ *
+ * In EUTRAN, this value is physical layer cell identity. The range is [0, 503].
+ * Reference: 3GPP TS 36.211 section 6.11.
+ *
+ * In 5G RAN, this value is physical layer cell identity. The range is [0, 1008].
+ * Reference: 3GPP TS 38.211 section 7.4.2.1.
+ *
+ * @return the physical cell identifier for this cell, {@link Integer#MAX_VALUE} if unknown.
+ */
+ public int getPhysicalCellId() {
+ return mPhysicalCellId;
+ }
+
+ /**The radio technology for this physical channel. */
+ @NetworkType
+ public int getRat() {
+ return mRat;
+ }
+
+ /**
* Gets the connection status of the cell.
*
* @see #CONNECTION_PRIMARY_SERVING
@@ -125,12 +207,19 @@
PhysicalChannelConfig config = (PhysicalChannelConfig) o;
return mCellConnectionStatus == config.mCellConnectionStatus
- && mCellBandwidthDownlinkKhz == config.mCellBandwidthDownlinkKhz;
+ && mCellBandwidthDownlinkKhz == config.mCellBandwidthDownlinkKhz
+ && mRat == config.mRat
+ && mFrequencyRange == config.mFrequencyRange
+ && mChannelNumber == config.mChannelNumber
+ && mPhysicalCellId == config.mPhysicalCellId
+ && Arrays.equals(mContextIds, config.mContextIds);
}
@Override
public int hashCode() {
- return (mCellBandwidthDownlinkKhz * 29) + (mCellConnectionStatus * 31);
+ return Objects.hash(
+ mCellConnectionStatus, mCellBandwidthDownlinkKhz, mRat, mFrequencyRange,
+ mChannelNumber, mPhysicalCellId, mContextIds);
}
public static final Parcelable.Creator<PhysicalChannelConfig> CREATOR =
@@ -147,11 +236,111 @@
@Override
public String toString() {
return new StringBuilder()
- .append("{mConnectionStatus=")
- .append(getConnectionStatusString())
- .append(",mCellBandwidthDownlinkKhz=")
- .append(mCellBandwidthDownlinkKhz)
- .append("}")
- .toString();
+ .append("{mConnectionStatus=")
+ .append(getConnectionStatusString())
+ .append(",mCellBandwidthDownlinkKhz=")
+ .append(mCellBandwidthDownlinkKhz)
+ .append(",mRat=")
+ .append(mRat)
+ .append(",mFrequencyRange=")
+ .append(mFrequencyRange)
+ .append(",mChannelNumber=")
+ .append(mChannelNumber)
+ .append(",mContextIds=")
+ .append(mContextIds.toString())
+ .append(",mPhysicalCellId=")
+ .append(mPhysicalCellId)
+ .append("}")
+ .toString();
+ }
+
+ private PhysicalChannelConfig(Parcel in) {
+ mCellConnectionStatus = in.readInt();
+ mCellBandwidthDownlinkKhz = in.readInt();
+ mRat = in.readInt();
+ mChannelNumber = in.readInt();
+ mFrequencyRange = in.readInt();
+ mContextIds = in.createIntArray();
+ mPhysicalCellId = in.readInt();
+ }
+
+ private PhysicalChannelConfig(Builder builder) {
+ mCellConnectionStatus = builder.mCellConnectionStatus;
+ mCellBandwidthDownlinkKhz = builder.mCellBandwidthDownlinkKhz;
+ mRat = builder.mRat;
+ mChannelNumber = builder.mChannelNumber;
+ mFrequencyRange = builder.mFrequencyRange;
+ mContextIds = builder.mContextIds;
+ mPhysicalCellId = builder.mPhysicalCellId;
+ }
+
+ /** The builder of {@code PhysicalChannelConfig}. */
+ public static final class Builder {
+ private int mRat;
+ private int mFrequencyRange;
+ private int mChannelNumber;
+ private int mCellBandwidthDownlinkKhz;
+ private int mCellConnectionStatus;
+ private int[] mContextIds;
+ private int mPhysicalCellId;
+
+ /** @hide */
+ public Builder() {
+ mRat = ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN;
+ mFrequencyRange = ServiceState.FREQUENCY_RANGE_UNKNOWN;
+ mChannelNumber = Integer.MAX_VALUE;
+ mCellBandwidthDownlinkKhz = 0;
+ mCellConnectionStatus = CONNECTION_UNKNOWN;
+ mContextIds = new int[0];
+ mPhysicalCellId = Integer.MAX_VALUE;
+ }
+
+ /** @hide */
+ public PhysicalChannelConfig build() {
+ return new PhysicalChannelConfig(this);
+ }
+
+ /** @hide */
+ public Builder setRat(int rat) {
+ this.mRat = rat;
+ return this;
+ }
+
+ /** @hide */
+ public Builder setFrequencyRange(int frequencyRange) {
+ this.mFrequencyRange = frequencyRange;
+ return this;
+ }
+
+ /** @hide */
+ public Builder setChannelNumber(int channelNumber) {
+ this.mChannelNumber = channelNumber;
+ return this;
+ }
+
+ /** @hide */
+ public Builder setCellBandwidthDownlinkKhz(int cellBandwidthDownlinkKhz) {
+ this.mCellBandwidthDownlinkKhz = cellBandwidthDownlinkKhz;
+ return this;
+ }
+
+ /** @hide */
+ public Builder setCellConnectionStatus(int connectionStatus) {
+ this.mCellConnectionStatus = connectionStatus;
+ return this;
+ }
+
+ /** @hide */
+ public Builder setContextIds(int[] contextIds) {
+ if (contextIds != null) Arrays.sort(contextIds);
+ this.mContextIds = contextIds;
+ return this;
+ }
+
+ /** @hide */
+ public Builder setPhysicalCellId(int physicalCellId) {
+ this.mPhysicalCellId = physicalCellId;
+ return this;
+ }
}
}