utils: add helper functions to get names by values

Some defines/enums use bits, while some functions only set a single one.
Make it less painful to get to a name for those.

This avoids hardcoding bit lists for consumers.

Signed-off-by: Andre Heider <a.heider@gmail.com>
This commit is contained in:
Andre Heider 2022-11-22 09:45:23 +01:00 committed by Jo-Philipp Wich
parent d09a77a369
commit e084781afc
2 changed files with 41 additions and 0 deletions

View file

@ -43,6 +43,9 @@ static inline int iwinfo_mbm2dbm(int gain)
return gain / 100; return gain / 100;
} }
const char * const iwinfo_band_name(int mask);
const char * const iwinfo_htmode_name(int mask);
size_t iwinfo_format_hwmodes(int modes, char *buf, size_t len); size_t iwinfo_format_hwmodes(int modes, char *buf, size_t len);
int iwinfo_htmode_is_ht(int htmode); int iwinfo_htmode_is_ht(int htmode);
int iwinfo_htmode_is_vht(int htmode); int iwinfo_htmode_is_vht(int htmode);

View file

@ -77,6 +77,44 @@ int iwinfo_mw2dbm(int in)
return (int)res; 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) 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 // bit numbers as per IWINFO_80211_*: ad ac ax a b g n