#! /bin/sh
#
#dhd - (optional) integrated wlan0 ap6181

#detect SDIO WiFi

echo 5 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio5/direction
S412_GPIO=`cat /sys/class/gpio/gpio5/value`
echo 5 > /sys/class/gpio/unexport

echo 4 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio4/direction
S415_GPIO=`cat /sys/class/gpio/gpio4/value`
echo 4 > /sys/class/gpio/unexport

AP6181enabled="0"
AP6255enabled="0"
BCM4335enabled="0"

if [  ${S412_GPIO} -eq 1 ] && [  ${S415_GPIO} -eq 1 ]; then
  BCM4335enabled="1"
elif [  ${S412_GPIO} -eq 1 ]; then
  AP6181enabled="1"
elif [  ${S415_GPIO} -eq 1 ]; then
  AP6255enabled="1"
fi



if [  ${AP6181enabled} -eq 1 ]; then
  CURRENT_MODE_STATE_FILE=/var/tvip/wifi_ap8161_driver_mode
  CURRENT_MODE="CLIENT"
  if [ -f ${CURRENT_MODE_STATE_FILE} ]; then
    CURRENT_MODE=`cat ${CURRENT_MODE_STATE_FILE}`
  fi
elif [  ${AP6255enabled} -eq 1 ]; then
  CURRENT_MODE_STATE_FILE=/var/tvip/wifi_ap6255_driver_mode
  CURRENT_MODE="CLIENT"
  if [ -f ${CURRENT_MODE_STATE_FILE} ]; then
    CURRENT_MODE=`cat ${CURRENT_MODE_STATE_FILE}`
  fi
elif [  ${BCM4335enabled} -eq 1 ]; then
  CURRENT_MODE_STATE_FILE=/var/tvip/wifi_bcm4335_driver_mode
  CURRENT_MODE="CLIENT"                                    
  if [ -f ${CURRENT_MODE_STATE_FILE} ]; then
    CURRENT_MODE=`cat ${CURRENT_MODE_STATE_FILE}`
  fi  
fi


case "$1" in
  start)
        echo "Starting wirelees..."
        if [  ${AP6181enabled} -eq 1 ]; then
            echo 0 > /proc/sys/kernel/hung_task_timeout_secs
            if [ "${CURRENT_MODE}" == "ROUTER" ]; then
                /sbin/insmod /lib/modules/dhd.ko firmware_path=/etc/wifi/fw_bcm40181a2_apsta.bin nvram_path=/etc/wifi/6181/nvram.txt
            else 
                /sbin/insmod /lib/modules/dhd.ko firmware_path=/etc/wifi/fw_bcm40181a2.bin nvram_path=/etc/wifi/6181/nvram.txt
            fi
	    /sbin/modprobe 8188eu.ko ifname=wlan1 if2name=p2p0
	    /sbin/insmod /lib/modules/8821au.ko ifname=wlan1 if2name=p2p0
        elif [  ${AP6255enabled} -eq 1 ]; then
            #SUPERHACK!!! WiFi depends on PWM_E, which is triggered by CEC driver
            cec-client init &
            sleep 1
            killall cec-client
            #//SUPERHACK
            echo 0 > /proc/sys/kernel/hung_task_timeout_secs
            if [ "${CURRENT_MODE}" == "ROUTER" ]; then
                /sbin/modprobe dhd.ko firmware_path=/etc/wifi/fw_bcm43455c0_ag_apsta.bin nvram_path=/etc/wifi/6255/nvram.txt
            else 
                /sbin/modprobe dhd.ko firmware_path=/etc/wifi/fw_bcm43455c0_ag.bin nvram_path=/etc/wifi/6255/nvram.txt
            fi
            /sbin/modprobe 8188eu.ko ifname=wlan1 if2name=p2p0
	    /sbin/insmod /lib/modules/8821au.ko ifname=wlan1 if2name=p2p0
        elif [  ${BCM4335enabled} -eq 1 ]; then
            #SUPERHACK!!! WiFi depends on PWM_E, which is triggered by CEC driver                           
            cec-client init &                                                                               
            sleep 1                                                                                         
            killall cec-client                                                                              
            #//SUPERHACK                                                                                    
            echo 0 > /proc/sys/kernel/hung_task_timeout_secs
            if [ "${CURRENT_MODE}" == "ROUTER" ]; then
                /sbin/modprobe dhd.ko firmware_path=/etc/wifi/4335/fw_bcm4335b0_ag_apsta.bin nvram_path=/etc/wifi/4335/nvram.txt
            else 
                /sbin/modprobe dhd.ko firmware_path=/etc/wifi/4335/fw_bcm4335b0_ag.bin nvram_path=/etc/wifi/4335/nvram.txt
            fi
	    /sbin/modprobe 8188eu.ko ifname=wlan1 if2name=p2p0
	    /sbin/insmod /lib/modules/8821au.ko ifname=wlan1 if2name=p2p0
        else
            /sbin/modprobe 8188eu.ko ifname=wlan0 if2name=p2p0
	    /sbin/insmod /lib/modules/8821au.ko ifname=wlan0 if2name=p2p0
        fi
        
        /sbin/modprobe 8192cu
    ;;
  stop)
        echo "Stopping wireless..."
        if [  ${AP6181enabled} -eq 1 ]; then
          /sbin/modprobe -r dhd.ko
        elif [  ${AP6255enabled} -eq 1 ]; then
          /sbin/modprobe -r dhd.ko
        elif [  ${BCM4335enabled} -eq 1 ]; then
          /sbin/modprobe -r dhd.ko
        fi
        /sbin/modprobe -r 8192cu
        /sbin/modprobe -r 8188eu.ko
        /sbin/modprobe -r 8821au 
    ;;
  restart|reload)
        echo "Restarting wireless..."
        "$0" stop
        "$0" start
    ;;
    
  changemode)
    INTERFACE=$2
    NEWMODE="CLIENT"
    if [ -n "$3" ]; then
        NEWMODE="ROUTER"
    fi
    if [ ${AP6181enabled} -eq 1 ] || [ ${AP6255enabled} -eq 1 ] || [ ${BCM4335enabled} -eq 1 ]; then
        # ONLY for AP6181 driver
        if [ "${NEWMODE}" != "${CURRENT_MODE}" ]; then
            echo "Changing WiFi mode to ${NEWMODE}"
            echo ${NEWMODE} > ${CURRENT_MODE_STATE_FILE}
            "$0" stop
            "$0" start
            ifconfig ${INTERFACE} up
        fi
    fi
    
    ;;
  *)
    ;;
esac

exit $?
