#!/bin/sh /etc/rc.common
INTERFACE="can0"
START=99
boot() {
     logger "CAN: Init"
     start
}

start() {
    [ -d /tmp/canstd/ ] || mkdir /tmp/canstd/
    [ -d /tmp/canstd/files/ ] || mkdir /tmp/canstd/files/
    [ -d /tmp/canobdii/ ] || mkdir /tmp/canobdii/
    [ -d /tmp/canobdii/files/ ] || mkdir /tmp/canobdii/files/
    [ -d /tmp/canobdiidiag/ ] || mkdir /tmp/canobdiidiag/
    canstdnos=`uci get canbus.@canstd[9].enabled`
    canobdiinos=`uci get canbus.@canobdii[9].enabled`
    if [ canstdnos == 1 ]; then
        echo 10 > /tmp/canstd/nos 
    fi
    if [ canstdnos == 0 ]; then
        echo 10 > /tmp/canstd/nos 
    fi
    if [ canobdiinos == 1 ]; then
        echo 10 > /tmp/canobdii/nos 
    fi
    if [ canobdiinos == 0 ]; then
        echo 10 > /tmp/canobdii/nos 
    fi
   if [ `uci get canbus.canbus.state 2>/dev/null` == 1 ]; then
        speed=$(uci get canbus.canbus.speed)
        ip link set can0 type can bitrate $speed
        ip link set up $INTERFACE
        echo 71 > /sys/class/gpio/export
        echo out > /sys/class/gpio/pioC7/direction
        echo 1 > /sys/class/gpio/pioC7/value
        if [ `uci get canbus.canbus.proto 2>/dev/null` == 'canstandard' ]; then
                /usr/bin/canstd $INTERFACE &
        fi
        if [ `uci get canbus.canbus.proto 2>/dev/null` == 'obdii' ]; then
                /usr/bin/can_obdii $INTERFACE &
        fi
        if [ `uci get canbus.canbus.proto 2>/dev/null` == 'obdiidiagnostics' ]; then
                touch /tmp/canobdiidiag/diag
        fi
        if [ `uci get canbus.canbus.proto 2>/dev/null` == 'canopen' ]; then
            if [ `uci get canbus.canopen.state 2>/dev/null` == 1 ]; then
				test_valid_values 2>/dev/null
                node_id=$(uci get canbus.canopen.node_id)
                /usr/bin/can_open_load.sh $node_id $INTERFACE &
				/usr/bin/can_open_wd.sh & 2>/dev/null
            fi
        fi
    fi
}

stop() {
    kill -9 `pidof canstd` `pidof can_obdii` `pidof canopend` 2>/dev/null
    ps | grep can_open_wd | grep bin | awk '{print $1}' | head -n1 | xargs kill -9 2>/dev/null
    ip link set down $INTERFACE
    if [ `cat /sys/class/gpio/pioC7/value 2>/dev/null` == '1' ]; then
        echo 0 > /sys/class/gpio/pioC7/value
        echo 71 > /sys/class/gpio/unexport
    fi
    rm -rf /tmp/canopen.txt
    [ -f /tmp/canobdiidiag/diag ] || rm -rf /tmp/canobdiidiag/diag
    [ -d /tmp/canstd ] && rm -rf /tmp/canstd
    [ -d /tmp/canobdii ] && rm -rf /tmp/canobdii
    [ -d /tmp/canobdiidiag ] && rm -rf /tmp/canobdiidiag
}

reload() {
       stop
       start
}

test_valid_values() {
    if [[ "`uci get canbus.canopen.node_id`" == "" ]]; then
		uci set canbus.canopen.node_id=12
    fi
    if [[ "`uci get canbus.canopen.sdo_timeout`" == "" ]]; then
		uci set canbus.canopen.sdo_timeout=500
    fi
    uci commit
}
