blob: 9dec4350535e590b95aeea7692db148d29fdd3dd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
#!/bin/bash
###############################################################
# This is a workaround for SPEC-1762/SPEC-1763
#
# THIS SCRIPT MUST BE REMOVED ONCE THE ABOVE ISSUES ARE SOLVED
#
# Source recipe is:
#
# meta-audio-4a-framework/
# recipes-multimedia/
# agl-service-audio-4a/
# agl-service-audio-4a_git.bb
#
# Signed-off-by: Stephane Desneux <stephane.desneux@iot.bzh>
###############################################################
# time from script startup
LIMIT=20
ts0=0
function ts() { echo $(( $(date +%s) - ts0 )); }
ts0=$(ts)
function havetime() { [[ $(ts) -le ${1:-$LIMIT} ]] || return 1; }
function waitloop() {
# ensure bt modules are loaded (delay: 5s)
while havetime 4; do
[[ -d /sys/module/bluetooth ]] && {
echo "bluetooth kernel module detected"
break
}
echo "waiting for bluetooth kernel module to be up"
sleep 0.2
done
havetime 4 || { echo "TIMEOUT REACHED"; return 1; }
# check that we have at least one controller
HCIDEV=
while havetime 8; do
echo "detecting hci devices..."
for x in $(ls /sys/class/bluetooth/hci* 2>/dev/null); do
[[ -z "$HCIDEV" ]] && HCIDEV=$(basename $x)
done
[[ -n "$HCIDEV" ]] && {
echo "found HCI controller: $HCIDEV"
break
}
sleep 0.2
done
havetime 8 || { echo "TIMEOUT REACHED"; return 1; }
# wait for controller to be up and running
while havetime 15; do
state=$(hciconfig $HCIDEV | grep -A 2 ^hci0 | tail -1)
[[ $state =~ UP ]] && [[ $state =~ RUNNING ]] && {
echo "HCI controller $HCIDEV state: $state"
break
}
echo "HCI controller $HCIDEV state: $state ... waiting for UP RUNNING"
sleep 0.2
done
havetime 15 || { echo "TIMEOUT REACHED"; return 1; }
echo "HCI device up and running after $(ts) seconds"
# wait for bluetooth-service to return something
while havetime; do
res=$(afb-client-demo -d unix:/run/user/$UID/apis/ws/Bluetooth-Manager adapter_state true)
[[ "$res" =~ \"response\":(.*)}$ ]] && res=${BASH_REMATCH[1]}
[[ "$res" =~ \"powered\":true ]] && {
echo "Bluetooth-Manager/power: $res"
break
}
echo "Bluetooth-Manager/power: not ready yet ($res)"
sleep 0.2
done
echo "Bluetooth-Manager ready after $(ts) seconds"
echo "4A now starting..."
}
waitloop 2>&1 | sed 's/^/4AWAITBT /' >&2
exec "$@"
|