From 5e3ddf4d23012483f9817f5602e09b671a98e01b Mon Sep 17 00:00:00 2001 From: Alexander Bondar Date: Wed, 26 Feb 2014 08:04:11 +0200 Subject: [PATCH] PNO: Change sched_scan_stopped event to handle pending PNO properly When a sched_scan_stopped event is received and there is a pending PNO, it used regular scheduled scan parameters instead of PNO specific parameters. Change it by calling wpas_start_pno(). Signed-off-by: Alexander Bondar Signed-off-by: Ilan Peer --- wpa_supplicant/events.c | 14 +++++--------- wpa_supplicant/scan.c | 14 ++++++++++---- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c index 8f28f8095..e82458345 100644 --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c @@ -3379,15 +3379,11 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event, * Start a new sched scan to continue searching for more SSIDs * either if timed out or PNO schedule scan is pending. */ - if (wpa_s->sched_scan_timed_out || wpa_s->pno_sched_pending) { - - if (wpa_supplicant_req_sched_scan(wpa_s) < 0 && - wpa_s->pno_sched_pending) { - wpa_msg(wpa_s, MSG_ERROR, "Failed to schedule PNO"); - } else if (wpa_s->pno_sched_pending) { - wpa_s->pno_sched_pending = 0; - wpa_s->pno = 1; - } + if (wpa_s->sched_scan_timed_out) { + wpa_supplicant_req_sched_scan(wpa_s); + } else if (wpa_s->pno_sched_pending) { + wpa_s->pno_sched_pending = 0; + wpas_start_pno(wpa_s); } break; diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c index d44e4494b..8e35fcc3c 100644 --- a/wpa_supplicant/scan.c +++ b/wpa_supplicant/scan.c @@ -1822,6 +1822,9 @@ int wpas_start_pno(struct wpa_supplicant *wpa_s) struct wpa_ssid *ssid; struct wpa_driver_scan_params params; + if (!wpa_s->sched_scan_supported) + return -1; + if (wpa_s->pno || wpa_s->pno_sched_pending) return 0; @@ -1894,6 +1897,8 @@ int wpas_start_pno(struct wpa_supplicant *wpa_s) os_free(params.filter_ssids); if (ret == 0) wpa_s->pno = 1; + else + wpa_msg(wpa_s, MSG_ERROR, "Failed to schedule PNO"); return ret; } @@ -1902,11 +1907,12 @@ int wpas_stop_pno(struct wpa_supplicant *wpa_s) { int ret = 0; - if (wpa_s->pno || wpa_s->sched_scanning) { - wpa_s->pno = 0; - ret = wpa_supplicant_stop_sched_scan(wpa_s); - } + if (!wpa_s->pno) + return 0; + ret = wpa_supplicant_stop_sched_scan(wpa_s); + + wpa_s->pno = 0; wpa_s->pno_sched_pending = 0; if (wpa_s->wpa_state == WPA_SCANNING)