diff options
author | xshu <xshu@google.com> | 2021-01-14 19:59:03 -0800 |
---|---|---|
committer | Oscar Shu <xshu@google.com> | 2021-01-27 20:56:02 +0000 |
commit | 1bccf82b9f810e95987f4dc04d409bb95a40b819 (patch) | |
tree | c324ccd024453537b6880cc15e4c2f68aaca2871 /wifi | |
parent | 1ee021411844abc734ac51dbf88a16a20f0108a2 (diff) |
New startScan API for 6Ghz RNR support
Need this new API to configure whether RNR should be activated.
Bug: 158335433
Test: atest android.net.wifi
Change-Id: Id3c1350b59e578081d8937b8140ed20ee8b551a6
Diffstat (limited to 'wifi')
4 files changed, 81 insertions, 6 deletions
diff --git a/wifi/java/src/android/net/wifi/nl80211/SingleScanSettings.java b/wifi/java/src/android/net/wifi/nl80211/SingleScanSettings.java index 24b1854fbf6c..1d479fc14d29 100644 --- a/wifi/java/src/android/net/wifi/nl80211/SingleScanSettings.java +++ b/wifi/java/src/android/net/wifi/nl80211/SingleScanSettings.java @@ -32,6 +32,7 @@ public class SingleScanSettings implements Parcelable { private static final String TAG = "SingleScanSettings"; public int scanType; + public boolean enable6GhzRnr; public ArrayList<ChannelSettings> channelSettings; public ArrayList<HiddenNetwork> hiddenNetworks; @@ -50,6 +51,7 @@ public class SingleScanSettings implements Parcelable { return false; } return scanType == settings.scanType + && enable6GhzRnr == settings.enable6GhzRnr && channelSettings.equals(settings.channelSettings) && hiddenNetworks.equals(settings.hiddenNetworks); } @@ -57,7 +59,7 @@ public class SingleScanSettings implements Parcelable { /** override hash code */ @Override public int hashCode() { - return Objects.hash(scanType, channelSettings, hiddenNetworks); + return Objects.hash(scanType, channelSettings, hiddenNetworks, enable6GhzRnr); } @@ -83,6 +85,7 @@ public class SingleScanSettings implements Parcelable { Log.wtf(TAG, "Invalid scan type " + scanType); } out.writeInt(scanType); + out.writeBoolean(enable6GhzRnr); out.writeTypedList(channelSettings); out.writeTypedList(hiddenNetworks); } @@ -100,6 +103,7 @@ public class SingleScanSettings implements Parcelable { if (!isValidScanType(result.scanType)) { Log.wtf(TAG, "Invalid scan type " + result.scanType); } + result.enable6GhzRnr = in.readBoolean(); result.channelSettings = new ArrayList<ChannelSettings>(); in.readTypedList(result.channelSettings, ChannelSettings.CREATOR); result.hiddenNetworks = new ArrayList<HiddenNetwork>(); diff --git a/wifi/java/src/android/net/wifi/nl80211/WifiNl80211Manager.java b/wifi/java/src/android/net/wifi/nl80211/WifiNl80211Manager.java index db2eb99297c2..ef2653204af5 100644 --- a/wifi/java/src/android/net/wifi/nl80211/WifiNl80211Manager.java +++ b/wifi/java/src/android/net/wifi/nl80211/WifiNl80211Manager.java @@ -28,6 +28,7 @@ import android.net.wifi.SoftApInfo; import android.net.wifi.WifiAnnotations; import android.net.wifi.WifiScanner; import android.os.Binder; +import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.RemoteException; @@ -90,6 +91,10 @@ public class WifiNl80211Manager { */ public static final int SCAN_TYPE_PNO_SCAN = 1; + // Extra scanning parameter used to enable 6Ghz RNR (Reduced Neighbour Support). + public static final String SCANNING_PARAM_ENABLE_6GHZ_RNR = + "android.net.wifi.nl80211.SCANNING_PARAM_ENABLE_6GHZ_RNR"; + private AlarmManager mAlarmManager; private Handler mEventHandler; @@ -911,6 +916,15 @@ public class WifiNl80211Manager { } /** + * @deprecated replaced by {@link #startScan(String, int, Set, List, Bundle)} + **/ + @Deprecated + public boolean startScan(@NonNull String ifaceName, @WifiAnnotations.ScanType int scanType, + @Nullable Set<Integer> freqs, @Nullable List<byte[]> hiddenNetworkSSIDs) { + return startScan(ifaceName, scanType, freqs, hiddenNetworkSSIDs, null); + } + + /** * Start a scan using the specified parameters. A scan is an asynchronous operation. The * result of the operation is returned in the {@link ScanEventCallback} registered when * setting up an interface using @@ -929,11 +943,13 @@ public class WifiNl80211Manager { * @param freqs list of frequencies to scan for, if null scan all supported channels. * @param hiddenNetworkSSIDs List of hidden networks to be scanned for, a null indicates that * no hidden frequencies will be scanned for. + * @param extraScanningParams bundle of extra scanning parameters. * @return Returns true on success, false on failure (e.g. when called before the interface * has been set up). */ public boolean startScan(@NonNull String ifaceName, @WifiAnnotations.ScanType int scanType, - @Nullable Set<Integer> freqs, @Nullable List<byte[]> hiddenNetworkSSIDs) { + @Nullable Set<Integer> freqs, @Nullable List<byte[]> hiddenNetworkSSIDs, + @Nullable Bundle extraScanningParams) { IWifiScannerImpl scannerImpl = getScannerImpl(ifaceName); if (scannerImpl == null) { Log.e(TAG, "No valid wificond scanner interface handler for iface=" + ifaceName); @@ -948,6 +964,9 @@ public class WifiNl80211Manager { } settings.channelSettings = new ArrayList<>(); settings.hiddenNetworks = new ArrayList<>(); + if (extraScanningParams != null) { + settings.enable6GhzRnr = extraScanningParams.getBoolean(SCANNING_PARAM_ENABLE_6GHZ_RNR); + } if (freqs != null) { for (Integer freq : freqs) { diff --git a/wifi/tests/src/android/net/wifi/nl80211/SingleScanSettingsTest.java b/wifi/tests/src/android/net/wifi/nl80211/SingleScanSettingsTest.java index 905920888012..fd595fa5660c 100644 --- a/wifi/tests/src/android/net/wifi/nl80211/SingleScanSettingsTest.java +++ b/wifi/tests/src/android/net/wifi/nl80211/SingleScanSettingsTest.java @@ -74,6 +74,7 @@ public class SingleScanSettingsTest { new ArrayList<>(Arrays.asList(mChannelSettings1, mChannelSettings2)); scanSettings.hiddenNetworks = new ArrayList<>(Arrays.asList(mHiddenNetwork1, mHiddenNetwork2)); + scanSettings.enable6GhzRnr = true; Parcel parcel = Parcel.obtain(); scanSettings.writeToParcel(parcel, 0); diff --git a/wifi/tests/src/android/net/wifi/nl80211/WifiNl80211ManagerTest.java b/wifi/tests/src/android/net/wifi/nl80211/WifiNl80211ManagerTest.java index 9ee0acbfbaa2..4b03a49e40bb 100644 --- a/wifi/tests/src/android/net/wifi/nl80211/WifiNl80211ManagerTest.java +++ b/wifi/tests/src/android/net/wifi/nl80211/WifiNl80211ManagerTest.java @@ -44,6 +44,7 @@ import android.net.wifi.SoftApInfo; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiScanner; import android.net.wifi.util.HexEncoding; +import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.RemoteException; @@ -506,7 +507,51 @@ public class WifiNl80211ManagerTest { SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST)); verify(mWifiScannerImpl).scan(argThat(new ScanMatcher( IWifiScannerImpl.SCAN_TYPE_LOW_POWER, - SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST))); + SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false))); + } + + /** + * Verify the new startScan() API can convert input parameters to SingleScanSettings correctly. + */ + @Test + public void testScanWithBundle() throws Exception { + when(mWifiScannerImpl.scan(any(SingleScanSettings.class))).thenReturn(true); + Bundle bundle = new Bundle(); + bundle.putBoolean(WifiNl80211Manager.SCANNING_PARAM_ENABLE_6GHZ_RNR, true); + assertTrue(mWificondControl.startScan( + TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_LOW_POWER, + SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, bundle)); + verify(mWifiScannerImpl).scan(argThat(new ScanMatcher( + IWifiScannerImpl.SCAN_TYPE_LOW_POWER, + SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, true))); + } + + /** + * Verify default values in SingleScanSettings when the input Bundle to startScan is null. + */ + @Test + public void testScanWithNullBundle() throws Exception { + when(mWifiScannerImpl.scan(any(SingleScanSettings.class))).thenReturn(true); + assertTrue(mWificondControl.startScan( + TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_LOW_POWER, + SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, null)); + verify(mWifiScannerImpl).scan(argThat(new ScanMatcher( + IWifiScannerImpl.SCAN_TYPE_LOW_POWER, + SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false))); + } + + /** + * Verify default values in SingleScanSettings when the input Bundle to startScan is empty. + */ + @Test + public void testScanWithEmptyBundle() throws Exception { + when(mWifiScannerImpl.scan(any(SingleScanSettings.class))).thenReturn(true); + assertTrue(mWificondControl.startScan( + TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_LOW_POWER, + SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, new Bundle())); + verify(mWifiScannerImpl).scan(argThat(new ScanMatcher( + IWifiScannerImpl.SCAN_TYPE_LOW_POWER, + SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false))); } /** @@ -527,7 +572,7 @@ public class WifiNl80211ManagerTest { // But the argument passed down should have the duplicate removed. verify(mWifiScannerImpl).scan(argThat(new ScanMatcher( IWifiScannerImpl.SCAN_TYPE_LOW_POWER, - SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST))); + SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false))); } /** @@ -539,7 +584,7 @@ public class WifiNl80211ManagerTest { assertTrue(mWificondControl.startScan( TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_HIGH_ACCURACY, null, null)); verify(mWifiScannerImpl).scan(argThat(new ScanMatcher( - IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY, null, null))); + IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY, null, null, false))); } /** @@ -1068,11 +1113,14 @@ public class WifiNl80211ManagerTest { int mExpectedScanType; private final Set<Integer> mExpectedFreqs; private final List<byte[]> mExpectedSsids; + private final boolean mExpectedEnable6GhzRnr; - ScanMatcher(int expectedScanType, Set<Integer> expectedFreqs, List<byte[]> expectedSsids) { + ScanMatcher(int expectedScanType, Set<Integer> expectedFreqs, List<byte[]> expectedSsids, + boolean expectedEnable6GhzRnr) { this.mExpectedScanType = expectedScanType; this.mExpectedFreqs = expectedFreqs; this.mExpectedSsids = expectedSsids; + this.mExpectedEnable6GhzRnr = expectedEnable6GhzRnr; } @Override @@ -1080,6 +1128,9 @@ public class WifiNl80211ManagerTest { if (settings.scanType != mExpectedScanType) { return false; } + if (settings.enable6GhzRnr != mExpectedEnable6GhzRnr) { + return false; + } ArrayList<ChannelSettings> channelSettings = settings.channelSettings; ArrayList<HiddenNetwork> hiddenNetworks = settings.hiddenNetworks; if (mExpectedFreqs != null) { |