diff --git a/src/net/nl_wifi_w600.c b/src/net/nl_wifi_w600.c index cc8d6e6..03fb0f2 100644 --- a/src/net/nl_wifi_w600.c +++ b/src/net/nl_wifi_w600.c @@ -304,7 +304,9 @@ void nl_wifi_status(nl_wifi_status_t *out) ip4addr_ntoa_r(ip_2_ip4(&e->ip_addr), out->sta_ip, sizeof out->sta_ip); memset(&bss, 0, sizeof bss); tls_wifi_get_current_bss(&bss); - out->rssi = (int)(int8_t)bss.rssi; + /* W600 SDK reports RSSI magnitude as unsigned; EVK ninIOT measured ~-50 dBm as 50. + * Report negative for 0 < bss.rssi <= 127, unchanged for > 127 (already two's complement). */ + out->rssi = (bss.rssi > 0 && bss.rssi <= 127) ? -(int)bss.rssi : (int)(int8_t)bss.rssi; } if (out->sta_ip[0]) copy(out->ip, out->sta_ip, sizeof out->ip);