92 lines
2.5 KiB
Bash
Executable File
92 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
list_devices() {
|
|
adb devices | awk '/(^[[:alnum:]]+[[:blank:]]+device$)/ {print $1}'
|
|
}
|
|
|
|
first_device() {
|
|
devices="$(adb devices | awk '/(^[[:alnum:]]+[[:blank:]]+device$)/ {print $1}')"
|
|
if [ -z "$devices" ]
|
|
then
|
|
echo ""
|
|
return
|
|
else
|
|
set -- "$devices"
|
|
echo $1
|
|
fi
|
|
}
|
|
|
|
has_devices() {
|
|
[ ! -z "$(list_devices)" ] && return
|
|
false
|
|
}
|
|
|
|
which adb >/dev/null 2>/dev/null
|
|
if [ $? != 0 ]
|
|
then
|
|
echo "ADB not installed or not located in $PATH" >&2
|
|
exit 4
|
|
fi
|
|
|
|
which scrcpy >/dev/null 2>/dev/null
|
|
if [ $? != 0 ]
|
|
then
|
|
echo "scrcpy not installed or not located in $PATH" >&2
|
|
exit 4
|
|
fi
|
|
|
|
declare -A serial_map
|
|
declare -A bluetooth_map
|
|
|
|
while true
|
|
do
|
|
devices="$(list_devices)"
|
|
while read serial;
|
|
do
|
|
if [ -z "$serial" ]
|
|
then
|
|
continue
|
|
fi
|
|
if [ -z "${serial_map[$serial]}" ]
|
|
then
|
|
echo "New device $serial connected" >&2
|
|
scrcpy -s "$serial" &
|
|
serial_map[$serial]=$!
|
|
android-lock -u -s "$serial"
|
|
# Link the phone to bluetooth as well.
|
|
bluetooth_mac="$(adb -s "$serial" shell settings get secure bluetooth_address)"
|
|
bluetoothctl devices | grep "$bluetooth_mac" >/dev/null 2>/dev/null
|
|
if [ $? != 0 ]
|
|
then
|
|
# Pair the devices
|
|
bluetoothctl scan on
|
|
adb -s "$serial" shell am start -a android.bluetooth.adapter.action.REQUEST_DISCOVERABLE
|
|
sleep 1
|
|
bluetoothctl pair "$bluetooth_mac"
|
|
bluetoothctl scan off
|
|
else
|
|
adb -s "$serial" shell am start -a android.bluetooth.adapter.action.REQUEST_ENABLE
|
|
fi
|
|
bluetoothctl connect "$bluetooth_mac"
|
|
bluetooth_map[$serial]="$bluetooth_mac"
|
|
fi
|
|
done <<< "$devices"
|
|
|
|
# Check for devices that have disconnected.
|
|
for serial in "${!serial_map[@]}"
|
|
do
|
|
adb -s "$serial" get-state >/dev/null 2>/dev/null
|
|
if [ $? != 0 ]
|
|
then
|
|
# The device has since been disconnected, and we should remove it.
|
|
echo "Device $serial disconnected"
|
|
kill "${serial_map[$serial]}"
|
|
unset serial_map[$serial]
|
|
echo "Disconnecting bluetooth ${bluetooth_map[$serial]}"
|
|
bluetoothctl disconnect "${bluetooth_map[$serial]}"
|
|
echo "Bluetooth disconnected"
|
|
unset bluetooth_map[$serial]
|
|
fi
|
|
done
|
|
done
|