#!/bin/bash

# Author: Xianjun Jiao
# SPDX-FileCopyrightText: 2022 UGent
# SPDX-License-Identifier: AGPL-3.0-or-later

# get fpga image file name
if [[ -n $1 ]]; then
  fpga_img_filename=$1
else
  fpga_img_filename=system_top.bit.bin
fi

fpga_type=$(cat /proc/device-tree/compatible)
fpga_img_filename_core=${fpga_img_filename##*/}
echo $fpga_type
echo $fpga_img_filename
echo $fpga_img_filename_core

set -x

ifconfig sdr0 down
rmmod sdr
# rmmod mac80211
# rmmod cfg80211
# rmmod ad9361_drv
# rmmod xilinx_dma.ko
rmmod openofdm_rx
rmmod openofdm_tx
rmmod rx_intf
rmmod tx_intf
rmmod xpu

sleep 1

if [ -f "$fpga_img_filename" ]; then
  echo 0 > /sys/class/fpga_manager/fpga0/flags
  mkdir -p /lib/firmware
  cp $fpga_img_filename /lib/firmware/ -rf
  echo $fpga_img_filename_core > /sys/class/fpga_manager/fpga0/firmware
fi

# insmod ad9361_drv.ko
# sleep 1

if [ "$fpga_type" != "xlnx,zynq-7000" ]; then
  SPI_DEVNAME="spi1.0"
  DDS_DEVNAME="99024000.cf-ad9361-dds-core-lpc"
  ADC_DEVNAME="99020000.cf-ad9361-lpc"
else
  SPI_DEVNAME="spi0.0"
  DDS_DEVNAME="79024000.cf-ad9361-dds-core-lpc"
  ADC_DEVNAME="79020000.cf-ad9361-lpc"
fi

while [ ! -d "/sys/bus/spi/drivers/ad9361/$SPI_DEVNAME" ]
do
   echo "Waiting for /sys/bus/spi/drivers/ad9361/$SPI_DEVNAME"
   sleep 0.2
done
cd /sys/bus/spi/drivers/ad9361/
echo $SPI_DEVNAME > unbind
echo $SPI_DEVNAME > bind

#while [ ! -d "/sys/bus/platform/drivers/cf_axi_dds/$DDS_DEVNAME" ]
#do
#   echo "Waiting for /sys/bus/platform/drivers/cf_axi_dds/$DDS_DEVNAME"
#   sleep 0.2
#done
#cd /sys/bus/platform/drivers/cf_axi_dds/
#echo $DDS_DEVNAME  > unbind
#echo $DDS_DEVNAME  > bind

while [ ! -d "/sys/bus/platform/drivers/cf_axi_adc/$ADC_DEVNAME" ]
do
   echo "Waiting for /sys/bus/platform/drivers/cf_axi_adc/$ADC_DEVNAME"
   sleep 0.2
done
cd /sys/bus/platform/drivers/cf_axi_adc/
echo $ADC_DEVNAME  > unbind
echo $ADC_DEVNAME  > bind

set +x
