X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Fiwinfo%2Fsrc%2Fiwinfo_wl.c;h=8519dbc561bd1b1f6eab5647179a5b485e0de5b2;hp=37f4de14aceb1f52af26e5f625707bc21138ee44;hb=e66ab6bd2ca3bf51f6951e9b293b7742cd1a86a1;hpb=87460e8a05faef9c4bb2c68735eef4f5c5ac15d0 diff --git a/libs/iwinfo/src/iwinfo_wl.c b/libs/iwinfo/src/iwinfo_wl.c index 37f4de14a..8519dbc56 100644 --- a/libs/iwinfo/src/iwinfo_wl.c +++ b/libs/iwinfo/src/iwinfo_wl.c @@ -128,13 +128,18 @@ int wl_get_channel(const char *ifname, int *buf) return wl_ioctl(ifname, WLC_GET_CHANNEL, buf, sizeof(buf)); } +int wl_get_frequency(const char *ifname, int *buf) +{ + return wext_get_frequency(ifname, buf); +} + int wl_get_bitrate(const char *ifname, int *buf) { int ret = -1; int rate = 0; if( !(ret = wl_ioctl(ifname, WLC_GET_RATE, &rate, sizeof(rate))) && (rate > 0)) - *buf = rate / 2; + *buf = ((rate / 2) * 1000) + ((rate & 1) ? 500 : 0); return ret; } @@ -152,16 +157,14 @@ int wl_get_signal(const char *ifname, int *buf) wl_ioctl(ifname, WLC_GET_BSS_INFO, tmp, WLC_IOCTL_MAXLEN); - rssi = 0; - rssi_count = 0; - if( !wl_ioctl(ifname, WLC_GET_AP, &ap, sizeof(ap)) && !ap ) { - rssi = tmp[WL_BSS_RSSI_OFFSET]; - rssi_count = 1; + *buf = tmp[WL_BSS_RSSI_OFFSET]; } else { + rssi = rssi_count = 0; + /* Calculate average rssi from conntected stations */ if( (macs = wl_read_assoclist(ifname)) != NULL ) { @@ -171,16 +174,16 @@ int wl_get_signal(const char *ifname, int *buf) if( !wl_ioctl(ifname, WLC_GET_RSSI, &starssi, 12) ) { - rssi += starssi.rssi; + rssi -= starssi.rssi; rssi_count++; } } free(macs); } - } - *buf = (rssi == 0 || rssi_count == 0) ? 1 : (rssi / rssi_count); + *buf = (rssi == 0 || rssi_count == 0) ? 1 : -(rssi / rssi_count); + } return 0; } @@ -363,3 +366,43 @@ int wl_get_assoclist(const char *ifname, char *buf, int *len) return -1; } +int wl_get_txpwrlist(const char *ifname, char *buf, int *len) +{ + struct iwinfo_txpwrlist_entry entry; + uint8_t dbm[8] = { 0, 6, 8, 10, 12, 14, 16, 18 }; + uint8_t mw[8] = { 1, 3, 6, 10, 15, 25, 39, 63 }; + int i; + + for( i = 0; i < 8; i++ ) + { + entry.dbm = dbm[i]; + entry.mw = mw[i]; + memcpy(&buf[i*sizeof(entry)], &entry, sizeof(entry)); + } + + *len = 8 * sizeof(entry); + return 0; +} + +int wl_get_scanlist(const char *ifname, char *buf, int *len) +{ + return wext_get_scanlist(ifname, buf, len); +} + +int wl_get_mbssid_support(const char *ifname, int *buf) +{ + wlc_rev_info_t revinfo; + + /* Multi bssid support only works on corerev >= 9 */ + if( !wl_ioctl(ifname, WLC_GET_REVINFO, &revinfo, sizeof(revinfo)) ) + { + if( revinfo.corerev >= 9 ) + { + *buf = 1; + return 0; + } + } + + return -1; +} +