From 87529770f6494189f3f21252c3a83d708f1faacf Mon Sep 17 00:00:00 2001 From: Andre Heider Date: Mon, 21 Nov 2022 17:27:20 +0100 Subject: utils: add and use iwinfo_format_hwmodes() Unify how hwmodes are displayed, e.g.: "802.11ac/ax/b/g/n" instead of "802.11bgnacax". Luci currently uses a natural sort order, but that probably doesn't work as intended once "be" is added, so let's do this here. Signed-off-by: Andre Heider --- iwinfo_utils.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'iwinfo_utils.c') diff --git a/iwinfo_utils.c b/iwinfo_utils.c index c15b305..63ae78c 100644 --- a/iwinfo_utils.c +++ b/iwinfo_utils.c @@ -77,6 +77,31 @@ int iwinfo_mw2dbm(int in) return (int)res; } +size_t iwinfo_format_hwmodes(int modes, char *buf, size_t len) +{ + // bit numbers as per IWINFO_80211_*: ad ac ax a b g n + const int order[IWINFO_80211_COUNT] = { 5, 4, 6, 0, 1, 2, 3 }; + size_t res = 0; + int i; + + *buf = 0; + + if (!(modes & ((1 << IWINFO_80211_COUNT) - 1))) + return 0; + + for (i = 0; i < IWINFO_80211_COUNT; i++) + if (modes & 1 << order[i]) + res += snprintf(buf + res, len - res, "%s/", IWINFO_80211_NAMES[order[i]]); + + if (res > 0) + { + res--; + buf[res] = 0; + } + + return res; +} + int iwinfo_ifup(const char *ifname) { struct ifreq ifr; -- cgit v1.2.1