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 | |
parent | 6c7911a4f7f0d450e3cbff3466f9208800cec752 (diff) | |
download | frameworks_opt_net_wifi-22b3c71953adbf0db948efde921560bdeecfc1a4.tar.gz frameworks_opt_net_wifi-22b3c71953adbf0db948efde921560bdeecfc1a4.tar.bz2 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
-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 ed09d2c..02ba186 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 5137527..20a549d 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: |