From 73fdafb5d3ebb8676bcf9fbfd7b815801cfe93a1 Mon Sep 17 00:00:00 2001 From: grisha Date: Wed, 15 Jul 2026 16:15:09 +0200 Subject: [PATCH 1/2] use nmcli implementation for calculating signal strength --- src/modules/network.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/modules/network.cpp b/src/modules/network.cpp index d3adfbe59..003d3bc0a 100644 --- a/src/modules/network.cpp +++ b/src/modules/network.cpp @@ -1067,18 +1067,18 @@ void waybar::modules::Network::parseSignal(struct nlattr** bss) { if (bss[NL80211_BSS_SIGNAL_MBM] != nullptr) { // signalstrength in dBm from mBm signal_strength_dbm_ = nla_get_s32(bss[NL80211_BSS_SIGNAL_MBM]) / 100; - // WiFi-hardware usually operates in the range -90 to -30dBm. - - // If a signal is too strong, it can overwhelm receiving circuity that is designed - // to pick up and process a certain signal level. The following percentage is scaled to - // punish signals that are too strong (>= -45dBm) or too weak (<= -45 dBm). - const int hardwareOptimum = -45; - const int hardwareMin = -90; - const int strength = - 100 - - ((abs(signal_strength_dbm_ - hardwareOptimum) / double{hardwareOptimum - hardwareMin}) * - 100); - signal_strength_ = std::clamp(strength, 0, 100); + + + // uses nmcli implementation for calculating strength + // https://github.com/NetworkManager/NetworkManager/blob/23ffa5fc6e7acbd7a96138c6c18f478f5127177d/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c#L411 + + const int noise_floor_dbm = -90; + const int signal_max_dbm = -20; + signal_strength_dbm_ = CLAMP(signal_strength_dbm_, noise_floor_dbm, signal_max_dbm); + signal_strength_ = 100 + - (70 + * (((float) signal_max_dbm - (float) signal_strength_dbm_) + / ((float) signal_max_dbm - (float) noise_floor_dbm))); if (signal_strength_dbm_ >= -50) { signal_strength_app_ = "Great Connectivity"; From e60ffa4a9cd33749fdc0b2bcae982094e5435e4a Mon Sep 17 00:00:00 2001 From: grisha Date: Wed, 15 Jul 2026 22:52:46 +0200 Subject: [PATCH 2/2] clang format --- src/modules/network.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/modules/network.cpp b/src/modules/network.cpp index 003d3bc0a..6da1a5c8c 100644 --- a/src/modules/network.cpp +++ b/src/modules/network.cpp @@ -1068,17 +1068,14 @@ void waybar::modules::Network::parseSignal(struct nlattr** bss) { // signalstrength in dBm from mBm signal_strength_dbm_ = nla_get_s32(bss[NL80211_BSS_SIGNAL_MBM]) / 100; - // uses nmcli implementation for calculating strength // https://github.com/NetworkManager/NetworkManager/blob/23ffa5fc6e7acbd7a96138c6c18f478f5127177d/src/libnm-platform/wifi/nm-wifi-utils-nl80211.c#L411 const int noise_floor_dbm = -90; const int signal_max_dbm = -20; signal_strength_dbm_ = CLAMP(signal_strength_dbm_, noise_floor_dbm, signal_max_dbm); - signal_strength_ = 100 - - (70 - * (((float) signal_max_dbm - (float) signal_strength_dbm_) - / ((float) signal_max_dbm - (float) noise_floor_dbm))); + signal_strength_ = 100 - (70 * (((float)signal_max_dbm - (float)signal_strength_dbm_) / + ((float)signal_max_dbm - (float)noise_floor_dbm))); if (signal_strength_dbm_ >= -50) { signal_strength_app_ = "Great Connectivity";