summaryrefslogtreecommitdiffstats
path: root/service/java/com/android/server/wifi/scanner
diff options
context:
space:
mode:
authorNingyuan Wang <nywang@google.com>2017-02-17 13:19:36 -0800
committerNingyuan Wang <nywang@google.com>2017-03-07 10:20:07 -0800
commit04c453c2e07efc30b99528926f205740226f1c7b (patch)
tree47281a7e91a85793a31e32ecb31c24d0538aa3d5 /service/java/com/android/server/wifi/scanner
parentbfa82a03584ac8cd003060408d8d13d72ab4acc8 (diff)
downloadandroid_frameworks_opt_net_wifi-04c453c2e07efc30b99528926f205740226f1c7b.tar.gz
android_frameworks_opt_net_wifi-04c453c2e07efc30b99528926f205740226f1c7b.tar.bz2
android_frameworks_opt_net_wifi-04c453c2e07efc30b99528926f205740226f1c7b.zip
Request Pno scan via wificond and re-enable pno scan
Bug: 32977707 Test: compile, unit tests, manual test, will do integration test Change-Id: I3b7d5020aa695120a047a2d228fc6be5760e2343
Diffstat (limited to 'service/java/com/android/server/wifi/scanner')
-rw-r--r--service/java/com/android/server/wifi/scanner/SupplicantWifiScannerImpl.java77
-rw-r--r--service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java7
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 b34410aa0..7da5857f7 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;
}