linuxOS_AP05/external/rkwifibt/tb_start_wifi.sh
2025-06-02 13:59:07 +08:00

304 lines
7.0 KiB
Bash
Executable File

#!/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