diff options
author | Stephane Desneux <stephane.desneux@iot.bzh> | 2018-09-27 17:35:20 +0000 |
---|---|---|
committer | Stephane Desneux <stephane.desneux@iot.bzh> | 2018-09-28 16:01:32 +0000 |
commit | 3b2111ffe4a7a004479445f857e0b4cf09694c7a (patch) | |
tree | ada650bfee88c7aaf93a5b7330cf0b5c4d7ca7a7 /meta-audio-4a-framework/recipes-multimedia/agl-service-audio-4a/files/4a_wait_bt.sh | |
parent | bd047dd78bac07451375e19f03b5f936efcf5f03 (diff) |
4A: delay service startup as a workaround to SPEC-1762/SPEC-1763 (temp workaround)
This patch introduces a wait loop before starting the 4A binder:
* wait for bluetooth module to be loaded
* wait for bluetooth controller to be up & running
* wait for bluetooth manager to be initialized
Then 4A can start with BT-audio support.
If no BT controller is detected in 5secondes, the loop exits and
4A doesn't initialize BT-Audio
Bug-AGL: SPEC-1762, SPEC-1763
Change-Id: Ibe851dee871d183511c7bca03411b35ed023f422
Signed-off-by: Stephane Desneux <stephane.desneux@iot.bzh>
Diffstat (limited to 'meta-audio-4a-framework/recipes-multimedia/agl-service-audio-4a/files/4a_wait_bt.sh')
-rwxr-xr-x | meta-audio-4a-framework/recipes-multimedia/agl-service-audio-4a/files/4a_wait_bt.sh | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/meta-audio-4a-framework/recipes-multimedia/agl-service-audio-4a/files/4a_wait_bt.sh b/meta-audio-4a-framework/recipes-multimedia/agl-service-audio-4a/files/4a_wait_bt.sh new file mode 100755 index 00000000..a1df1ea0 --- /dev/null +++ b/meta-audio-4a-framework/recipes-multimedia/agl-service-audio-4a/files/4a_wait_bt.sh @@ -0,0 +1,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 "$@" + |