summaryrefslogtreecommitdiff
path: root/src/get_wireless_info.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/get_wireless_info.c')
-rw-r--r--src/get_wireless_info.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/get_wireless_info.c b/src/get_wireless_info.c
new file mode 100644
index 0000000..fd0c60b
--- /dev/null
+++ b/src/get_wireless_info.c
@@ -0,0 +1,44 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <limits.h>
+
+#include "i3status.h"
+
+/*
+ * Just parses /proc/net/wireless looking for lines beginning with
+ * wlan_interface, extracting the quality of the link and adding the
+ * current IP address of wlan_interface.
+ *
+ */
+const char *get_wireless_info() {
+ char buf[1024];
+ static char part[512];
+ char *interfaces;
+ memset(buf, 0, sizeof(buf));
+ memset(part, 0, sizeof(part));
+
+ slurp("/proc/net/wireless", buf, sizeof(buf));
+
+ interfaces = skip_character(buf, '\n', 1) + 1;
+ while ((interfaces = skip_character(interfaces, '\n', 1)+1) < buf+strlen(buf)) {
+ while (isspace((int)*interfaces))
+ interfaces++;
+ if (!BEGINS_WITH(interfaces, wlan_interface))
+ continue;
+ int quality;
+ if (sscanf(interfaces, "%*[^:]: 0000 %d", &quality) != 1)
+ continue;
+ if ((quality == UCHAR_MAX) || (quality == 0)) {
+ if (use_colors)
+ (void)snprintf(part, sizeof(part), "%sW: down", color("#FF0000"));
+ else (void)snprintf(part, sizeof(part), "W: down");
+ } else (void)snprintf(part, sizeof(part), "%sW: (%03d%%) %s",
+ color("#00FF00"), quality, get_ip_addr(wlan_interface));
+ return part;
+ }
+
+ return part;
+}
+