From f4c73ae6408a4a6b385cb56be10106dfed21bb3f Mon Sep 17 00:00:00 2001 From: Eyal Shapira Date: Thu, 19 Dec 2013 12:03:30 +0200 Subject: [PATCH] bgscan_learn: Fix initial interval In case the initial signal level of the associated BSS was above the given threshold, bgscan_learn module would begin using the short_interval but never switch to the long_interval as there would be no signal change event. Make the init code poll for the current signal level and set scan_interval accordingly. This logic exists in bgscan_simple but was missing in bgscan_learn. Signed-hostap: Eyal Shapira --- wpa_supplicant/bgscan_learn.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/wpa_supplicant/bgscan_learn.c b/wpa_supplicant/bgscan_learn.c index 92ec55c6d..6fd81c282 100644 --- a/wpa_supplicant/bgscan_learn.c +++ b/wpa_supplicant/bgscan_learn.c @@ -422,6 +422,14 @@ static void * bgscan_learn_init(struct wpa_supplicant *wpa_s, data->supp_freqs = bgscan_learn_get_supp_freqs(wpa_s); data->scan_interval = data->short_interval; + if (data->signal_threshold) { + /* Poll for signal info to set initial scan interval */ + struct wpa_signal_info siginfo; + if (wpa_drv_signal_poll(wpa_s, &siginfo) == 0 && + siginfo.current_signal >= data->signal_threshold) + data->scan_interval = data->long_interval; + } + eloop_register_timeout(data->scan_interval, 0, bgscan_learn_timeout, data, NULL);