Implement getting the wireless ESSID

This adds a dependency for libiw
This commit is contained in:
Michael Stapelberg 2009-10-01 17:43:32 +02:00
parent cdb450376e
commit b2292e770e
3 changed files with 23 additions and 3 deletions

View File

@ -10,6 +10,7 @@ VERSION=$(shell git describe --tags --abbrev=0)
ifeq ($(shell uname),Linux) ifeq ($(shell uname),Linux)
CFLAGS+=-DLINUX CFLAGS+=-DLINUX
CFLAGS+=-D_GNU_SOURCE CFLAGS+=-D_GNU_SOURCE
LDFLAGS+=-liw
endif endif
ifeq ($(shell uname),GNU/kFreeBSD) ifeq ($(shell uname),GNU/kFreeBSD)

2
debian/control vendored
View File

@ -3,7 +3,7 @@ Section: utils
Priority: extra Priority: extra
Maintainer: Michael Stapelberg <michael@stapelberg.de> Maintainer: Michael Stapelberg <michael@stapelberg.de>
DM-Upload-Allowed: yes DM-Upload-Allowed: yes
Build-Depends: debhelper (>= 5) Build-Depends: debhelper (>= 5), libiw-dev
Standards-Version: 3.8.2 Standards-Version: 3.8.2
Homepage: http://i3.zekjur.net/i3status Homepage: http://i3.zekjur.net/i3status

View File

@ -4,9 +4,28 @@
#include <string.h> #include <string.h>
#include <ctype.h> #include <ctype.h>
#include <limits.h> #include <limits.h>
#include <iwlib.h>
#include "i3status.h" #include "i3status.h"
const char *get_wireless_essid() {
static char part[512];
#ifdef LINUX
int skfd;
if ((skfd = iw_sockets_open()) < 0) {
perror("socket");
exit(-1);
}
struct wireless_config cfg;
if (iw_get_basic_config(skfd, wlan_interface, &cfg) >= 0)
snprintf(part, sizeof(part), "%s", cfg.essid);
else part[0] = '\0';
#else
part[0] = '\0';
#endif
return part;
}
/* /*
* Just parses /proc/net/wireless looking for lines beginning with * Just parses /proc/net/wireless looking for lines beginning with
* wlan_interface, extracting the quality of the link and adding the * wlan_interface, extracting the quality of the link and adding the
@ -34,8 +53,8 @@ const char *get_wireless_info() {
continue; continue;
if ((quality == UCHAR_MAX) || (quality == 0)) { if ((quality == UCHAR_MAX) || (quality == 0)) {
(void)snprintf(part, sizeof(part), "%sW: down%s", color("#FF0000"), endcolor()); (void)snprintf(part, sizeof(part), "%sW: down%s", color("#FF0000"), endcolor());
} else (void)snprintf(part, sizeof(part), "%sW: (%03d%%) %s%s", } else (void)snprintf(part, sizeof(part), "%sW: (%03d%% at %s) %s%s",
color("#00FF00"), quality, get_ip_addr(wlan_interface), endcolor()); color("#00FF00"), quality, get_wireless_essid(), get_ip_addr(wlan_interface), endcolor());
return part; return part;
} }