#!/bin/sh
###
#       Enable GPIO for GWM VMX53
##

. /usr/local/bin/telem/functions

boardname=`/usr/local/bin/telem/boardname.sh`

GPIO=/usr/local/bin/telem/gpio.sh

start() {
    logg "Initializing GPIOs"

    # remove unused
    rm -r /usr/local/etc/telem/gpio.2 2> /dev/null

    [ "$boardname" = "VMX53" ] && revision=1

    ! rm /usr/local/etc/telem/gpio
    ln -sf /usr/local/etc/telem/$boardname.$revision /usr/local/etc/telem/gpio
    
        
    ! rm /usr/local/etc/telem/hw > /dev/null
    ln -sf /usr/local/etc/telem/rev/$boardname.$revision /usr/local/etc/telem/hw
    
    # use rev1 io list to detect initial revision
    $GPIO -e REV_BIT0
    $GPIO -e REV_BIT1

    rev_bit0=`$GPIO -v REV_BIT0`
    rev_bit1=`$GPIO -v REV_BIT1`
    
    
    if [ $rev_bit0 = 1 ] && [ $rev_bit1 = 0 ]; then
        revision=4
        
        logg "Enabling TCA9554A I2C GPIO expander"
        echo pca9554 0x39 > /sys/bus/i2c/devices/i2c-2/new_device
        echo pca9554 0x3c > /sys/bus/i2c/devices/i2c-2/new_device
            
        ! rm /usr/local/etc/telem/gpio
        ln -sf /usr/local/etc/telem/$boardname.$revision /usr/local/etc/telem/gpio
    else
        logg "Enabling PCA9536 I2C GPIO expander"
        echo pca9536 0x41 > /sys/bus/i2c/devices/i2c-2/new_device
    fi

    logg "Enabling I2C to 1-wire bridge"
    echo ds2482 0x18 > /sys/bus/i2c/devices/i2c-2/new_device    
    
    mkdir -p /tmp/telem/board
    echo $boardname > /tmp/telem/board/board
    echo $revision > /tmp/telem/board/rev
    
    # create link to hw.xml
    ! rm /usr/local/etc/telem/hw-run.xml > /dev/null
    ln -sf /usr/local/etc/telem/rev/$boardname.$revision/hw.xml /usr/local/etc/telem/hw-run.xml
    
    ! rm /var/local/telem/modem_tty
    ln -sf /usr/local/etc/telem/rev/$boardname.$revision/modem_tty /var/local/telem/modem_tty
    
    ! rm /var/local/telem/modem_tty_cmd
    ln -sf /usr/local/etc/telem/rev/$boardname.$revision/modem_tty_cmd /var/local/telem/modem_tty_cmd
    
    $GPIO -e RUN_LED
    $GPIO -e ALERT_LED
    
    if [ $boardname == "VMX53" ]; then
        if [ $revision -gt 3 ]; then
            $GPIO -e EN_USB_PWR
            $GPIO -e REV_BAT
            
            rev_bat=`$GPIO -v REV_BAT`
            if [ $rev_bat = "1" ]; then
                touch /var/local/telem/rtc-charger-disabled
            else
                rm /var/local/telem/rtc-charger-disabled
            fi
        fi
    fi

    $GPIO -e IO_BOARD_PWR
    $GPIO -e IO_BOARD_EXEC
    
    if [ $boardname == "VMX53" ]; then
        if [ $revision -eq 1 ]; then
            for usbdir in /sys/bus/usb/devices/usb*; do
                logg "send enable power to ${usbdir}"
                echo on > ${usbdir}/power/control
            done
            sleep 1
            $GPIO -e EN_USB_PWR
            # $GPIO -e I2C_OUT_2 # not commected to anything
        fi
    fi

    test -e /etc/ppp/peers/sim1.conf && {
        $GPIO -e RST_MODEM
        
        $GPIO -e MODEM_USB_PWR
        $GPIO -e MODEM_PWR
        $GPIO -e MODEM_PWR_MON
    }

    test -e /etc/ppp/peers/sim2.conf && sim2_available=1
    
    $GPIO -e MODEM_SIM_SELECT
    
    if [ $boardname == "VMX53" ]; then
        if [ $revision -gt 3 ]; then
            $GPIO -e LAN_BOARD_PWR
        fi
    fi
    
    test -e /var/local/telem/ordercode/eth_board && {
        if [ -e /etc/init.d/network_eth1 ] || [ -e /etc/init.d/network_eth2 ] || [ -e /etc/init.d/network_eth3 ]; then
            $GPIO -s LAN_BOARD_PWR
        else
            $GPIO -c LAN_BOARD_PWR
        fi
    }
    
    if [ $boardname == "VMX53" ]; then
        if [ $revision -gt 3 ]; then
            test -e /var/local/telem/ordercode/io_board && $GPIO -s IO_BOARD_EXEC
        fi
    fi
}


stop() {
    $GPIO -c RUN_LED
    $GPIO -s ALERT_LED

    # IO-board exec relay must be disabled before removing USB power
    $GPIO -c IO_BOARD_EXEC
    $GPIO -c EN_USB_PWR

    [ -e /etc/ppp/peers/sim1.conf ] && modem_turnOFF
    
    test -e /var/local/telem/ordercode/eth_board && {
        if [ -e /etc/init.d/network_eth1 ] || [ -e /etc/init.d/network_eth2 ] || [ -e /etc/init.d/network_eth3 ]; then
            $GPIO -c LAN_BOARD_PWR
        fi
    }

}


case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart|reload)
        start
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
esac

exit $?
