#!/bin/bash

. /tmp/cmdline
. /usr/bin/i2csetup

while getopts "a:b:do:h" opt;  do
    case "$opt" in

    a)  ADDRESS="$OPTARG"
        ADDRESSGIVEN="1"
        ;;

    b)  I2CBUS="$OPTARG"
        I2CBUSGIVEN="1"
        ;;

    d)  DCHANNELS="true"
        ;;

    o)  OFFSET="$OPTARG"
        ;;

    h)  echo "Usage: $0 [-f]"
        echo "       calcs number of B-Channels and D-Channels"
        echo "    -a I2CADDRRESSES to use"
        echo "    -b I2CBUS to use"
        echo "    -d calc D-Channles"
        echo "    -o I2COFFSET to use"
        echo "    -h gives this message"
        exit 1;;
        
    *)
        echo "See $0 -h for usage"
        exit 1;;
    esac
done



getDeviceDataLines () {
    let bchannels=0
    let dchannels=0
    i2cdetect -a -y ${1} ${2} ${2} | grep -q '\-\-'
    rc=$?
    if [ $rc -eq 1 ]; then
	if [ ${3} ]; then
	    let offset=(${3}*32)+0
	else
	    let offset=0
	fi

        t=$(printf "%08x" $(i2cutil -y -r ${1} ${2} ${offset} bl))
        TT=${t:4:4}
        TYPE=${t:4:2}
        SUBTYPE=${t:6:2}

        if [ ${TT} = '0100' ] ; then
            let bchannels=2
            let dchannels=1
        elif [ ${TT} = '0101' ] ; then
            let bchannels=8
            let dchannels=4
        elif [ ${TT} = '0102' ] ; then
            let bchannels=8
            let dchannels=4

        elif [ ${TYPE} = '02' ] ; then
            let bchannels=$s2mChannels
            let dchannels=2

        elif [ ${TYPE} = '04' ] ; then
            let bchannels=$s2mChannels
            let dchannels=2

        elif [ ${TYPE} = '05' ] ; then
            let bchannels=8
            let dchannels=4

        elif [ ${TYPE} = '06' ] ; then
            let bchannels=4
            let dchannels=4

        elif [ ${TYPE} = '07' ] ; then
            let bchannels=2
            let dchannels=2
        fi
    fi
}

if test -f /data/config.lua ; then
    if test $(grep bool_IsdnT1 /data/config.lua | grep -c true) -ge 1; then
        s2mChannels=46
    else
        if [ "$ISDN_T1" = "1" ] ; then
            s2mChannels=46
        else
            s2mChannels=60
        fi
    fi
else
    if [ "$ISDN_T1" = "1" ] ; then
        s2mChannels=46
    else
        s2mChannels=60
    fi
fi

let total_bchannels=0
let total_dchannels=0

let i=1

if [ -z "${ADDRESSGIVEN}" -a -z "${I2CBUSGIVEN}" ]; then
    for BUS in ${I2CCONFIGBUS};do
        BUS2=$(echo ${I2CBUS} | cut -d " " -f $i)
        i2cdetect -a -y ${BUS} ${I2CCONFIGADDRESS} ${I2CCONFIGADDRESS} | grep -q '\-\-'
        if [ $? -eq 1 ]; then
            t=$(printf "%08x" $(i2cutil -y -r ${BUS} ${I2CCONFIGADDRESS} 0 bl))
            BOARDTYPE=${t:2:4}
            
            if [ ${BOARDTYPE} = '0001' ] ; then # single unit s0
                ADDRESSLIST="0x6f"
		declare -a OFFSETS=( [1]=0 )
            elif [ ${BOARDTYPE} = '0002' ] ; then # S2Me
                ADDRESSLIST="0x40"
		declare -a OFFSETS=( [1]=0 )
            elif [ ${BOARDTYPE} = '0104' ] ; then # 4S2M
                ADDRESSLIST="0x40 0x40 0x50"
		declare -a OFFSETS=( [1]=0 [2]=0 [3]=0 )
            elif [ ${BOARDTYPE} = '0204' ] ; then # Atombox
                ADDRESSLIST="0x50 0x50 0x50"
		declare -a OFFSETS=( [1]=1 [2]=2 [3]=3 )
            elif [ ${BOARDTYPE} = '0003' ]; then  #  MGB
                ADDRESSLIST="0x40 0x48 0x50"
		declare -a OFFSETS=( [1]=0 [2]=0 [3]=0 )
            else 
	        ADDRESSLIST="0x40 0x48 0x50 0x58" # Unknown
		declare -a OFFSETS=( [1]=0 [2]=0 [3]=0 [4]=0 )
            fi

	    let j=1
            for ADDRESS in ${ADDRESSLIST};do
                getDeviceDataLines $BUS2 $ADDRESS ${OFFSETS[${j}]}
                total_bchannels=$(($total_bchannels + $bchannels))
                total_dchannels=$(($total_dchannels + $dchannels))
		let j=$j+1
            done
        fi
        let i=$i+1
    done
elif [ -z "$ADDRESSGIVEN" ]; then
    BUS2=$(echo ${I2CBUS} | cut -d " " -f $i)
    i2cdetect -a -y ${BUS2} ${I2CCONFIGADDRESS} ${I2CCONFIGADDRESS} | grep -q '\-\-'
         if [ $? -eq 1 ]; then
            t=$(printf "%08x" $(i2cutil -y -r ${BUS2} ${I2CCONFIGADDRESS} 0 bl))
            BOARDTYPE=${t:2:4}
            
            if [ ${BOARDTYPE} = '0001' ] ; then # single unit s0
                ADDRESSLIST="0x6f"
        declare -a OFFSETS=( [1]=0 )
            elif [ ${BOARDTYPE} = '0002' ] ; then # S2Me
                ADDRESSLIST="0x40"
        declare -a OFFSETS=( [1]=0 )
            elif [ ${BOARDTYPE} = '0104' ] ; then # 4S2M
                ADDRESSLIST="0x40 0x40 0x50"
        declare -a OFFSETS=( [1]=0 [2]=0 [3]=0 )
            elif [ ${BOARDTYPE} = '0204' ] ; then # Atombox
                ADDRESSLIST="0x50 0x50 0x50"
        declare -a OFFSETS=( [1]=1 [2]=2 [3]=3 )
            elif [ ${BOARDTYPE} = '0003' ]; then  #  MGB
                ADDRESSLIST="0x40 0x48 0x50"
        declare -a OFFSETS=( [1]=0 [2]=0 [3]=0 )
            else 
            ADDRESSLIST="0x40 0x48 0x50 0x58" # Unknown
        declare -a OFFSETS=( [1]=0 [2]=0 [3]=0 [4]=0 )
            fi

	let j=1
        for ADDRESS in ${ADDRESSLIST};do
            getDeviceDataLines $BUS2 $ADDRESS ${OFFSETS[${j}]}
            total_bchannels=$(($total_bchannels + $bchannels))
            total_dchannels=$(($total_dchannels + $dchannels))
	    let j=$j+1
        done
    fi
    let i=$i+1
else
    BUS2=$(echo ${I2CBUS} | cut -d " " -f $i)
    getDeviceDataLines $BUS2 $ADDRESS ${OFFSET}
    total_bchannels=$(($total_bchannels + $bchannels))
    total_dchannels=$(($total_dchannels + $dchannels))
fi

#if [ -z "$ADDRESSGIVEN" ]; then
#    if test $(grep string_IlidType /data/config.lua | grep PCM | wc -l) -ge 1; then
#        total_bchannels=$(($total_bchannels + 60))
#        total_dchannels=$(($total_dchannels + 2))
#    fi
#fi

if [ "${DCHANNELS}" = "true" ] ; then
    echo $total_dchannels
else
    echo $total_bchannels
fi


