#!/bin/sh SSID= WIFISSID=$1 WIFIPWD=$2 VSSID= VPWD= VVAILD= IPADDR= NETMASK= WPAPID="" NETMASK= GW= DNS= up_cnt=0 insmod_cnt=0 check_cnt=0 FORCE_CONFIG_WIFI=$3 NEW_SSID= getdhcp_cnt=0 connect_cnt=0 wpa_cnt=0 NET_NEW_CONFIG=0 IPADDR_TEST= tcpka_cnt=0 trap "echo 'ifconfig wlan0 down'; ifconfig wlan0 down; exit" SIGTERM function udhcpcd() { echo "udhcpc ..." if [ "$NET_NEW_CONFIG" == "0" ];then echo "get dhcp info from vendor" IPADDR=`vendor_storage -r VENDOR_CUSTOM_ID_1E -t string | sed -n '4p' | awk '{print $3}' | awk -F, '{print $4}'` NETMASK=`vendor_storage -r VENDOR_CUSTOM_ID_1E -t string | sed -n '4p' | awk '{print $3}' | awk -F, '{print $5}'` GW=`vendor_storage -r VENDOR_CUSTOM_ID_1E -t string | sed -n '4p' | awk '{print $3}' | awk -F, '{print $6}'` DNS=`vendor_storage -r VENDOR_CUSTOM_ID_1E -t string | sed -n '4p' | awk '{print $3}' | awk -F, '{print $7}'` ifconfig wlan0 $IPADDR netmask $NETMASK route add default gw $GW echo "nameserver $DNS" > /etc/resolv.conf echo $IPADDR $NETMASK $GW $DNS echo none > /sys/class/leds/blue/trigger echo 5 > /sys/class/leds/blue/brightness wl PM 0 exit fi echo "get dhcp by udhcpc" udhcpc -i wlan0 -t 15 -q IPADDR_TEST=`ifconfig wlan0 | grep inet | awk '{print $2}' | awk -F: '{print $2}' | awk -F. '{print $1}'` if [ "$IPADDR_TEST" != "" ] && [ "$IPADDR_TEST" != "127" ] && [ "$IPADDR_TEST" != "169" ];then IPADDR=`ifconfig wlan0 | grep inet | awk '{print $2}' | awk -F: '{print $2}'` NETMASK=`ifconfig wlan0 | grep inet | awk '{print $4}' | awk -F: '{print $2}'` GW=`route -n | awk '{print $2}' | sed -n '3p'` DNS=`cat /etc/resolv.conf | grep nameserver | awk '{print $2}'` echo "ip_info: $IPADDR $NETMASK $GW $DNS" vendor_storage -w VENDOR_CUSTOM_ID_1E -t string -i 1,$WIFISSID,$WIFIPWD,$IPADDR,$NETMASK,$GW,$DNS echo none > /sys/class/leds/blue/trigger echo 5 > /sys/class/leds/blue/brightness wl PM 0 else echo "dhcp failed !!!" echo 0 > /sys/class/leds/blue/brightness exit fi } function getdhcp() { while true do IPADDR=`dhd_priv wl dhcpc_dump | awk '{print $5}' | sed -n '3p'` if [ "$IPADDR" != "0.0.0.0" ];then NETMASK=`dhd_priv wl dhcpc_dump | awk '{print $7}' | sed -n '3p'` GW=`dhd_priv wl dhcpc_dump | awk '{print $9}' | sed -n '3p'` DNS=`dhd_priv wl dhcpc_dump | awk '{print $11}' | sed -n '3p'` ifconfig wlan0 $IPADDR netmask $NETMASK route add default gw $GW echo "nameserver $DNS" > /etc/resolv.conf echo $IPADDR $NETMASK $GW $DNS echo none > /sys/class/leds/blue/trigger echo 5 > /sys/class/leds/blue/brightness if [ "$FORCE_CONFIG_WIFI" == "true" ];then echo "reconnect, restart mediaserver..." killall -9 mediaserver sleep 1 mediaserver -a -d -c /usr/share/mediaserver/tb.conf > /dev/kmsg 2>&1 & fi break fi sleep 0.01 let getdhcp_cnt++ if [ "$getdhcp_cnt" -gt 3000 ]; then echo "$NEW_SSID getdhcp failed!!!" echo 0 > /sys/class/leds/blue/brightness exit fi done } function check_wlan0() { echo "check wlan0 ..." while true do lsmod | grep bcmdhd if [ $? -ne 0 ]; then echo "wait bcmdhd.ko ..." sleep .2 else echo "ismod bcmdhd.ko okay" break fi let insmod_cnt++ if [ "$insmod_cnt" -gt 3 ]; then echo "insmod failed !!!" echo 0 > /sys/class/leds/blue/brightness exit fi done while true do ifconfig -a wlan0 | grep wlan0 if [ $? -ne 0 ]; then echo "wait wlan0 ..." sleep .2 else echo "wlan0 exist" break fi let check_cnt++ if [ "$check_cnt" -gt 3 ]; then echo "check wlan0 failed!!!" echo 0 > /sys/class/leds/blue/brightness exit fi done } function check_wakeup_cause() { echo "check_wakeup_cause ..." CAUSE=`dhd_priv wl wowl_wakeind | awk -F= '{print $3}' | sed -n '3p' | cut -d ' ' -f 1` if [ "$CAUSE" != "0x0" ]; then touch /tmp/wifi_wake fi } function tcpka_del() { echo "tcpka_del ..." while true do IPID=`dhd_priv wl tcpka_conn_sess_info 1 | grep ipid` if [ "$IPID" != "" ]; then sleep 0.05 dhd_priv wl tcpka_conn_enable 1 0 0 0 0 sleep 0.05 dhd_priv wl tcpka_conn_del 1 sleep 0.05 else break fi let tcpka_cnt++ if [ "$tcpka_cnt" -gt 3 ]; then echo "tcpka_conn_del failed" exit fi done } function wlan_up() { echo "wlan up ..." while true do ifconfig wlan0 up if [ $? -ne 0 ]; then echo "wlan0 up failed" sleep 0.1 else echo "wlan0 up succeed" break fi let up_cnt++ if [ "$up_cnt" -gt 3 ]; then echo "wlan0 up failed!!!" echo 0 > /sys/class/leds/blue/brightness exit fi done } function connect_wifi() { echo "connect wifi ..." SSID=`dhd_priv isam_status | awk -F, '{print $5}' | sed -n '4p' | cut -d '"' -f 2` if [ "$SSID" == "" ] || [ "$FORCE_CONFIG_WIFI" == "true" ];then if [ "$FORCE_CONFIG_WIFI" != "true" ];then VVAILD=`vendor_storage -r VENDOR_CUSTOM_ID_1E -t string | sed -n '4p' | awk '{print $3}' | awk -F, '{print $1}'` echo "vvaild: $VVAILD" VSSID=`vendor_storage -r VENDOR_CUSTOM_ID_1E -t string | sed -n '4p' | awk '{print $3}' | awk -F, '{print $2}'` echo "vssid: $VSSID" VPSK=`vendor_storage -r VENDOR_CUSTOM_ID_1E -t string | sed -n '4p' | awk '{print $3}' | awk -F, '{print $3}'` echo "vpsk: $VPSK" if [ "$VVAILD" == "1" ];then WIFISSID=$VSSID WIFIPWD=$VPSK fi echo "vendor storage: vaild: $VVAILD ssid: $WIFISSID, psk: $WIFIPWD" fi if [ "$SSID" == "" ] && [ "$FORCE_CONFIG_WIFI" != "true" ] && [ "$VVAILD" != "1" ];then echo "SSID is empty, and FORCE_CONFIG_WIFI not true and vendor is empty, exit" echo 0 > /sys/class/leds/blue/brightness exit fi if [ "$SSID" == "$WIFISSID" ];then echo "$WIFISSID already connected" return fi echo "WIFI INFO: $SSID, CONFIG: $FORCE_CONFIG_WIFI" cp /etc/wpa_supplicant.conf /tmp/ echo "connect to WiFi ssid: $WIFISSID, Passwd: $WIFIPWD" sed -i "s/SSID/$WIFISSID/g" /tmp/wpa_supplicant.conf sed -i "s/PASSWORD/$WIFIPWD/g" /tmp/wpa_supplicant.conf WPAPID=`busybox ps | grep wpa_supplicant | grep -v grep | awk '{print $1}'` if [ "$WPAPID" != "" ];then killall wpa_supplicant sleep 0.5 fi ifconfig wlan0 down sleep 0.5 ifconfig wlan0 up sleep 0.5 while true do wpa_supplicant -B -i wlan0 -c /tmp/wpa_supplicant.conf WPAPID=`busybox ps | grep wpa_supplicant | grep -v grep | awk '{print $1}'` if [ "$WPAPID" == "" ];then sleep 0.2 else echo "wpa_supplicant running" break fi let wpa_cnt++ if [ "$wpa_cnt" -gt 3 ]; then echo "wpa_supplicant up failed!!!" echo 0 > /sys/class/leds/blue/brightness exit fi done while true do NEW_SSID=`dhd_priv isam_status | awk -F, '{print $5}' | sed -n '4p' | cut -d '"' -f 2` if [ "$NEW_SSID" == "" ];then echo "$WIFISSID connecting..." sleep 1 elif [ "$NEW_SSID" == "$SSID" ];then echo "waiting $SSID disconnect ..." sleep 1 else [ "$NEW_SSID" == "$WIFISSID" ] echo "$NEW_SSID connected to getdhcp" NET_NEW_CONFIG=1 break fi let connect_cnt++ if [ "$connect_cnt" -gt 35 ]; then echo "connect $NEW_SSID failed!!!" echo 0 > /sys/class/leds/blue/brightness exit fi done fi } check_wlan0 wlan_up check_wakeup_cause tcpka_del connect_wifi udhcpcd