From 7a590b011333456f18af881be5577caa6dc74e67 Mon Sep 17 00:00:00 2001 From: chirag-silabs Date: Fri, 14 Feb 2025 12:28:09 +0530 Subject: [PATCH 1/5] adding inline function for the rssi calculation --- .../silabs/wifi/wf200/WifiInterfaceImpl.cpp | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp b/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp index 11ce99b088e72d..b4629c418b2fdb 100644 --- a/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp +++ b/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp @@ -284,6 +284,23 @@ sl_status_t get_all_counters(void) return result; } +/** + * @brief Convert RCPI to RSSI + * This function converts the Received Channel Power Indicator (RCPI) value to + * the Received Signal Strength Indicator (RSSI) value. If the result of the + * conversion exceeds the range of int16_t, it will be clamped to the maximum + * or minimum value of int16_t. + * @param[in] rcpi: Received Channel Power Indicator value + * @return RSSI value + */ +inline int16_t ConvertRcpiToRssi(uint32_t rcpi) +{ + int64_t rssi = (rcpi / 2) - 110; + // Checking for overflows + VerifyOrReturnValue(rssi < std::numeric_limits::max(), std::numeric_limits::max()); + VerifyOrReturnValue(rssi > std::numeric_limits::min(), std::numeric_limits::min()); + return rssi; +} } // namespace CHIP_ERROR GetMacAddress(sl_wfx_interface_t interface, MutableByteSpan & address) @@ -404,7 +421,7 @@ CHIP_ERROR GetAccessPointInfo(wfx_wifi_scan_result_t & info) sl_status_t status = sl_wfx_get_signal_strength(&signal_strength); VerifyOrReturnError(status == SL_STATUS_OK, CHIP_ERROR_INTERNAL); - info.rssi = (signal_strength - 220) / 2; + info.rssi = ConvertRcpiToRssi(signal_strength); ChipLogDetail(DeviceLayer, "WIFI:SSID : %s", ap_info.ssid); ChipLogDetail(DeviceLayer, "WIFI:BSSID : %02x:%02x:%02x:%02x:%02x:%02x", ap_info.bssid[0], ap_info.bssid[1], @@ -569,7 +586,7 @@ static void sl_wfx_scan_result_callback(sl_wfx_scan_result_ind_body_t * scan_res { ChipLogDetail(DeviceLayer, "# %2d %2d %03d %02X:%02X:%02X:%02X:%02X:%02X %s", scan_count, scan_result->channel, - ((int16_t) (scan_result->rcpi - 220) / 2), scan_result->mac[0], scan_result->mac[1], scan_result->mac[2], + (ConvertRcpiToRssi(scan_result->rcpi)), scan_result->mac[0], scan_result->mac[1], scan_result->mac[2], scan_result->mac[3], scan_result->mac[4], scan_result->mac[5], scan_result->ssid_def.ssid); chip::ByteSpan requestedSsid(scan_ssid, scan_ssid_length); @@ -614,7 +631,7 @@ static void sl_wfx_scan_result_callback(sl_wfx_scan_result_ind_body_t * scan_res } ap->scan.chan = scan_result->channel; - ap->scan.rssi = (scan_result->rcpi - 220) / 2; + ap->scan.rssi = ConvertRcpiToRssi(scan_result->rcpi); chip::ByteSpan scannedBssid(scan_result->mac, kWifiMacAddressLength); chip::MutableByteSpan outputBssid(ap->scan.bssid, kWifiMacAddressLength); From df1a92b22c093f366d20f3557ab4be300fa6b59f Mon Sep 17 00:00:00 2001 From: chirag-silabs <100861685+chirag-silabs@users.noreply.github.com> Date: Mon, 17 Feb 2025 20:14:29 +0530 Subject: [PATCH 2/5] Update src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp Co-authored-by: Mathieu Kardous <84793247+mkardous-silabs@users.noreply.github.com> --- src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp b/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp index b4629c418b2fdb..ff0aaa63f04553 100644 --- a/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp +++ b/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp @@ -297,7 +297,7 @@ inline int16_t ConvertRcpiToRssi(uint32_t rcpi) { int64_t rssi = (rcpi / 2) - 110; // Checking for overflows - VerifyOrReturnValue(rssi < std::numeric_limits::max(), std::numeric_limits::max()); + VerifyOrReturnValue(rssi <= std::numeric_limits::max(), std::numeric_limits::max()); VerifyOrReturnValue(rssi > std::numeric_limits::min(), std::numeric_limits::min()); return rssi; } From 0a761d028ce1ef18df6b968935f769d911de42d9 Mon Sep 17 00:00:00 2001 From: chirag-silabs <100861685+chirag-silabs@users.noreply.github.com> Date: Mon, 17 Feb 2025 20:14:40 +0530 Subject: [PATCH 3/5] Update src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp Co-authored-by: Mathieu Kardous <84793247+mkardous-silabs@users.noreply.github.com> --- src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp b/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp index ff0aaa63f04553..b4ce4b8061ada9 100644 --- a/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp +++ b/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp @@ -298,7 +298,7 @@ inline int16_t ConvertRcpiToRssi(uint32_t rcpi) int64_t rssi = (rcpi / 2) - 110; // Checking for overflows VerifyOrReturnValue(rssi <= std::numeric_limits::max(), std::numeric_limits::max()); - VerifyOrReturnValue(rssi > std::numeric_limits::min(), std::numeric_limits::min()); + VerifyOrReturnValue(rssi >= std::numeric_limits::min(), std::numeric_limits::min()); return rssi; } } // namespace From 59b20d24698dc60eae0b3b9c9c2c87ecddd73b45 Mon Sep 17 00:00:00 2001 From: chirag-silabs <100861685+chirag-silabs@users.noreply.github.com> Date: Mon, 17 Feb 2025 20:14:59 +0530 Subject: [PATCH 4/5] Update src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp Co-authored-by: Mathieu Kardous <84793247+mkardous-silabs@users.noreply.github.com> --- src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp b/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp index b4ce4b8061ada9..8e80ead9549aee 100644 --- a/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp +++ b/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp @@ -286,11 +286,14 @@ sl_status_t get_all_counters(void) /** * @brief Convert RCPI to RSSI - * This function converts the Received Channel Power Indicator (RCPI) value to - * the Received Signal Strength Indicator (RSSI) value. If the result of the - * conversion exceeds the range of int16_t, it will be clamped to the maximum + + * This function converts the Received Channel Power Indicator (RCPI) to + * the Received Signal Strength Indicator (RSSI). If the result of the + * conversion exceeds the range of a int16_t, it will be clamped to the maximum * or minimum value of int16_t. + * @param[in] rcpi: Received Channel Power Indicator value + * @return RSSI value */ inline int16_t ConvertRcpiToRssi(uint32_t rcpi) From eb4b1f12d097ec759160d3dfef797afad4f55d48 Mon Sep 17 00:00:00 2001 From: chirag-silabs Date: Mon, 17 Feb 2025 20:19:38 +0530 Subject: [PATCH 5/5] restyling the PR --- src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp b/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp index 8e80ead9549aee..cd6eaf4e37ad87 100644 --- a/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp +++ b/src/platform/silabs/wifi/wf200/WifiInterfaceImpl.cpp @@ -286,14 +286,14 @@ sl_status_t get_all_counters(void) /** * @brief Convert RCPI to RSSI - + * This function converts the Received Channel Power Indicator (RCPI) to * the Received Signal Strength Indicator (RSSI). If the result of the * conversion exceeds the range of a int16_t, it will be clamped to the maximum * or minimum value of int16_t. - + * @param[in] rcpi: Received Channel Power Indicator value - + * @return RSSI value */ inline int16_t ConvertRcpiToRssi(uint32_t rcpi)