[PATCH 13/15] common: Add helper function to convert RSSI to RCPI
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Wed Dec 28 05:06:45 PST 2016
From: Avraham Stern <avraham.stern at intel.com>
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 at intel.com>
---
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
More information about the Hostap
mailing list