Merge "Remove software pno scan support"
diff --git a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java
index 02462f6..ed1bedf 100644
--- a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java
+++ b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java
@@ -1336,7 +1336,6 @@
* -Started State
* -Hw Pno Scan state
* -Single Scan state
- * -Sw Pno Scan state
*
* These are the main state transitions:
* 1. Start at |Default State|
@@ -1348,11 +1347,6 @@
* contains IE (information elements). If yes, send the results to the client, else
* switch to |Single Scan state| and send the result to the client when the scan result
* is obtained.
- * b.1. Switch to |Sw Pno Scan state| when the device does not supports HW PNO
- * (This is for older devices which do not support HW PNO and for connected PNO on
- * devices which support wificond based PNO)
- * b.2. In |Sw Pno Scan state| send the result to the client when the background scan result
- * is obtained
*
* Note: PNO scans only work for a single client today. We don't have support in HW to support
* multiple requests at the same time, so will need non-trivial changes to support (if at all
@@ -1363,7 +1357,6 @@
private final DefaultState mDefaultState = new DefaultState();
private final StartedState mStartedState = new StartedState();
private final HwPnoScanState mHwPnoScanState = new HwPnoScanState();
- private final SwPnoScanState mSwPnoScanState = new SwPnoScanState();
private final SingleScanState mSingleScanState = new SingleScanState();
private InternalClientInfo mInternalClientInfo;
@@ -1381,7 +1374,6 @@
addState(mStartedState, mDefaultState);
addState(mHwPnoScanState, mStartedState);
addState(mSingleScanState, mHwPnoScanState);
- addState(mSwPnoScanState, mStartedState);
// CHECKSTYLE:ON IndentationCheck
setInitialState(mDefaultState);
@@ -1461,12 +1453,11 @@
pnoParams.setDefusable(true);
PnoSettings pnoSettings =
pnoParams.getParcelable(WifiScanner.PNO_PARAMS_PNO_SETTINGS_KEY);
- // This message is handled after the transition to SwPnoScan/HwPnoScan state
- deferMessage(msg);
if (mScannerImpl.isHwPnoSupported(pnoSettings.isConnected)) {
+ deferMessage(msg);
transitionTo(mHwPnoScanState);
} else {
- transitionTo(mSwPnoScanState);
+ replyFailed(msg, WifiScanner.REASON_INVALID_REQUEST, "not supported");
}
break;
case WifiScanner.CMD_STOP_PNO_SCAN:
@@ -1577,68 +1568,6 @@
}
}
- class SwPnoScanState extends State {
- private final ArrayList<ScanResult> mSwPnoFullScanResults = new ArrayList<>();
-
- @Override
- public void enter() {
- if (DBG) localLog("SwPnoScanState");
- mSwPnoFullScanResults.clear();
- }
-
- @Override
- public void exit() {
- removeInternalClient();
- }
-
- @Override
- public boolean processMessage(Message msg) {
- ClientInfo ci = mClients.get(msg.replyTo);
- switch (msg.what) {
- case WifiScanner.CMD_START_PNO_SCAN:
- Bundle pnoParams = (Bundle) msg.obj;
- if (pnoParams == null) {
- replyFailed(msg, WifiScanner.REASON_INVALID_REQUEST, "params null");
- return HANDLED;
- }
- pnoParams.setDefusable(true);
- PnoSettings pnoSettings =
- pnoParams.getParcelable(WifiScanner.PNO_PARAMS_PNO_SETTINGS_KEY);
- ScanSettings scanSettings =
- pnoParams.getParcelable(WifiScanner.PNO_PARAMS_SCAN_SETTINGS_KEY);
- if (addSwPnoScanRequest(ci, msg.arg2, scanSettings, pnoSettings)) {
- replySucceeded(msg);
- } else {
- replyFailed(msg, WifiScanner.REASON_INVALID_REQUEST, "bad request");
- transitionTo(mStartedState);
- }
- break;
- case WifiScanner.CMD_STOP_PNO_SCAN:
- removeSwPnoScanRequest(ci, msg.arg2);
- transitionTo(mStartedState);
- break;
- case WifiScanner.CMD_FULL_SCAN_RESULT:
- // Aggregate full scan results until we get the |CMD_SCAN_RESULT| message
- mSwPnoFullScanResults.add((ScanResult) msg.obj);
- break;
- case WifiScanner.CMD_SCAN_RESULT:
- ScanResult[] scanResults = mSwPnoFullScanResults.toArray(
- new ScanResult[mSwPnoFullScanResults.size()]);
- reportPnoNetworkFound(scanResults);
- mSwPnoFullScanResults.clear();
- break;
- case WifiScanner.CMD_OP_FAILED:
- sendPnoScanFailedToAllAndClear(
- WifiScanner.REASON_UNSPECIFIED, "background scan failed");
- transitionTo(mStartedState);
- break;
- default:
- return NOT_HANDLED;
- }
- return HANDLED;
- }
- }
-
private WifiNative.PnoSettings convertSettingsToPnoNative(ScanSettings scanSettings,
PnoSettings pnoSettings) {
WifiNative.PnoSettings nativePnoSetting = new WifiNative.PnoSettings();
@@ -1731,34 +1660,6 @@
}
}
- private boolean addSwPnoScanRequest(ClientInfo ci, int handler, ScanSettings scanSettings,
- PnoSettings pnoSettings) {
- if (ci == null) {
- Log.d(TAG, "Failing scan request ClientInfo not found " + handler);
- return false;
- }
- if (!mActivePnoScans.isEmpty()) {
- loge("Failing scan request because there is already an active scan");
- return false;
- }
- logScanRequest("addSwPnoScanRequest", ci, handler, null, scanSettings, pnoSettings);
- addPnoScanRequest(ci, handler, scanSettings, pnoSettings);
- // HW PNO is not supported, we need to revert to normal background scans and
- // report events after each scan and we need full scan results to get the IE information
- scanSettings.reportEvents = WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN
- | WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT;
- addBackgroundScanRequest(scanSettings);
- return true;
- }
-
- private void removeSwPnoScanRequest(ClientInfo ci, int handler) {
- if (ci != null) {
- Pair<PnoSettings, ScanSettings> settings = removePnoScanRequest(ci, handler);
- logScanRequest("removeSwPnoScanRequest", ci, handler, null,
- settings.second, settings.first);
- }
- }
-
private void reportPnoNetworkFound(ScanResult[] results) {
WifiScanner.ParcelableScanResults parcelableScanResults =
new WifiScanner.ParcelableScanResults(results);
@@ -1781,15 +1682,6 @@
mActivePnoScans.clear();
}
- private void addBackgroundScanRequest(ScanSettings settings) {
- if (DBG) localLog("Starting background scan");
- if (mInternalClientInfo != null) {
- mInternalClientInfo.sendRequestToClientHandler(
- WifiScanner.CMD_START_BACKGROUND_SCAN, settings,
- WifiStateMachine.WIFI_WORK_SOURCE);
- }
- }
-
private void addSingleScanRequest(ScanSettings settings) {
if (DBG) localLog("Starting single scan");
if (mInternalClientInfo != null) {
diff --git a/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java b/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java
index 3532a3b..4ffc66d 100644
--- a/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java
@@ -1721,21 +1721,6 @@
return Pair.create(requestSettings, nativeSettings);
}
- private Pair<WifiScanner.ScanSettings, WifiNative.ScanSettings> createScanSettingsForSwPno()
- throws Exception {
- Pair<WifiScanner.ScanSettings, WifiNative.ScanSettings> settingsPair =
- createScanSettingsForHwPno();
-
- WifiScanner.ScanSettings requestSettings = settingsPair.first;
- WifiNative.ScanSettings nativeSettings = settingsPair.second;
- // reportEvents field is overridden for SW PNO
- for (int i = 0; i < nativeSettings.buckets.length; i++) {
- nativeSettings.buckets[i].report_events = WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN
- | WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT;
- }
- return Pair.create(requestSettings, nativeSettings);
- }
-
private Pair<WifiScanner.PnoSettings, WifiNative.PnoSettings> createPnoSettings(
ScanResults results)
throws Exception {
diff --git a/tests/wifitests/src/com/android/server/wifi/scanner/WificondPnoScannerTest.java b/tests/wifitests/src/com/android/server/wifi/scanner/WificondPnoScannerTest.java
index f312b48..3f53ce1 100644
--- a/tests/wifitests/src/com/android/server/wifi/scanner/WificondPnoScannerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/scanner/WificondPnoScannerTest.java
@@ -295,35 +295,12 @@
order.verify(mWifiNative, never()).stopPnoScan();
}
- private void doSuccessfulSwPnoScanTest(boolean isConnectedPno) {
- WifiNative.PnoEventHandler pnoEventHandler = mock(WifiNative.PnoEventHandler.class);
- WifiNative.PnoSettings pnoSettings = createDummyPnoSettings(isConnectedPno);
- WifiNative.ScanEventHandler scanEventHandler = mock(WifiNative.ScanEventHandler.class);
- WifiNative.ScanSettings scanSettings = createDummyScanSettings();
- ScanResults scanResults = createDummyScanResults(false);
-
- InOrder order = inOrder(scanEventHandler, mWifiNative);
-
- // Start PNO scan
- startSuccessfulPnoScan(scanSettings, pnoSettings, scanEventHandler, pnoEventHandler);
-
- expectSuccessfulSwPnoScan(order, scanEventHandler, scanResults);
-
- verifyNoMoreInteractions(pnoEventHandler);
- }
-
private void createScannerWithHwPnoScanSupport() {
mResources.setBoolean(R.bool.config_wifi_background_scan_support, true);
mScanner = new WificondScannerImpl(mContext, mWifiNative, mWifiMonitor,
mLooper.getLooper(), mClock);
}
- private void createScannerWithSwPnoScanSupport() {
- mResources.setBoolean(R.bool.config_wifi_background_scan_support, false);
- mScanner = new WificondScannerImpl(mContext, mWifiNative, mWifiMonitor,
- mLooper.getLooper(), mClock);
- }
-
private WifiNative.PnoNetwork createDummyPnoNetwork(String ssid) {
WifiNative.PnoNetwork pnoNetwork = new WifiNative.PnoNetwork();
pnoNetwork.ssid = ssid;
@@ -363,14 +340,7 @@
when(mWifiNative.startPnoScan(any(WifiNative.PnoSettings.class))).thenReturn(true);
when(mWifiNative.stopPnoScan()).thenReturn(true);
- if (mScanner.isHwPnoSupported(pnoSettings.isConnected)) {
- // This should happen only for HW PNO scan
- assertTrue(mScanner.setHwPnoList(pnoSettings, pnoEventHandler));
- } else {
- // This should happen only for SW PNO scan
- assertTrue(mScanner.startBatchedScan(scanSettings, scanEventHandler));
-
- }
+ assertTrue(mScanner.setHwPnoList(pnoSettings, pnoEventHandler));
}
private Set<Integer> expectedBandScanFreqs(int band) {
@@ -433,33 +403,4 @@
assertScanDataEquals(scanResults.getScanData(), mScanner.getLatestSingleScanResults());
}
- /**
- * Verify that the SW PNO scan was successfully started. This could either be disconnected
- * or connected PNO.
- * This is basically ensuring that the background scan runs successfully and returns the
- * expected result.
- */
- private void expectSuccessfulSwPnoScan(InOrder order,
- WifiNative.ScanEventHandler eventHandler, ScanResults scanResults) {
-
- // Verify scan started
- order.verify(mWifiNative).scan(any(), any(Set.class));
-
- // Make sure that HW PNO scan was not started
- verify(mWifiNative, never()).startPnoScan(any(WifiNative.PnoSettings.class));
-
- // Setup scan results
- when(mWifiNative.getScanResults()).thenReturn(scanResults.getScanDetailArrayList());
- when(mWifiNative.getPnoScanResults()).thenReturn(scanResults.getScanDetailArrayList());
-
- // Notify scan has finished
- mWifiMonitor.sendMessage(mWifiNative.getInterfaceName(), WifiMonitor.SCAN_RESULTS_EVENT);
- assertEquals("dispatch message after results event", 1, mLooper.dispatchAll());
-
- // Verify background scan results delivered
- order.verify(eventHandler).onScanStatus(WifiNative.WIFI_SCAN_RESULTS_AVAILABLE);
- WifiScanner.ScanData[] scanData = mScanner.getLatestBatchedScanResults(true);
- WifiScanner.ScanData lastScanData = scanData[scanData.length - 1];
- assertScanDataEquals(scanResults.getScanData(), lastScanData);
- }
}