summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIrfan Sheriff <isheriff@google.com>2013-02-22 18:40:23 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-02-22 18:40:24 +0000
commitd99375528ce5d87bdeb23a63b726fd04f6922ed7 (patch)
treeeedddcb2a2815900c8bb48627f6e19a22ad0dd12
parentbc340d03c3d67a64951162f2a901c805f9f56734 (diff)
parentbcc97ca43a339c3356b5c8d9eaf1cbdfb0de3165 (diff)
downloadframeworks_base-d99375528ce5d87bdeb23a63b726fd04f6922ed7.zip
frameworks_base-d99375528ce5d87bdeb23a63b726fd04f6922ed7.tar.gz
frameworks_base-d99375528ce5d87bdeb23a63b726fd04f6922ed7.tar.bz2
Merge "Clean up scan handling"
-rw-r--r--core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java2
-rw-r--r--core/tests/bandwidthtests/src/com/android/bandwidthtest/util/ConnectionUtil.java2
-rw-r--r--services/java/com/android/server/wifi/WifiService.java4
-rw-r--r--wifi/java/android/net/wifi/IWifiManager.aidl2
-rw-r--r--wifi/java/android/net/wifi/WifiManager.java21
-rw-r--r--wifi/java/android/net/wifi/WifiNative.java32
-rw-r--r--wifi/java/android/net/wifi/WifiStateMachine.java96
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: