common: Add helper function to convert RSSI to RCPI
This conversion will be done several times in the code, so add a helper function that does this conversion. Signed-off-by: Avrahams Stern <avraham.stern@intel.com>
This commit is contained in:
parent
1ac4dba31a
commit
b3060bf99f
3 changed files with 23 additions and 15 deletions
|
@ -1200,3 +1200,24 @@ int str_starts(const char *str, const char *start)
|
||||||
{
|
{
|
||||||
return os_strncmp(str, start, os_strlen(start)) == 0;
|
return os_strncmp(str, start, os_strlen(start)) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rssi_to_rcpi - Convert RSSI to RCPI
|
||||||
|
* @rssi: RSSI to convert
|
||||||
|
* Returns: RCPI corresponding to the given RSSI value, or 255 if not available.
|
||||||
|
*
|
||||||
|
* It's possible to estimate RCPI based on RSSI in dBm. This calculation will
|
||||||
|
* not reflect the correct value for high rates, but it's good enough for Action
|
||||||
|
* frames which are transmitted with up to 24 Mbps rates.
|
||||||
|
*/
|
||||||
|
u8 rssi_to_rcpi(int rssi)
|
||||||
|
{
|
||||||
|
if (!rssi)
|
||||||
|
return 255; /* not available */
|
||||||
|
if (rssi < -110)
|
||||||
|
return 0;
|
||||||
|
if (rssi > 0)
|
||||||
|
return 220;
|
||||||
|
return (rssi + 110) * 2;
|
||||||
|
}
|
||||||
|
|
|
@ -552,6 +552,7 @@ int is_ctrl_char(char c);
|
||||||
|
|
||||||
int str_starts(const char *str, const char *start);
|
int str_starts(const char *str, const char *start);
|
||||||
|
|
||||||
|
u8 rssi_to_rcpi(int rssi);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* gcc 4.4 ends up generating strict-aliasing warnings about some very common
|
* gcc 4.4 ends up generating strict-aliasing warnings about some very common
|
||||||
|
|
|
@ -598,21 +598,7 @@ void wpas_rrm_handle_link_measurement_request(struct wpa_supplicant *wpa_s,
|
||||||
report.tpc.len = 2;
|
report.tpc.len = 2;
|
||||||
report.rsni = 255; /* 255 indicates that RSNI is not available */
|
report.rsni = 255; /* 255 indicates that RSNI is not available */
|
||||||
report.dialog_token = req->dialog_token;
|
report.dialog_token = req->dialog_token;
|
||||||
|
report.rcpi = rssi_to_rcpi(rssi);
|
||||||
/*
|
|
||||||
* It's possible to estimate RCPI based on RSSI in dBm. This
|
|
||||||
* calculation will not reflect the correct value for high rates,
|
|
||||||
* but it's good enough for Action frames which are transmitted
|
|
||||||
* with up to 24 Mbps rates.
|
|
||||||
*/
|
|
||||||
if (!rssi)
|
|
||||||
report.rcpi = 255; /* not available */
|
|
||||||
else if (rssi < -110)
|
|
||||||
report.rcpi = 0;
|
|
||||||
else if (rssi > 0)
|
|
||||||
report.rcpi = 220;
|
|
||||||
else
|
|
||||||
report.rcpi = (rssi + 110) * 2;
|
|
||||||
|
|
||||||
/* action_category + action_code */
|
/* action_category + action_code */
|
||||||
buf = wpabuf_alloc(2 + sizeof(report));
|
buf = wpabuf_alloc(2 + sizeof(report));
|
||||||
|
|
Loading…
Reference in a new issue