diff options
author | Ahmed ElArabawy <arabawy@google.com> | 2019-11-15 18:17:12 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-11-15 18:17:12 +0000 |
commit | 65c2714d87211044bc25c767fd2d78b4ea187751 (patch) | |
tree | 9aa5965a0e339a9426e78f1e962e4461f6c176fc | |
parent | 7a15de6f7b85ed4b48bbdac1210cd641ea4541b7 (diff) | |
parent | 128fdd286363ff98cad24da707d7124b12b47143 (diff) |
Merge "Support checking on device capability for 6GHZ"
-rw-r--r-- | service/java/com/android/server/wifi/WifiVendorHal.java | 45 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/WifiVendorHalTest.java | 143 |
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 */ |