#!/bin/bash

WPA_SUPPLICANT_CONF="/etc/wpa_supplicant/wpa_supplicant.conf"
WPA_SUPPLICANT_INFO="/etc/wpa_supplicant/run/wpa_supplicant"
WPA_SCAN_INFO="/tmp/wpascaninfo"
WLAN="wlan0"

is_arm(){
    cat /proc/cmdline | grep "RtkSFC" > /dev/null
    [ $? -eq 0 ] && return 0
    return 1
}

getwlaninfo(){
    local pid=$(pidof wpa_supplicant)
    if [ -z "$pid" ]; then
        ifconfig $WLAN  up
        if [ ! -f "$WPA_SUPPLICANT_CONF" ]; then
            echo -e "ctrl_interface=$WPA_SUPPLICANT_INFO\nap_scan=1\nupdate_config=1\n" > $WPA_SUPPLICANT_CONF
        fi
        is_arm
        if [ $? -eq 0 ]; then
            wpa_supplicant -Dnl80211 -c $WPA_SUPPLICANT_CONF -i $WLAN -B > /dev/null 2>&1
        else
            wpa_supplicant -Dwext -c $WPA_SUPPLICANT_CONF -i $WLAN -B > /dev/null 2>&1
        fi
        if [ $? -ne 0 ]; then
            echo "1" > $WPA_SCAN_INFO
            return 1
        fi
        sleep 1
    fi

    if [ ! -d /sys/class/net/$WLAN ]; then
        echo "1" > $WPA_SCAN_INFO
        return 1
    fi

    wpa_cli -i $WLAN -p $WPA_SUPPLICANT_INFO scan  > /dev/null 2>&1
    if [ $? -ne 0 ];then
        echo "1" > $WPA_SCAN_INFO
        return 1
    fi

    sleep 3
    wpa_cli -i $WLAN -p $WPA_SUPPLICANT_INFO scan_results | grep -v "^bssid"  > $WPA_SCAN_INFO 2>/dev/null
    if [ $? -ne 0 ]; then
        echo "1" > $WPA_SCAN_INFO
        return 1
    fi
    return 0
}

getwlanlinked(){
    local linked="nolinked"	
    local wlanstatus=$(cat /sys/class/net/$WLAN/carrier 2> /dev/null)

    if [ ! -z "$wlanstatus" ]; then
        if [ "$wlanstatus" -eq 1 ];then
            linked=$(wpa_cli -i $WLAN -p $WPA_SUPPLICANT_INFO 2>/dev/null list_networks|awk  'BEGIN{FS="\t"}/^0/{print $2}')
        fi
    fi
    echo $linked
}

case $1 in
    scan)
        getwlaninfo
        ;;
    status)
        getwlanlinked
        ;;
    *)
        echo -e "usage: $0 [scan|status]"
esac

exit 0

