#!/bin/bash

#set -x

#
# This script is essentially a wrapper for the real snazzy_can_tx executable. 
#


#
# Helper function to find largest snazzy_can_tx_** executable
#
function get_highest_snazzy_exe()
{
    SNAZZY_PATTERN="/usr/bin/snazzy_can_tx_"
    SNAZZY_PATTERN_LENGTH=${#SNAZZY_PATTERN}
    SNAZZY_FILES=`ls $SNAZZY_PATTERN*`
    HIGHEST_VERSION=0
    HIGHEST_SNAZZY=""

    for f in $SNAZZY_FILES; do
        LEN=${#f}
        VER=${f:$(($SNAZZY_PATTERN_LENGTH)):$(($LEN-$SNAZZY_PATTERN_LENGTH))}
      
        # If there is an underscore in the version number, ignore this file
        # It is most likely (1_1)
        UNDERSCORE_PRESENT=`expr index $VER '_'`
        if [ $(( $UNDERSCORE_PRESENT )) -eq 0 ]; then 
            if [ $VER -gt $HIGHEST_VERSION ]; then
                HIGHEST_VERSION=$VER
                HIGHEST_SNAZZY=$f
            fi 
        fi
    done;

    echo $HIGHEST_SNAZZY
}


# The real snazzy_can_tx executables
SCT_SNAZZY_CAN_MESSAGE_EXE_78="/usr/bin/snazzy_can_tx_78"
SCT_SNAZZY_CAN_MESSAGE_EXE_72="/usr/bin/snazzy_can_tx_72"
SCT_SNAZZY_CAN_MESSAGE_EXE_55="/usr/bin/snazzy_can_tx_55"
SCT_CAN_MESSAGE_EXE=""

SNAZZY_VERSION=$(eDriveXLoadTool --get_firmware_version 1)
SNAZZY_VERSION_EVAL=$(( 10#$SNAZZY_VERSION ))

case $SNAZZY_VERSION_EVAL in
    78) # eDX 2.4  
        SCT_CAN_MESSAGE_EXE=${SCT_SNAZZY_CAN_MESSAGE_EXE_78}
        ;;
    178) # eDX 2.4 (Claas)  
        SCT_CAN_MESSAGE_EXE=${SCT_SNAZZY_CAN_MESSAGE_EXE_78}
        ;;
    72) # eDX 2.0, 2.1, 2.2 & 2.3  
        SCT_CAN_MESSAGE_EXE=${SCT_SNAZZY_CAN_MESSAGE_EXE_72}
        ;;
    172) # eDX 2.0, 2.1, 2.2 & 2.3 (Claas)  
        SCT_CAN_MESSAGE_EXE=${SCT_SNAZZY_CAN_MESSAGE_EXE_72}
        ;;
    54 | 55) # eDX 1.8 & 1.9
        SCT_CAN_MESSAGE_EXE=${SCT_SNAZZY_CAN_MESSAGE_EXE_55}
        ;; 
    154 | 155) # eDX 1.8 & 1.9 (Claas)  
        SCT_CAN_MESSAGE_EXE=${SCT_SNAZZY_CAN_MESSAGE_EXE_55}
        ;;
    *) # Unknown version! If we are here it is likely that we are down-grading
       # from a firmware version that we dont know about!
        SCT_CAN_MESSAGE_EXE=$(get_highest_snazzy_exe)
        ;;
esac

echo "Found firmware version: $SNAZZY_VERSION_EVAL. Using ${SCT_CAN_MESSAGE_EXE}."

# Safety check to make sure the correct snazzy exe exists
which $SCT_CAN_MESSAGE_EXE > /dev/null 2>&1
result=$?
if [ $result -eq 0 ]; then
   echo "Found $SCT_CAN_MESSAGE_EXE"
else
   echo "Could not find executable $SCT_CAN_MESSAGE_EXE - exiting!"
   exit $result
fi

# Call the real snazzy_can_tx, passing on the arguments
$SCT_CAN_MESSAGE_EXE $@

