#!/bin/bash

### BEGIN INIT INFO
# Provides:          hobot
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: load wifi driver
### END INIT INFO

SYSFS_BOARDID_PATH="/sys/class/socinfo/board_id"
SYSFS_SOCNAME_PATH="/sys/class/socinfo/soc_name"
SYSFS_SOMNAME_PATH="/sys/class/socinfo/som_name"

get_rdk_type_string() {
  local soc_name=""
  local board_id=""
  local rdk_type="unknown"

  if [ -f "${SYSFS_SOCNAME_PATH}" ]; then
    soc_name=$(cat "${SYSFS_SOCNAME_PATH}" 2>/dev/null | tr -d '[:space:]')
  elif [ -f "${SYSFS_SOMNAME_PATH}" ]; then
    soc_name=$(cat "${SYSFS_SOMNAME_PATH}" 2>/dev/null | tr -d '[:space:]')
  fi
  soc_name=${soc_name:-""}

  if [ -f "${SYSFS_BOARDID_PATH}" ]; then
    board_id=$(cat "${SYSFS_BOARDID_PATH}" 2>/dev/null | tr -d '[:space:]')
  fi
  board_id=${board_id:-""}

  if echo "$soc_name" | grep -qi "x5"; then
    local prefix=""
    local version_num="0"
    
    if [[ "$board_id" == 30* ]]; then
      prefix="x5_rdk"
      version_num=$(echo "$board_id" | grep -o "30[0-9]" | grep -o "[0-9]$" || echo "0")
    elif [[ "$board_id" == 50* ]]; then
      prefix="x5_md"
      version_num=$(echo "$board_id" | grep -o "50[0-9]" | grep -o "[0-9]$" || echo "0")
    fi

    if [ -n "$prefix" ]; then
      rdk_type="${prefix}_v${version_num}"
    else
      rdk_type="x5_unknown"
    fi

  elif [[ "$soc_name" =~ ^[568b]$ ]]; then
    case "$soc_name" in
      "5") rdk_type="x3_rdk_v1"   ;; 
      "6") rdk_type="x3_rdk_v1_2" ;;  
      "8") rdk_type="x3_rdk_v2"   ;;
      "b") rdk_type="x3_md_v1"    ;;
    esac
  fi

  echo "$rdk_type"
}

get_antenna_type_string() {
  board_type_string=$(get_rdk_type_string)
  
  case $board_type_string in
  x3_rdk_v2)
    echo "switch"
    ;; 
  x5_rdk_v1)
    echo "switch"
    ;; 
  x5_rdk_v2)
    echo "switch"
    ;;
  x5_md_v1)
    echo "switch"
    ;;
  x5_md_v2)
    echo "switch"
    ;;
  x5_md_v3)
    echo "switch"
    ;;
  x5_md_v4)
    echo "switch"
    ;;
  x5_md_v5)
    echo "switch"
    ;;
  *)
    echo "fixed"
    ;;
  esac
}

do_load_wifi()
{
    antenna_type=$(get_antenna_type_string)

    if [ $antenna_type == "switch" ]; then
		config_file="/boot/config.txt"
		antenna_option="antenna_option"

		if [ -f "$config_file" ]; then
			antenna_value=$(grep -E "^$antenna_option=" "$config_file" | cut -d= -f2)

			if [ -n "$antenna_value" ]; then
				if [ "$antenna_value" = "cable" ]; then
					/bin/switch_antenna cable
				elif [ "$antenna_value" = "trace" ]; then
					/bin/switch_antenna trace
				else
					echo "Unrecognized value for $antenna_option: $antenna_value"
				fi
			else
				/bin/switch_antenna trace
			fi
		else
		/bin/switch_antenna trace
		fi
	fi
}

case "$1" in
	start)
		do_load_wifi
		exit 0
		;;
	*)
		echo "Usage: $0 start"
		exit 0
	;;
esac
