#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2018-2019 Rupert Eibauer. All rights reserved.

cd arch/avr/scripts

VERSION="1.2.272"
MD5SUM="e35f87c039fa923195ab12bc3d848260"

if [ ! -d atdf ]; then
	FILENAME="Atmel.ATmega_DFP.$VERSION.atpack"

#	if [ ! -f $FILENAME ]; then
		wget -c http://packs.download.atmel.com/$FILENAME
		if [ "$(md5sum $FILENAME)" != "$MD5SUM  $FILENAME" ]; then
			echo "MD5SUM of $FILENAME does not match."
			exit 1
		fi
#	fi
	unzip $FILENAME "atdf/*.atdf"
fi



DEVICES=$(
	cd atdf
	ls *.atdf | while read fname; do
		echo ${fname:0:-5}
	done
)

# Unfortunately we cannot (yet) decode all pack files. (Stupid CLKSEL. Maybe fall back to 1-dimensional representation.)
# AT90PWM161 seems to be the only one we cannot decode!
DEVICES="AT90CAN128 AT90CAN32 AT90CAN64  AT90PWM1 AT90PWM216"
DEVICES="$DEVICES AT90PWM2B AT90PWM316 AT90PWM3B AT90PWM81 AT90USB1286"
DEVICES="$DEVICES AT90USB1287 AT90USB162 AT90USB646 AT90USB647 AT90USB82"
DEVICES="$DEVICES ATmega1280 ATmega1281 ATmega1284 ATmega1284P ATmega1284RFR2"
DEVICES="$DEVICES ATmega128A ATmega128 ATmega128RFA1 ATmega128RFR2 ATmega1608"
DEVICES="$DEVICES ATmega1609 ATmega162 ATmega164A ATmega164PA ATmega164P"
DEVICES="$DEVICES ATmega165A ATmega165PA ATmega165P ATmega168A ATmega168"
DEVICES="$DEVICES ATmega168PA ATmega168P ATmega168PB ATmega169A ATmega169PA"
DEVICES="$DEVICES ATmega169P ATmega16A ATmega16 ATmega16HVA ATmega16HVB"
DEVICES="$DEVICES ATmega16HVBrevB ATmega16M1 ATmega16U2 ATmega16U4 ATmega2560"
DEVICES="$DEVICES ATmega2561 ATmega2564RFR2 ATmega256RFR2 ATmega3208"
DEVICES="$DEVICES ATmega3209 ATmega324A ATmega324PA ATmega324P ATmega324PB"
DEVICES="$DEVICES ATmega3250A ATmega3250 ATmega3250PA ATmega3250P ATmega325A"
DEVICES="$DEVICES ATmega325 ATmega325PA ATmega325P ATmega328 ATmega328P"
DEVICES="$DEVICES ATmega328PB ATmega3290A ATmega3290 ATmega3290PA ATmega3290P"
DEVICES="$DEVICES ATmega329A ATmega329 ATmega329PA ATmega329P ATmega32A"
DEVICES="$DEVICES ATmega32 ATmega32C1 ATmega32HVB ATmega32HVBrevB ATmega32M1"
DEVICES="$DEVICES ATmega32U2 ATmega32U4 ATmega406 ATmega4808 ATmega4809"
DEVICES="$DEVICES ATmega48A ATmega48 ATmega48PA ATmega48P ATmega48PB ATmega640"
DEVICES="$DEVICES ATmega644A ATmega644 ATmega644PA ATmega644P ATmega644RFR2"
DEVICES="$DEVICES ATmega6450A ATmega6450 ATmega6450P ATmega645A ATmega645"
DEVICES="$DEVICES ATmega645P ATmega6490A ATmega6490 ATmega6490P ATmega649A"
DEVICES="$DEVICES ATmega649 ATmega649P ATmega64A ATmega64 ATmega64C1"
DEVICES="$DEVICES ATmega64HVE2 ATmega64M1 ATmega64RFR2 ATmega808 ATmega809"
DEVICES="$DEVICES ATmega8515 ATmega8535 ATmega88A ATmega88 ATmega88PA"
DEVICES="$DEVICES ATmega88P ATmega88PB ATmega8A ATmega8 ATmega8HVA ATmega8U2"

# For now, use only the most important devices
DEVICES="ATmega8 ATmega32 ATmega328 ATmega328P ATmega48 ATmega64 ATmega128"

rm -rf devs
mkdir devs
rm -f Kconfig.ser

for dev in $DEVICES; do
	echo "  XMLDEC  $dev.atdf"
	if [ ! -f atdf/$dev.atdf ]; then
		echo "Error: File atdf/$dev.atdf does not exist!" >&2
		exit 1
	fi
	php decode_pack.php $dev
	if [ $? != 0 ]; then
		echo "BAD XML $dev.atdf"
		exit 1
	fi
done
echo "  GEN     arch/avr/devs/fuses.Kconfig"
php fuseconfig.php
rm -f Kconfig.ser

rm -rf ../devs
mv devs ../
