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:
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -87,11 +87,18 @@ public class WifiStateTracker extends NetworkStateTracker {
|
|||||||
/**
|
/**
|
||||||
* The driver is started or stopped. The object will be the state: true for
|
* The driver is started or stopped. The object will be the state: true for
|
||||||
* started, false for stopped.
|
* started, false for stopped.
|
||||||
*/
|
*/
|
||||||
private static final int EVENT_DRIVER_STATE_CHANGED = 12;
|
private static final int EVENT_DRIVER_STATE_CHANGED = 12;
|
||||||
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,9 +572,17 @@ 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();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the interval timer for polling connection information
|
* Set the interval timer for polling connection information
|
||||||
* that is not delivered asynchronously.
|
* that is not delivered asynchronously.
|
||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user