#!/bin/sh

wifi_op=$1
WIFI_CLI=/usr/sbin/wpa_cli
WPA_SUPPLICANT_CONF="/etc/wpa_supplicant/wpa_supplicant.conf"
WPA_SUPPLICANT_INFO="/etc/wpa_supplicant/run/wpa_supplicant"

if [ -z "${wifi_op}" ]; then
  echo "usage: ${0} [start|stop|restart] [wlan0]"
  exit 1
fi

wlan_name=$2
wlan_source=1
if [ -z "$2" ]; then
  wlan_name=wlan0
  wlan_source=0
fi

log_path="/tmp/wifi_${wifi_op}_$wlan_name"
echo "operation ${wifi_op} $wlan_name by $(whoami) $(pwd)" >${log_path}

getboard() {
  uname -a | grep aarch64 >/dev/null
  [ $? -eq 0 ] && return 0
  return 1
}

wifi_start() {
  local netdev=$1
  sleep 3
  getboard
  if [ $? -eq 0 ]; then
    /etc/init.d/nas/wifi
    [ $wlan_source -eq 1 ] && /etc/init.d/network restart >/dev/null 2>&1 &
  else
    /etc/init.d/nas/wirelessconn ${netdev}
  fi
}

wifi_stop() {
  local netdev=$1
  local stat=$($WIFI_CLI -i $netdev -p $WPA_SUPPLICANT_INFO stat | awk -F= '/wpa_state=/ {print $2}')
  if [ "$stat" != "DISCONNECTED" ]; then
    $WIFI_CLI -i $netdev -p $WPA_SUPPLICANT_INFO disc 2>/dev/null
    echo -e "ctrl_interface=$WPA_SUPPLICANT_INFO\nap_scan=1\nupdate_config=1\n" >$WPA_SUPPLICANT_CONF
  fi
  local wpa_pid=$(pidof wpa_supplicant)
  if [ ! -z "$wpa_pid" ]; then
    kill $wpa_pid
  fi
  local PIDS=$(ps ax | grep "${netdev}" | grep "udhcpc" | awk '{print $1}')
  [ ! -z "$PIDS" ] && kill -9 ${PIDS}
}

case ${wifi_op} in
start)
  wifi_start $wlan_name
  ;;
stop)
  wifi_stop $wlan_name
  ;;
restart)
  wifi_stop $wlan_name
  sleep 1
  wifi_start $wlan_name
  ;;
esac

exit 0
