diff options
author | Irfan Sheriff <isheriff@google.com> | 2013-02-22 18:40:23 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-02-22 18:40:24 +0000 |
commit | d99375528ce5d87bdeb23a63b726fd04f6922ed7 (patch) | |
tree | eedddcb2a2815900c8bb48627f6e19a22ad0dd12 | |
parent | bc340d03c3d67a64951162f2a901c805f9f56734 (diff) | |
parent | bcc97ca43a339c3356b5c8d9eaf1cbdfb0de3165 (diff) | |
download | frameworks_base-d99375528ce5d87bdeb23a63b726fd04f6922ed7.zip frameworks_base-d99375528ce5d87bdeb23a63b726fd04f6922ed7.tar.gz frameworks_base-d99375528ce5d87bdeb23a63b726fd04f6922ed7.tar.bz2 |
Merge "Clean up scan handling"
7 files changed, 39 insertions, 120 deletions
diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java index 53876a5..e3c7cc4 100644 --- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java +++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java @@ -167,7 +167,7 @@ public class WifiStressTest ssidAppearInScanResultsCount, i)); long startTime = System.currentTimeMillis(); mAct.scanResultAvailable = false; - assertTrue("start scan failed", mAct.mWifiManager.startScanActive()); + assertTrue("start scan failed", mAct.mWifiManager.startScan()); while (true) { if ((System.currentTimeMillis() - startTime) > ConnectivityManagerTestActivity.WIFI_SCAN_TIMEOUT) { diff --git a/core/tests/bandwidthtests/src/com/android/bandwidthtest/util/ConnectionUtil.java b/core/tests/bandwidthtests/src/com/android/bandwidthtest/util/ConnectionUtil.java index d5fcc1c..dd60dd4 100644 --- a/core/tests/bandwidthtests/src/com/android/bandwidthtest/util/ConnectionUtil.java +++ b/core/tests/bandwidthtests/src/com/android/bandwidthtest/util/ConnectionUtil.java @@ -588,7 +588,7 @@ public class ConnectionUtil { return true; } else { // Start an active scan - mWifiManager.startScanActive(); + mWifiManager.startScan(); mScanResultIsAvailable = false; long startTime = System.currentTimeMillis(); while (!mScanResultIsAvailable) { diff --git a/services/java/com/android/server/wifi/WifiService.java b/services/java/com/android/server/wifi/WifiService.java index 3c14e3d..94b3ed3 100644 --- a/services/java/com/android/server/wifi/WifiService.java +++ b/services/java/com/android/server/wifi/WifiService.java @@ -375,9 +375,9 @@ public final class WifiService extends IWifiManager.Stub { /** * see {@link android.net.wifi.WifiManager#startScan()} */ - public void startScan(boolean forceActive) { + public void startScan() { enforceChangePermission(); - mWifiStateMachine.startScan(forceActive); + mWifiStateMachine.startScan(); noteScanStart(); } diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index 0be453c..bef5824 100644 --- a/wifi/java/android/net/wifi/IWifiManager.aidl +++ b/wifi/java/android/net/wifi/IWifiManager.aidl @@ -43,7 +43,7 @@ interface IWifiManager boolean pingSupplicant(); - void startScan(boolean forceActive); + void startScan(); List<ScanResult> getScanResults(String callingPackage); diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index c08db07..008a81b 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -733,26 +733,7 @@ public class WifiManager { */ public boolean startScan() { try { - mService.startScan(false); - return true; - } catch (RemoteException e) { - return false; - } - } - - /** - * Request a scan for access points. Returns immediately. The availability - * of the results is made known later by means of an asynchronous event sent - * on completion of the scan. - * This is a variant of startScan that forces an active scan, even if passive - * scans are the current default - * @return {@code true} if the operation succeeded, i.e., the scan was initiated - * - * @hide - */ - public boolean startScanActive() { - try { - mService.startScan(true); + mService.startScan(); return true; } catch (RemoteException e) { return false; diff --git a/wifi/java/android/net/wifi/WifiNative.java b/wifi/java/android/net/wifi/WifiNative.java index 7a9f106..59f1889 100644 --- a/wifi/java/android/net/wifi/WifiNative.java +++ b/wifi/java/android/net/wifi/WifiNative.java @@ -42,11 +42,14 @@ public class WifiNative { private static final boolean DBG = false; private final String mTAG; - private static final int DEFAULT_GROUP_OWNER_INTENT = 6; + private static final int DEFAULT_GROUP_OWNER_INTENT = 6; - static final int BLUETOOTH_COEXISTENCE_MODE_ENABLED = 0; - static final int BLUETOOTH_COEXISTENCE_MODE_DISABLED = 1; - static final int BLUETOOTH_COEXISTENCE_MODE_SENSE = 2; + static final int BLUETOOTH_COEXISTENCE_MODE_ENABLED = 0; + static final int BLUETOOTH_COEXISTENCE_MODE_DISABLED = 1; + static final int BLUETOOTH_COEXISTENCE_MODE_SENSE = 2; + + static final int SCAN_WITHOUT_CONNECTION_SETUP = 1; + static final int SCAN_WITH_CONNECTION_SETUP = 2; String mInterface = ""; private boolean mSuspendOptEnabled = false; @@ -116,15 +119,13 @@ public class WifiNative { return (pong != null && pong.equals("PONG")); } - public boolean scan() { - return doBooleanCommand("SCAN"); - } - - public boolean setScanMode(boolean setActive) { - if (setActive) { - return doBooleanCommand("DRIVER SCAN-ACTIVE"); + public boolean scan(int type) { + if (type == SCAN_WITHOUT_CONNECTION_SETUP) { + return doBooleanCommand("SCAN TYPE=ONLY"); + } else if (type == SCAN_WITH_CONNECTION_SETUP) { + return doBooleanCommand("SCAN"); } else { - return doBooleanCommand("DRIVER SCAN-PASSIVE"); + throw new IllegalArgumentException("Invalid scan type"); } } @@ -332,12 +333,7 @@ public class WifiNative { } public boolean saveConfig() { - // Make sure we never write out a value for AP_SCAN other than 1 - return doBooleanCommand("AP_SCAN 1") && doBooleanCommand("SAVE_CONFIG"); - } - - public boolean setScanResultHandling(int mode) { - return doBooleanCommand("AP_SCAN " + mode); + return doBooleanCommand("SAVE_CONFIG"); } public boolean addToBlacklist(String bssid) { diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java index ed8b99b..7da4caa 100644 --- a/wifi/java/android/net/wifi/WifiStateMachine.java +++ b/wifi/java/android/net/wifi/WifiStateMachine.java @@ -139,8 +139,6 @@ public class WifiStateMachine extends StateMachine { private int mReconnectCount = 0; private boolean mIsScanMode = false; private boolean mScanResultIsPending = false; - /* Tracks if the current scan settings are active */ - private boolean mSetScanActive = false; /* Tracks if state machine has received any screen state change broadcast yet. * We can miss one of these at boot. */ @@ -305,14 +303,12 @@ public class WifiStateMachine extends StateMachine { static final int CMD_START_SCAN = BASE + 71; /* Set scan mode. CONNECT_MODE or SCAN_ONLY_MODE */ static final int CMD_SET_SCAN_MODE = BASE + 72; - /* Set scan type. SCAN_ACTIVE or SCAN_PASSIVE */ - static final int CMD_SET_SCAN_TYPE = BASE + 73; /* Disconnect from a network */ - static final int CMD_DISCONNECT = BASE + 74; + static final int CMD_DISCONNECT = BASE + 73; /* Reconnect to a network */ - static final int CMD_RECONNECT = BASE + 75; + static final int CMD_RECONNECT = BASE + 74; /* Reassociate to a network */ - static final int CMD_REASSOCIATE = BASE + 76; + static final int CMD_REASSOCIATE = BASE + 75; /* Controls suspend mode optimizations * * When high perf mode is enabled, suspend mode optimizations are disabled @@ -365,9 +361,6 @@ public class WifiStateMachine extends StateMachine { private static final int CONNECT_MODE = 1; private static final int SCAN_ONLY_MODE = 2; - private static final int SCAN_ACTIVE = 1; - private static final int SCAN_PASSIVE = 2; - private static final int SUCCESS = 1; private static final int FAILURE = -1; @@ -632,7 +625,7 @@ public class WifiStateMachine extends StateMachine { new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - startScan(false); + startScan(); } }, new IntentFilter(ACTION_START_SCAN)); @@ -743,9 +736,13 @@ public class WifiStateMachine extends StateMachine { /** * TODO: doc */ - public void startScan(boolean forceActive) { - sendMessage(obtainMessage(CMD_START_SCAN, forceActive ? - SCAN_ACTIVE : SCAN_PASSIVE, 0)); + public void startScan() { + sendMessage(CMD_START_SCAN); + } + + private void startScanNative(int type) { + mWifiNative.scan(type); + mScanResultIsPending = true; } /** @@ -889,17 +886,6 @@ public class WifiStateMachine extends StateMachine { /** * TODO: doc */ - public void setScanType(boolean active) { - if (active) { - sendMessage(obtainMessage(CMD_SET_SCAN_TYPE, SCAN_ACTIVE, 0)); - } else { - sendMessage(obtainMessage(CMD_SET_SCAN_TYPE, SCAN_PASSIVE, 0)); - } - } - - /** - * TODO: doc - */ public List<ScanResult> syncGetScanResultsList() { synchronized (mScanResultCache) { List<ScanResult> scanList = new ArrayList<ScanResult>(); @@ -1931,7 +1917,6 @@ public class WifiStateMachine extends StateMachine { case CMD_BLACKLIST_NETWORK: case CMD_CLEAR_BLACKLIST: case CMD_SET_SCAN_MODE: - case CMD_SET_SCAN_TYPE: case CMD_SET_COUNTRY_CODE: case CMD_SET_FREQUENCY_BAND: case CMD_RSSI_POLL: @@ -2101,7 +2086,6 @@ public class WifiStateMachine extends StateMachine { case CMD_START_DRIVER: case CMD_STOP_DRIVER: case CMD_SET_SCAN_MODE: - case CMD_SET_SCAN_TYPE: case CMD_SET_COUNTRY_CODE: case CMD_SET_FREQUENCY_BAND: case CMD_START_PACKET_FILTERING: @@ -2237,7 +2221,6 @@ public class WifiStateMachine extends StateMachine { case CMD_START_DRIVER: case CMD_STOP_DRIVER: case CMD_SET_SCAN_MODE: - case CMD_SET_SCAN_TYPE: case CMD_SET_COUNTRY_CODE: case CMD_SET_FREQUENCY_BAND: case CMD_START_PACKET_FILTERING: @@ -2365,7 +2348,6 @@ public class WifiStateMachine extends StateMachine { case CMD_START_DRIVER: case CMD_STOP_DRIVER: case CMD_SET_SCAN_MODE: - case CMD_SET_SCAN_TYPE: case CMD_SET_COUNTRY_CODE: case CMD_SET_FREQUENCY_BAND: case CMD_START_PACKET_FILTERING: @@ -2585,7 +2567,6 @@ public class WifiStateMachine extends StateMachine { case CMD_START_DRIVER: case CMD_STOP_DRIVER: case CMD_SET_SCAN_MODE: - case CMD_SET_SCAN_TYPE: case CMD_SET_COUNTRY_CODE: case CMD_SET_FREQUENCY_BAND: case CMD_START_PACKET_FILTERING: @@ -2649,7 +2630,6 @@ public class WifiStateMachine extends StateMachine { case WifiMonitor.NETWORK_DISCONNECTION_EVENT: case WifiMonitor.AUTHENTICATION_FAILURE_EVENT: case WifiMonitor.WPS_OVERLAP_EVENT: - case CMD_SET_SCAN_TYPE: case CMD_SET_COUNTRY_CODE: case CMD_SET_FREQUENCY_BAND: case CMD_START_PACKET_FILTERING: @@ -2700,11 +2680,9 @@ public class WifiStateMachine extends StateMachine { } if (mIsScanMode) { - mWifiNative.setScanResultHandling(SCAN_ONLY_MODE); mWifiNative.disconnect(); transitionTo(mScanModeState); } else { - mWifiNative.setScanResultHandling(CONNECT_MODE); mWifiNative.reconnect(); // Status pulls in the current supplicant state and network connection state // events over the monitor connection. This helps framework sync up with @@ -2731,20 +2709,8 @@ public class WifiStateMachine extends StateMachine { public boolean processMessage(Message message) { if (DBG) log(getName() + message.toString() + "\n"); switch(message.what) { - case CMD_SET_SCAN_TYPE: - mSetScanActive = (message.arg1 == SCAN_ACTIVE); - mWifiNative.setScanMode(mSetScanActive); - break; case CMD_START_SCAN: - boolean forceActive = (message.arg1 == SCAN_ACTIVE); - if (forceActive && !mSetScanActive) { - mWifiNative.setScanMode(forceActive); - } - mWifiNative.scan(); - if (forceActive && !mSetScanActive) { - mWifiNative.setScanMode(mSetScanActive); - } - mScanResultIsPending = true; + startScanNative(WifiNative.SCAN_WITH_CONNECTION_SETUP); break; case CMD_SET_COUNTRY_CODE: String country = (String) message.obj; @@ -2759,7 +2725,7 @@ public class WifiStateMachine extends StateMachine { if (mWifiNative.setBand(band)) { mFrequencyBand.set(band); //Fetch the latest scan results when frequency band is set - startScan(true); + startScanNative(WifiNative.SCAN_WITH_CONNECTION_SETUP); } else { loge("Failed to set frequency band " + band); } @@ -2906,7 +2872,6 @@ public class WifiStateMachine extends StateMachine { case CMD_START_DRIVER: case CMD_STOP_DRIVER: case CMD_SET_SCAN_MODE: - case CMD_SET_SCAN_TYPE: case CMD_SET_COUNTRY_CODE: case CMD_SET_FREQUENCY_BAND: case CMD_START_PACKET_FILTERING: @@ -2942,7 +2907,6 @@ public class WifiStateMachine extends StateMachine { /* Queue driver commands */ case CMD_START_DRIVER: case CMD_STOP_DRIVER: - case CMD_SET_SCAN_TYPE: case CMD_SET_COUNTRY_CODE: case CMD_SET_FREQUENCY_BAND: case CMD_START_PACKET_FILTERING: @@ -3005,12 +2969,14 @@ public class WifiStateMachine extends StateMachine { /* Ignore */ return HANDLED; } else { - mWifiNative.setScanResultHandling(message.arg1); mWifiNative.reconnect(); mIsScanMode = false; transitionTo(mDisconnectedState); } break; + case CMD_START_SCAN: + startScanNative(WifiNative.SCAN_WITHOUT_CONNECTION_SETUP); + break; /* Ignore */ case CMD_DISCONNECT: case CMD_RECONNECT: @@ -3139,11 +3105,6 @@ public class WifiStateMachine extends StateMachine { replyToMessage(message, WifiManager.WPS_FAILED, WifiManager.ERROR); } break; - case WifiMonitor.SCAN_RESULTS_EVENT: - /* Set the scan setting back to "connect" mode */ - mWifiNative.setScanResultHandling(CONNECT_MODE); - /* Handle scan results */ - return NOT_HANDLED; case WifiMonitor.NETWORK_CONNECTION_EVENT: if (DBG) log("Network connection established"); mLastNetworkId = message.arg1; @@ -3216,14 +3177,9 @@ public class WifiStateMachine extends StateMachine { } break; case CMD_START_SCAN: - /* When the network is connected, re-scanning can trigger - * a reconnection. Put it in scan-only mode during scan. - * When scan results are received, the mode is switched - * back to CONNECT_MODE. - */ - mWifiNative.setScanResultHandling(SCAN_ONLY_MODE); - /* Have the parent state handle the rest */ - return NOT_HANDLED; + /* Do not attempt to connect when we are already connected */ + startScanNative(WifiNative.SCAN_WITHOUT_CONNECTION_SETUP); + break; /* Ignore connection to same network */ case WifiManager.CONNECT_NETWORK: int netId = message.arg1; @@ -3290,16 +3246,6 @@ public class WifiStateMachine extends StateMachine { return HANDLED; } - - @Override - public void exit() { - /* If a scan result is pending in connected state, the supplicant - * is in SCAN_ONLY_MODE. Restore CONNECT_MODE on exit - */ - if (mScanResultIsPending) { - mWifiNative.setScanResultHandling(CONNECT_MODE); - } - } } class ObtainingIpState extends State { @@ -3586,7 +3532,6 @@ public class WifiStateMachine extends StateMachine { break; case CMD_SET_SCAN_MODE: if (message.arg1 == SCAN_ONLY_MODE) { - mWifiNative.setScanResultHandling(message.arg1); //Supplicant disconnect to prevent further connects mWifiNative.disconnect(); mIsScanMode = true; @@ -3788,7 +3733,6 @@ public class WifiStateMachine extends StateMachine { case CMD_START_DRIVER: case CMD_STOP_DRIVER: case CMD_SET_SCAN_MODE: - case CMD_SET_SCAN_TYPE: case CMD_SET_COUNTRY_CODE: case CMD_SET_FREQUENCY_BAND: case CMD_START_PACKET_FILTERING: @@ -3896,7 +3840,6 @@ public class WifiStateMachine extends StateMachine { case CMD_START_DRIVER: case CMD_STOP_DRIVER: case CMD_SET_SCAN_MODE: - case CMD_SET_SCAN_TYPE: case CMD_SET_COUNTRY_CODE: case CMD_SET_FREQUENCY_BAND: case CMD_START_PACKET_FILTERING: @@ -3986,7 +3929,6 @@ public class WifiStateMachine extends StateMachine { case CMD_START_DRIVER: case CMD_STOP_DRIVER: case CMD_SET_SCAN_MODE: - case CMD_SET_SCAN_TYPE: case CMD_SET_COUNTRY_CODE: case CMD_SET_FREQUENCY_BAND: case CMD_START_PACKET_FILTERING: |