diff options
author | Purushottam Kushwaha <quic_pkushwah@quicinc.com> | 2020-05-15 14:47:15 +0530 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2020-05-15 08:57:13 -0700 |
commit | 3c3f237d683fd095f171043b22b915a14c528685 (patch) | |
tree | 970dcc5f315262d6c2a27a0c7c8ce0d3890722d9 | |
parent | 61c22b90db0d4be53a23ca85938ea014e388bb2d (diff) |
PNO: Store PNO settings before startHwPnoScan().
PNO settings are stored only when startHwPnoScan() call succeeds.
In cases where call to startHwPnoScan() fails (ex: driver returns
EBUSY), reportPnoScanFailure() is invoked which notifies the registered
listeners only if PNO settings are present.
This CL is to store PNO settings before calling startHwPnoScan() API.
Thus, caller is notified on failure.
Also, clearing pno scan failure count from stopConnectivityScan()
API results in PNO scan getting scheduled indefinitely as long as
PNO start fails. This CL moves clearing of pno scan failure count
to stop().
Bug: 156713311
Test: atest com.android.server.wifi
Change-Id: I6e9cac1b1597cad54b45498d8e19469a4a2b3f5e
Signed-off-by: Purushottam Kushwaha <quic_pkushwah@quicinc.com>
3 files changed, 27 insertions, 6 deletions
diff --git a/service/java/com/android/server/wifi/WifiConnectivityManager.java b/service/java/com/android/server/wifi/WifiConnectivityManager.java index ed647cb69..8470d0c7d 100644 --- a/service/java/com/android/server/wifi/WifiConnectivityManager.java +++ b/service/java/com/android/server/wifi/WifiConnectivityManager.java @@ -1572,7 +1572,6 @@ public class WifiConnectivityManager { cancelPeriodicScanTimer(); cancelDelayedPartialScan(); stopPnoScan(); - mScanRestartCount = 0; } /** @@ -1905,6 +1904,7 @@ public class WifiConnectivityManager { mWaitForFullBandScanResults = false; mLatestCandidates = null; mLatestCandidatesTimestampMs = 0; + mScanRestartCount = 0; } /** diff --git a/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java b/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java index 4a48ed252..66e0cfbaa 100644 --- a/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java +++ b/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java @@ -437,12 +437,11 @@ public class WificondScannerImpl extends WifiScannerImpl implements Handler.Call return false; } - if (startHwPnoScan(settings)) { - mLastPnoScanSettings = new LastPnoScanSettings( - mClock.getElapsedSinceBootMillis(), - settings.networkList, eventHandler); + mLastPnoScanSettings = new LastPnoScanSettings( + mClock.getElapsedSinceBootMillis(), + settings.networkList, eventHandler); - } else { + if (!startHwPnoScan(settings)) { Log.e(TAG, "Failed to start PNO scan"); reportPnoScanFailure(); } 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 a43950d0e..152095c8d 100644 --- a/tests/wifitests/src/com/android/server/wifi/scanner/WificondPnoScannerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/scanner/WificondPnoScannerTest.java @@ -107,6 +107,28 @@ public class WificondPnoScannerTest extends WifiBaseTest { } /** + * Verify that the HW disconnected PNO scan triggers a wificond PNO scan and invokes the + * OnPnoScanFailed callback when the scan fails. + */ + @Test + public void startHwDisconnectedPnoScanFailure() { + createScannerWithHwPnoScanSupport(); + + WifiNative.PnoEventHandler pnoEventHandler = mock(WifiNative.PnoEventHandler.class); + WifiNative.PnoSettings pnoSettings = createDummyPnoSettings(false); + + InOrder order = inOrder(pnoEventHandler, mWifiNative); + + // Fail PNO scan + when(mWifiNative.startPnoScan(eq(IFACE_NAME), any(WifiNative.PnoSettings.class))) + .thenReturn(false); + assertTrue(mScanner.setHwPnoList(pnoSettings, pnoEventHandler)); + order.verify(mWifiNative).startPnoScan(any(), any(WifiNative.PnoSettings.class)); + order.verify(pnoEventHandler).onPnoScanFailed(); + verifyNoMoreInteractions(pnoEventHandler); + } + + /** * Verify that the HW PNO scan stop failure still resets the PNO scan state. * 1. Start Hw PNO. * 2. Stop Hw PNO scan which raises a stop command to WifiNative which is failed. |