summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTuomas Tynkkynen <tuomas.tynkkynen@iki.fi>2014-12-01 18:30:30 +0200
committerMichael Stapelberg <michael@stapelberg.de>2014-12-03 08:14:21 +0100
commit7bdfb5b72e730f2131dccd75f211aaa6d2236954 (patch)
tree3d24ea20a3ca3919c41fc8d24f63e74bac0298ce /src
parentf817e3b4c085a13d876968af499973b4349ef4f6 (diff)
i3status: Support %frequency for wireless interfaces
In many public WiFis, the 2.4 GHz wireless band is slow due to congestion, while there is still plenty of bandwidth available on the 5 GHz area. So when debugging wireless issues it's convenient to have i3status display the frequency of the access point that the interface is connected to. This patch adds support for the %frequency tag for wireless interfaces, so for example: format_up = "WLAN: %essid - %quality / %frequency" would result in: "WLAN: eduroam - 074% / 2.4 GHz"
Diffstat (limited to 'src')
-rw-r--r--src/print_wireless_info.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/print_wireless_info.c b/src/print_wireless_info.c
index 18f6580..7f7c52e 100644
--- a/src/print_wireless_info.c
+++ b/src/print_wireless_info.c
@@ -55,6 +55,7 @@
#define WIRELESS_INFO_FLAG_HAS_QUALITY (1 << 1)
#define WIRELESS_INFO_FLAG_HAS_SIGNAL (1 << 2)
#define WIRELESS_INFO_FLAG_HAS_NOISE (1 << 3)
+#define WIRELESS_INFO_FLAG_HAS_FREQUENCY (1 << 4)
#define PERCENT_VALUE(value, total) ((int)(value * 100 / (float)total + 0.5f))
@@ -69,6 +70,7 @@ typedef struct {
int noise_level;
int noise_level_max;
int bitrate;
+ double frequency;
} wireless_info_t;
static int get_wireless_info(const char *interface, wireless_info_t *info) {
@@ -93,6 +95,11 @@ static int get_wireless_info(const char *interface, wireless_info_t *info) {
info->essid[IW_ESSID_MAX_SIZE] = '\0';
}
+ if (wcfg.has_freq) {
+ info->frequency = wcfg.freq;
+ info->flags |= WIRELESS_INFO_FLAG_HAS_FREQUENCY;
+ }
+
/* If the function iw_get_stats does not return proper stats, the
wifi is considered as down.
Since ad-hoc network does not have theses stats, we need to return
@@ -395,6 +402,14 @@ void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface,
walk += strlen("essid");
}
+ if (BEGINS_WITH(walk+1, "frequency")) {
+ if (info.flags & WIRELESS_INFO_FLAG_HAS_FREQUENCY)
+ outwalk += sprintf(outwalk, "%1.1f GHz", info.frequency / 1e9);
+ else
+ *(outwalk++) = '?';
+ walk += strlen("frequency");
+ }
+
if (BEGINS_WITH(walk+1, "ip")) {
outwalk += sprintf(outwalk, "%s", ip_address);
walk += strlen("ip");