Introduction
Introduction Statistics Contact Development Disclaimer Help
tPut code for wifi in a separate file - spoon - dwm status utility (2f30 fork)
git clone git://src.adamsgaard.dk/spoon
Log
Files
Refs
LICENSE
---
commit 969ca7f8b748dc1a14d35bc8c906864e6ef771f6
parent 306dc969538f7ccee7e607f6781d647606076883
Author: lostd <[email protected]>
Date: Wed, 12 Oct 2016 23:14:38 +0100
Put code for wifi in a separate file
Diffstat:
M Makefile | 4 ++--
M spoon.c | 93 -----------------------------…
A wifi.c | 112 +++++++++++++++++++++++++++++…
3 files changed, 114 insertions(+), 95 deletions(-)
---
diff --git a/Makefile b/Makefile
t@@ -3,9 +3,9 @@ PREFIX = /usr/local
CPPFLAGS = -I/usr/X11R6/include -I/usr/local/include
LDFLAGS = -L/usr/X11R6/lib -L/usr/local/lib
LDLIBS = -lxkbfile -lX11 -lmpdclient
-DISTFILES = spoon.c batt.c strlcpy.c strlcat.c util.h config.def.h\
+DISTFILES = spoon.c batt.c wifi.c strlcpy.c strlcat.c util.h config.def.h\
Makefile LICENSE
-OBJ = spoon.o batt.o strlcpy.o strlcat.o
+OBJ = spoon.o batt.o wifi.o strlcpy.o strlcat.o
BIN = spoon
# Linux
diff --git a/spoon.c b/spoon.c
t@@ -89,20 +89,13 @@ out:
}
#ifdef __OpenBSD__
-#include <sys/socket.h>
#include <sys/select.h>
#include <sys/sysctl.h>
#include <sys/sensors.h>
#include <sys/ioctl.h>
#include <sys/audioio.h>
-#include <net/if.h>
-#include <net/if_media.h>
-#include <net80211/ieee80211.h>
-#include <net80211/ieee80211_ioctl.h>
-
#include <fcntl.h>
-#include <ifaddrs.h>
#include <limits.h>
int
t@@ -194,86 +187,6 @@ out:
close(fd);
return ret;
}
-
-int
-wifiread(char *buf, size_t len)
-{
- struct ifaddrs *ifa, *ifas;
- struct ifmediareq ifmr;
- struct ieee80211_nodereq nr;
- struct ieee80211_bssid bssid;
- int s, ibssid, quality;
- char *icon;
-
- if (getifaddrs(&ifas) < 0) {
- warn("getifaddrs");
- return -1;
- }
- for (ifa = ifas; ifa; ifa = ifa->ifa_next) {
- s = socket(AF_INET, SOCK_DGRAM, 0);
- if (s < 0) {
- warn("socket");
- continue;
- }
- memset(&ifmr, 0, sizeof(ifmr));
- strlcpy(ifmr.ifm_name, ifa->ifa_name, IF_NAMESIZE);
- if (ioctl(s, SIOCGIFMEDIA, (caddr_t)&ifmr) < 0) {
- close(s);
- continue;
- }
- if ((ifmr.ifm_active & IFM_IEEE80211) == 0) {
- close(s);
- continue;
- }
- if ((ifmr.ifm_active & IFM_IEEE80211_HOSTAP) != 0) {
- close(s);
- continue;
- }
- memset(&bssid, 0, sizeof(bssid));
- strlcpy(bssid.i_name, ifa->ifa_name, sizeof(bssid.i_name));
- ibssid = ioctl(s, SIOCG80211BSSID, &bssid);
- if (ibssid < 0) {
- close(s);
- continue;
- }
- memset(&nr, 0, sizeof(nr));
- memcpy(&nr.nr_macaddr, bssid.i_bssid, sizeof(nr.nr_macaddr));
- strlcpy(nr.nr_ifname, ifa->ifa_name, sizeof(nr.nr_ifname));
- if (ioctl(s, SIOCG80211NODE, &nr) < 0) {
- close(s);
- continue;
- }
- close(s);
- if (nr.nr_rssi == 0)
- continue;
- if (nr.nr_max_rssi == 0) {
- if (nr.nr_rssi <= -100)
- quality = 0;
- else if (nr.nr_rssi >= -50)
- quality = 100;
- else
- quality = 2 * (nr.nr_rssi + 100);
- } else {
- quality = IEEE80211_NODEREQ_RSSI(&nr);
- }
- if (quality == 100)
- icon = "::";
- else if (quality >= 75)
- icon = ":.";
- else if (quality >= 50)
- icon = "..";
- else if (quality >= 25)
- icon = ". ";
- else
- icon = " ";
- snprintf(buf, len, "%s", icon);
- break;
- }
- freeifaddrs(ifas);
- if (ifa)
- return 0;
- return -1;
-}
#else
int
cpuread(char *buf, size_t len)
t@@ -292,12 +205,6 @@ mixread(char *buf, size_t len)
{
return -1;
}
-
-int
-wifiread(char *buf, size_t len)
-{
- return -1;
-}
#endif
int
diff --git a/wifi.c b/wifi.c
t@@ -0,0 +1,112 @@
+#include <stddef.h>
+#include <stdio.h>
+
+static void
+wifiprint(char *buf, size_t len, int quality)
+{
+ char *icon;
+
+ if (quality == 100)
+ icon = "::";
+ else if (quality >= 75)
+ icon = ":.";
+ else if (quality >= 50)
+ icon = "..";
+ else if (quality >= 25)
+ icon = ". ";
+ else
+ icon = " ";
+ snprintf(buf, len, "%s", icon);
+}
+
+#ifdef __OpenBSD__
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+
+#include <net/if.h>
+#include <net/if_media.h>
+#include <net80211/ieee80211.h>
+#include <net80211/ieee80211_ioctl.h>
+
+#include <err.h>
+#include <ifaddrs.h>
+#include <string.h>
+#include <unistd.h>
+
+int
+wifiread(char *buf, size_t len)
+{
+ struct ifaddrs *ifa, *ifas;
+ struct ifmediareq ifmr;
+ struct ieee80211_nodereq nr;
+ struct ieee80211_bssid bssid;
+ int s, ibssid, quality;
+ char *icon;
+
+ if (getifaddrs(&ifas) < 0) {
+ warn("getifaddrs");
+ return -1;
+ }
+ for (ifa = ifas; ifa; ifa = ifa->ifa_next) {
+ s = socket(AF_INET, SOCK_DGRAM, 0);
+ if (s < 0) {
+ warn("socket");
+ continue;
+ }
+ memset(&ifmr, 0, sizeof(ifmr));
+ strlcpy(ifmr.ifm_name, ifa->ifa_name, IF_NAMESIZE);
+ if (ioctl(s, SIOCGIFMEDIA, (caddr_t)&ifmr) < 0) {
+ close(s);
+ continue;
+ }
+ if ((ifmr.ifm_active & IFM_IEEE80211) == 0) {
+ close(s);
+ continue;
+ }
+ if ((ifmr.ifm_active & IFM_IEEE80211_HOSTAP) != 0) {
+ close(s);
+ continue;
+ }
+ memset(&bssid, 0, sizeof(bssid));
+ strlcpy(bssid.i_name, ifa->ifa_name, sizeof(bssid.i_name));
+ ibssid = ioctl(s, SIOCG80211BSSID, &bssid);
+ if (ibssid < 0) {
+ close(s);
+ continue;
+ }
+ memset(&nr, 0, sizeof(nr));
+ memcpy(&nr.nr_macaddr, bssid.i_bssid, sizeof(nr.nr_macaddr));
+ strlcpy(nr.nr_ifname, ifa->ifa_name, sizeof(nr.nr_ifname));
+ if (ioctl(s, SIOCG80211NODE, &nr) < 0) {
+ close(s);
+ continue;
+ }
+ close(s);
+ if (nr.nr_rssi == 0)
+ continue;
+ if (nr.nr_max_rssi == 0) {
+ if (nr.nr_rssi <= -100)
+ quality = 0;
+ else if (nr.nr_rssi >= -50)
+ quality = 100;
+ else
+ quality = 2 * (nr.nr_rssi + 100);
+ } else {
+ quality = IEEE80211_NODEREQ_RSSI(&nr);
+ }
+ wifiprint(buf, len, quality);
+ break;
+ }
+ freeifaddrs(ifas);
+ if (ifa)
+ return 0;
+ return -1;
+}
+#else
+int
+wifiread(char *buf, size_t len)
+{
+ return -1;
+}
+#endif
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.