Files
Scripts_MiSTer/bluetooth_pair.sh
2022-07-18 15:42:35 +08:00

83 lines
1.7 KiB
Bash

#!/bin/sh
set -E -u -T
timeout_seconds=60
pipe=/tmp/btpair
function killprocs() {
killall btpair 2>/dev/null
killall btctl 2>/dev/null
}
function hideinput() {
if [ -t 0 ]; then
tput civis
stty -echo -icanon time 0 min 0
fi
}
trap hideinput CONT
function cleanup() {
printf $"\b"
trap - HUP INT TERM EXIT # avoid re-entrancy
if [ -t 0 ]; then
stty sane
tput cnorm
fi
[ ! -p "$pipe" ] || rm -f "$pipe"
killprocs
exit
}
trap cleanup HUP INT TERM EXIT
hideinput
killprocs
echo "Switch input device(s) to pairing mode."
echo ""
echo "Searching for $timeout_seconds seconds..."
function get_current_milliseconds() {
local cur_ms="$(date +%s.%3N)"
cur_ms=$(bc -l <<< "scale=0; $cur_ms * 1000 / 1")
printf "$cur_ms"
}
start_ms="$(get_current_milliseconds)"
function get_elapsed_milliseconds() {
local cur_ms="$(get_current_milliseconds)"
printf "$(( $cur_ms - $start_ms ))"
}
paired=0
anim_frame=0
[ -p $pipe ] || mkfifo $pipe
exec 3<>$pipe
/usr/sbin/btctl pair 1<>$pipe &
elapsed_milliseconds=0
while [ $elapsed_milliseconds -lt $(( timeout_seconds * 1000 )) ]; do
if read -t 0.1 -u 3 line; then
echo -e "\\b$line"
if [[ "$line" == "Done." ]]; then
paired=1
break
fi
else
case $anim_frame in
0) printf $"\b/"; anim_frame=1;;
1) printf $"\b-"; anim_frame=2;;
2) printf $"\b\\"; anim_frame=3;;
3) printf $"\b|"; anim_frame=0;;
esac
fi
elapsed_milliseconds=$(get_elapsed_milliseconds)
done
[ $anim_frame -lt 0 ] || printf $"\b"
if [ $paired -eq 0 ]; then
echo -e "\bNo input devices found."
fi