From ed63a3ade7e67a2fc2bc1d6188e4639de0d85bf4 Mon Sep 17 00:00:00 2001 From: Jaehyun Kim Date: Tue, 1 Nov 2022 11:56:08 +0900 Subject: [PATCH] DA: Modify backgeround scan routine 1. Failure -> IDLE state change will reset bg_interval & resume bg_scan. 2. Move doubling the bg_interval function to __wifi_bgscan_next_scan for preventing skip bg_interval timer. Change-Id: I4f881e06b660215bf9433df7ba5548a6ace113cf Signed-off-by: Jaehyun Kim --- src/wifi-scan.c | 15 ++++++++------- src/wifi-state.c | 5 +++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/wifi-scan.c b/src/wifi-scan.c index 0f8738f..c8669bd 100755 --- a/src/wifi-scan.c +++ b/src/wifi-scan.c @@ -308,6 +308,12 @@ static gboolean __wifi_bgscan_next_scan(gpointer data) if (!scan_data) return FALSE; + if (scan_data->bg_mode == WIFI_BGSCAN_MODE_EXPONENTIAL) { + scan_data->bg_interval = scan_data->bg_interval * 2; + if (scan_data->bg_interval > SCAN_EXPONENTIAL_MAX) + scan_data->bg_interval = SCAN_EXPONENTIAL_MAX; + } + /* In case of LCD off, we don't need Wi-Fi scan */ netconfig_vconf_get_int(VCONFKEY_PM_STATE, &pm_state); if (pm_state >= VCONFKEY_PM_STATE_LCDOFF) @@ -342,8 +348,8 @@ void netconfig_wifi_bgscan_start_timer(const char *interface_name, gboolean imme } if (immediate_scan) - DBG("[%s] Scan immediately[%d], mode[%d](0 exponential / 1 periodic)", - interface_name, immediate_scan, scan_data->bg_mode); + DBG("[%s] Scan immediately[%d], mode[%d](0 exponential / 1 periodic), next[%d]", + interface_name, immediate_scan, scan_data->bg_mode, scan_data->bg_interval); else DBG("[%s] Scan immediately[%d], mode[%d](0 exponential / 1 periodic), next[%d]", interface_name, immediate_scan, scan_data->bg_mode, scan_data->bg_interval); @@ -354,11 +360,6 @@ void netconfig_wifi_bgscan_start_timer(const char *interface_name, gboolean imme netconfig_start_timer_seconds(scan_data->bg_interval, __wifi_bgscan_next_scan, scan_data, &(scan_data->bg_timer_id)); - if (scan_data->bg_mode == WIFI_BGSCAN_MODE_EXPONENTIAL && immediate_scan) { - scan_data->bg_interval = scan_data->bg_interval * 2; - if (scan_data->bg_interval > SCAN_EXPONENTIAL_MAX) - scan_data->bg_interval = SCAN_EXPONENTIAL_MAX; - } } void netconfig_wifi_bgscan_stop_timer(const char *interface_name) diff --git a/src/wifi-state.c b/src/wifi-state.c index 52db93b..eee4fb0 100755 --- a/src/wifi-state.c +++ b/src/wifi-state.c @@ -799,6 +799,11 @@ void wifi_state_set_service_state(const char *interface_name, netconfig_wifi_bgscan_stop(interface_name); netconfig_wifi_bgscan_start(interface_name, TRUE); + } else if (old_state == NETCONFIG_WIFI_FAILURE && new_state == NETCONFIG_WIFI_IDLE) { + DBG("reset the bg scan period, in failure case"); + netconfig_wifi_bgscan_stop(interface_name); + netconfig_wifi_bgscan_set_interval(interface_name, SCAN_EXPONENTIAL_MIN); + netconfig_wifi_bgscan_start(interface_name, FALSE); } _wifi_state_changed(interface_name, new_state); -- 2.7.4