From 04c6c60d23b121e2aed176e1a1d8a3b8525a1599 Mon Sep 17 00:00:00 2001 From: Niraj Kumar Goit Date: Thu, 16 May 2019 11:34:40 +0530 Subject: Refactoring of scan for stored hidden profiles. To improve scan performance, when there are hidden profiles stored in connman and user request for scan, send ScanDone signal after scanning maximum scan ssids supported by driver instead of sending signal after scanning all the stored hidden profiles. Similarly in next scan request, perform scanning (maximum scan ssids) from remaining hidden profiles and send ScanDone signal. Change-Id: I6195668c59b0a75bd0e0097ab6e6b7e3d33aae38 Signed-off-by: Niraj Kumar Goit --- plugins/wifi.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/plugins/wifi.c b/plugins/wifi.c index dfcff59c..ea71df36 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -161,6 +161,7 @@ struct wifi_data { struct connman_network *scan_pending_network; bool allow_full_scan; unsigned int automaxspeed_timeout; + GSupplicantScanParams *hidden_scan_params; #endif int disconnect_code; int assoc_code; @@ -1574,6 +1575,16 @@ static void wifi_remove(struct connman_device *device) if (wifi->scan_params) g_supplicant_free_scan_params(wifi->scan_params); +#if defined TIZEN_EXT + if (wifi->hidden_scan_params) { + while (wifi->hidden_scan_params->ssids) { + struct scan_ssid *ssid; + ssid = wifi->hidden_scan_params->ssids->data; + wifi->hidden_scan_params->ssids = g_slist_remove(wifi->hidden_scan_params->ssids, ssid); + } + g_supplicant_free_scan_params(wifi->hidden_scan_params); + } +#endif g_free(wifi->autoscan); g_free(wifi->identifier); @@ -1810,6 +1821,22 @@ static int get_hidden_connections_params(struct wifi_data *wifi, DBG("max ssids %d", driver_max_ssids); +#if defined TIZEN_EXT + if (!wifi->hidden_scan_params) { + wifi->hidden_scan_params = g_try_malloc0(sizeof(GSupplicantScanParams)); + if (!wifi->hidden_scan_params) + return 0; + + if (get_hidden_connections(wifi->hidden_scan_params) == 0) { + g_supplicant_free_scan_params(wifi->hidden_scan_params); + wifi->hidden_scan_params = NULL; + + return 0; + } + } + + orig_params = wifi->hidden_scan_params; +#else if (!wifi->scan_params) { wifi->scan_params = g_try_malloc0(sizeof(GSupplicantScanParams)); if (!wifi->scan_params) @@ -1824,12 +1851,17 @@ static int get_hidden_connections_params(struct wifi_data *wifi, } orig_params = wifi->scan_params; +#endif /* Let's transfer driver_max_ssids params */ for (i = 0; i < driver_max_ssids; i++) { struct scan_ssid *ssid; +#if defined TIZEN_EXT + if (!wifi->hidden_scan_params->ssids) +#else if (!wifi->scan_params->ssids) +#endif break; ssid = orig_params->ssids->data; @@ -1857,8 +1889,13 @@ static int get_hidden_connections_params(struct wifi_data *wifi, err: g_slist_free_full(scan_params->ssids, g_free); +#if defined TIZEN_EXT + g_supplicant_free_scan_params(wifi->hidden_scan_params); + wifi->hidden_scan_params = NULL; +#else g_supplicant_free_scan_params(wifi->scan_params); wifi->scan_params = NULL; +#endif return 0; } @@ -1968,6 +2005,13 @@ static void scan_callback(int result, GSupplicantInterface *interface, g_supplicant_free_scan_params(wifi->scan_params); wifi->scan_params = NULL; } + +#if defined TIZEN_EXT + if (wifi->hidden_scan_params && !wifi->hidden_scan_params->ssids) { + g_supplicant_free_scan_params(wifi->hidden_scan_params); + wifi->hidden_scan_params = NULL; + } +#endif } if (result < 0) @@ -2072,8 +2116,13 @@ static void scan_callback_hidden(int result, if (get_hidden_connections_params(wifi, scan_params) > 0) { ret = g_supplicant_interface_scan(wifi->interface, scan_params, +#if defined TIZEN_EXT + scan_callback, +#else scan_callback_hidden, +#endif device); + if (ret == 0) return; } -- cgit v1.2.3