summaryrefslogtreecommitdiff
path: root/wifi
diff options
context:
space:
mode:
authorxshu <xshu@google.com>2021-01-14 19:59:03 -0800
committerOscar Shu <xshu@google.com>2021-01-27 20:56:02 +0000
commit1bccf82b9f810e95987f4dc04d409bb95a40b819 (patch)
treec324ccd024453537b6880cc15e4c2f68aaca2871 /wifi
parent1ee021411844abc734ac51dbf88a16a20f0108a2 (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')
-rw-r--r--wifi/java/src/android/net/wifi/nl80211/SingleScanSettings.java6
-rw-r--r--wifi/java/src/android/net/wifi/nl80211/WifiNl80211Manager.java21
-rw-r--r--wifi/tests/src/android/net/wifi/nl80211/SingleScanSettingsTest.java1
-rw-r--r--wifi/tests/src/android/net/wifi/nl80211/WifiNl80211ManagerTest.java59
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) {