diff options
author | Ningyuan Wang <nywang@google.com> | 2017-03-07 21:08:44 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-03-07 21:08:44 +0000 |
commit | 622fa1247e4fdbc588e9ff15ea36e5f1adb50a62 (patch) | |
tree | 5654177bb01cd75253a125cf79955887a27511fd /service/java/com/android/server/wifi/scanner | |
parent | 6aa1a4faa42609f8613cdf31d407d262115f684d (diff) | |
parent | d5911700133cc1069c5b67b8af77f4a1fdec25d7 (diff) | |
download | android_frameworks_opt_net_wifi-622fa1247e4fdbc588e9ff15ea36e5f1adb50a62.tar.gz android_frameworks_opt_net_wifi-622fa1247e4fdbc588e9ff15ea36e5f1adb50a62.tar.bz2 android_frameworks_opt_net_wifi-622fa1247e4fdbc588e9ff15ea36e5f1adb50a62.zip |
Request Pno scan via wificond and re-enable pno scan am: 04c453c2e0 am: aa4cd04469
am: d591170013
Change-Id: Ie9b5bac0c47e7dc2faee7efec73e3597aa1e7c3e
Diffstat (limited to 'service/java/com/android/server/wifi/scanner')
-rw-r--r-- | service/java/com/android/server/wifi/scanner/SupplicantWifiScannerImpl.java | 77 | ||||
-rw-r--r-- | service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java | 7 |
2 files changed, 60 insertions, 24 deletions
diff --git a/service/java/com/android/server/wifi/scanner/SupplicantWifiScannerImpl.java b/service/java/com/android/server/wifi/scanner/SupplicantWifiScannerImpl.java index 3e784445e..b89c388ff 100644 --- a/service/java/com/android/server/wifi/scanner/SupplicantWifiScannerImpl.java +++ b/service/java/com/android/server/wifi/scanner/SupplicantWifiScannerImpl.java @@ -461,9 +461,9 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle // If the PNO network list has changed from the previous request, ensure that // we bypass the debounce logic and restart PNO scan. if (isDifferentPnoScanSettings(newScanSettings)) { - status = restartHwPnoScan(); + status = restartHwPnoScan(mPnoSettings); } else { - status = startHwPnoScan(); + status = startHwPnoScan(mPnoSettings); } if (status) { mLastScanSettings = newScanSettings; @@ -665,8 +665,8 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle } } - private boolean startHwPnoScan() { - return mHwPnoDebouncer.startPnoScan(mHwPnoDebouncerListener); + private boolean startHwPnoScan(WifiNative.PnoSettings pnoSettings) { + return mHwPnoDebouncer.startPnoScan(pnoSettings, mHwPnoDebouncerListener); } private void stopHwPnoScan() { @@ -677,9 +677,9 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle mHwPnoDebouncer.forceStopPnoScan(); } - private boolean restartHwPnoScan() { + private boolean restartHwPnoScan(WifiNative.PnoSettings pnoSettings) { mHwPnoDebouncer.forceStopPnoScan(); - return mHwPnoDebouncer.startPnoScan(mHwPnoDebouncerListener); + return mHwPnoDebouncer.startPnoScan(pnoSettings, mHwPnoDebouncerListener); } /** @@ -1012,6 +1012,7 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle private boolean mCurrentPnoState = false;; private boolean mWaitForTimer = false; private Listener mListener; + private WifiNative.PnoSettings mPnoSettings; /** * Interface used to indicate PNO scan notifications. @@ -1032,34 +1033,61 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle } /** - * Enable/Disable PNO state in wpa_supplicant - * @param enable boolean indicating whether PNO is being enabled or disabled. + * Enable PNO state in wificond */ - private boolean updatePnoState(boolean enable) { - if (mCurrentPnoState == enable) { - if (DBG) Log.d(TAG, "PNO state is already " + enable); + private boolean startPnoScanInternal() { + if (mCurrentPnoState) { + if (DBG) Log.d(TAG, "PNO state is already enable"); return true; } + if (mPnoSettings == null) { + Log.e(TAG, "PNO state change to enable failed, no available Pno settings"); + return false; + } mLastPnoChangeTimeStamp = mClock.getElapsedSinceBootMillis(); - if (mWifiNative.setPnoScan(enable)) { - Log.d(TAG, "Changed PNO state from " + mCurrentPnoState + " to " + enable); - mCurrentPnoState = enable; + if (mWifiNative.startPnoScan(mPnoSettings)) { + Log.d(TAG, "Changed PNO state from " + mCurrentPnoState + " to enable"); + mCurrentPnoState = true; return true; } else { - Log.e(TAG, "PNO state change to " + enable + " failed"); + Log.e(TAG, "PNO state change to enable failed"); mCurrentPnoState = false; - return false; } + return false; + } + + /** + * Disable PNO state in wificond + */ + private boolean stopPnoScanInternal() { + if (!mCurrentPnoState) { + if (DBG) Log.d(TAG, "PNO state is already disable"); + return true; + } + mLastPnoChangeTimeStamp = mClock.getElapsedSinceBootMillis(); + if (mWifiNative.stopPnoScan()) { + Log.d(TAG, "Changed PNO state from " + mCurrentPnoState + " to disable"); + mCurrentPnoState = false; + return true; + } else { + Log.e(TAG, "PNO state change to disable failed"); + mCurrentPnoState = false; + } + return false; } private final AlarmManager.OnAlarmListener mAlarmListener = new AlarmManager.OnAlarmListener() { public void onAlarm() { if (DBG) Log.d(TAG, "PNO timer expired, expected state " + mExpectedPnoState); - if (!updatePnoState(mExpectedPnoState)) { - if (mListener != null) { - mListener.onPnoScanFailed(); + if (mExpectedPnoState) { + if (!startPnoScanInternal()) { + if (mListener != null) { + mListener.onPnoScanFailed(); + } } + } else { + stopPnoScanInternal(); } mWaitForTimer = false; } @@ -1075,7 +1103,11 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle if (!mWaitForTimer) { long timeDifference = mClock.getElapsedSinceBootMillis() - mLastPnoChangeTimeStamp; if (timeDifference >= MINIMUM_PNO_GAP_MS) { - isSuccess = updatePnoState(enable); + if (enable) { + isSuccess = startPnoScanInternal(); + } else { + isSuccess = stopPnoScanInternal(); + } } else { long alarmTimeout = MINIMUM_PNO_GAP_MS - timeDifference; Log.d(TAG, "Start PNO timer with delay " + alarmTimeout); @@ -1091,9 +1123,10 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle /** * Start PNO scan */ - public boolean startPnoScan(Listener listener) { + public boolean startPnoScan(WifiNative.PnoSettings pnoSettings, Listener listener) { if (DBG) Log.d(TAG, "Starting PNO scan"); mListener = listener; + mPnoSettings = pnoSettings; if (!setPnoState(true)) { mListener = null; return false; @@ -1121,7 +1154,7 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle mAlarmManager.cancel(mAlarmListener); mWaitForTimer = false; } - updatePnoState(false); + stopPnoScanInternal(); } } } diff --git a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java index f8fd9185c..726c3e86e 100644 --- a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java +++ b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java @@ -1769,8 +1769,10 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { } } - private WifiNative.PnoSettings convertPnoSettingsToNative(PnoSettings pnoSettings) { + private WifiNative.PnoSettings convertSettingsToPnoNative(ScanSettings scanSettings, + PnoSettings pnoSettings) { WifiNative.PnoSettings nativePnoSetting = new WifiNative.PnoSettings(); + nativePnoSetting.periodInMs = scanSettings.periodInMs; nativePnoSetting.min5GHzRssi = pnoSettings.min5GHzRssi; nativePnoSetting.min24GHzRssi = pnoSettings.min24GHzRssi; nativePnoSetting.initialScoreMax = pnoSettings.initialScoreMax; @@ -1840,7 +1842,8 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { loge("Failing scan request because there is already an active scan"); return false; } - WifiNative.PnoSettings nativePnoSettings = convertPnoSettingsToNative(pnoSettings); + WifiNative.PnoSettings nativePnoSettings = + convertSettingsToPnoNative(scanSettings, pnoSettings); if (!mScannerImpl.setHwPnoList(nativePnoSettings, mPnoScanStateMachine)) { return false; } |