Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4995cddc authored by Mikael Kanstrup's avatar Mikael Kanstrup Committed by Steve Kondik
Browse files

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
parent 69725a47
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -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",
+2 −0
Original line number Diff line number Diff line
@@ -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();
+14 −2
Original line number Diff line number Diff line
@@ -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,8 +1784,16 @@ public class WifiStateTracker extends NetworkStateTracker {
                    }
                    
                    synchronized (WifiStateTracker.this) {
                        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
                        mCancelCallback = false;
@@ -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) {