mirror of
https://github.com/albfan/miraclecast.git
synced 2025-02-15 04:42:06 +00:00
miracle-wfdctl-demo: wait for property chainging and object apperance by
busctl instead of sleep
This commit is contained in:
parent
c590adbd2f
commit
01edf8001f
1 changed files with 98 additions and 19 deletions
|
@ -4,31 +4,110 @@ set -x
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if (( $# < 1 )); then
|
if (( $# < 1 )); then
|
||||||
echo Usage: ${0##*/} link-index peer-p2p-mac
|
echo Usage: ${0##*/} link-index peer-p2p-mac
|
||||||
echo eg. sudo ${0##*/} 3 ac:a2:13:6e:f8:2f
|
echo eg. sudo ${0##*/} 3 ac:a2:13:6e:f8:2f
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ${#2} != 17 ]]; then
|
if [[ ${#2} != 17 ]]; then
|
||||||
echo Invalid peer-p2p-mac: $2
|
echo Invalid peer-p2p-mac: $2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# $1: service
|
||||||
|
# $2: object
|
||||||
|
# $3: interface
|
||||||
|
# $4: member
|
||||||
|
# $5: property value
|
||||||
|
wait_prop_change()
|
||||||
|
{
|
||||||
|
for ((i=0; i<60; i++)); do
|
||||||
|
read -a cols < <(busctl get-property "${@:1:4}")
|
||||||
|
if [[ s == "${cols[0]}" ]]; then
|
||||||
|
cols[1]="${cols[1]:1:${#cols[1]}-2}"
|
||||||
|
fi
|
||||||
|
if [[ "$5" == "${cols[1]}" ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
echo !!!timeout!!!
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1: service
|
||||||
|
# $2: object
|
||||||
|
# $3: interface
|
||||||
|
# $4: member
|
||||||
|
wait_object()
|
||||||
|
{
|
||||||
|
while ! busctl get-property "$1" "$2" "$3" "$4" &>/dev/null; do
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1: service
|
||||||
|
# $2: object
|
||||||
|
# $3: interface
|
||||||
|
# $4: property
|
||||||
|
# $5: expected property value
|
||||||
|
# $6: method
|
||||||
|
# $...: arguments
|
||||||
|
invoke()
|
||||||
|
{
|
||||||
|
wait_object "${@:1:4}"
|
||||||
|
busctl call "${@:1:3}" "${@:6}"
|
||||||
|
wait_prop_change "${@:1:5}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1: service
|
||||||
|
# $2: object
|
||||||
|
# $3: interface
|
||||||
|
# $4: member
|
||||||
|
# $5: property spec
|
||||||
|
# $6: property values
|
||||||
|
set_prop()
|
||||||
|
{
|
||||||
|
busctl set-property "$@"
|
||||||
|
wait_prop_change "${@:1:4}" "${@:6:1}"
|
||||||
|
}
|
||||||
|
|
||||||
link_index="_3${1:0:1}${1:1}"
|
link_index="_3${1:0:1}${1:1}"
|
||||||
p2p_mac="${2//:/_3a}_40$1"
|
p2p_mac="${2//:/_3a}_40$1"
|
||||||
wfd_subelems=0000060010107c7032
|
wfd_subelems=00000600101c4400c8
|
||||||
|
|
||||||
busctl set-property org.freedesktop.NetworkManager /org/freedesktop/NetworkManager/Devices/2 org.freedesktop.NetworkManager.Device Managed "b" false
|
killall miracle-wifid &>/dev/null || true
|
||||||
killall miracle-wifid || true
|
killall miracle-wfwctl &>/dev/null || true
|
||||||
killall miracle-wfdctl || true
|
|
||||||
miracle-wfdctl &
|
|
||||||
|
|
||||||
sleep 1
|
set_prop org.freedesktop.NetworkManager \
|
||||||
busctl set-property org.freedesktop.miracle.wifi /org/freedesktop/miracle/wifi/link/$link_index org.freedesktop.miracle.wifi.Link Managed 'b' true
|
/org/freedesktop/NetworkManager/Devices/$1 \
|
||||||
sleep 1
|
org.freedesktop.NetworkManager.Device \
|
||||||
busctl set-property org.freedesktop.miracle.wifi /org/freedesktop/miracle/wifi/link/$link_index org.freedesktop.miracle.wifi.Link WfdSubelements "s" "$wfd_subelems"
|
Managed b false
|
||||||
busctl set-property org.freedesktop.miracle.wifi /org/freedesktop/miracle/wifi/link/$link_index org.freedesktop.miracle.wifi.Link P2PScanning 'b' true
|
set_prop org.freedesktop.miracle.wifi \
|
||||||
sleep 10
|
/org/freedesktop/miracle/wifi/link/$link_index \
|
||||||
busctl call org.freedesktop.miracle.wifi /org/freedesktop/miracle/wifi/peer/$p2p_mac org.freedesktop.miracle.wifi.Peer Connect ss auto ''
|
org.freedesktop.miracle.wifi.Link \
|
||||||
sleep 10
|
Managed b true
|
||||||
busctl call org.freedesktop.miracle.wfd /org/freedesktop/miracle/wfd/sink/$p2p_mac org.freedesktop.miracle.wfd.Sink StartSession
|
set_prop org.freedesktop.miracle.wifi \
|
||||||
|
/org/freedesktop/miracle/wifi/link/$link_index \
|
||||||
|
org.freedesktop.miracle.wifi.Link \
|
||||||
|
WfdSubelements s "$wfd_subelems"
|
||||||
|
# this one is tricky, we wait for wpa_supplicant fully started then start
|
||||||
|
# P2P scaning, or "Invalid argument" will return
|
||||||
|
sleep 0.5
|
||||||
|
set_prop org.freedesktop.miracle.wifi \
|
||||||
|
/org/freedesktop/miracle/wifi/link/$link_index \
|
||||||
|
org.freedesktop.miracle.wifi.Link \
|
||||||
|
P2PScanning b true
|
||||||
|
invoke org.freedesktop.miracle.wifi \
|
||||||
|
/org/freedesktop/miracle/wifi/peer/$p2p_mac \
|
||||||
|
org.freedesktop.miracle.wifi.Peer \
|
||||||
|
Connected true \
|
||||||
|
Connect ss auto ''
|
||||||
|
invoke org.freedesktop.miracle.wfd \
|
||||||
|
/org/freedesktop/miracle/wfd/sink/$p2p_mac \
|
||||||
|
org.freedesktop.miracle.wfd.Sink \
|
||||||
|
Started true \
|
||||||
|
StartSession
|
||||||
|
|
||||||
|
exec busctl monitor org.freedesktop.miracle.wfd
|
||||||
|
|
Loading…
Reference in a new issue