From: Avraham Stern <avraham.stern@xxxxxxxxx> 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@xxxxxxxxx> --- src/utils/common.c | 22 ++++++++++++++++++++++ src/utils/common.h | 1 + wpa_supplicant/rrm.c | 16 +--------------- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/utils/common.c b/src/utils/common.c index 04a533a..0c69e44 100644 --- a/src/utils/common.c +++ b/src/utils/common.c @@ -1200,3 +1200,25 @@ int str_starts(const char *str, const char *start) { 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 */ + else if (rssi < -110) + return 0; + else if (rssi > 0) + return 220; + else + return (rssi + 110) * 2; +} diff --git a/src/utils/common.h b/src/utils/common.h index 7785677..8842864 100644 --- a/src/utils/common.h +++ b/src/utils/common.h @@ -552,6 +552,7 @@ int is_ctrl_char(char c); 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 diff --git a/wpa_supplicant/rrm.c b/wpa_supplicant/rrm.c index 696dd26..3f35ace 100644 --- a/wpa_supplicant/rrm.c +++ b/wpa_supplicant/rrm.c @@ -597,21 +597,7 @@ void wpas_rrm_handle_link_measurement_request(struct wpa_supplicant *wpa_s, report.tpc.len = 2; report.rsni = 255; /* 255 indicates that RSNI is not available */ report.dialog_token = req->dialog_token; - - /* - * 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; + report.rcpi = rssi_to_rcpi(rssi); /* action_category + action_code */ buf = wpabuf_alloc(2 + sizeof(report)); -- 1.9.1 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap