DA: Modify backgeround scan routine 50/283650/1
authorJaehyun Kim <jeik01.kim@samsung.com>
Tue, 1 Nov 2022 02:56:08 +0000 (11:56 +0900)
committerJaehyun Kim <jeik01.kim@samsung.com>
Tue, 1 Nov 2022 02:56:08 +0000 (11:56 +0900)
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 <jeik01.kim@samsung.com>
src/wifi-scan.c
src/wifi-state.c

index 0f8738f..c8669bd 100755 (executable)
@@ -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)
index 52db93b..eee4fb0 100755 (executable)
@@ -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);