diff options
Diffstat (limited to 'wifi/java')
| -rw-r--r-- | wifi/java/android/net/wifi/WifiConfiguration.java | 4 | ||||
| -rw-r--r-- | wifi/java/android/net/wifi/WifiStateMachine.java | 91 |
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 { |
