From e18d262a894eb424bf484ede479f5d887d0404ee Mon Sep 17 00:00:00 2001 From: Sunil Ravi Date: Mon, 21 Jun 2021 19:51:28 -0700 Subject: Use a shorter wait time for p2p connect with operating frequency If supplicant is receiving the connect request with GO operating frequency, then application(caller) must be already knowing and sure that GO is operating on that frequency. So if the GO is not seen in the first scan attempt, it is not worth waiting for 1 second to trigger the next scan. It's better to finish scans quickly and report the Join failure to application. This will help applications to trigger another Join attempt with a band information or without band or frequency information. To speed up the scan, reduced the scan interval for single channel scan from 1 sec to 200 milli seconds. Bug: 191718156 Test: Manual - Triggered P2P join request with channel, band, no channel/band and verified the scan times. Change-Id: I44e22f8e3a4d7460466b3e102f2d0c92038914d1 --- wpa_supplicant/hidl/1.4/p2p_iface.cpp | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/wpa_supplicant/hidl/1.4/p2p_iface.cpp b/wpa_supplicant/hidl/1.4/p2p_iface.cpp index db8f3a4d..cabcccb6 100644 --- a/wpa_supplicant/hidl/1.4/p2p_iface.cpp +++ b/wpa_supplicant/hidl/1.4/p2p_iface.cpp @@ -26,7 +26,12 @@ extern "C" } #define P2P_MAX_JOIN_SCAN_ATTEMPTS 3 -#define P2P_JOIN_SCAN_INTERVAL_USECS 1000000 +// Wait time before triggering the single channel scan to discover Auto GO. +// Use a shorter wait time when the given frequency is GO operating frequency. +// The idea is to quickly finish scans and return the status to application. +#define P2P_JOIN_SINGLE_CHANNEL_SCAN_INTERVAL_USECS 200000 +// Wait time before triggering the multiple channel scan to discover Auto GO. +#define P2P_JOIN_MULTIPLE_CHANNEL_SCAN_INTERVAL_USECS 1000000 namespace { const char kConfigMethodStrPbc[] = "pbc"; @@ -180,6 +185,19 @@ static int setP2pCliOptimizedScanFreqsList(struct wpa_supplicant *wpa_s, return 0; } +/** + * getP2pJoinScanInterval - Get the delay in triggering the scan to discover + * Auto GO. + */ +static int getP2pJoinScanIntervalUsecs(int freq) +{ + if (freq == 5 || freq == 2 || freq == 0) { + return P2P_JOIN_MULTIPLE_CHANNEL_SCAN_INTERVAL_USECS; + } else { + return P2P_JOIN_SINGLE_CHANNEL_SCAN_INTERVAL_USECS; + } +} + /* * isAnyEtherAddr - match any ether address * @@ -1795,7 +1813,7 @@ SupplicantStatus P2pIface::addGroup_1_2Internal( } }; - pending_scan_res_join_callback = [wpa_s, ssid, passphrase, peer_address, this]() { + pending_scan_res_join_callback = [wpa_s, ssid, passphrase, peer_address, freq, this]() { if (wpa_s->global->p2p == NULL || wpa_s->global->p2p_disabled) { return; } @@ -1820,7 +1838,7 @@ SupplicantStatus P2pIface::addGroup_1_2Internal( eloop_cancel_timeout(joinScanWrapper, wpa_s, NULL); if (wpa_s->p2p_join_scan_count < P2P_MAX_JOIN_SCAN_ATTEMPTS) { wpa_printf(MSG_DEBUG, "P2P: Try join again later."); - eloop_register_timeout(0, P2P_JOIN_SCAN_INTERVAL_USECS, + eloop_register_timeout(0, getP2pJoinScanIntervalUsecs(freq), joinScanWrapper, wpa_s, this); return; } -- cgit v1.2.3