Merge "Clean up scan handling"
This commit is contained in:
committed by
Android (Google) Code Review
commit
d99375528c
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ interface IWifiManager
|
||||
|
||||
boolean pingSupplicant();
|
||||
|
||||
void startScan(boolean forceActive);
|
||||
void startScan();
|
||||
|
||||
List<ScanResult> getScanResults(String callingPackage);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -886,17 +883,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
|
||||
*/
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user