#!/bin/sh

BOARD_NAME="$(strings /proc/device-tree/compatible | head -1)"
SCAN_INTERNAL_USB_WLAN="0"

if [ x"${BOARD_NAME}" = x"ariaboard,photonicat2" ]; then
    OEM_WIFI_SSID_PREFIX="photonicat2"
    SCAN_INTERNAL_USB_WLAN="1"
else
    OEM_WIFI_SSID_PREFIX="photonicat"
    SDIO_WIFIDEVICE="platform/fe2c0000.mmc/mmc_host/mmc2/mmc2:0001/mmc2:0001:1"
fi

OEM_WIFI_PASSWORD="photonicat"
OEM_WIFI_IS_UNIQUE="1"

if [ -f "/usr/share/pcat-manager-web/oem.txt" ]; then
    source /usr/share/pcat-manager-web/oem.txt
fi

EMMC_SERIAL_RAW="$(cat /sys/bus/mmc/devices/mmc0:0001/serial 2>/dev/null | awk '{print tolower($0)}')"
EMMC_SERIAL="${EMMC_SERIAL_RAW:2:8}"

WIFI_DEVICE=""
SSID_SUFFIX="${EMMC_SERIAL}"
RETRY_COUNT_MAX="60"

if [ x"${SDIO_WIFIDEVICE}" != x"" -a -d "/sys/devices/platform/fe2c0000.mmc/mmc_host/mmc2/mmc2:0001" ]; then
    RETRY_COUNT="0"

    while [ ${RETRY_COUNT} -lt ${RETRY_COUNT_MAX} ]; do
        MACADDR=$(cat "/sys/devices/${SDIO_WIFIDEVICE}/ieee80211/"*/macaddress | tail -n 1 | awk '{gsub(/:/,""); print tolower($0)}')
        RETRY_COUNT=$(expr ${RETRY_COUNT} + 1)

        if [ x"${MACADDR}" != x"" ]; then
            break
        fi

        sleep 5
    done

    WIFI_DEVICE="${SDIO_WIFIDEVICE}"
    SSID_SUFFIX="${MACADDR:4:8}"
fi

if [ x"${WIFI_DEVICE}" = x"" ]; then
    RETRY_COUNT="0"

    while [ ${RETRY_COUNT} -lt ${RETRY_COUNT_MAX} ]; do
        RETRY_COUNT=$(expr ${RETRY_COUNT} + 1)

        for _WLAN_PHY in /sys/class/ieee80211/*; do
           if [ x"${_WLAN_PHY}" = x"" ]; then
               continue
           fi

           WLAN_DEV="$(realpath ${_WLAN_PHY}/../..)"

           if [ x"${WIFI_DEVICE}" = x"" ]; then
               IS_PCI_DEV="$(echo ${WLAN_DEV} | grep pci)"
               if [ x"${IS_PCI_DEV}" != x"" ]; then
                   WIFI_DEVICE="${WLAN_DEV:22}"
               else
                   WIFI_DEVICE="${WLAN_DEV:13}"
               fi
           fi

           USB_PID="$(cat ${WLAN_DEV}/idProduct 2>/dev/null | awk '{print tolower($0)}')"
           USB_VID="$(cat ${WLAN_DEV}/idVendor 2>/dev/null | awk '{print tolower($0)}')"

           if [ x"${SCAN_INTERNAL_USB_WLAN}" = x"1" -a x"${USB_VID}" = x"0e8d" -a x"${USB_PID}" = x"7961" ]; then
               WIFI_DEVICE="${WLAN_DEV:13}"
               MACADDR=$(cat "/sys/devices/${WIFI_DEVICE}/ieee80211/"*/macaddress | tail -n 1 | awk '{gsub(/:/,""); print tolower($0)}')
               SSID_SUFFIX="${MACADDR:4:8}"
               break
           fi

           if [ x"${SCAN_INTERNAL_USB_WLAN}" = x"1" -a x"${USB_VID}" = x"a69c" -a x"${USB_PID}" = x"8d81" ]; then
               WIFI_DEVICE="${WLAN_DEV:13}"
               MACADDR=$(cat "/sys/devices/${WIFI_DEVICE}/ieee80211/"*/macaddress | tail -n 1 | awk '{gsub(/:/,""); print tolower($0)}')
               SSID_SUFFIX="${MACADDR:4:8}"
               break
           fi
        done

        if [ x"${SCAN_INTERNAL_USB_WLAN}" != x"1" -a x"${WIFI_DEVICE}" != x"" ]; then
            break
        fi

        if [ x"${MACADDR}" != x"" ]; then
            break
        fi

        sleep 5
    done
fi

if [ x"${WIFI_DEVICE}" = x"" ]; then
    exit 0
fi

if [ x"${OEM_WIFI_IS_UNIQUE}" != x"0" ]; then
    WIFI_SSID="${OEM_WIFI_SSID_PREFIX}-${SSID_SUFFIX}"
else
    WIFI_SSID="${OEM_WIFI_SSID_PREFIX}"
fi

wifi down

rm -f /etc/config/wireless 2>/dev/null || true

echo "config wifi-device 'radio0'" >/etc/config/wireless
echo "" >>/etc/config/wireless
echo "config wifi-iface 'default_radio0'" >>/etc/config/wireless

wifi reload

uci set wireless.radio0.disabled=0
uci set wireless.radio0.type=mac80211
uci set wireless.radio0.country=US
uci set wireless.radio0.path="${WIFI_DEVICE}"
uci set wireless.default_radio0.device=radio0
uci set wireless.default_radio0.ssid="${WIFI_SSID}"
uci set wireless.radio0.channel=10
uci set wireless.radio0.band=2g
uci set wireless.radio0.htmode=HT20
uci set wireless.default_radio0.network=lan
uci set wireless.default_radio0.mode=ap
uci set wireless.default_radio0.encryption=psk2
uci set wireless.default_radio0.key="${OEM_WIFI_PASSWORD}"
uci set wireless.default_radio0.wps_pushbutton=0
uci set wireless.default_radio0.disassoc_low_ack=0

uci commit
wifi reload

sleep 3

wifi config
wifi reconf
wifi

touch /tmp/pcat-wifi-ready.tmp

exit 0
