From 79409904b2e5757c66b3ed07091aeb259f3240db Mon Sep 17 00:00:00 2001
From: nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Fri, 11 Nov 2005 16:04:02 +0000
Subject: fix noise/signal level display (fixes #20)

git-svn-id: svn://svn.openwrt.org/openwrt/trunk/openwrt@2421 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 target/linux/package/wlcompat/wlcompat.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

(limited to 'target/linux/package')

diff --git a/target/linux/package/wlcompat/wlcompat.c b/target/linux/package/wlcompat/wlcompat.c
index 07e8db088..3baeb4317 100644
--- a/target/linux/package/wlcompat/wlcompat.c
+++ b/target/linux/package/wlcompat/wlcompat.c
@@ -225,7 +225,7 @@ struct iw_statistics *wlcompat_get_wireless_stats(struct net_device *dev)
 {
 	wl_bss_info_t *bss_info = (wl_bss_info_t *) buf;
 	get_pktcnt_t pkt;
-	int rssi, noise;
+	int rssi, noise, ap;
 	
 	memset(&wstats, 0, sizeof(wstats));
 	memset(&pkt, 0, sizeof(pkt));
@@ -234,12 +234,18 @@ struct iw_statistics *wlcompat_get_wireless_stats(struct net_device *dev)
 	wl_ioctl(dev, WLC_GET_BSS_INFO, bss_info, WLC_IOCTL_MAXLEN);
 	wl_ioctl(dev, WLC_GET_PKTCNTS, &pkt, sizeof(pkt));
 
-	// somehow the structure doesn't fit here
-	noise = buf[0x50];
-	rssi = buf[0x52];
+	wl_ioctl(dev, WLC_GET_AP, &ap, sizeof(ap));
+	if (!ap) {
+		// somehow the structure doesn't fit here
+		rssi = buf[82];
+		noise = buf[84];
+	} else {
+		noise = 0;
+		rssi = 0;
+	}
 
 	wstats.qual.level = rssi;
-	wstats.qual.noise = -100 + noise;
+	wstats.qual.noise = noise;
 	wstats.discard.misc = pkt.rx_bad_pkt;
 	wstats.discard.retries = pkt.tx_bad_pkt;
 
-- 
cgit v1.2.3