summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAhmed ElArabawy <arabawy@google.com>2019-11-15 18:17:12 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-11-15 18:17:12 +0000
commit65c2714d87211044bc25c767fd2d78b4ea187751 (patch)
tree9aa5965a0e339a9426e78f1e962e4461f6c176fc
parent7a15de6f7b85ed4b48bbdac1210cd641ea4541b7 (diff)
parent128fdd286363ff98cad24da707d7124b12b47143 (diff)
Merge "Support checking on device capability for 6GHZ"
-rw-r--r--service/java/com/android/server/wifi/WifiVendorHal.java45
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiVendorHalTest.java143
2 files changed, 182 insertions, 6 deletions
diff --git a/service/java/com/android/server/wifi/WifiVendorHal.java b/service/java/com/android/server/wifi/WifiVendorHal.java
index eca80bdb9..f8ec5f143 100644
--- a/service/java/com/android/server/wifi/WifiVendorHal.java
+++ b/service/java/com/android/server/wifi/WifiVendorHal.java
@@ -1128,7 +1128,6 @@ public class WifiVendorHal {
features |= sChipFeatureCapabilityTranslation13[i][0];
}
}
-
return features;
}
@@ -1175,6 +1174,9 @@ public class WifiVendorHal {
{WifiManager.WIFI_FEATURE_SCAN_RAND,
IWifiStaIface.StaIfaceCapabilityMask.SCAN_RAND
},
+ {WifiManager.WIFI_FEATURE_INFRA_6G,
+ android.hardware.wifi.V1_4.IWifiStaIface.StaIfaceCapabilityMask.STA_6G
+ }
};
/**
@@ -1222,12 +1224,22 @@ public class WifiVendorHal {
feat.value = wifiFeatureMaskFromChipCapabilities(capabilities);
});
}
- IWifiStaIface iface = getStaIface(ifaceName);
- if (iface != null) {
- iface.getCapabilities((status, capabilities) -> {
+
+ android.hardware.wifi.V1_4.IWifiStaIface ifaceV14 =
+ getWifiStaIfaceForV1_4Mockable(ifaceName);
+ if (ifaceV14 != null) {
+ ifaceV14.getCapabilities_1_4((status, capabilities) -> {
if (!ok(status)) return;
feat.value |= wifiFeatureMaskFromStaCapabilities(capabilities);
});
+ } else {
+ IWifiStaIface iface = getStaIface(ifaceName);
+ if (iface != null) {
+ iface.getCapabilities((status, capabilities) -> {
+ if (!ok(status)) return;
+ feat.value |= wifiFeatureMaskFromStaCapabilities(capabilities);
+ });
+ }
}
}
featureSet = feat.value;
@@ -2299,6 +2311,17 @@ public class WifiVendorHal {
}
/**
+ * Method to mock out the V1_4 IWifiChip retrieval in unit tests.
+ *
+ * @return 1.4 IWifiChip object if the device is running the 1.4 wifi hal service, null
+ * otherwise.
+ */
+ protected android.hardware.wifi.V1_4.IWifiChip getWifiChipForV1_4Mockable() {
+ if (mIWifiChip == null) return null;
+ return android.hardware.wifi.V1_4.IWifiChip.castFrom(mIWifiChip);
+ }
+
+ /**
* Method to mock out the V1_2 IWifiStaIface retrieval in unit tests.
*
* @param ifaceName Name of the interface
@@ -2326,6 +2349,20 @@ public class WifiVendorHal {
return android.hardware.wifi.V1_3.IWifiStaIface.castFrom(iface);
}
+ /**
+ * Method to mock out the V1_4 IWifiStaIface retrieval in unit tests.
+ *
+ * @param ifaceName Name of the interface
+ * @return 1.4 IWifiStaIface object if the device is running the 1.4 wifi hal service, null
+ * otherwise.
+ */
+ protected android.hardware.wifi.V1_4.IWifiStaIface getWifiStaIfaceForV1_4Mockable(
+ @NonNull String ifaceName) {
+ IWifiStaIface iface = getStaIface(ifaceName);
+ if (iface == null) return null;
+ return android.hardware.wifi.V1_4.IWifiStaIface.castFrom(iface);
+ }
+
protected android.hardware.wifi.V1_4.IWifiApIface getWifiApIfaceForV1_4Mockable(
String ifaceName) {
IWifiApIface iface = getApIface(ifaceName);
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiVendorHalTest.java b/tests/wifitests/src/com/android/server/wifi/WifiVendorHalTest.java
index d44d63d1e..229c3d5e2 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiVendorHalTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiVendorHalTest.java
@@ -150,11 +150,15 @@ public class WifiVendorHalTest extends WifiBaseTest {
@Mock
private android.hardware.wifi.V1_3.IWifiChip mIWifiChipV13;
@Mock
+ private android.hardware.wifi.V1_4.IWifiChip mIWifiChipV14;
+ @Mock
private IWifiStaIface mIWifiStaIface;
@Mock
private android.hardware.wifi.V1_2.IWifiStaIface mIWifiStaIfaceV12;
@Mock
private android.hardware.wifi.V1_3.IWifiStaIface mIWifiStaIfaceV13;
+ @Mock
+ private android.hardware.wifi.V1_4.IWifiStaIface mIWifiStaIfaceV14;
private IWifiStaIfaceEventCallback mIWifiStaIfaceEventCallback;
private IWifiChipEventCallback mIWifiChipEventCallback;
private android.hardware.wifi.V1_2.IWifiChipEventCallback mIWifiChipEventCallbackV12;
@@ -188,6 +192,11 @@ public class WifiVendorHalTest extends WifiBaseTest {
}
@Override
+ protected android.hardware.wifi.V1_4.IWifiChip getWifiChipForV1_4Mockable() {
+ return null;
+ }
+
+ @Override
protected android.hardware.wifi.V1_2.IWifiStaIface getWifiStaIfaceForV1_2Mockable(
String ifaceName) {
return null;
@@ -198,6 +207,12 @@ public class WifiVendorHalTest extends WifiBaseTest {
String ifaceName) {
return null;
}
+
+ @Override
+ protected android.hardware.wifi.V1_4.IWifiStaIface getWifiStaIfaceForV1_4Mockable(
+ String ifaceName) {
+ return null;
+ }
}
/**
@@ -211,7 +226,7 @@ public class WifiVendorHalTest extends WifiBaseTest {
@Override
protected android.hardware.wifi.V1_1.IWifiChip getWifiChipForV1_1Mockable() {
- return null;
+ return mIWifiChipV11;
}
@Override
@@ -225,6 +240,11 @@ public class WifiVendorHalTest extends WifiBaseTest {
}
@Override
+ protected android.hardware.wifi.V1_4.IWifiChip getWifiChipForV1_4Mockable() {
+ return null;
+ }
+
+ @Override
protected android.hardware.wifi.V1_2.IWifiStaIface getWifiStaIfaceForV1_2Mockable(
String ifaceName) {
return mIWifiStaIfaceV12;
@@ -235,6 +255,12 @@ public class WifiVendorHalTest extends WifiBaseTest {
String ifaceName) {
return null;
}
+
+ @Override
+ protected android.hardware.wifi.V1_4.IWifiStaIface getWifiStaIfaceForV1_4Mockable(
+ String ifaceName) {
+ return null;
+ }
}
/**
@@ -248,20 +274,73 @@ public class WifiVendorHalTest extends WifiBaseTest {
@Override
protected android.hardware.wifi.V1_1.IWifiChip getWifiChipForV1_1Mockable() {
- return null;
+ return mIWifiChipV11;
}
@Override
protected android.hardware.wifi.V1_2.IWifiChip getWifiChipForV1_2Mockable() {
+ return mIWifiChipV12;
+ }
+
+ @Override
+ protected android.hardware.wifi.V1_3.IWifiChip getWifiChipForV1_3Mockable() {
+ return mIWifiChipV13;
+ }
+
+ @Override
+ protected android.hardware.wifi.V1_4.IWifiChip getWifiChipForV1_4Mockable() {
return null;
}
@Override
+ protected android.hardware.wifi.V1_2.IWifiStaIface getWifiStaIfaceForV1_2Mockable(
+ String ifaceName) {
+ return mIWifiStaIfaceV12;
+ }
+
+ @Override
+ protected android.hardware.wifi.V1_3.IWifiStaIface getWifiStaIfaceForV1_3Mockable(
+ String ifaceName) {
+ return mIWifiStaIfaceV13;
+ }
+
+ @Override
+ protected android.hardware.wifi.V1_4.IWifiStaIface getWifiStaIfaceForV1_4Mockable(
+ String ifaceName) {
+ return null;
+ }
+ }
+
+ /**
+ * Spy used to return the V1_4 IWifiChip and V1_4 IWifiStaIface mock objects to simulate
+ * the 1.4 HAL running on the device.
+ */
+ private class WifiVendorHalSpyV1_4 extends WifiVendorHal {
+ WifiVendorHalSpyV1_4(HalDeviceManager halDeviceManager, Handler handler) {
+ super(halDeviceManager, handler);
+ }
+
+ @Override
+ protected android.hardware.wifi.V1_1.IWifiChip getWifiChipForV1_1Mockable() {
+ return mIWifiChipV11;
+ }
+
+ @Override
+ protected android.hardware.wifi.V1_2.IWifiChip getWifiChipForV1_2Mockable() {
+ return mIWifiChipV12;
+ }
+
+ @Override
protected android.hardware.wifi.V1_3.IWifiChip getWifiChipForV1_3Mockable() {
return mIWifiChipV13;
}
@Override
+ protected android.hardware.wifi.V1_4.IWifiChip getWifiChipForV1_4Mockable() {
+ return mIWifiChipV14;
+ }
+
+ @Override
protected android.hardware.wifi.V1_2.IWifiStaIface getWifiStaIfaceForV1_2Mockable(
String ifaceName) {
return mIWifiStaIfaceV12;
@@ -272,6 +351,12 @@ public class WifiVendorHalTest extends WifiBaseTest {
String ifaceName) {
return mIWifiStaIfaceV13;
}
+
+ @Override
+ protected android.hardware.wifi.V1_4.IWifiStaIface getWifiStaIfaceForV1_4Mockable(
+ String ifaceName) {
+ return mIWifiStaIfaceV14;
+ }
}
/**
@@ -820,6 +905,60 @@ public class WifiVendorHalTest extends WifiBaseTest {
}
/**
+ * Test get supported features on HAL V1_4.
+ * Tests whether we coalesce information from different sources
+ * (IWifiStaIface, IWifiChip and HalDeviceManager) into the bitmask of supported features
+ * correctly.
+ */
+ @Test
+ public void testGetSupportedFeaturesV1_4() throws Exception {
+ mWifiVendorHal = new WifiVendorHalSpyV1_4(mHalDeviceManager, mHandler);
+ assertTrue(mWifiVendorHal.startVendorHalSta());
+
+ int staIfaceHidlCaps = (
+ IWifiStaIface.StaIfaceCapabilityMask.BACKGROUND_SCAN
+ | IWifiStaIface.StaIfaceCapabilityMask.LINK_LAYER_STATS
+ | android.hardware.wifi.V1_4.IWifiStaIface.StaIfaceCapabilityMask.STA_6G
+ );
+ int chipHidlCaps =
+ android.hardware.wifi.V1_1.IWifiChip.ChipCapabilityMask.SET_TX_POWER_LIMIT;
+ Set<Integer> halDeviceManagerSupportedIfaces = new HashSet<Integer>() {{
+ add(IfaceType.STA);
+ add(IfaceType.P2P);
+ }};
+ long expectedFeatureSet = (
+ WifiManager.WIFI_FEATURE_SCANNER
+ | WifiManager.WIFI_FEATURE_LINK_LAYER_STATS
+ | WifiManager.WIFI_FEATURE_TX_POWER_LIMIT
+ | WifiManager.WIFI_FEATURE_INFRA
+ | WifiManager.WIFI_FEATURE_P2P
+ | WifiManager.WIFI_FEATURE_INFRA_6G
+ );
+
+ doAnswer(new AnswerWithArguments() {
+ public void answer(
+ android.hardware.wifi.V1_4.IWifiStaIface.getCapabilities_1_4Callback cb)
+ throws RemoteException {
+ cb.onValues(mWifiStatusSuccess, staIfaceHidlCaps);
+ }
+ }).when(mIWifiStaIfaceV14).getCapabilities_1_4(
+ any(android.hardware.wifi.V1_4.IWifiStaIface.getCapabilities_1_4Callback.class));
+
+ doAnswer(new AnswerWithArguments() {
+ public void answer(android.hardware.wifi.V1_3.IWifiChip.getCapabilities_1_3Callback cb)
+ throws RemoteException {
+ cb.onValues(mWifiStatusSuccess, chipHidlCaps);
+ }
+ }).when(mIWifiChipV13).getCapabilities_1_3(
+ any(android.hardware.wifi.V1_3.IWifiChip.getCapabilities_1_3Callback.class));
+
+ when(mHalDeviceManager.getSupportedIfaceTypes())
+ .thenReturn(halDeviceManagerSupportedIfaces);
+
+ assertEquals(expectedFeatureSet, mWifiVendorHal.getSupportedFeatureSet(TEST_IFACE_NAME));
+ }
+
+ /**
* Test |getFactoryMacAddress| gets called when the hal version is V1_3
* @throws Exception
*/