diff options
| -rw-r--r-- | man/i3status.man | 8 | ||||
| -rw-r--r-- | src/print_wireless_info.c | 15 | 
2 files changed, 19 insertions, 4 deletions
diff --git a/man/i3status.man b/man/i3status.man index 504cf16..06dc4a6 100644 --- a/man/i3status.man +++ b/man/i3status.man @@ -270,13 +270,13 @@ something is active, like for example a VPN tunnel managed by NetworkManager.  === Wireless -Gets the link quality and ESSID of the given wireless network interface. You -can specify different format strings for the network being connected or not -connected. +Gets the link quality, frequency and ESSID of the given wireless network +interface. You can specify different format strings for the network being +connected or not connected.  *Example order*: +wireless wlan0+ -*Example format*: +W: (%quality at %essid, %bitrate) %ip+ +*Example format*: +W: (%quality at %essid, %bitrate / %frequency) %ip+  === Ethernet 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");  | 
