#!/bin/bash

#========================================
# Common functions
#========================================

set_autoconf_intf()
{
	case "$HCI" in
		[Uu][Ss][Bb])
			type=usb
			;;
		[Pp][Cc][Ii])
			type=pci
			;;
		[Ss][Dd][Ii][Oo])
			type=sdio
			;;
		[Gg][Ss][Pp][Ii])
			type=gspi
			;;
		*)
			echo "Unknown interface type"
			;;
	esac

	if [ $type = usb ]; then
		sed -i '/CONFIG_USB_HCI = / c\CONFIG_USB_HCI = y' $MAKEFILE
	else
		sed -i '/CONFIG_USB_HCI = / c\CONFIG_USB_HCI = n' $MAKEFILE
	fi

	if [ $type = pci ]; then
		sed -i '/CONFIG_PCI_HCI = / c\CONFIG_PCI_HCI = y' $MAKEFILE
	else
		sed -i '/CONFIG_PCI_HCI = / c\CONFIG_PCI_HCI = n' $MAKEFILE
	fi

	if [ $type = sdio ]; then
		sed -i '/CONFIG_SDIO_HCI = / c\CONFIG_SDIO_HCI = y' $MAKEFILE
	else
		sed -i '/CONFIG_SDIO_HCI = / c\CONFIG_SDIO_HCI = n' $MAKEFILE
	fi

	if [ $type = gspi ]; then
		sed -i '/CONFIG_GSPI_HCI = / c\CONFIG_GSPI_HCI = y' $MAKEFILE
	else
		sed -i '/CONFIG_GSPI_HCI = / c\CONFIG_GSPI_HCI = n' $MAKEFILE
	fi
}

set_autoconf_chip()
{
	# interface
	case "$CHIP" in
		[Rr][Tt][Ll]8852[Aa])
			type=rtl8852a
			;;
		[Rr][Tt][Ll]8852[Bb])
			type=rtl8852b
			;;
		[Rr][Tt][Ll]8852[Cc])
			type=rtl8852c
			;;
		[Rr][Tt][Ll]8852[Dd])
			type=rtl8852d
			;;
		[Rr][Tt][Ll]8832[Bb][Rr])
			type=rtl8832br
			;;	
		[Rr][Tt][Ll]8192[Xx][Bb])
			type=rtl8192xb
			;;
			*)
			echo "Unknown chip type"
			;;
	esac

	sed -i '/CONFIG_BTC = / c\CONFIG_BTC = n' $MAKEFILE
	#tx_power_config 2 2

	if [ $type = rtl8852a ]; then
		sed -i '/CONFIG_RTL8852A = / c\CONFIG_RTL8852A = y' $MAKEFILE
		#sed -i '/CONFIG_BTC = / c\CONFIG_BTC = y' $MAKEFILE
	else
		sed -i '/CONFIG_RTL8852A = / c\CONFIG_RTL8852A = n' $MAKEFILE
	fi

	if [ $type = rtl8852b ]; then
		sed -i '/CONFIG_RTL8852B = / c\CONFIG_RTL8852B = y' $MAKEFILE
		#sed -i '/CONFIG_BTC = / c\CONFIG_BTC = y' $MAKEFILE
	else
		sed -i '/CONFIG_RTL8852B = / c\CONFIG_RTL8852B = n' $MAKEFILE
	fi
	
	if [ $type = rtl8852c ]; then
		sed -i '/CONFIG_RTL8852C = / c\CONFIG_RTL8852C = y' $MAKEFILE
		#sed -i '/CONFIG_BTC = / c\CONFIG_BTC = y' $MAKEFILE
	else
		sed -i '/CONFIG_RTL8852C = / c\CONFIG_RTL8852C = n' $MAKEFILE
	fi

	if [ $type = rtl8852d ]; then
		sed -i '/CONFIG_RTL8852D = / c\CONFIG_RTL8852D = y' $MAKEFILE
		#sed -i '/CONFIG_BTC = / c\CONFIG_BTC = y' $MAKEFILE
	else
		sed -i '/CONFIG_RTL8852D = / c\CONFIG_RTL8852D = n' $MAKEFILE
	fi

	if [ $type = rtl8832br ]; then
		sed -i '/CONFIG_RTL8832BR = / c\CONFIG_RTL8832BR = y' $MAKEFILE
		#sed -i '/CONFIG_BTC = / c\CONFIG_BTC = y' $MAKEFILE
	else
		sed -i '/CONFIG_RTL8832BR = / c\CONFIG_RTL8832BR = n' $MAKEFILE
	fi
	
	if [ $type = rtl8192xb ]; then
		sed -i '/CONFIG_RTL8192XB = / c\CONFIG_RTL8192XB = y' $MAKEFILE
		#sed -i '/CONFIG_BTC = / c\CONFIG_BTC = y' $MAKEFILE
	else
		sed -i '/CONFIG_RTL8192XB = / c\CONFIG_RTL8192XB = n' $MAKEFILE
	fi

}

set_autoconf()
{
	set_autoconf_intf
	set_autoconf_chip
}


#========================================
# Sub functions
#========================================

get_coex_version()
{
	local ICName			# Target IC name
	local CoexDate
	local CoexDateShare="00000000"	# 8 digital characters for Date YYYYMMDD
	local CoexVerShare="00"		# 2 hex characters for Version
	local CoexDateIDV="00000000"	# 8 digital characters for Date YYYYMMDD
	local CoexVerIDV="00"		# 2 hex characters for Version
	# Share Antenna
	local FileShare			# File Name
	local StrDateShare		# String for grep Coex Date
	local StrVerShare		# String for grep Coex Version
	# Individual Antenna
	local FileIDV			# File Name
	local StrDateIDV		# String for grep Coex Date
	local StrVerIDV			# String for grep Coex Version

	if [ $1 ]; then
		ICName=$1
	else
		if [ $CHIP ]; then
			ICName=$CHIP
		else
			if [ $card ]; then
				ICName=$card
			else
				echo "Unknown target for generate COEX version!!"
				return
			fi
		fi
	fi

	case "$ICName" in

	*)
		echo "Can't find coex information for $ICName !!"
		return
		;;
	esac

	# Parse Share Antenna Information
	if [ -f "$FileShare" ]; then
		CoexDateShare=`grep $StrDateShare $FileShare | sed 's/ //g' | awk -F '=' '{printf $2}' | awk -F ';' '{printf $1}'`
		CoexVerShare=`grep $StrVerShare $FileShare | sed 's/ //g' | sed 's/0x//g' | awk -F '=' '{printf $2}' | awk -F ';' '{printf $1}'`
	fi
	# Parse Individual Antenna Information
	if [ -f "$FileIDV" ]; then
		CoexDateIDV=`grep $StrDateIDV $FileIDV | sed 's/ //g' | awk -F '=' '{printf $2}' | awk -F ';' '{printf $1}'`
		CoexVerIDV=`grep $StrVerIDV $FileIDV | sed 's/ //g' | sed 's/0x//g' | awk -F '=' '{printf $2}' | awk -F ';' '{printf $1}'`
	fi

	if [ $CoexDateShare -lt $CoexDateIDV ]; then
		CoexDate=$CoexDateIDV
	else
		CoexDate=$CoexDateShare
	fi
	coex_version="COEX"$CoexDate-$CoexVerShare$CoexVerIDV
}

get_coex_version_common()
{
	local ICName			# Target IC name
	local CoexDate
	local CoexDateCmn="00000000"	# 8 digital characters for Date YYYYMMDD
	local CoexVerCmn="00"		# 2 hex characters for Version
	local FileCmn			# File Name
	local StrDateCmn		# String for grep Coex Date
	local StrVerCmn		# String for grep Coex Version
	local CoexDatePara="00000000"
	local CoexVerPara="00"
	local FilePara
	local StrDatePara
	local StrVerPara

	if [ $1 ]; then
		ICName=$1
	else
		if [ $CHIP ]; then
			ICName=$CHIP
		else
			if [ $card ]; then
				ICName=$card
			else
				echo "Unknown target for generate COEX version!!"
				return
			fi
		fi
	fi

	FileCmn="./hal/btc/halbtccommon.c"
	StrDateCmn="u32\scoex_ver_date"
	StrVerCmn="u32\scoex_ver\s="
	CoexDateCmn=`grep $StrDateCmn $FileCmn |  sed 's/ //g' | awk -F '=' '{printf $2}' | awk -F ';' '{printf $1}'`
	CoexVerCmn=`grep $StrVerCmn $FileCmn | sed 's/ //g' | awk -F '=' '{printf $2}' | awk -F ';' '{printf "%02x",$1}'`

	StrDatePara="para_ver_date"
	StrVerPara="para_ver\s"
	CoexDatePara=`grep $StrDatePara $FilePara | awk -F ',' '{printf "%d",$1}'`
	CoexVerPara=`grep $StrVerPara $FilePara | awk -F ',' '{printf "%02x",$1}'`

	if [ $CoexDateCmn -lt $CoexDatePara ]; then
		CoexDate=$CoexDatePara
	else
		CoexDate=$CoexDateCmn
	fi
	coex_version="COEX"$CoexDate-$CoexVerCmn$CoexVerPara
}

get_svn_revision()
{
	if [ -z "$svn_rev" ] && [ -f .svn/entries ]; then
		svn_rev=`sed -n '11 s/^\([0-9][0-9]*\)$/\1/p' .svn/entries`
	fi
	if [ -z "$svn_rev" ]; then
		svn_rev=`svn info|grep "Last Changed Rev:"|awk -F ': ' '{print $2}'`
	fi
	if [ -z "$svn_rev" ]; then
		svn_rev="xxxx"
	fi
}

add_version_file()
{
	str_version="#define DRIVERVERSION\t\"$postfix\""
	echo -e $str_version > $folder/include/rtw_version.h

	if [ "$coex_version" ]; then
		str_version="#define BTCOEXVERSION\t\"$coex_version\""
		echo -e $str_version >> $folder/include/rtw_version.h
	fi
}

create_folder_name()
{
	if [ "$coex_version" ]; then
		postfix=$postfix"_"$coex_version
	fi

	# Please remove the "_beta" at formal release time
	if [ $BETA = 1 ]; then
		postfix=$postfix"_beta"
	fi

	folder=$1"_"$postfix
}

tx_power_config()
{
	if [ $1 = 0 ]; then
		sed -i '/CONFIG_TXPWR_BY_RATE_EN = / c\CONFIG_TXPWR_BY_RATE_EN = n' $MAKEFILE
	elif [ $1 = 1 ]; then
		sed -i '/CONFIG_TXPWR_BY_RATE_EN = / c\CONFIG_TXPWR_BY_RATE_EN = y' $MAKEFILE
	else
		sed -i '/CONFIG_TXPWR_BY_RATE_EN = / c\CONFIG_TXPWR_BY_RATE_EN = auto' $MAKEFILE
	fi

	if [ $2 = 0 ]; then
		sed -i '/CONFIG_TXPWR_LIMIT_EN = / c\CONFIG_TXPWR_LIMIT_EN = n' $MAKEFILE
	elif [ $2 = 1 ]; then
		sed -i '/CONFIG_TXPWR_LIMIT_EN = / c\CONFIG_TXPWR_LIMIT_EN = y' $MAKEFILE
	else
		sed -i '/CONFIG_TXPWR_LIMIT_EN = / c\CONFIG_TXPWR_LIMIT_EN = auto' $MAKEFILE
	fi
}

release_8852ae()
{
	HCI="pci"
	HCI2="pcie"
	CHIP="rtl8852a"
	CHIP_1="rtl8852a"
	HAL="hal_g6"
	BTCOEX_EN_SEL=1
	icname="8852a"

	make_common_dir
	copy_common_file $1
	copy_btc_file

	#copy HALMAC files
	copy_halmac_file $CHIP $HCI

	copy_halphy_file

	MAKEFILE=$folder/Makefile
	set_autoconf $1

	sed -i '/obj-$(CONFIG_RTL/ c\obj-$(CONFIG_RTL8852AE) := $(MODULE_NAME).o' $MAKEFILE
	sed -i '/export CONFIG_RTL/ c\export CONFIG_RTL8852AE = m' $MAKEFILE
}

release_8852au()
{
	HCI="usb"
	CHIP="rtl8852a"
	CHIP_1="rtl8852a"
	HAL="hal_g6"
	BTCOEX_EN_SEL=1
	icname="8852a"

	make_common_dir
	copy_common_file $1
	copy_btc_file

	# copy HALMAC files
	copy_halmac_file $CHIP $HCI

	copy_halphy_file

	MAKEFILE=$folder/Makefile
	set_autoconf $1

	#tx_power_config 1 0

	sed -i '/obj-$(CONFIG_RTL/ c\obj-$(CONFIG_RTL8852AU) := $(MODULE_NAME).o' $MAKEFILE
	sed -i '/export CONFIG_RTL/ c\export CONFIG_RTL8852AU = m' $MAKEFILE
}

release_8852as()
{
	HCI="sdio"
	CHIP="rtl8852a"
	CHIP_1="rtl8852a"
	HAL="hal_g6"
	BTCOEX_EN_SEL=1
	icname="8852a"

	make_common_dir
	copy_common_file $1
	copy_btc_file

	# copy HALMAC files
	copy_halmac_file $CHIP $HCI

	copy_halphy_file

	MAKEFILE=$folder/Makefile
	set_autoconf $1

	#x_power_config 1 0

	sed -i '/obj-$(CONFIG_RTL/ c\obj-$(CONFIG_RTL8852AS) := $(MODULE_NAME).o' $MAKEFILE
	sed -i '/export CONFIG_RTL/ c\export CONFIG_RTL8852AS = m' $MAKEFILE
}

release_8852be()
{
	HCI="pci"
	HCI2="pcie"
	CHIP="rtl8852b"
	CHIP_1="rtl8852b"
	HAL="hal_g6"
	BTCOEX_EN_SEL=1
	icname="8852b"

	make_common_dir
	copy_common_file $1
	copy_btc_file

	#copy HALMAC files
	copy_halmac_file $CHIP $HCI

	copy_halphy_file

	MAKEFILE=$folder/Makefile
	set_autoconf $1

	sed -i '/obj-$(CONFIG_RTL/ c\obj-$(CONFIG_RTL8852BE) := $(MODULE_NAME).o' $MAKEFILE
	sed -i '/export CONFIG_RTL/ c\export CONFIG_RTL8852BE = m' $MAKEFILE
}

release_8852bu()
{
	HCI="usb"
	CHIP="rtl8852b"
	CHIP_1="rtl8852b"
	HAL="hal_g6"
	BTCOEX_EN_SEL=1
	icname="8852b"

	make_common_dir
	copy_common_file $1
	copy_btc_file

	# copy HALMAC files
	copy_halmac_file $CHIP $HCI

	copy_halphy_file

	MAKEFILE=$folder/Makefile
	set_autoconf $1

	#tx_power_config 1 0

	sed -i '/obj-$(CONFIG_RTL/ c\obj-$(CONFIG_RTL8852BU) := $(MODULE_NAME).o' $MAKEFILE
	sed -i '/export CONFIG_RTL/ c\export CONFIG_RTL8852BU = m' $MAKEFILE
}

release_8852bs()
{
	HCI="sdio"
	CHIP="rtl8852b"
	CHIP_1="rtl8852b"
	HAL="hal_g6"
	BTCOEX_EN_SEL=1
	icname="8852b"

	make_common_dir
	copy_common_file $1
	copy_btc_file

	# copy HALMAC files
	copy_halmac_file $CHIP $HCI

	copy_halphy_file

	MAKEFILE=$folder/Makefile
	set_autoconf $1

	#x_power_config 1 0

	sed -i '/obj-$(CONFIG_RTL/ c\obj-$(CONFIG_RTL8852BS) := $(MODULE_NAME).o' $MAKEFILE
	sed -i '/export CONFIG_RTL/ c\export CONFIG_RTL8852BS = m' $MAKEFILE
}

release_8852ce()
{
	HCI="pci"
	HCI2="pcie"
	CHIP="rtl8852c"
	CHIP_1="rtl8852c"
	HAL="hal_g6"
	BTCOEX_EN_SEL=1
	icname="8852c"

	make_common_dir
	copy_common_file $1
	copy_btc_file

	#copy HALMAC files
	copy_halmac_file $CHIP $HCI

	copy_halphy_file

	MAKEFILE=$folder/Makefile
	set_autoconf $1

	sed -i '/obj-$(CONFIG_RTL/ c\obj-$(CONFIG_RTL8852CE) := $(MODULE_NAME).o' $MAKEFILE
	sed -i '/export CONFIG_RTL/ c\export CONFIG_RTL8852CE = m' $MAKEFILE
}

release_8852de()
{
	HCI="pci"
	HCI2="pcie"
	CHIP="rtl8852d"
	CHIP_1="rtl8852d"
	HAL="hal_g6"
	BTCOEX_EN_SEL=1
	icname="8852d"

	make_common_dir
	copy_common_file $1
	copy_btc_file

	#copy HALMAC files
	copy_halmac_file $CHIP $HCI

	copy_halphy_file

	MAKEFILE=$folder/Makefile
	set_autoconf $1

	sed -i '/obj-$(CONFIG_RTL/ c\obj-$(CONFIG_RTL8852DE) := $(MODULE_NAME).o' $MAKEFILE
	sed -i '/export CONFIG_RTL/ c\export CONFIG_RTL8852DE = m' $MAKEFILE
}

release_8832br()
{
	HCI="pci"
	HCI2="pcie"
	CHIP="rtl8832br"
	CHIP_1="rtl8832br"
	HAL="hal_g6"
	BTCOEX_EN_SEL=0
	icname="8832br"

	make_common_dir
	copy_common_file $1
	copy_btc_file

	#copy HALMAC files
	copy_halmac_file $CHIP $HCI

	copy_halphy_file

	MAKEFILE=$folder/Makefile
	set_autoconf $1

	sed -i '/obj-$(CONFIG_RTL/ c\obj-$(CONFIG_RTL8832BR) := $(MODULE_NAME).o' $MAKEFILE
	sed -i '/export CONFIG_RTL/ c\export CONFIG_RTL8832BR = m' $MAKEFILE
}

release_8192xb()
{
	HCI="pci"
	HCI2="pcie"
	CHIP="rtl8192xb"
	CHIP_1="rtl8192xb"
	HAL="hal_g6"
	BTCOEX_EN_SEL=0 
	icname="8192xb"

	make_common_dir
	copy_common_file $1
	copy_btc_file

	#copy HALMAC files
	copy_halmac_file $CHIP $HCI

	copy_halphy_file

	MAKEFILE=$folder/Makefile
	set_autoconf $1

	sed -i '/obj-$(CONFIG_RTL/ c\obj-$(CONFIG_RTL8192XB) := $(MODULE_NAME).o' $MAKEFILE
	sed -i '/export CONFIG_RTL/ c\export CONFIG_RTL8192XB = m' $MAKEFILE
}

make_common_dir()
{
	mkdir -p $folder
	mkdir -p $folder/core
	mkdir -p $folder/core/crypto
	mkdir -p $folder/core/mesh
	mkdir -p $folder/core/monitor
	mkdir -p $folder/phl
	mkdir -p $folder/phl/$HAL
	mkdir -p $folder/phl/$HAL/efuse
	mkdir -p $folder/phl/$HAL/test
	mkdir -p $folder/phl/$HAL/$CHIP/
	mkdir -p $folder/phl/$HAL/$CHIP/$HCI
	mkdir -p $folder/phl/$HAL/test/mp

	mkdir -p $folder/phl/hci
	mkdir -p $folder/phl/test
	mkdir -p $folder/phl/test/mp

	mkdir -p $folder/include
	mkdir -p $folder/os_dep
	mkdir -p $folder/os_dep/linux
	mkdir -p $folder/platform
}

copy_hci_file()
{
	cp phl/$HAL/$CHIP/$HCI/*.c $folder/phl/$HAL/$CHIP/$HCI
	cp phl/$HAL/$CHIP/$HCI/*.h $folder/phl/$HAL/$CHIP/$HCI

	cp autoconf_$CHIP_1"_"$HCI"_"linux.h $folder/include/autoconf.h
	cp Kconfig_$CHIP_1"_"$HCI"_"linux $folder/Kconfig
	if [ "$1" = "keep_autoconf" ]; then
		cp autoconf_$CHIP_1"_"$HCI"_"linux.h $folder/.
		cp Kconfig_$CHIP_1"_"$HCI"_"linux $folder/.
		sed -i '/CONFIG_AUTOCFG_CP = / c\CONFIG_AUTOCFG_CP = y' $folder/Makefile
	else
		sed -i '/CONFIG_AUTOCFG_CP = / c\CONFIG_AUTOCFG_CP = n' $folder/Makefile
	fi

	if [ -f "$CHIP.mk" ]; then
		cp $CHIP.mk $folder/
	fi
}

copy_common_file()
{
	cp Makefile $folder/Makefile
	cp common.mk $folder/common.mk

	cp script/wlan0dhcp $folder/.
	cp script/ifcfg-wlan0 $folder/.
	cp script/runwpa $folder/.
	cp script/clean $folder/.

	add_version_file
	cp -fr include $folder/.

	cp core/*.c $folder/core
	cp core/*.h $folder/core
	cp core/crypto/* $folder/core/crypto/.
	cp core/mesh/* $folder/core/mesh/.
	cp core/monitor/* $folder/core/monitor/.

	cp os_dep/osdep_service.c $folder/os_dep/.
	cp os_dep/osdep_service_linux.c $folder/os_dep/.
	cp os_dep/linux/ioctl_cfg80211.c $folder/os_dep/linux/.
	cp os_dep/linux/ioctl_cfg80211.h $folder/os_dep/linux/.
	cp os_dep/linux/rtw_cfgvendor.c $folder/os_dep/linux/.
	cp os_dep/linux/rtw_cfgvendor.h $folder/os_dep/linux/.
	cp os_dep/linux/ioctl_linux.c $folder/os_dep/linux/.
	cp os_dep/linux/ioctl_mp.c $folder/os_dep/linux/.
	cp os_dep/linux/mlme_linux.c $folder/os_dep/linux/.
	cp os_dep/linux/recv_linux.c $folder/os_dep/linux/.
	cp os_dep/linux/xmit_linux.c $folder/os_dep/linux/.
	cp os_dep/linux/os_intfs.c $folder/os_dep/linux/.
	cp os_dep/linux/"$HCI"_intf.c $folder/os_dep/linux/.
	cp os_dep/linux/"$HCI"_ops_linux.c $folder/os_dep/linux/.
	cp os_dep/linux/rtw_android.c $folder/os_dep/linux/.
	cp os_dep/linux/custom_gpio_linux.c $folder/os_dep/linux/.
	cp os_dep/linux/rtw_proc.c $folder/os_dep/linux/.
	cp os_dep/linux/rtw_proc.h $folder/os_dep/linux/.
	cp os_dep/linux/wifi_regd.c $folder/os_dep/linux/.
	cp os_dep/linux/wifi_regd.h $folder/os_dep/linux/.
	cp os_dep/linux/rtw_rhashtable.c $folder/os_dep/linux/.
	cp os_dep/linux/rtw_rhashtable.h $folder/os_dep/linux/.
	cp os_dep/linux/rhashtable.c $folder/os_dep/linux/.
	cp os_dep/linux/rhashtable.h $folder/os_dep/linux/.
	cp os_dep/linux/rtw_cfg.c $folder/os_dep/linux/.

	cp platform/*.c $folder/platform/.
	cp platform/*.h $folder/platform/.
	cp platform/*.mk $folder/platform/.

	cp phl/*.c $folder/phl
	cp phl/*.h $folder/phl
	cp phl/phl.mk $folder/phl
	if [ "$HCI" == "pci" ]; then
		cp os_dep/linux/ioctl_linux_ap.c $folder/os_dep/linux/.
		cp phl/hci/phl_trx_"$HCI2".c $folder/phl/hci/.
		cp phl/hci/phl_trx_"$HCI2".h $folder/phl/hci/.
		cp phl/hci/phl_trx_def_"$HCI2".h $folder/phl/hci/.
	else
		cp phl/hci/phl_trx_"$HCI".c $folder/phl/hci/.
		cp phl/hci/phl_trx_"$HCI".h $folder/phl/hci/.
		cp phl/hci/phl_trx_def_"$HCI".h $folder/phl/hci/.
	fi
	cp phl/test/*.c $folder/phl/test
	cp phl/test/*.h $folder/phl/test
	cp phl/test/mp/*.c $folder/phl/test/mp
	cp phl/test/mp/*.h $folder/phl/test/mp

	cp phl/$HAL/*.c $folder/phl/$HAL
	cp phl/$HAL/*.h $folder/phl/$HAL
	cp phl/$HAL/hal.mk $folder/phl/$HAL

	# remove unused interface files
	if [ "$HCI" != "pci" ]; then
		rm $folder/phl/$HAL/*_pci*
	fi
	if [ "$HCI" != "sdio" ]; then
		rm $folder/phl/$HAL/*_sdio*
	fi
	if [ "$HCI" != "usb" ]; then
		rm $folder/phl/$HAL/*_usb*
	fi

	cp phl/$HAL/efuse/*.c $folder/phl/$HAL/efuse
	cp phl/$HAL/efuse/*.h $folder/phl/$HAL/efuse

	cp phl/$HAL/$CHIP/*.c $folder/phl/$HAL/$CHIP
	cp phl/$HAL/$CHIP/*.h $folder/phl/$HAL/$CHIP
	cp phl/$HAL/$CHIP/"$CHIP".mk $folder/phl/$HAL/$CHIP

	cp phl/$HAL/test/*.c $folder/phl/$HAL/test
	cp phl/$HAL/test/mp/*.c $folder/phl/$HAL/test/mp
	cp phl/$HAL/test/mp/*.h $folder/phl/$HAL/test/mp

	copy_hci_file $1
}

copy_halmac_file()
{

	mkdir -p $folder/phl/$HAL/mac
	cp phl/$HAL/mac/*.c $folder/phl/$HAL/mac/.
	cp phl/$HAL/mac/*.h $folder/phl/$HAL/mac/.
	cp phl/$HAL/mac/mac.mk $folder/phl/$HAL/mac/.

	mkdir -p $folder/phl/$HAL/mac/mac_ax
	cp phl/$HAL/mac/mac_ax/*.c $folder/phl/$HAL/mac/mac_ax/.
	cp phl/$HAL/mac/mac_ax/*.h $folder/phl/$HAL/mac/mac_ax/.

	mkdir -p $folder/phl/$HAL/mac/mac_ax/mac_$icname
	cp phl/$HAL/mac/mac_ax/mac_$icname/*.c $folder/phl/$HAL/mac/mac_ax/mac_$icname/.
	cp phl/$HAL/mac/mac_ax/mac_$icname/*.h $folder/phl/$HAL/mac/mac_ax/mac_$icname/.

	mkdir -p $folder/phl/$HAL/mac/fw_ax
	mkdir -p $folder/phl/$HAL/mac/fw_ax/rtl$icname
	cp phl/$HAL/mac/fw_ax/rtl$icname/*.c $folder/phl/$HAL/mac/fw_ax/rtl$icname/.
	cp phl/$HAL/mac/fw_ax/rtl$icname/*.h $folder/phl/$HAL/mac/fw_ax/rtl$icname/.

	# remove unused interface files
	if [ "$HCI" != "pci" ]; then
		rm $folder/phl/$HAL/mac/mac_ax/*_pcie*
	fi
	if [ "$HCI" != "sdio" ]; then
		rm $folder/phl/$HAL/mac/mac_ax/*_sdio*
	fi
	if [ "$HCI" != "usb" ]; then
		rm $folder/phl/$HAL/mac/mac_ax/*_usb*
	fi
}

copy_btc_file()
{
	if [ $BTCOEX_EN_SEL = 1 ]; then
		mkdir -p $folder/phl/$HAL/btc
		cp phl/$HAL/btc/*.c $folder/phl/$HAL/btc/.
		cp phl/$HAL/btc/*.h $folder/phl/$HAL/btc/.
		cp phl/$HAL/btc/btc.mk $folder/phl/$HAL/btc/.

		mkdir -p $folder/phl/$HAL/btc/btc_$icname
		cp phl/$HAL/btc/btc_$icname/*.c $folder/phl/$HAL/btc/btc_$icname/.
		cp phl/$HAL/btc/btc_$icname/*.h $folder/phl/$HAL/btc/btc_$icname/.
	fi
}

copy_halphy_file()
{
	mkdir -p $folder/phl/$HAL/phy

	mkdir -p $folder/phl/$HAL/phy/bb
	cp phl/$HAL/phy/bb/*.c $folder/phl/$HAL/phy/bb/.
	cp phl/$HAL/phy/bb/*.h $folder/phl/$HAL/phy/bb/.
	cp phl/$HAL/phy/bb/bb.mk $folder/phl/$HAL/phy/bb/.

	mkdir -p $folder/phl/$HAL/phy/bb/halbb_$icname
	cp phl/$HAL/phy/bb/halbb_$icname/*.c $folder/phl/$HAL/phy/bb/halbb_$icname/.
	cp phl/$HAL/phy/bb/halbb_$icname/*.h $folder/phl/$HAL/phy/bb/halbb_$icname/.

	if [ $icname = "8852a" -a -d phl/$HAL/phy/bb/halbb_${icname}_2 ]; then
		mkdir -p $folder/phl/$HAL/phy/bb/halbb_${icname}_2
		cp phl/$HAL/phy/bb/halbb_${icname}_2/*.c $folder/phl/$HAL/phy/bb/halbb_${icname}_2/.
		cp phl/$HAL/phy/bb/halbb_${icname}_2/*.h $folder/phl/$HAL/phy/bb/halbb_${icname}_2/.
	fi

	mkdir -p $folder/phl/$HAL/phy/rf
	cp phl/$HAL/phy/rf/*.c $folder/phl/$HAL/phy/rf/.
	cp phl/$HAL/phy/rf/*.h $folder/phl/$HAL/phy/rf/.
	cp phl/$HAL/phy/rf/rf.mk $folder/phl/$HAL/phy/rf/.

	mkdir -p $folder/phl/$HAL/phy/rf/halrf_$icname
	cp phl/$HAL/phy/rf/halrf_$icname/*.c $folder/phl/$HAL/phy/rf/halrf_$icname/.
	cp phl/$HAL/phy/rf/halrf_$icname/*.h $folder/phl/$HAL/phy/rf/halrf_$icname/.
}

clean_old()
{
	rm -fr $folder
	rm -fr $folder.tar.gz
}

clean_folder()
{
	rm -rf $folder/.svn
	rm -rf $folder/include/.svn
	rm -rf $folder/include/*/.svn

	rm -rf $folder/core/.svn
	rm -rf $folder/core/efuse/.svn

	rm -rf $folder/hal/.svn
	rm -rf $folder/hal/*/.svn
	rm -rf $folder/hal/*/*/.svn

	rm -rf $folder/os_dep/.svn
	rm -rf $folder/os_dep/linux/.svn

	rm -rf $folder/platform/.svn
}

remove_unused()
{
	remove_marker="
		$folder/Makefile
	"

	for file in $remove_marker; do
		echo "----> remove marker from $file"
		sed -i "/REMOVE BEGIN/,/REMOVE END/d" $file
	done

	if [ $GEN_GIT_INFO = 1 ]; then
		sed -i '/CONFIG_GEN_GIT_INFO / c\#define CONFIG_GEN_GIT_INFO 1' $folder/phl/phl_config.h
	else
		sed -i '/CONFIG_GEN_GIT_INFO / c\#define CONFIG_GEN_GIT_INFO 0' $folder/phl/phl_config.h
		sed -i "/REMOVE BEGIN/,/REMOVE END/d" $folder/phl/test/phl_dbg_cmd.c
		rm $folder/phl/phl_git_info.h
	fi
}

zip_folder()
{
	tar -zcvf $folder.tar.gz $folder/
	#tar -zcvf $folder.tar.gz $folder/  > /dev/null 2>&1
	#rm -fr $folder
}

package()
{
	clean_folder
	remove_unused
	zip_folder
}

btcoex_enable_select()
{
	#BTCOEX_EN_SEL=0
	# Make Other selection
	if [ -z "$BTCOEX_EN_SEL" ];then
		echo "=================================="
		echo "Do you want to Enable BT coex?"
		select _option in "yes" "no";
		do
			if [ "$_option" = "yes" ]; then
				BTCOEX_EN_SEL=1
			else
				BTCOEX_EN_SEL=0
			fi
			break
		done
	fi
}

#========================================
# Main Script Start From Here
#========================================

# set variables
MAKEFILE="Makefile"

# target folder
folder8852au="rtl8852AU_WiFi_linux"
folder8852as="rtl8852AS_WiFi_linux"
folder8852ae="rtl8852AE_WiFi_linux"
folder8852bu="rtl8852BU_WiFi_linux"
folder8852bs="rtl8852BS_WiFi_linux"
folder8852be="rtl8852BE_WiFi_linux"
folder8852cu="rtl8852CU_WiFi_linux"
folder8852cs="rtl8852CS_WiFi_linux"
folder8852ce="rtl8852CE_WiFi_linux"
folder8852du="rtl8852DU_WiFi_linux"
folder8852ds="rtl8852DS_WiFi_linux"
folder8852de="rtl8852DE_WiFi_linux"
folder8832bu="rtl8832BU_WiFi_linux"
folder8832bs="rtl8832BS_WiFi_linux"
folder8832br="rtl8832BR_WiFi_linux"
folder8192xbu="rtl8192XBU_WiFi_linux"
folder8192xbs="rtl8192XBS_WiFi_linux"
folder8192xbr="rtl8192XBR_WiFi_linux"


# Select NIC type
declare -a chipsOption
chipsOption=()
chipsOption+=(RTL8852ae RTL8852au RTL8852as)
chipsOption+=(RTL8852be RTL8852bu RTL8852bs)
chipsOption+=(RTL8852ce RTL8852cu RTL8852cs)
chipsOption+=(RTL8852de RTL8852du RTL8852ds)
chipsOption+=(RTL8832br RTL8832bu RTL8832bs)
chipsOption+=(RTL8192xbr RTL8192xbu RTL8192xbs)

if [ -z "$1" ]; then
	echo "Please select release type(1-${#chipsOption[*]}):"
	select card in "${chipsOption[@]}" ;
	do
		echo "You have selected $card"
		break
	done
else
	card=$1
fi

#BETA=0
# Make Other selection
if [ -z "$BETA" ];then
	echo "=================================="
	echo "Do you want to Make beta driver?"
	select _option in "yes" "no";
	do
		if [ "$_option" = "yes" ]; then
			BETA=1
		else
			BETA=0
		fi
		break
	done
fi

if [ -z "$GEN_GIT_INFO" ];then
	echo "=================================="
	echo "Do you want to generate phl_git_info.h?"
	select _option in "yes" "no";
	do
		if [ "$_option" = "yes" ]; then
			GEN_GIT_INFO=1
			if [ -f ./phl/gen_git_info.sh ]; then
				./phl/gen_git_info.sh $(pwd)
			fi
		else
			GEN_GIT_INFO=0
		fi
		break
	done
fi

# Make Version string
if [ -z "$2" ]; then
	if [ -f .git/config ]; then
		version=`git describe --tags --long`
	else
		get_svn_revision
		version="v0.0.0_"$svn_rev
	fi
	datestr=$(date +%Y%m%d)
	postfix=$version.$datestr
else
	postfix=$2
fi

# Make
case "$card" in
	[Rr][Tt][Ll]8852[Aa][Uu])
		#get_coex_version
		create_folder_name $folder8852au
		clean_old
		release_8852au
		package
		;;
	[Rr][Tt][Ll]8852[Aa][Ss])
		#get_coex_version
		create_folder_name $folder8852as
		clean_old
		release_8852as
		package
		;;
	[Rr][Tt][Ll]8852[Aa][Ee])
		#get_coex_version
		create_folder_name $folder8852ae
		clean_old
		release_8852ae
		package
		;;
	[Rr][Tt][Ll]8852[Bb][Uu])
		#get_coex_version
		create_folder_name $folder8852bu
		clean_old
		release_8852bu
		package
		;;
	[Rr][Tt][Ll]8852[Bb][Ss])
		#get_coex_version
		create_folder_name $folder8852bs
		clean_old
		release_8852bs
		package
		;;
	[Rr][Tt][Ll]8852[Bb][Ee])
		#get_coex_version
		create_folder_name $folder8852be
		clean_old
		release_8852be
		package
		;;
	[Rr][Tt][Ll]8852[Cc][Uu])
		#get_coex_version
		create_folder_name $folder8852cu
		clean_old
		release_8852cu
		package
		;;
	[Rr][Tt][Ll]8852[Cc][Ss])
		#get_coex_version
		create_folder_name $folder8852cs
		clean_old
		release_8852cs
		package
		;;
	[Rr][Tt][Ll]8852[Cc][Ee])
		#get_coex_version
		create_folder_name $folder8852ce
		clean_old
		release_8852ce
		package
		;;
	[Rr][Tt][Ll]8852[Dd][Uu])
		#get_coex_version
		create_folder_name $folder8852du
		clean_old
		release_8852du
		package
		;;
	[Rr][Tt][Ll]8852[Dd][Ss])
		#get_coex_version
		create_folder_name $folder8852ds
		clean_old
		release_8852ds
		package
		;;
	[Rr][Tt][Ll]8852[Dd][Ee])
		#get_coex_version
		create_folder_name $folder8852de
		clean_old
		release_8852de
		package
		;;
	[Rr][Tt][Ll]8832[Bb][Uu])
		#get_coex_version
		create_folder_name $folder8832bu
		clean_old
		release_8832bu
		package
		;;
	[Rr][Tt][Ll]8832[Bb][Ss])
		#get_coex_version
		create_folder_name $folder8832bs
		clean_old
		release_8832bs
		package
		;;
	[Rr][Tt][Ll]8832[Bb][Rr])
		#get_coex_version
		create_folder_name $folder8832br
		clean_old
		release_8832br
		package
		;;	
	[Rr][Tt][Ll]8192[Xx][Bb][Uu])
		#get_coex_version
		create_folder_name $folder8192xbu
		clean_old
		release_8192xbu
		package
		;;
	[Rr][Tt][Ll]8192[Xx][Bb][Ss])
		#get_coex_version
		create_folder_name $folder8192xbs
		clean_old
		release_8192xbs
		package
		;;
	[Rr][Tt][Ll]8192[Xx][Bb][Rr])
		#get_coex_version
		create_folder_name $folder8192xbr
		clean_old
		release_8192xbr
		package
		;;
	*)
		echo "Unknown NIC type"
		;;
esac
