From d443c136ed9800b55799c5b69ff0b3ff7fad3a5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Wed, 4 Mar 2015 13:46:28 +0100 Subject: [PATCH] wpa_supplicant: report quality value Issue #1439. --- .../src/lib/wpa_supplicant/reporter.cc | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/repos/dde_linux/src/lib/wpa_supplicant/reporter.cc b/repos/dde_linux/src/lib/wpa_supplicant/reporter.cc index 44af972c2..87bd4130e 100644 --- a/repos/dde_linux/src/lib/wpa_supplicant/reporter.cc +++ b/repos/dde_linux/src/lib/wpa_supplicant/reporter.cc @@ -90,6 +90,23 @@ extern "C" void wpa_report_disconnect_event(struct wpa_supplicant *wpa_s) } +static inline int approximate_quality(struct wpa_bss *bss) +{ + /* + * We provide an quality value by transforming the actual + * signal level [-50,-100] (dBm) to [100,0] (%). + */ + int level = bss->level; + + if (level <= -100) + return 0; + else if (level >= -50) + return 100; + + return 2 * (level + 100); +} + + extern "C" void wpa_report_scan_results(struct wpa_supplicant *wpa_s) { accesspoints_reporter.enabled(true); @@ -107,9 +124,12 @@ extern "C" void wpa_report_scan_results(struct wpa_supplicant *wpa_s) Genode::String ssid((char const*)bss->ssid, bss->ssid_len); + int quality = approximate_quality(bss); + xml.node("accesspoint", [&]() { xml.attribute("ssid", ssid.string()); xml.attribute("bssid", bssid_buf); + xml.attribute("quality", quality); /* XXX we forcefully only support WPA/WPA2 psk for now */ if (wpa || wpa2)