summaryrefslogtreecommitdiffstats
path: root/wifi/java
diff options
context:
space:
mode:
Diffstat (limited to 'wifi/java')
-rw-r--r--wifi/java/android/net/wifi/WifiConfiguration.java4
-rw-r--r--wifi/java/android/net/wifi/WifiStateMachine.java91
2 files changed, 78 insertions, 17 deletions
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index 559be85..ca4f29f 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -216,7 +216,7 @@ public class WifiConfiguration implements Parcelable {
/**
* The network's SSID. Can either be an ASCII string,
* which must be enclosed in double quotation marks
- * (e.g., {@code "MyNetwork"}, or a string of
+ * (e.g., {@code "MyNetwork"}, or a string of
* hex digits,which are not enclosed in quotes
* (e.g., {@code 01a243f405}).
*/
@@ -239,7 +239,7 @@ public class WifiConfiguration implements Parcelable {
public String preSharedKey;
/**
* Up to four WEP keys. Either an ASCII string enclosed in double
- * quotation marks (e.g., {@code "abcdef"} or a string
+ * quotation marks (e.g., {@code "abcdef"} or a string
* of hex digits (e.g., {@code 0102030405}).
* <p/>
* When the value of one of these keys is read, the actual key is
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index 5734953..013dcb6 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -736,7 +736,11 @@ public class WifiStateMachine extends HierarchicalStateMachine {
}
public void connectNetwork(WifiConfiguration wifiConfig) {
- sendMessage(obtainMessage(CMD_CONNECT_NETWORK, wifiConfig));
+ /* arg1 is used to indicate netId, force a netId value of -1 when
+ * we are passing a configuration since the default value of
+ * 0 is a valid netId
+ */
+ sendMessage(obtainMessage(CMD_CONNECT_NETWORK, -1, 0, wifiConfig));
}
public void saveNetwork(WifiConfiguration wifiConfig) {
@@ -890,6 +894,37 @@ public class WifiStateMachine extends HierarchicalStateMachine {
sendMessage(CMD_REQUEST_CM_WAKELOCK);
}
+ @Override
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ String LS = System.getProperty("line.separator");
+ sb.append("current HSM state: ").append(getCurrentState().getName()).append(LS);
+ sb.append("mNetworkProperties ").append(mNetworkProperties).append(LS);
+ sb.append("mWifiInfo ").append(mWifiInfo).append(LS);
+ sb.append("mDhcpInfo ").append(mDhcpInfo).append(LS);
+ sb.append("mNetworkInfo ").append(mNetworkInfo).append(LS);
+ sb.append("mNumAllowedChannels ").append(mNumAllowedChannels).append(LS);
+ sb.append("mLastSignalLevel ").append(mLastSignalLevel).append(LS);
+ sb.append("mLastBssid ").append(mLastBssid).append(LS);
+ sb.append("mLastNetworkId ").append(mLastNetworkId).append(LS);
+ sb.append("mLastPriority ").append(mLastPriority).append(LS);
+ sb.append("mEnableAllNetworks ").append(mEnableAllNetworks).append(LS);
+ sb.append("mEnableRssiPolling ").append(mEnableRssiPolling).append(LS);
+ sb.append("mPasswordKeyMayBeIncorrect ").append(mPasswordKeyMayBeIncorrect).append(LS);
+ sb.append("mUseStaticIp ").append(mUseStaticIp).append(LS);
+ sb.append("mReconnectCount ").append(mReconnectCount).append(LS);
+ sb.append("mIsScanMode ").append(mIsScanMode).append(LS);
+ sb.append("mConfigChanged ").append(mConfigChanged).append(LS).append(LS);
+ sb.append("Supplicant status").append(LS)
+ .append(WifiNative.statusCommand()).append(LS).append(LS);
+ sb.append("mConfigChanged ").append(mConfigChanged).append(LS);
+ sb.append("Configured networks ").append(LS);
+ for (WifiConfiguration conf : mConfiguredNetworks) {
+ sb.append(conf).append(LS);
+ }
+ return sb.toString();
+ }
+
/*********************************************************
* Internal private functions
********************************************************/
@@ -1469,16 +1504,13 @@ public class WifiStateMachine extends HierarchicalStateMachine {
}
private void enableAllNetworks() {
- if (mEnableAllNetworks) {
- mEnableAllNetworks = false;
- for (WifiConfiguration config : mConfiguredNetworks) {
- if(config != null && config.status == Status.DISABLED) {
- WifiNative.enableNetworkCommand(config.networkId, false);
- }
+ for (WifiConfiguration config : mConfiguredNetworks) {
+ if(config != null && config.status == Status.DISABLED) {
+ WifiNative.enableNetworkCommand(config.networkId, false);
}
- WifiNative.saveConfigCommand();
- updateConfigAndSendChangeBroadcast();
}
+ WifiNative.saveConfigCommand();
+ updateConfigAndSendChangeBroadcast();
}
private int addOrUpdateNetworkNative(WifiConfiguration config) {
@@ -2404,7 +2436,8 @@ public class WifiStateMachine extends HierarchicalStateMachine {
mWifiInfo.setMacAddress(WifiNative.getMacAddressCommand());
- updateConfigAndSendChangeBroadcast();
+ updateConfiguredNetworks();
+ enableAllNetworks();
//TODO: initialize and fix multicast filtering
//mWM.initializeMulticastFiltering();
@@ -2875,15 +2908,25 @@ public class WifiStateMachine extends HierarchicalStateMachine {
addOrUpdateNetworkNative(config);
WifiNative.saveConfigCommand();
- // Connect to network by disabling others.
+ /* We connect to a specific network by first enabling that network
+ * and disabling all other networks in the supplicant. Disabling a
+ * connected network will cause a disconnection from the network.
+ * A reconnectCommand() will then initiate a connection to the enabled
+ * network.
+ */
WifiNative.enableNetworkCommand(netId, true);
- WifiNative.reconnectCommand();
+ /* Save a flag to indicate that we need to enable all
+ * networks after supplicant indicates a network
+ * state change event
+ */
mEnableAllNetworks = true;
+ WifiNative.reconnectCommand();
/* update the configured networks but not send a
* broadcast to avoid a fetch from settings
* during this temporary disabling of networks
*/
updateConfiguredNetworks();
+ transitionTo(mDisconnectingState);
break;
case SCAN_RESULTS_EVENT:
/* Set the scan setting back to "connect" mode */
@@ -2899,16 +2942,13 @@ public class WifiStateMachine extends HierarchicalStateMachine {
mWifiInfo.setBSSID(mLastBssid = stateChangeResult.BSSID);
mWifiInfo.setNetworkId(stateChangeResult.networkId);
mLastNetworkId = stateChangeResult.networkId;
- enableAllNetworks();
/* send event to CM & network change broadcast */
setDetailedState(DetailedState.OBTAINING_IPADDR);
sendNetworkStateChangeBroadcast(mLastBssid);
-
transitionTo(mConnectingState);
break;
case NETWORK_DISCONNECTION_EVENT:
Log.d(TAG,"Network connection lost");
- enableAllNetworks();
handleNetworkDisconnect();
transitionTo(mDisconnectedState);
break;
@@ -3057,6 +3097,13 @@ public class WifiStateMachine extends HierarchicalStateMachine {
WifiNative.disconnectCommand();
transitionTo(mDisconnectingState);
break;
+ /* Ignore connection to same network */
+ case CMD_CONNECT_NETWORK:
+ int netId = message.arg1;
+ if (mWifiInfo.getNetworkId() == netId) {
+ break;
+ }
+ return NOT_HANDLED;
/* Ignore */
case NETWORK_CONNECTION_EVENT:
break;
@@ -3127,6 +3174,13 @@ public class WifiStateMachine extends HierarchicalStateMachine {
deferMessage(message);
}
break;
+ /* Ignore connection to same network */
+ case CMD_CONNECT_NETWORK:
+ int netId = message.arg1;
+ if (mWifiInfo.getNetworkId() == netId) {
+ break;
+ }
+ return NOT_HANDLED;
/* Ignore */
case NETWORK_CONNECTION_EVENT:
break;
@@ -3162,6 +3216,13 @@ public class WifiStateMachine extends HierarchicalStateMachine {
EventLog.writeEvent(EVENTLOG_WIFI_EVENT_HANDLED, message.what);
return HANDLED;
}
+ @Override
+ public void exit() {
+ if (mEnableAllNetworks) {
+ mEnableAllNetworks = false;
+ enableAllNetworks();
+ }
+ }
}
class DisconnectedState extends HierarchicalState {