[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