diff --git a/CHANGELOG.md b/CHANGELOG.md index 01bd423..38f2c57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ * battery: current smoothing, for improved discharge estimates. * battery: scale option, for batteries that report 'charge' at a different scale than 'current'. +* network: new `quality` tag (Wi-Fi only). ### Changed diff --git a/doc/yambar-modules-network.5.scd b/doc/yambar-modules-network.5.scd index 2aefc89..44605e2 100644 --- a/doc/yambar-modules-network.5.scd +++ b/doc/yambar-modules-network.5.scd @@ -45,6 +45,9 @@ address. | signal : int : Signal strength, in dBm (Wi-Fi only) +| quality +: range +: Quality of the signal, in percent (Wi-Fi only) | rx-bitrate : int : RX bitrate, in bits/s @@ -72,7 +75,7 @@ address. | poll-interval : int : no -: Periodically (in milliseconds) update the signal, rx+tx bitrate, and +: Periodically (in milliseconds) update the signal, quality, rx+tx bitrate, and ul+dl speed tags (default=0). Setting it to 0 disables updates. Cannot be less than 250ms. diff --git a/modules/network.c b/modules/network.c index 0cc8cb6..3336c23 100644 --- a/modules/network.c +++ b/modules/network.c @@ -154,6 +154,16 @@ content(struct module *mod) inet_ntop(AF_INET6, &it->item.addr.ipv6, ipv6_str, sizeof(ipv6_str)); } + int quality = 0; + if (m->signal_strength_dbm != 0) { + if (m->signal_strength_dbm <= -100) + quality = 0; + else if (m->signal_strength_dbm >= -50) + quality = 100; + else + quality = 2 * (m->signal_strength_dbm + 100); + } + struct tag_set tags = { .tags = (struct tag *[]){ tag_new_string(mod, "name", m->iface), @@ -165,12 +175,13 @@ content(struct module *mod) tag_new_string(mod, "ipv6", ipv6_str), tag_new_string(mod, "ssid", m->ssid), tag_new_int(mod, "signal", m->signal_strength_dbm), + tag_new_int_range(mod, "quality", quality, 0, 100), tag_new_int(mod, "rx-bitrate", m->rx_bitrate), tag_new_int(mod, "tx-bitrate", m->tx_bitrate), tag_new_float(mod, "dl-speed", m->dl_speed), tag_new_float(mod, "ul-speed", m->ul_speed), }, - .count = 13, + .count = 14, }; mtx_unlock(&mod->lock);