blob: 3edb53fe795b27999061c2e35139e51d97af40da [file] [log] [blame]
#!/bin/sh
# Time to wait (in seconds) after resetting the BT chip to allow /dev/btusb0 to
# be created.
BT_RESET_DELAY=1
# Time to wait (in seconds) after starting bsa_server to allow the BT chip to be
# fully initialized.
BT_BSA_STARTUP_DELAY=2
case "$1" in
start)
. /etc/utils.sh
BT_MAC=$(hnvram -rq MAC_ADDR_BT)
BT_NAME=$(cat /etc/platform)
# A few platforms are populated with MAC_ADDR, but not MAC_ADDR_BT.
if [ -z "$BT_MAC" ]; then
MAC=$(hnvram -rq MAC_ADDR)
if [ ! -z "$MAC" ]; then
BT_MAC=$(echo "$MAC" | (
IFS=: read m1 m2 m3 m4 m5 m6; \
decimal=$(printf "%d" "0x$m6"); \
m6=$(printf "%02x" $(($decimal + 2))); \
echo "$m1:$m2:$m3:$m4:$m5:$m6"
))
fi
fi
# Run the following in a sub-shell in the background to avoid
# impacting boot time.
(
if [ -e /dev/btusb0 ]; then
# BCM20702 USB Bluetooth chip
BSATTY=/dev/btusb0
BSAFIRMWARE="-p /etc/bsa/BCM20702.hcd"
wl reset_bt_chip 2>&1
sleep $BT_RESET_DELAY
elif [ "$(cat /etc/platform)" = GFHD200 ]; then
# BCM20705 serial Bluetooth chip
BSATTY=/dev/ttyS1
BSAFIRMWARE="-p /etc/bsa/BCM20705.hcd"
fi
if [ ! -z $BSATTY ]; then
# Provide a mechanism for other processes to determine the Bluetooth MAC address
echo "$BT_MAC" >/tmp/btmacaddress
cd /user/bsa
(
LD_PRELOAD=/lib/stdoutline.so babysit 30 \
bsa_server -d $BSATTY $BSAFIRMWARE -hci 2>&1 | logos bsa &
)
sleep $BT_BSA_STARTUP_DELAY
# Start app_gtv.
babysit 30 app_gtv -a "$BT_MAC" -n "$BT_NAME" -k 2>&1 | logos app_gtv &
fi
) &
;;
stop)
pkillwait -x app_gtv
pkillwait -x bsa_server
;;
restart)
$0 stop; $0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac