packages/utils/byobu/patches/110-wifi-quality.patch
Jeffery To 43c1b1b53c byobu: Add new package
From the website:
Byobu is a GPLv3 open source text-based window manager and terminal
multiplexer. It was originally designed to provide elegant enhancements
to the otherwise functional, plain, practical GNU Screen, for the Ubuntu
server distribution. Byobu now includes an enhanced profiles, convenient
keybindings, configuration utilities, and toggle-able system status
notifications for both the GNU Screen window manager and the more modern
Tmux terminal multiplexer, and works on most Linux, BSD, and Mac
distributions.

Adapted from the old packages feed:
https://git.openwrt.org/?p=openwrt/svn-archive/packages.git;a=tree;f=utils/byobu

Signed-off-by: Jeffery To <jeffery.to@gmail.com>
2019-05-14 13:55:25 +08:00

82 lines
3 KiB
Diff

--- a/usr/lib/byobu/wifi_quality
+++ b/usr/lib/byobu/wifi_quality
@@ -19,32 +19,61 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+___get_dev_list() {
+ if [ -n "$MONITORED_NETWORK" ]; then
+ echo "$MONITORED_NETWORK"
+ else
+ iw dev | grep Interface | cut -f2 -d\
+ fi
+}
+
__wifi_quality_detail() {
- /sbin/iwconfig 2>/dev/null
+ if eval $BYOBU_TEST iw >/dev/null 2>&1; then
+ local dev
+ for dev in $(___get_dev_list); do
+ iw dev "$dev" info
+ iw dev "$dev" link
+ echo
+ done
+ elif eval $BYOBU_TEST iwconfig >/dev/null 2>&1; then
+ iwconfig 2>/dev/null
+ fi
}
__wifi_quality() {
local out bitrate quality
- # iwconfig is expected to output lines like:
- # Bit Rate=54 Mb/s Tx-Power=15 dBm
- # Link Quality=60/70 Signal level=-50 dBm
- # the awk below tokenizes the output and prints shell evalable results
- out=`iwconfig $MONITORED_NETWORK 2>/dev/null |
- awk '$0 ~ /[ ]*Link Quality./ {
- sub(/.*=/,"",$2); split($2,a,"/");
- printf "quality=%.0f\n", 100*a[1]/a[2] };
- $0 ~ /[ ]*Bit Rate/ { sub(/.*[:=]/,"",$2); printf("bitrate=%s\n", $2); }
- '`
- eval "$out"
- [ -z "$bitrate" ] && bitrate="0"
- if [ -z "$quality" ] || [ "$quality" = "0" ]; then
- quality="0"
+ if eval $BYOBU_TEST iw >/dev/null 2>&1; then
+ local dev
+ for dev in $(___get_dev_list); do
+ # signal to quality: https://superuser.com/a/1360447
+ out=`iw dev "$dev" link 2>/dev/null |
+ awk '$0 ~ /^\s*signal:/ { a = 100 * ($2 + 110) / 70;
+ printf "quality=%.0f\n", (a > 100) ? 100 : ((a < 0) ? 0 : a); }
+ $0 ~ /^\s*tx bitrate:/ { printf "bitrate=%s\n", $3; }
+ '`
+ eval "$out"
+ [ -z "$bitrate" ] || [ -z "$quality" ] || break
+ done
+ elif eval $BYOBU_TEST iwconfig >/dev/null 2>&1; then
+ # iwconfig is expected to output lines like:
+ # Bit Rate=54 Mb/s Tx-Power=15 dBm
+ # Link Quality=60/70 Signal level=-50 dBm
+ # the awk below tokenizes the output and prints shell evalable results
+ out=`iwconfig $MONITORED_NETWORK 2>/dev/null |
+ awk '$0 ~ /[ ]*Link Quality./ {
+ sub(/.*=/,"",$2); split($2,a,"/");
+ printf "quality=%.0f\n", 100*a[1]/a[2] };
+ $0 ~ /[ ]*Bit Rate/ { sub(/.*[:=]/,"",$2); printf("bitrate=%s\n", $2); }
+ '`
+ eval "$out"
fi
- if [ "$bitrate" = "0" ] || [ "$quality" = "0" ] || [ -z "$bitrate" ] || [ -z "$quality"]; then
+ [ -n "$bitrate" ] || bitrate=0
+ [ -n "$quality" ] || quality=0
+ if [ "$bitrate" -gt 0 ] && [ "$quality" -gt 0 ]; then
+ printf "${ICON_WIFI}"; color b C k; printf "%s" "$bitrate"; color -; color C k; printf "%s" "$ICON_MBPS"; color -; color b C k; printf "%s" "$quality"; color -; color C k; printf "%s" "$PCT"; color --
+ else
rm -f "$BYOBU_RUN_DIR/status.$BYOBU_BACKEND/wifi_quality"*
- return
fi
- printf "${ICON_WIFI}"; color b C k; printf "%s" "$bitrate"; color -; color C k; printf "%s" "$ICON_MBPS"; color -; color b C k; printf "%s" "$quality"; color -; color C k; printf "%s" "$PCT"; color --
}
# vi: syntax=sh ts=4 noexpandtab