--- components/wifi.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/components/wifi.c b/components/wifi.c index 4543d32..dffb0df 100644 --- a/components/wifi.c +++ b/components/wifi.c @@ -9,10 +9,13 @@ #include "../slstatus.h" #include "../util.h" -#define RSSI_TO_PERC(rssi) \ - rssi >= -50 ? 100 : \ - (rssi <= -100 ? 0 : \ - (2 * (rssi + 100))) +static inline int +RSSI_TO_PERC(int rssi) +{ + static const int best = -20, worst = -85, delta = best-worst, square = delta*delta; + int q = (100*square-(best-rssi)*(15*delta+62*(best-rssi)))/square; + return q > 100 ? 100 : (q < 0 ? 0 : q); +} #if defined(__linux__) #include <limits.h> -- 2.44.2