#!/bin/bash
#########################################
# Name: xfoce-init-digi
#
# Summary: Initialize Digi virtual serial port(s)
#
# Description:
#
# Author: kheadley
#
# Copyright MBARI 2014
#
#########################################

#################################
# Script variable initialization
#################################
description="Initialize Digi virtual serial port(s)"
declare -a DEVICES
declare -a NEXT_DEV
VERBOSE="N"

OP="INIT"
let "EXIT_CODE=0"
let "ERR_COUNT=0"

#################################
# name: printUsage
# description: print use message
# args: none
#################################
printUsage(){
echo
echo " Description: $description"
echo
echo " usage: `basename $0` [options]"
echo "  Options:"
echo "   -I <host>,<id> : Initialize"
echo "   -U <host>,<id> : Un-initialize"
echo "   -V             : verbose output    [$VERBOSE]"
echo "   -h             : print use message"
echo ""
echo
}

########################################
# name: vout
# description: print verbose message to stderr
# args:
#     msg: message
########################################
vout(){
    if [ "$VERBOSE" == "TRUE" ] || [ "$VERBOSE" == "Y" ]
    then
	echo "$1" >&2
    fi
}

########################################
# name: chk_stat
# description: check value and update exit code
# args:
#     msg: message
########################################
chk_stat(){
    if [ "$1" -ne 0 ]
    then
	  let "EXIT_CODE|=(1 << $ERR_COUNT)"
	  let "ERR_COUNT+=1"
    fi
}

##########################
# Script main entry point
##########################


# Argument processing
while getopts I:U:hV Option
do
    vout "processing $Option[$OPTARG]"
    case $Option in
        I ) OP="INIT"
            DEVICES[${#DEVICES[@]}]=$OPTARG
        ;;
        U ) OP="UINIT"
            DEVICES[${#DEVICES[@]}]=$OPTARG
        ;;
        h )printUsage
        exit 0
        ;;
        V ) VERBOSE="Y"
        ;;
    esac
done

if [ "${#DEVICES[*]}" -le 0 ]
then
    echo
    echo " No devices specified"
    echo
    exit 1
fi

XFHOME=${XFHOME:-"/home/ops/xfoce"}
. $XFHOME/src/scripts/xfenv $XFHOME

if [ "${OP}" == "INIT" ]
then

    # start digi serial ports

    for DEV in `echo ${DEVICES[@]}`
    do
    IFS=',' read -a NEXT_DEV <<< "${DEV}"
    #echo "DEV[${DEV}] DIGI[${NEXT_DEV[0]}] ID[${NEXT_DEV[1]}]"
    ${XFHOME}/src/scripts/digicfg -a ${NEXT_DEV[0]} -i ${NEXT_DEV[1]} -c init
    x=$?
    chk_stat $x
    echo "digicfg start for [${NEXT_DEV[0]}] returned $x"
    let "i+=1"
    done

elif [ "${OP}" == "UINIT" ]
then

    # stop up digi serial ports
    for DEV in `echo ${DEVICES[@]}`
    do
        IFS=',' read -a NEXT_DEV <<< "${DEV}"
        #echo "DEV[${DEV}] DIGI[${NEXT_DEV[0]}] ID[${NEXT_DEV[1]}]"
        ${XFHOME}/src/scripts/digicfg -a ${NEXT_DEV[0]} -i ${NEXT_DEV[1]} -c uninit
        x=$?
        chk_stat $x
        echo "digicfg stop for [${NEXT_DEV[0]}] returned $x"
        let "i+=1"
    done

fi

exit $EXIT_CODE
