From 999d3d85fcad0ecc1ef0ece31fab995cae5e1ef7 Mon Sep 17 00:00:00 2001 From: Jaehyun Kim Date: Mon, 27 Jul 2020 16:53:24 +0900 Subject: [PATCH] Block background scan while Doze Mode is set Change-Id: Ia21041a6b5ee46a532f6d302bfa2cc0921a46e53 Signed-off-by: Jaehyun Kim --- include/wifi-background-scan.h | 2 +- src/wifi-background-scan.c | 16 +++++++++++++++- src/wifi-power.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/include/wifi-background-scan.h b/include/wifi-background-scan.h index ed2584e..2874927 100755 --- a/include/wifi-background-scan.h +++ b/include/wifi-background-scan.h @@ -50,11 +50,11 @@ guint netconfig_wifi_bgscan_get_mode(void); gboolean netconfig_wifi_get_scanning(void); void netconfig_wifi_set_scanning(gboolean scanning); +gboolean netconfig_wifi_block_bgscan(int status); void netconfig_wifi_set_bgscan_pause(gboolean pause); gboolean netconfig_wifi_bgscan_set_interval(guint interval); void netconfig_wifi_bgscan_get_interval(guint *interval); gboolean netconfig_wifi_is_bgscan_paused(void); -void netconfig_wifi_set_bgscan_pause(gboolean pause); gboolean handle_set_bgscan(Wifi *wifi, GDBusMethodInvocation *context, guint scan_mode); gboolean handle_resume_bgscan(Wifi *wifi, GDBusMethodInvocation *context); diff --git a/src/wifi-background-scan.c b/src/wifi-background-scan.c index 8c7f892..55e7423 100755 --- a/src/wifi-background-scan.c +++ b/src/wifi-background-scan.c @@ -132,6 +132,8 @@ static gboolean __netconfig_wifi_bgscan_immediate_scan(gpointer data) return FALSE; } #endif + if (netconfig_wifi_block_bgscan(-1)) + return FALSE; if (state == NETCONFIG_WIFI_CONNECTED) { if (netconfig_wifi_bgscan_get_mode() == WIFI_BGSCAN_MODE_EXPONENTIAL) { @@ -221,6 +223,18 @@ static gboolean __netconfig_wifi_bgscan_next_scan(gpointer data) return FALSE; } +gboolean netconfig_wifi_block_bgscan(int status) +{ + static gboolean blocked = FALSE; + + if (status == 1) + blocked = TRUE; + else if (status == 0) + blocked = FALSE; + + return blocked; +} + void netconfig_wifi_set_bgscan_pause(gboolean pause) { struct bgscan_data *data = __netconfig_wifi_bgscan_get_data(); @@ -231,7 +245,7 @@ void netconfig_wifi_set_bgscan_pause(gboolean pause) gboolean netconfig_wifi_is_bgscan_paused(void) { struct bgscan_data *data = __netconfig_wifi_bgscan_get_data(); - DBG("Wi-Fi background scan is [%s]", data->paused ? "Paused" : "Runnable"); + DBG("Wi-Fi background scan is [%s]", data->paused ? "Paused" : "Runable"); return data->paused; } diff --git a/src/wifi-power.c b/src/wifi-power.c index be60606..ca109d5 100755 --- a/src/wifi-power.c +++ b/src/wifi-power.c @@ -629,6 +629,31 @@ static void __pm_state_changed_cb(keynode_t* node, void* user_data) prev_state = new_state; } +static void __doze_level_changed_cb(keynode_t* node, void* user_data) +{ + int doze_level = -1; + + if (node != NULL) + doze_level = vconf_keynode_get_int(node); + else + netconfig_vconf_get_int(VCONFKEY_SYSMAN_DOZE_MODE_LEVEL, &doze_level); + + if (doze_level < 0) { + DBG("Invalid Doze Level: %d", doze_level); + return; + } + + DBG("Doze Level: %d", doze_level); + + if (doze_level >= 1) { + netconfig_wifi_block_bgscan(1); + DBG("Block BG scan!"); + } else { + netconfig_wifi_block_bgscan(0); + DBG("Unblock BG scan!"); + } +} + static void __netconfig_telephony_ready_changed_cb(keynode_t * node, void *data) { int telephony_ready = 0; @@ -816,10 +841,15 @@ void wifi_power_initialize(void) vconf_notify_key_changed(VCONFKEY_SETAPPL_PSMODE, __emergency_mode_changed_cb, NULL); vconf_notify_key_changed(VCONFKEY_PM_STATE, __pm_state_changed_cb, NULL); + vconf_notify_key_changed(VCONFKEY_SYSMAN_DOZE_MODE_LEVEL, __doze_level_changed_cb, NULL); + __doze_level_changed_cb(NULL, NULL); } void wifi_power_deinitialize(void) { + vconf_ignore_key_changed(VCONFKEY_SETAPPL_PSMODE, __emergency_mode_changed_cb); + vconf_ignore_key_changed(VCONFKEY_PM_STATE, __pm_state_changed_cb); + vconf_ignore_key_changed(VCONFKEY_SYSMAN_DOZE_MODE_LEVEL, __doze_level_changed_cb); } gboolean handle_load_driver(Wifi *wifi, -- 2.34.1