diff options
author | Nalla Kartheek <karthe@codeaurora.org> | 2015-12-08 15:18:26 +0530 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2016-06-24 11:28:49 -1000 |
commit | 22b3c71953adbf0db948efde921560bdeecfc1a4 (patch) | |
tree | 0421096760b5ece87943ffc05ba27d87ed8db275 /service | |
parent | 6c7911a4f7f0d450e3cbff3466f9208800cec752 (diff) | |
download | android_frameworks_opt_net_wifi-22b3c71953adbf0db948efde921560bdeecfc1a4.tar.gz android_frameworks_opt_net_wifi-22b3c71953adbf0db948efde921560bdeecfc1a4.tar.bz2 android_frameworks_opt_net_wifi-22b3c71953adbf0db948efde921560bdeecfc1a4.zip |
Wifi: Update WifiController state if Wifi turn On fails
If Wifi turn On fails due to failure in loading driver or supplicant
start then WifiStateMachine stays in InitialState, but WifiController
is left stuck in StaEnabledState, which in turn fails to turn on WLAN
again.
Register WifiService to receive WIFI_STATE_CHANGED_ACTION intent from
WifiStateMachine, and if wifiState is failed, inform WifiController to
transition to ApStaDisabledState.
Change-Id: I454f6d5bb7f45cc18c9fdd8a625c5b3481640c19
CRs-Fixed: 947716
Diffstat (limited to 'service')
-rw-r--r-- | service/java/com/android/server/wifi/WifiServiceImpl.java | 17 | ||||
-rw-r--r-- | service/java/com/android/server/wifi/WifiStateMachine.java | 2 |
2 files changed, 19 insertions, 0 deletions
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java index ed09d2c10..02ba186d3 100644 --- a/service/java/com/android/server/wifi/WifiServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiServiceImpl.java @@ -1445,6 +1445,22 @@ public final class WifiServiceImpl extends IWifiManager.Stub { if (wifiApState == WifiManager.WIFI_AP_STATE_FAILED) { setWifiApEnabled(null, false); } + } else if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { + int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, + WifiManager.WIFI_STATE_UNKNOWN); + /* + * If Wi-Fi turn on fails, WifiStateMachine stays in InitialState, + * but WifiController is left stuck in StaEnabledState, which in turn + * fails to turn on WLAN again. + * + * Register WifiService to receive WIFI_STATE_CHANGED_ACTION intent + * from WifiStateMachine, and if wifiState is failed, inform WifiController + * to transtion to ApStaDisabledState. + */ + if (wifiState == WifiManager.WIFI_STATE_FAILED) { + Slog.e(TAG, "Wi-Fi state is failed"); + setWifiEnabled(false); + } } } }; @@ -1473,6 +1489,7 @@ public final class WifiServiceImpl extends IWifiManager.Stub { intentFilter.addAction(Intent.ACTION_SCREEN_OFF); intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED); intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); + intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); intentFilter.addAction(WifiManager.WIFI_AP_STATE_CHANGED_ACTION); intentFilter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED); intentFilter.addAction(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED); diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java index 513752722..20a549da2 100644 --- a/service/java/com/android/server/wifi/WifiStateMachine.java +++ b/service/java/com/android/server/wifi/WifiStateMachine.java @@ -6091,9 +6091,11 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiPno transitionTo(mSupplicantStartingState); } else { loge("Failed to start supplicant!"); + setWifiState(WifiManager.WIFI_STATE_FAILED); } } else { loge("Failed to load driver"); + setWifiState(WifiManager.WIFI_STATE_FAILED); } break; case CMD_START_AP: |