1
0
Fork 0
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:
Derek Dai 2017-02-09 23:02:51 +08:00
parent c590adbd2f
commit 01edf8001f
No known key found for this signature in database
GPG key ID: E109CC97553EF009

View file

@ -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