diff options
Diffstat (limited to 'iwinfo_utils.c')
-rw-r--r-- | iwinfo_utils.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/iwinfo_utils.c b/iwinfo_utils.c index c7713ed..83f049a 100644 --- a/iwinfo_utils.c +++ b/iwinfo_utils.c @@ -77,6 +77,44 @@ int iwinfo_mw2dbm(int in) return (int)res; } +static int iwinfo_bit(int value, int max) +{ + int i; + + if (max > 31 || !(value & ((1 << max) - 1))) + return -1; + + for (i = 0; i < max; i++) + { + if (value & 1) + break; + + value >>= 1; + } + + return i; +} + +static const char * const iwinfo_name(int mask, int max, const char * const names[]) +{ + int index = iwinfo_bit(mask, max); + + if (index < 0) + return NULL; + + return names[index]; +} + +const char * const iwinfo_band_name(int mask) +{ + return iwinfo_name(mask, IWINFO_BAND_COUNT, IWINFO_BAND_NAMES); +} + +const char * const iwinfo_htmode_name(int mask) +{ + return iwinfo_name(mask, IWINFO_HTMODE_COUNT, IWINFO_HTMODE_NAMES); +} + 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 |