Merge "[PhysicalChannelConfig] Add new testcases and Rename 1. the setRat to setNetworkType 2. PhysicalChannelConfiguration to PhysicalChannelConfig"
diff --git a/src/java/com/android/internal/telephony/RadioIndication.java b/src/java/com/android/internal/telephony/RadioIndication.java
index 7951592..893378f 100644
--- a/src/java/com/android/internal/telephony/RadioIndication.java
+++ b/src/java/com/android/internal/telephony/RadioIndication.java
@@ -86,6 +86,7 @@
import android.hardware.radio.V1_0.SuppSvcNotification;
import android.hardware.radio.V1_2.CellConnectionStatus;
import android.hardware.radio.V1_6.IRadioIndication;
+import android.hardware.radio.V1_6.PhysicalChannelConfig.Band;
import android.os.AsyncResult;
import android.os.RemoteException;
import android.sysprop.TelephonyProperties;
@@ -1175,7 +1176,7 @@
builder.setFrequencyRange(config.rfInfo.range());
break;
case android.hardware.radio.V1_4.RadioFrequencyInfo.hidl_discriminator.channelNumber:
- builder.setChannelNumber(config.rfInfo.channelNumber());
+ builder.setDownlinkChannelNumber(config.rfInfo.channelNumber());
break;
default:
mRil.riljLoge("Unsupported frequency type " + config.rfInfo.getDiscriminator());
@@ -1196,6 +1197,35 @@
}
}
+ /**
+ * Set the band from the physical channel config.
+ *
+ * @param builder the builder of {@link PhysicalChannelConfig}.
+ * @param config physical channel config from ril.
+ */
+ public void setBandToBuilder(PhysicalChannelConfig.Builder builder,
+ android.hardware.radio.V1_6.PhysicalChannelConfig config) {
+
+ android.hardware.radio.V1_6.PhysicalChannelConfig.Band band = config.band;
+
+ switch (band.getDiscriminator()) {
+ case Band.hidl_discriminator.geranBand:
+ builder.setBand(band.geranBand());
+ break;
+ case Band.hidl_discriminator.utranBand:
+ builder.setBand(band.utranBand());
+ break;
+ case Band.hidl_discriminator.eutranBand:
+ builder.setBand(band.eutranBand());
+ break;
+ case Band.hidl_discriminator.ngranBand:
+ builder.setBand(band.ngranBand());
+ break;
+ default:
+ mRil.riljLoge("Unsupported band type " + band.getDiscriminator());
+ }
+ }
+
private void physicalChannelConfigsIndication(List<? extends Object> configs) {
List<PhysicalChannelConfig> response = new ArrayList<>(configs.size());
for (Object obj : configs) {
@@ -1216,7 +1246,22 @@
response.add(builder.setCellConnectionStatus(
convertConnectionStatusFromCellConnectionStatus(config.base.status))
.setCellBandwidthDownlinkKhz(config.base.cellBandwidthDownlink)
- .setRat(ServiceState.rilRadioTechnologyToNetworkType(config.rat))
+ .setNetworkType(ServiceState.rilRadioTechnologyToNetworkType(config.rat))
+ .setPhysicalCellId(config.physicalCellId)
+ .setContextIds(config.contextIds.stream().mapToInt(x -> x).toArray())
+ .build());
+ } else if (obj instanceof android.hardware.radio.V1_6.PhysicalChannelConfig) {
+ android.hardware.radio.V1_6.PhysicalChannelConfig config =
+ (android.hardware.radio.V1_6.PhysicalChannelConfig) obj;
+ PhysicalChannelConfig.Builder builder = new PhysicalChannelConfig.Builder();
+ setBandToBuilder(builder, config);
+ response.add(builder.setCellConnectionStatus(
+ convertConnectionStatusFromCellConnectionStatus(config.status))
+ .setDownlinkChannelNumber(config.downlinkChannelNumber)
+ .setUplinkChannelNumber(config.uplinkChannelNumber)
+ .setCellBandwidthDownlinkKhz(config.cellBandwidthDownlink)
+ .setCellBandwidthUplinkKhz(config.cellBandwidthUplink)
+ .setNetworkType(ServiceState.rilRadioTechnologyToNetworkType(config.rat))
.setPhysicalCellId(config.physicalCellId)
.setContextIds(config.contextIds.stream().mapToInt(x -> x).toArray())
.build());
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index 8815124..ce37488 100755
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -1775,7 +1775,7 @@
private int[] getBandwidthsFromConfigs(List<PhysicalChannelConfig> list) {
return list.stream()
- .map(PhysicalChannelConfig::getCellBandwidthDownlink)
+ .map(PhysicalChannelConfig::getCellBandwidthDownlinkKhz)
.mapToInt(Integer::intValue)
.toArray();
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/PhysicalChannelConfigTest.java b/tests/telephonytests/src/com/android/internal/telephony/PhysicalChannelConfigTest.java
index 944dfa4..64cddc5 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/PhysicalChannelConfigTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/PhysicalChannelConfigTest.java
@@ -17,63 +17,157 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.fail;
+
import android.os.Parcel;
+import android.telephony.AccessNetworkConstants;
import android.telephony.PhysicalChannelConfig;
import android.telephony.PhysicalChannelConfig.Builder;
import android.telephony.ServiceState;
+import android.telephony.TelephonyManager;
import org.junit.Test;
/** Unit test for {@link android.telephony.PhysicalChannelConfig}. */
public class PhysicalChannelConfigTest {
- private static final int RAT = ServiceState.RIL_RADIO_TECHNOLOGY_LTE;
+ private static final int NETWORK_TYPE_NR = TelephonyManager.NETWORK_TYPE_NR;
+ private static final int NETWORK_TYPE_LTE = TelephonyManager.NETWORK_TYPE_LTE;
+ private static final int NETWORK_TYPE_UMTS = TelephonyManager.NETWORK_TYPE_UMTS;
+ private static final int NETWORK_TYPE_GSM = TelephonyManager.NETWORK_TYPE_GSM;
private static final int CONNECTION_STATUS = PhysicalChannelConfig.CONNECTION_PRIMARY_SERVING;
private static final int CELL_BANDWIDTH = 12345;
private static final int FREQUENCY_RANGE = 1;
private static final int CHANNEL_NUMBER = 1234;
private static final int[] CONTEXT_IDS = new int[] {123, 555, 1, 0};
private static final int PHYSICAL_CELL_ID = 502;
+ private static final int BAND = 1;
+ public static final int INVALID_FREQUENCY = -1;
+
+ private PhysicalChannelConfig mPhysicalChannelConfig;
+
+ private void setUpPhysicalChannelConfig(int networkType, int band, int downlinkChannelNumber,
+ int uplinkChannelNumber, int frequencyRange) {
+ mPhysicalChannelConfig = new Builder()
+ .setCellConnectionStatus(CONNECTION_STATUS)
+ .setCellBandwidthDownlinkKhz(CELL_BANDWIDTH)
+ .setCellBandwidthUplinkKhz(CELL_BANDWIDTH)
+ .setContextIds(CONTEXT_IDS)
+ .setPhysicalCellId(PHYSICAL_CELL_ID)
+ .setNetworkType(networkType)
+ .setFrequencyRange(frequencyRange)
+ .setDownlinkChannelNumber(downlinkChannelNumber)
+ .setUplinkChannelNumber(uplinkChannelNumber)
+ .setBand(band)
+ .build();
+ }
+
+ @Test
+ public void testDownlinkFrequencyForNrArfcn(){
+ setUpPhysicalChannelConfig(NETWORK_TYPE_NR, AccessNetworkConstants.NgranBands.BAND_1,
+ CHANNEL_NUMBER, CHANNEL_NUMBER, ServiceState.FREQUENCY_RANGE_MID);
+
+ // 3GPP TS 38.104 Table 5.4.2.1-1, {@link AccessNetworkUtils#getFrequencyFromNrArfcn}.
+ // Formula of NR-ARFCN convert to actual frequency:
+ // Actual frequency(kHz) = (RANGE_OFFSET + GLOBAL_KHZ * (ARFCN - ARFCN_OFFSET))
+ assertThat(mPhysicalChannelConfig.getDownlinkFrequencyKhz()).isEqualTo(6170);
+ }
+
+ @Test
+ public void testDownlinkandUplinkFrequencyForEarfcn(){
+ setUpPhysicalChannelConfig(NETWORK_TYPE_LTE, AccessNetworkConstants.EutranBand.BAND_3,
+ CHANNEL_NUMBER, 19500, ServiceState.FREQUENCY_RANGE_MID);
+
+ // 3GPP TS 36.101 Table 5.7.3-1, {@link AccessNetworkUtils#getFrequencyFromEarfcn}.
+ // Formula of E-UTRA ARFCN convert to actual frequency:
+ // Actual frequency(kHz) = (DOWNLINK_LOW + 0.1 * (ARFCN - DOWNLINK_OFFSET)) * FREQUENCY_KHZ
+ // Actual frequency(kHz) = (UPLINK_LOW + 0.1 * (ARFCN - UPLINK_OFFSET)) * FREQUENCY_KHZ
+ assertThat(mPhysicalChannelConfig.getDownlinkFrequencyKhz()).isEqualTo(1808400);
+ assertThat(mPhysicalChannelConfig.getUplinkFrequencyKhz()).isEqualTo(1740000);
+ }
+
+ @Test
+ public void testDownlinkandUplinkFrequencyForUarfcn(){
+ setUpPhysicalChannelConfig(NETWORK_TYPE_UMTS, AccessNetworkConstants.UtranBand.BAND_3,
+ CHANNEL_NUMBER, 940, ServiceState.FREQUENCY_RANGE_MID);
+
+ // 3GPP TS 25.101, {@link AccessNetworkUtils#getFrequencyFromUarfcn}.
+ // Formula of UTRA ARFCN convert to actual frequency:
+ // For general bands:
+ // Downlink actual frequency(kHz) = (DOWNLINK_OFFSET + 0.2 * ARFCN) * FREQUENCY_KHZ
+ // Uplink actual frequency(kHz) = (UPLINK_OFFSET + 0.2 * ARFCN) * FREQUENCY_KHZ
+ assertThat(mPhysicalChannelConfig.getDownlinkFrequencyKhz()).isEqualTo(1821800);
+ assertThat(mPhysicalChannelConfig.getUplinkFrequencyKhz()).isEqualTo(1713000);
+ }
+
+ @Test
+ public void testDownlinkFrequencyForArfcn(){
+ setUpPhysicalChannelConfig(NETWORK_TYPE_GSM, AccessNetworkConstants.GeranBand.BAND_450,
+ 270, 270, ServiceState.FREQUENCY_RANGE_LOW);
+
+ // 3GPP TS 45.005 Table 2-1 Dynamically mapped ARFCN
+ // Formula of Geran ARFCN convert to actual frequency:
+ // Uplink actual frequency(kHz) =
+ // (UPLINK_FREQUENCY_FIRST + 0.2 * (ARFCN - ARFCN_RANGE_FIRST)) * FREQUENCY_KHZ
+ // Downlink actual frequency(kHz) = Uplink actual frequency + 10
+ assertThat(mPhysicalChannelConfig.getDownlinkFrequencyKhz()).isEqualTo(452810);
+ }
+
+ @Test
+ public void testDownlinkandUplinkFrequencyForEarfcnWithIncorrectRange() {
+ setUpPhysicalChannelConfig(NETWORK_TYPE_LTE, AccessNetworkConstants.EutranBand.BAND_3,
+ 900, 900, ServiceState.FREQUENCY_RANGE_MID);
+
+ assertThat(mPhysicalChannelConfig.getDownlinkFrequencyKhz()).isEqualTo(INVALID_FREQUENCY);
+ }
+
+ @Test
+ public void testFrequencyRangeWithoutBand() {
+ try {
+ setUpPhysicalChannelConfig(NETWORK_TYPE_UMTS, 0, CHANNEL_NUMBER, CHANNEL_NUMBER,
+ ServiceState.FREQUENCY_RANGE_UNKNOWN);
+ fail("Frequency range: 0 is invalid.");
+ } catch (IllegalArgumentException e) {
+ }
+ }
+
+ @Test
+ public void testFrequencyRangeForNrArfcn() {
+ setUpPhysicalChannelConfig(NETWORK_TYPE_NR, AccessNetworkConstants.NgranBands.BAND_79,
+ 4500, 4500, ServiceState.FREQUENCY_RANGE_HIGH);
+
+ assertThat(mPhysicalChannelConfig.getFrequencyRange()).isEqualTo(
+ ServiceState.FREQUENCY_RANGE_HIGH);
+ }
@Test
public void testBuilder() {
- PhysicalChannelConfig config = new Builder()
- .setRat(RAT)
- .setCellConnectionStatus(CONNECTION_STATUS)
- .setCellBandwidthDownlinkKhz(CELL_BANDWIDTH)
- .setFrequencyRange(FREQUENCY_RANGE)
- .setChannelNumber(CHANNEL_NUMBER)
- .setContextIds(CONTEXT_IDS)
- .setPhysicalCellId(PHYSICAL_CELL_ID)
- .build();
+ setUpPhysicalChannelConfig(NETWORK_TYPE_LTE, BAND, CHANNEL_NUMBER, CHANNEL_NUMBER,
+ FREQUENCY_RANGE);
- assertThat(config.getNetworkType()).isEqualTo(RAT);
- assertThat(config.getConnectionStatus()).isEqualTo(CONNECTION_STATUS);
- assertThat(config.getCellBandwidthDownlink()).isEqualTo(CELL_BANDWIDTH);
- assertThat(config.getFrequencyRange()).isEqualTo(FREQUENCY_RANGE);
- assertThat(config.getChannelNumber()).isEqualTo(CHANNEL_NUMBER);
- assertThat(config.getContextIds()).isEqualTo(CONTEXT_IDS);
- assertThat(config.getPhysicalCellId()).isEqualTo(PHYSICAL_CELL_ID);
+ assertThat(mPhysicalChannelConfig.getNetworkType()).isEqualTo(NETWORK_TYPE_LTE);
+ assertThat(mPhysicalChannelConfig.getConnectionStatus()).isEqualTo(CONNECTION_STATUS);
+ assertThat(mPhysicalChannelConfig.getCellBandwidthDownlinkKhz()).isEqualTo(CELL_BANDWIDTH);
+ assertThat(mPhysicalChannelConfig.getCellBandwidthUplinkKhz()).isEqualTo(CELL_BANDWIDTH);
+ assertThat(mPhysicalChannelConfig.getFrequencyRange()).isEqualTo(FREQUENCY_RANGE);
+ assertThat(mPhysicalChannelConfig.getChannelNumber()).isEqualTo(CHANNEL_NUMBER);
+ assertThat(mPhysicalChannelConfig.getContextIds()).isEqualTo(CONTEXT_IDS);
+ assertThat(mPhysicalChannelConfig.getPhysicalCellId()).isEqualTo(PHYSICAL_CELL_ID);
+ assertThat(mPhysicalChannelConfig.getDownlinkChannelNumber()).isEqualTo(CHANNEL_NUMBER);
+ assertThat(mPhysicalChannelConfig.getUplinkChannelNumber()).isEqualTo(CHANNEL_NUMBER);
}
@Test
public void testParcel() {
- PhysicalChannelConfig config = new Builder()
- .setRat(RAT)
- .setCellConnectionStatus(CONNECTION_STATUS)
- .setCellBandwidthDownlinkKhz(CELL_BANDWIDTH)
- .setFrequencyRange(FREQUENCY_RANGE)
- .setChannelNumber(CHANNEL_NUMBER)
- .setContextIds(CONTEXT_IDS)
- .setPhysicalCellId(PHYSICAL_CELL_ID)
- .build();
+ setUpPhysicalChannelConfig(NETWORK_TYPE_LTE, BAND, CHANNEL_NUMBER, CHANNEL_NUMBER,
+ ServiceState.FREQUENCY_RANGE_MID);
Parcel parcel = Parcel.obtain();
- config.writeToParcel(parcel, 0 /* flags */);
+ mPhysicalChannelConfig.writeToParcel(parcel, 0 /* flags */);
parcel.setDataPosition(0);
PhysicalChannelConfig fromParcel = PhysicalChannelConfig.CREATOR.createFromParcel(parcel);
- assertThat(fromParcel).isEqualTo(config);
+ assertThat(fromParcel).isEqualTo(mPhysicalChannelConfig);
}
}