am 48153e7f: Merge change I064698b3 into eclair-mr2

Merge commit '48153e7f7fe46586c1994d69f899f75355847245' into eclair-mr2-plus-aosp

* commit '48153e7f7fe46586c1994d69f899f75355847245':
  Add wifi "HANGED" driver state triggering reload.
This commit is contained in:
Robert Greenwalt
2009-10-23 12:10:00 -07:00
committed by Android Git Automerger
3 changed files with 47 additions and 12 deletions

View File

@@ -142,6 +142,7 @@ public class WifiService extends IWifiManager.Stub {
private static final int MESSAGE_STOP_WIFI = 2; private static final int MESSAGE_STOP_WIFI = 2;
private static final int MESSAGE_START_WIFI = 3; private static final int MESSAGE_START_WIFI = 3;
private static final int MESSAGE_RELEASE_WAKELOCK = 4; private static final int MESSAGE_RELEASE_WAKELOCK = 4;
private static final int MESSAGE_UPDATE_STATE = 5;
private final WifiHandler mWifiHandler; private final WifiHandler mWifiHandler;
@@ -1446,6 +1447,11 @@ public class WifiService extends IWifiManager.Stub {
} }
private void updateWifiState() { private void updateWifiState() {
// send a message so it's all serialized
Message.obtain(mWifiHandler, MESSAGE_UPDATE_STATE, 0, 0).sendToTarget();
}
private void doUpdateWifiState() {
boolean wifiEnabled = getPersistedWifiEnabled(); boolean wifiEnabled = getPersistedWifiEnabled();
boolean airplaneMode = isAirplaneModeOn() && !mAirplaneModeOverwridden; boolean airplaneMode = isAirplaneModeOn() && !mAirplaneModeOverwridden;
boolean lockHeld = mLocks.hasLocks(); boolean lockHeld = mLocks.hasLocks();
@@ -1551,6 +1557,10 @@ public class WifiService extends IWifiManager.Stub {
sWakeLock.release(); sWakeLock.release();
break; break;
case MESSAGE_UPDATE_STATE:
doUpdateWifiState();
break;
case MESSAGE_DISABLE_WIFI: case MESSAGE_DISABLE_WIFI:
// a non-zero msg.arg1 value means the "enabled" setting // a non-zero msg.arg1 value means the "enabled" setting
// should be persisted // should be persisted

View File

@@ -255,6 +255,8 @@ public class WifiMonitor {
mWifiStateTracker.notifyDriverStopped(); mWifiStateTracker.notifyDriverStopped();
} else if (state.equals("STARTED")) { } else if (state.equals("STARTED")) {
mWifiStateTracker.notifyDriverStarted(); mWifiStateTracker.notifyDriverStarted();
} else if (state.equals("HANGED")) {
mWifiStateTracker.notifyDriverHung();
} }
} }

View File

@@ -92,6 +92,13 @@ public class WifiStateTracker extends NetworkStateTracker {
private static final int EVENT_PASSWORD_KEY_MAY_BE_INCORRECT = 13; private static final int EVENT_PASSWORD_KEY_MAY_BE_INCORRECT = 13;
private static final int EVENT_MAYBE_START_SCAN_POST_DISCONNECT = 14; private static final int EVENT_MAYBE_START_SCAN_POST_DISCONNECT = 14;
/**
* The driver state indication.
*/
private static final int DRIVER_STARTED = 0;
private static final int DRIVER_STOPPED = 1;
private static final int DRIVER_HUNG = 2;
/** /**
* Interval in milliseconds between polling for connection * Interval in milliseconds between polling for connection
* status items that are not sent via asynchronous events. * status items that are not sent via asynchronous events.
@@ -556,7 +563,7 @@ public class WifiStateTracker extends NetworkStateTracker {
mRunState = RUN_STATE_STOPPED; mRunState = RUN_STATE_STOPPED;
// Send a driver stopped message to our handler // Send a driver stopped message to our handler
Message.obtain(this, EVENT_DRIVER_STATE_CHANGED, 0, 0).sendToTarget(); Message.obtain(this, EVENT_DRIVER_STATE_CHANGED, DRIVER_STOPPED, 0).sendToTarget();
} }
/** /**
@@ -565,7 +572,15 @@ public class WifiStateTracker extends NetworkStateTracker {
*/ */
void notifyDriverStarted() { void notifyDriverStarted() {
// Send a driver started message to our handler // Send a driver started message to our handler
Message.obtain(this, EVENT_DRIVER_STATE_CHANGED, 1, 0).sendToTarget(); Message.obtain(this, EVENT_DRIVER_STATE_CHANGED, DRIVER_STARTED, 0).sendToTarget();
}
/**
* Send the tracker a notification that the Wi-Fi driver has hung and needs restarting.
*/
void notifyDriverHung() {
// Send a driver hanged message to our handler
Message.obtain(this, EVENT_DRIVER_STATE_CHANGED, DRIVER_HUNG, 0).sendToTarget();
} }
/** /**
@@ -1149,15 +1164,14 @@ public class WifiStateTracker extends NetworkStateTracker {
break; break;
case EVENT_DRIVER_STATE_CHANGED: case EVENT_DRIVER_STATE_CHANGED:
boolean driverStarted = msg.arg1 != 0;
// Wi-Fi driver state changed: // Wi-Fi driver state changed:
// [31- 1] Reserved for future use // 0 STARTED
// [ 0- 0] Driver start (1) or stopped (0) // 1 STOPPED
eventLogParam = driverStarted ? 1 : 0; // 2 HUNG
EventLog.writeEvent(EVENTLOG_DRIVER_STATE_CHANGED, eventLogParam); EventLog.writeEvent(EVENTLOG_DRIVER_STATE_CHANGED, msg.arg1);
if (driverStarted) { switch (msg.arg1) {
case DRIVER_STARTED:
/** /**
* Set the number of allowed radio channels according * Set the number of allowed radio channels according
* to the system setting, since it gets reset by the * to the system setting, since it gets reset by the
@@ -1176,6 +1190,15 @@ public class WifiStateTracker extends NetworkStateTracker {
} }
} }
} }
break;
case DRIVER_HUNG:
Log.e(TAG, "Wifi Driver reports HUNG - reloading.");
/**
* restart the driver - toggle off and on
*/
mWM.setWifiEnabled(false);
mWM.setWifiEnabled(true);
break;
} }
noteRunState(); noteRunState();
break; break;