summaryrefslogtreecommitdiffstats
path: root/service/java/com/android/server/wifi/scanner
diff options
context:
space:
mode:
authorNingyuan Wang <nywang@google.com>2017-03-21 15:55:03 -0700
committerNingyuan Wang <nywang@google.com>2017-03-22 10:06:57 -0700
commit51493e199ebf1e1191ccf652f0081d229018a11f (patch)
treec6e9dcb6e4b1f35f3c58746470f4af5bcae01a2f /service/java/com/android/server/wifi/scanner
parent168fba718720b54cf0a88cfad7f96948925fb1e3 (diff)
downloadandroid_frameworks_opt_net_wifi-51493e199ebf1e1191ccf652f0081d229018a11f.tar.gz
android_frameworks_opt_net_wifi-51493e199ebf1e1191ccf652f0081d229018a11f.tar.bz2
android_frameworks_opt_net_wifi-51493e199ebf1e1191ccf652f0081d229018a11f.zip
Separate single scan and sched scan result handling
Bug: 36479602 Test: compile, unit tests, integration test Change-Id: I066619ca7c53cf7e8e53ce776c1b419201d522f1
Diffstat (limited to 'service/java/com/android/server/wifi/scanner')
-rw-r--r--service/java/com/android/server/wifi/scanner/WificondScannerImpl.java62
1 files changed, 49 insertions, 13 deletions
diff --git a/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java b/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java
index e3058b6c4..9f73a246c 100644
--- a/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java
+++ b/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java
@@ -145,6 +145,8 @@ public class WificondScannerImpl extends WifiScannerImpl implements Handler.Call
wifiMonitor.registerHandler(mWifiNative.getInterfaceName(),
WifiMonitor.SCAN_FAILED_EVENT, mEventHandler);
wifiMonitor.registerHandler(mWifiNative.getInterfaceName(),
+ WifiMonitor.PNO_SCAN_RESULTS_EVENT, mEventHandler);
+ wifiMonitor.registerHandler(mWifiNative.getInterfaceName(),
WifiMonitor.SCAN_RESULTS_EVENT, mEventHandler);
}
@@ -502,6 +504,13 @@ public class WificondScannerImpl extends WifiScannerImpl implements Handler.Call
reportScanFailure();
processPendingScans();
break;
+ case WifiMonitor.PNO_SCAN_RESULTS_EVENT:
+ mAlarmManager.cancel(mScanTimeoutListener);
+ pollLatestScanDataForPno();
+ // TODO(b/36276738): Remove this after we fix b/36231150.
+ Log.d(TAG, "processPendingScans in request of SCHED_SCAN_RESULTS_EVENT");
+ processPendingScans();
+ break;
case WifiMonitor.SCAN_RESULTS_EVENT:
mAlarmManager.cancel(mScanTimeoutListener);
pollLatestScanData();
@@ -542,6 +551,46 @@ public class WificondScannerImpl extends WifiScannerImpl implements Handler.Call
}
}
+ private void pollLatestScanDataForPno() {
+ synchronized (mSettingsLock) {
+ if (mLastScanSettings == null) {
+ // got a scan before we started scanning or after scan was canceled
+ return;
+ }
+ ArrayList<ScanDetail> nativeResults = mWifiNative.getScanResults();
+ List<ScanResult> hwPnoScanResults = new ArrayList<>();
+ int numFilteredScanResults = 0;
+ for (int i = 0; i < nativeResults.size(); ++i) {
+ ScanResult result = nativeResults.get(i).getScanResult();
+ long timestamp_ms = result.timestamp / 1000; // convert us -> ms
+ if (timestamp_ms > mLastScanSettings.startTime) {
+ if (mLastScanSettings.hwPnoScanActive) {
+ hwPnoScanResults.add(result);
+ }
+ } else {
+ numFilteredScanResults++;
+ }
+ }
+
+ if (numFilteredScanResults != 0) {
+ Log.d(TAG, "Filtering out " + numFilteredScanResults + " pno scan results.");
+ }
+
+ if (mLastScanSettings.hwPnoScanActive
+ && mLastScanSettings.pnoScanEventHandler != null) {
+ ScanResult[] pnoScanResultsArray = new ScanResult[hwPnoScanResults.size()];
+ for (int i = 0; i < pnoScanResultsArray.length; ++i) {
+ ScanResult result = nativeResults.get(i).getScanResult();
+ pnoScanResultsArray[i] = hwPnoScanResults.get(i);
+ }
+ mLastScanSettings.pnoScanEventHandler.onPnoNetworkFound(pnoScanResultsArray);
+ }
+ // mLastScanSettings is for either single/batched scan or pno scan.
+ // We can safely set it to null when pno scan finishes.
+ mLastScanSettings = null;
+ }
+ }
+
private void pollLatestScanData() {
synchronized (mSettingsLock) {
if (mLastScanSettings == null) {
@@ -553,7 +602,6 @@ public class WificondScannerImpl extends WifiScannerImpl implements Handler.Call
ArrayList<ScanDetail> nativeResults = mWifiNative.getScanResults();
List<ScanResult> singleScanResults = new ArrayList<>();
List<ScanResult> backgroundScanResults = new ArrayList<>();
- List<ScanResult> hwPnoScanResults = new ArrayList<>();
int numFilteredScanResults = 0;
for (int i = 0; i < nativeResults.size(); ++i) {
ScanResult result = nativeResults.get(i).getScanResult();
@@ -567,9 +615,6 @@ public class WificondScannerImpl extends WifiScannerImpl implements Handler.Call
result.frequency)) {
singleScanResults.add(result);
}
- if (mLastScanSettings.hwPnoScanActive) {
- hwPnoScanResults.add(result);
- }
} else {
numFilteredScanResults++;
}
@@ -650,15 +695,6 @@ public class WificondScannerImpl extends WifiScannerImpl implements Handler.Call
.onScanStatus(WifiNative.WIFI_SCAN_RESULTS_AVAILABLE);
}
- if (mLastScanSettings.hwPnoScanActive
- && mLastScanSettings.pnoScanEventHandler != null) {
- ScanResult[] pnoScanResultsArray = new ScanResult[hwPnoScanResults.size()];
- for (int i = 0; i < pnoScanResultsArray.length; ++i) {
- pnoScanResultsArray[i] = hwPnoScanResults.get(i);
- }
- mLastScanSettings.pnoScanEventHandler.onPnoNetworkFound(pnoScanResultsArray);
- }
-
mLastScanSettings = null;
}
}