From 4bf92406d0b7e8e7a4093d1e81d4e4ce4078faee Mon Sep 17 00:00:00 2001 From: Stacy Harper Date: Mon, 29 Mar 2021 20:13:18 +0200 Subject: [PATCH] Try to make bluetooth menu connection more reliable Signed-off-by: Stacy Harper Signed-off-by: Maarten van Gompel --- scripts/core/sxmo_bluetoothmenu.sh | 55 +++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 16 deletions(-) diff --git a/scripts/core/sxmo_bluetoothmenu.sh b/scripts/core/sxmo_bluetoothmenu.sh index a3e5f9f..5820539 100755 --- a/scripts/core/sxmo_bluetoothmenu.sh +++ b/scripts/core/sxmo_bluetoothmenu.sh @@ -1,16 +1,39 @@ #!/usr/bin/env sh +ispaired() { + bluetoothctl info "$1" | grep Paired | grep -q yes +} + +isconnected() { + bluetoothctl info "$1" | grep Connected | grep -q yes +} + connect() { - if bluetoothctl info "$1" | grep Connected | grep -q no; then - bluetoothctl discoverable on - if bluetoothctl info "$1" | grep Paired | grep -q no; then - bluetoothctl pairable on - notify-send "Pairing with $1..." - bluetoothctl --timeout=10 pair "$1" || notify-send "Pairing failed" && return - bluetoothctl trust "$1" || notify-send "Trusting failed" && return + if isconnected "$1"; then + notify-send "Already connected !" + return + fi + bluetoothctl discoverable on + if ! ispaired "$1"; then + notify-send "Pairing..." + bluetoothctl pairable on + if bluetoothctl --agent=KeyboardDisplay pair "$1"; then + notify-send "Paired !" + bluetoothctl trust "$1" || notify-send "Trusting failed" + else + notify-send "Pairing failed" + fi + bluetoothctl pairable off + fi + if ispaired "$1"; then + notify-send "Connecting..." + if bluetoothctl --agent=KeyboardDisplay connect "$1"; then + notify-send "Connected !" + else + notify-send "Connecting failed" fi - bluetoothctl --timeout=5 connect "$1" || notify-send "Connecting failed" && return fi + bluetoothctl discoverable off } devicemenu() { @@ -19,25 +42,25 @@ devicemenu() { fi while true; do DEVICES="$(bluetoothctl devices | awk '{ $1=""; printf $2; $2=""; printf " ^" $0 "\n" }')" - ENTRIES="$(echo "$DEVICES" | sed 's|.* ^ ||' | xargs -0 printf "Close Menu\nDisconnect\nScan\n%s")" + ENTRIES="$(echo "$DEVICES" | sed 's|.* ^ ||' | xargs -0 printf "Refresh\nClose Menu\nDisconnect\nScan\n%s")" PICKED="$( echo "$ENTRIES" | - sxmo_dmenu_with_kb.sh -i -c -l 10 -p "Devices" + dmenu -i -c -l 10 -p "Devices" )" - if echo "$PICKED" | grep -q "Close Menu"; then + if echo "$PICKED" | grep -q "Refresh"; then + continue + elif echo "$PICKED" | grep -q "Close Menu"; then exit elif echo "$PICKED" | grep -q "Disconnect"; then st -e sh -c "bluetoothctl disconnect; sleep 1" elif echo "$PICKED" | grep -q "Scan"; then - notify-send "Scanning BT devices for 5 seconds..." - bluetoothctl --timeout=5 scan on + notify-send "Scanning BT devices for 30 seconds..." + bluetoothctl --timeout=30 scan on && notify-send "End of scan" & else devicemac="$(echo "$DEVICES" | grep " \^ $PICKED$" | sed 's| ^ .*||' )" - st -e sh -c "$0 connect $devicemac" - bluetoothctl pairable off - bluetoothctl discoverable off + st -e sh -c "$0 connect $devicemac; sleep 1" fi done }