#!/bin/bash

cmd="$0"
cmd_dir="`dirname -- "$cmd"`"
cmd_name="`basename -- "$cmd"`"

SCRIPT_HOME="$( cd "$cmd_dir" && pwd )" 

# patterns for names of boot images
BootImageWildBridge=LPC432x_CMSIS_DAP_V*.hdr
BootImageWildNonBridge=LPC432x_CMSIS_DAP_NB_V*.hdr
BootImageWildSWOBridge=LPC432x_CMSIS_DAP_SWO_V*.hdr
BootImageWildSerialOnly=LPC432x_CMSIS_DAP_SER_V*.hdr 
BootImageWildCmsisDap=LPC432x_CMSIS_DAP_V*.hdr 
BootImageWildCmsisDapNonBridge=LPC432x_CMSIS_DAP_NB_V*.hdr
BootImageWildCmsisDapSerialOnly=LPC432x_CMSIS_DAP_SER_V*.hdr

name="LPC-Link2"
vidpid="0x1fc9:0x000c"

usage()
{
    echo Usage:
    echo $cmd_name                       [Boots the default image]
    echo $cmd_name bridge                [Boots the Bridged Probe image]
    echo $cmd_name nonbridge             [Boots the Non Bridged Probe image]
    echo $cmd_name swo                   [Boots the SWO Trace Probe image]
    echo $cmd_name serial                [Boots the VCOM Bridged Probe image]
    echo $cmd_name cmsis                 [Boots the CMSIS-DAP Probe image]
}

if [ "_$1" = "_-h" -o "_$1" = "_--help" ]; then
    usage>&2
    exit
elif [ -z "$1" ]; then
    opt=cmsis-dap
else
    opt=$1
fi

case `echo $opt | tr '[A-Z]' '[a-z]'` in
bridge*)
    BootImageWild=$BootImageWildBridge
    ;;
nonbridge*|nb*)
    BootImageWild=$BootImageWildNonBridge
    ;;
cmsisnonbridge*|cmsisnb)
    BootImageWild=$BootImageWildCmsisDapNonBridge
    ;;
swo*)
    BootImageWild=$BootImageWildSWOBridge
    ;;
serial*|ser*)
    BootImageWild=$BootImageWildSerialOnly
    ;;
cmsisserial*|cmsisser)
    BootImageWild=$BootImageWildCmsisDapSerialOnly
    ;;
vcom*)
    BootImageWild=$BootImageWildSerialOnly
    ;;
cmsis*)
    BootImageWild=$BootImageWildCmsisDap
    ;;
esac

if [ -n "$BootImageWild" ]; then
    curmajor=0
    curminor=0
    image=
    for file in "$SCRIPT_HOME/../binaries/"$BootImageWild; do
        if major=`expr $file : '.*_V\([0-9]*\).*'` && \
           minor=`expr $file : '.*_V[0-9]*_\([0-9]*\).*'`; then
            if [ $major -gt $curmajor ]; then
                curmajor=$major
                curminor=$minor
                image="$file"
            fi
            if [ $minor -gt $curminor ]; then
                curminor=$minor
                image="$file"
            fi
        fi
    done
    if [ -z "$image"  ] ; then
        echo "Cannot find bootable image name matching pattern '$BootImageWild'"
        exit 12
    fi
else
    image=$1
fi
if [ ! -e $image ]; then
    echo "Cannot find bootable image '$image'"
    exit 13
fi

echo "$SCRIPT_HOME/dfu_boot" -s $0 -n "$name" -v $vidpid  -i "$image" $*
"$SCRIPT_HOME/dfu_boot" -s $0 -n "$name" -v $vidpid  -i "$image"
