summaryrefslogtreecommitdiffstats
path: root/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java
diff options
context:
space:
mode:
authorMitchell Wills <mwills@google.com>2016-04-11 13:40:57 -0700
committerMitchell Wills <mwills@google.com>2016-04-11 15:04:49 -0700
commita8367288377cbaed6371256ca837b7aa22280706 (patch)
treecea88b30a75d7c36eb393928633ef7f36f51cee5 /service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java
parent21d1b4662506ca07135fc7a1f1230d3cfda78a18 (diff)
downloadandroid_frameworks_opt_net_wifi-a8367288377cbaed6371256ca837b7aa22280706.tar.gz
android_frameworks_opt_net_wifi-a8367288377cbaed6371256ca837b7aa22280706.tar.bz2
android_frameworks_opt_net_wifi-a8367288377cbaed6371256ca837b7aa22280706.zip
Move WifiScanner related code to scanner package
Change-Id: I73d01fe4d0de99a4e9758353cacf1d7a790cf040
Diffstat (limited to 'service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java')
-rw-r--r--service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java177
1 files changed, 177 insertions, 0 deletions
diff --git a/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java b/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java
new file mode 100644
index 000000000..18f159f7f
--- /dev/null
+++ b/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.wifi.scanner;
+
+import android.content.Context;
+import android.net.wifi.WifiScanner;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.util.Log;
+
+import com.android.server.wifi.WifiNative;
+
+/**
+ * WifiScanner implementation that takes advantage of the gscan HAL API
+ * The gscan API is used to perform background scans and wpa_supplicant is used for onehot scans.
+ * @see com.android.server.wifi.scanner.WifiScannerImpl for more details on each method.
+ */
+public class HalWifiScannerImpl extends WifiScannerImpl implements Handler.Callback {
+ private static final String TAG = "HalWifiScannerImpl";
+ private static final boolean DBG = false;
+
+ private final WifiNative mWifiNative;
+ private final ChannelHelper mChannelHelper;
+ private final SupplicantWifiScannerImpl mSupplicantScannerDelegate;
+ private final boolean mHalBasedPnoSupported;
+
+ public HalWifiScannerImpl(Context context, WifiNative wifiNative, Looper looper) {
+ mWifiNative = wifiNative;
+ mChannelHelper = new HalChannelHelper(wifiNative);
+ mSupplicantScannerDelegate =
+ new SupplicantWifiScannerImpl(context, wifiNative, mChannelHelper, looper);
+
+ // Check if ePNO is supported by the HAL.
+ int halFeatureSet = mWifiNative.getSupportedFeatureSet();
+ mHalBasedPnoSupported = false;
+ /* TODO(b/27877781): Swith ePNO on
+ mHalBasedPnoSupported =
+ ((halFeatureSet & WifiManager.WIFI_FEATURE_HAL_EPNO)
+ == WifiManager.WIFI_FEATURE_HAL_EPNO); */
+ }
+
+ @Override
+ public boolean handleMessage(Message msg) {
+ Log.w(TAG, "Unknown message received: " + msg.what);
+ return true;
+ }
+
+ @Override
+ public void cleanup() {
+ mSupplicantScannerDelegate.cleanup();
+ }
+
+ @Override
+ public boolean getScanCapabilities(WifiNative.ScanCapabilities capabilities) {
+ return mWifiNative.getScanCapabilities(capabilities);
+ }
+
+ @Override
+ public ChannelHelper getChannelHelper() {
+ return mChannelHelper;
+ }
+
+ public boolean startSingleScan(WifiNative.ScanSettings settings,
+ WifiNative.ScanEventHandler eventHandler) {
+ return mSupplicantScannerDelegate.startSingleScan(settings, eventHandler);
+ }
+
+ @Override
+ public WifiScanner.ScanData getLatestSingleScanResults() {
+ return mSupplicantScannerDelegate.getLatestSingleScanResults();
+ }
+
+ @Override
+ public boolean startBatchedScan(WifiNative.ScanSettings settings,
+ WifiNative.ScanEventHandler eventHandler) {
+ if (settings == null || eventHandler == null) {
+ Log.w(TAG, "Invalid arguments for startBatched: settings=" + settings
+ + ",eventHandler=" + eventHandler);
+ return false;
+ }
+ return mWifiNative.startScan(settings, eventHandler);
+ }
+
+ @Override
+ public void stopBatchedScan() {
+ mWifiNative.stopScan();
+ }
+
+ @Override
+ public void pauseBatchedScan() {
+ mWifiNative.pauseScan();
+ }
+
+ @Override
+ public void restartBatchedScan() {
+ mWifiNative.restartScan();
+ }
+
+ @Override
+ public WifiScanner.ScanData[] getLatestBatchedScanResults(boolean flush) {
+ return mWifiNative.getScanResults(flush);
+ }
+
+ @Override
+ public boolean setHwPnoList(WifiNative.PnoSettings settings,
+ WifiNative.PnoEventHandler eventHandler) {
+ if (mHalBasedPnoSupported) {
+ return mWifiNative.setPnoList(settings, eventHandler);
+ } else {
+ return mSupplicantScannerDelegate.setHwPnoList(settings, eventHandler);
+ }
+ }
+
+ @Override
+ public boolean resetHwPnoList() {
+ if (mHalBasedPnoSupported) {
+ return mWifiNative.resetPnoList();
+ } else {
+ return mSupplicantScannerDelegate.resetHwPnoList();
+ }
+ }
+
+ @Override
+ public boolean isHwPnoSupported(boolean isConnectedPno) {
+ if (mHalBasedPnoSupported) {
+ return true;
+ } else {
+ return mSupplicantScannerDelegate.isHwPnoSupported(isConnectedPno);
+ }
+ }
+
+ @Override
+ public boolean shouldScheduleBackgroundScanForHwPno() {
+ if (mHalBasedPnoSupported) {
+ return true;
+ } else {
+ return mSupplicantScannerDelegate.shouldScheduleBackgroundScanForHwPno();
+ }
+ }
+
+ @Override
+ public boolean setHotlist(WifiScanner.HotlistSettings settings,
+ WifiNative.HotlistEventHandler eventHandler) {
+ return mWifiNative.setHotlist(settings, eventHandler);
+ }
+
+ @Override
+ public void resetHotlist() {
+ mWifiNative.resetHotlist();
+ }
+
+ @Override
+ public boolean trackSignificantWifiChange(WifiScanner.WifiChangeSettings settings,
+ WifiNative.SignificantWifiChangeEventHandler handler) {
+ return mWifiNative.trackSignificantWifiChange(settings, handler);
+ }
+
+ @Override
+ public void untrackSignificantWifiChange() {
+ mWifiNative.untrackSignificantWifiChange();
+ }
+}