From 8e3e46c6eb29f8ca8b3d2dbc1b329e7cd54a9288 Mon Sep 17 00:00:00 2001 From: Seonah Moon Date: Thu, 28 May 2020 17:13:17 +0900 Subject: [PATCH] Sorting netlink scan result by signal strength Change-Id: I616fe6902a9ab906d2ef9b9fd052d8b19de84a09 --- src/wifi-netlink-scan.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/wifi-netlink-scan.c b/src/wifi-netlink-scan.c index c4ebca8..6ca6910 100755 --- a/src/wifi-netlink-scan.c +++ b/src/wifi-netlink-scan.c @@ -34,6 +34,20 @@ static GSList *bss_info_list = NULL; +static gint __netconfig_compare_bss_by_rssi(gconstpointer a, gconstpointer b) +{ + struct bss_scan_info_t *entry_a = (struct bss_scan_info_t *) a; + struct bss_scan_info_t *entry_b = (struct bss_scan_info_t *) b; + + if (entry_a->signal > entry_b->signal) + return -1; + + if (entry_a->signal < entry_b->signal) + return 1; + + return 0; +} + void __netconfig_notify_netlink_scan_done(void) { GVariantBuilder *builder = NULL; @@ -48,6 +62,8 @@ void __netconfig_notify_netlink_scan_done(void) const char *prop_sec = "security"; const char *prop_enc = "encryption"; + bss_info_list = g_slist_sort(bss_info_list, __netconfig_compare_bss_by_rssi); + builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}")); for (list = bss_info_list; list != NULL; list = list->next) { struct bss_scan_info_t *bss_info = (struct bss_scan_info_t *)list->data; -- 2.34.1