summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMikael Kanstrup <mikael.kanstrup@sonyericsson.com>2010-04-07 16:45:58 +0200
committerSteve Kondik <shade@chemlab.org>2010-06-10 09:23:47 -0400
commit4995cddc6660d1f87e89dc39630197b4e6f18b85 (patch)
tree87d9a9eacb4fc07a0f2711b3b4d1633fb642edd2
parent69725a4743904912dcacf6a1dd949b07a27042e4 (diff)
downloadandroid_frameworks_base-4995cddc6660d1f87e89dc39630197b4e6f18b85.tar.gz
android_frameworks_base-4995cddc6660d1f87e89dc39630197b4e6f18b85.tar.bz2
android_frameworks_base-4995cddc6660d1f87e89dc39630197b4e6f18b85.zip
WLAN: Reset power save mode to startup value after DHCP response.
When the driver was configured to run with power save mode disabled the power save mode incorrectly got reverted back to AUTO mode right after DHCP response. The power save mode value is now saved so that the device properly reverts back to a previous mode after DHCP response. Change-Id: I5035aad10146812ecef1be8ea4b22a03e230ccc9
-rw-r--r--core/jni/android_net_wifi_Wifi.cpp15
-rw-r--r--wifi/java/android/net/wifi/WifiNative.java2
-rw-r--r--wifi/java/android/net/wifi/WifiStateTracker.java16
3 files changed, 31 insertions, 2 deletions
diff --git a/core/jni/android_net_wifi_Wifi.cpp b/core/jni/android_net_wifi_Wifi.cpp
index 08077a96614..5fb1a2bb20e 100644
--- a/core/jni/android_net_wifi_Wifi.cpp
+++ b/core/jni/android_net_wifi_Wifi.cpp
@@ -390,6 +390,20 @@ static jboolean android_net_wifi_setPowerModeCommand(JNIEnv* env, jobject clazz,
return (jboolean)!cmdTooLong && doBooleanCommand(cmdstr, "OK");
}
+static jint android_net_wifi_getPowerModeCommand(JNIEnv* env, jobject clazz)
+{
+ char reply[256];
+ int power;
+
+ if (doCommand("DRIVER GETPOWER", reply, sizeof(reply)) != 0) {
+ return (jint)-1;
+ }
+ // reply comes back in the form "powermode = XX" where XX is the
+ // number we're interested in.
+ sscanf(reply, "%*s = %u", &power);
+ return (jint)power;
+}
+
static jboolean android_net_wifi_setNumAllowedChannelsCommand(JNIEnv* env, jobject clazz, jint numChannels)
{
char cmdstr[256];
@@ -536,6 +550,7 @@ static JNINativeMethod gWifiMethods[] = {
{ "startPacketFiltering", "()Z", (void*) android_net_wifi_startPacketFiltering },
{ "stopPacketFiltering", "()Z", (void*) android_net_wifi_stopPacketFiltering },
{ "setPowerModeCommand", "(I)Z", (void*) android_net_wifi_setPowerModeCommand },
+ { "getPowerModeCommand", "()I", (void*) android_net_wifi_getPowerModeCommand },
{ "setNumAllowedChannelsCommand", "(I)Z", (void*) android_net_wifi_setNumAllowedChannelsCommand },
{ "getNumAllowedChannelsCommand", "()I", (void*) android_net_wifi_getNumAllowedChannelsCommand },
{ "setBluetoothCoexistenceModeCommand", "(I)Z",
diff --git a/wifi/java/android/net/wifi/WifiNative.java b/wifi/java/android/net/wifi/WifiNative.java
index c3c519f5068..d9378fcd017 100644
--- a/wifi/java/android/net/wifi/WifiNative.java
+++ b/wifi/java/android/net/wifi/WifiNative.java
@@ -106,6 +106,8 @@ public class WifiNative {
public native static boolean setPowerModeCommand(int mode);
+ public native static int getPowerModeCommand();
+
public native static boolean setNumAllowedChannelsCommand(int numChannels);
public native static int getNumAllowedChannelsCommand();
diff --git a/wifi/java/android/net/wifi/WifiStateTracker.java b/wifi/java/android/net/wifi/WifiStateTracker.java
index f97f21b7e69..c45b480c3af 100644
--- a/wifi/java/android/net/wifi/WifiStateTracker.java
+++ b/wifi/java/android/net/wifi/WifiStateTracker.java
@@ -1755,6 +1755,8 @@ public class WifiStateTracker extends NetworkStateTracker {
case EVENT_DHCP_START:
boolean modifiedBluetoothCoexistenceMode = false;
+ int powerMode = DRIVER_POWER_MODE_AUTO;
+
if (shouldDisableCoexistenceMode()) {
/*
* There are problems setting the Wi-Fi driver's power
@@ -1782,7 +1784,15 @@ public class WifiStateTracker extends NetworkStateTracker {
}
synchronized (WifiStateTracker.this) {
- WifiNative.setPowerModeCommand(DRIVER_POWER_MODE_ACTIVE);
+ powerMode = WifiNative.getPowerModeCommand();
+ if (powerMode < 0) {
+ // Handle the case where supplicant driver does not support
+ // getPowerModeCommand.
+ powerMode = DRIVER_POWER_MODE_AUTO;
+ }
+ if (powerMode != DRIVER_POWER_MODE_ACTIVE) {
+ WifiNative.setPowerModeCommand(DRIVER_POWER_MODE_ACTIVE);
+ }
}
synchronized (this) {
// A new request is being made, so assume we will callback
@@ -1798,7 +1808,9 @@ public class WifiStateTracker extends NetworkStateTracker {
NetworkUtils.getDhcpError());
}
synchronized (WifiStateTracker.this) {
- WifiNative.setPowerModeCommand(DRIVER_POWER_MODE_AUTO);
+ if (powerMode != DRIVER_POWER_MODE_ACTIVE) {
+ WifiNative.setPowerModeCommand(powerMode);
+ }
}
if (modifiedBluetoothCoexistenceMode) {