#!/bin/sh

PATH=/usr/bin:/bin:/usr/sbin:/sbin
HCIATTACH=/usr/bin/hciattach
UART=/dev/ttymxc5
BAUD=115200
TYPE=texas
DBUS_PID_FILE=/var/run/messagebus.pid
HCIATTACH_PID_FILE=/var/run/hciattach.pid

start_sysdbus() {
    echo -n "Starting dbus-sys daemon: "

    # Make sure the socket directory exists
    if [ ! -d /var/run/dbus ]; then
        mkdir -p /var/run/dbus
    fi
 
    if [ -e $DBUS_PID_FILE ]; then
        PIDDIR=/proc/$(cat $DBUS_PID_FILE)
        if [ -d ${PIDDIR} -a -n "$(readlink -f ${PIDDIR}/exe 2>/dev/null)" ]; then
            echo "dbus-sys already started; not starting."
            return 0
        else
            echo "Removing stale PID file $DBUS_PID_FILE"
            rm -f $DBUS_PID_FILE
        fi
    fi
    umask 077
    /usr/bin/dbus-daemon --system --fork && echo '[ OK ]' || { echo '[ FAIL ]'; exit 1; }
}

stop_sysdbus() {
    echo -n "Stopping dbus-sys daemon: "
    if [ -f $DBUS_PID_FILE ]; then
        read PID < $DBUS_PID_FILE
        kill $PID && echo '[ OK ]' || echo '[ FAIL ]'
        rm $DBUS_PID_FILE
    else
        echo "pid file not found... is dbus-sys running?"
    fi
}

start_hciattach() {
    echo -n "Starting hciattach: "

    if [ -f $HCIATTACH_PID_FILE ]; then
        echo "hciattach pid file found. not starting."
        return 0
    fi

    # First set enable pin high, then attach serial interface to bluez stack
    if [ ! -d  /sys/class/gpio/gpio119 ]; then
        echo 119 > /sys/class/gpio/export
        echo out > /sys/class/gpio/gpio119/direction
    fi
    echo 1 > /sys/class/gpio/gpio119/value

    $HCIATTACH -p $UART $TYPE $BAUD 1>$HCIATTACH_PID_FILE && \
        echo '[ OK ]' || { echo '[ FAIL ]'; exit 1; }
}

stop_hciattach() {
    killall hciattach
    if [ ! -d  /sys/class/gpio/gpio119 ]; then
        echo 119 > /sys/class/gpio/export
        echo out > /sys/class/gpio/gpio119/direction
    fi
    echo 0 > /sys/class/gpio/gpio119/value
    rm -f $HCIATTACH_PID_FILE
}

start_btd() {
    # Start bluetooth daemon
    echo -n "Starting bluetooth daemon: "
    if [ ! -d /var/run/bluetoothj ]; then
        mkdir -p /var/run/bluetooth
    fi

    umask 077
    start-stop-daemon --oknodo -S -q -b -m -p /var/run/bluetooth.pid --exec /usr/lib/bluetooth/bluetoothd && echo '[ OK ]' || echo '[ FAIL ]'
}

stop_btd() {
   echo -n "Stopping bluetooth: "
   start-stop-daemon -K -q -p /var/run/bluetooth.pid
}

case "$1" in
    start)
        start_sysdbus
        start_hciattach
        start_btd
        ;;
    stop)
        stop_btd
        stop_hciattach
        stop_sysdbus
        ;;
    restart|reload)
        stop_btd
        stop_hciattach
        stop_sysdbus
        sleep 1
        start_sysdbus
        start_hciattach
        start_btd
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
esac

exit $?
