summaryrefslogtreecommitdiffstats
path: root/meta-audio-4a-framework/recipes-multimedia/agl-service-audio-4a/files/4a_wait_bt.sh
blob: a1df1ea064b5e719e94ec13588287f0a2ff21999 (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 power true)
		[[ "$res" =~ \"response\":(.*)}$ ]] && res=${BASH_REMATCH[1]}
		[[ "$res" == '{"power":"on"}' ]] && {
			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 "$@"