#!/bin/sh

compare()
{
	if [ "$1" != "$2" ]
	then
		echo "Failed to $3"
		/fabos/xtool/CPLD_display -convert "$1" > ./was
		/fabos/xtool/CPLD_display -convert "$2" > ./sb
		diff ./was ./sb | grep -e "<" -e ">" | sed "s/</was:/g" | sed "s/>/s\/b:/g"
		echo "CPHATest failed"
		rm -f ./was ./sb
		exit 1
	fi
}


PLATFORM=`sin | \
		/bin/grep Platform | \
		/usr/bin/cut -d" " -f2 | \
		/usr/bin/cut -d"," -f1`
CP_NUM=`sin | \
		/bin/grep "Control Processor" | \
		/usr/bin/cut -d" " -f4`
if [ $PLATFORM != SWBD10 ]
then
	echo " This platform does not contain HA handshake signals to test;"
	exit 1
fi
if [ $CP_NUM = 0 ]
then
	OTHER_ETHER="10.0.0.6"
else
	OTHER_ETHER="10.0.0.5"
fi
my_cpld_ver=`/fabos/xtool/get_cpld_reg -raw | cut -d" " -f16`
echo "My    CPLD is version $my_cpld_ver"
other_cpld_ver=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -raw | cut -d" " -f16`
echo "Other CPLD is version $other_cpld_ver"

# unfence our selves
/fabos/xtool/set_cpld_reg 10 ff > /dev/null
/fabos/xtool/set_cpld_reg 14 0 > /dev/null
/fabos/xtool/set_cpld_reg 16 0 > /dev/null
/fabos/xtool/set_cpld_reg 17 0 > /dev/null
/fabos/xtool/set_cpld_reg 18 0 > /dev/null
/fabos/xtool/set_cpld_reg 19 0 > /dev/null
/fabos/xtool/set_cpld_reg 10 ff > /dev/null
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 10 ff > /dev/null
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 14 0 > /dev/null
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 16 0 > /dev/null
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 17 0 > /dev/null
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 18 0 > /dev/null
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 19 0 > /dev/null
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 10 ff > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000000000000000000 "unfence signals on my CP"
compare $other_reg 0000000000000000000000000 "unfence signals on other CP"


echo "Testing My    PCI_SCAN_OUT"
/fabos/xtool/set_cpld_reg 18 40 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000000000000001000 "PCI_SCAN_OUT signal on my CP"
compare $other_reg 0000000000000000000000001 "PCI_SCAN_IN signal on other CP"

echo "Testing My    HA_MASTER_OUT"
/fabos/xtool/set_cpld_reg 18 8 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000000000000010000 "HA_MSTR_OUT signal on my CP"
compare $other_reg 0000000000000000000000010 "HA_MSTR_IN signal on other CP"
/fabos/xtool/set_cpld_reg 18 0 > /dev/null

echo "Testing Other PCI_SCAN_OUT"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 18 40 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000000000000000001 "PCI_SCAN_IN signal on my CP"
compare $other_reg 0000000000000000000001000 "PCI_SCAN_OUT signal on other CP"

echo "Testing Other HA_MASTER_OUT"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 18 8 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000000000000000010 "HA_MSTR_IN signal on my CP"
compare $other_reg 0000000000000000000010000 "HA_MSTR_OUT signal on other CP"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 18 0 > /dev/null



echo "Testing My    OCP_B1_FNC_OUT"
/fabos/xtool/set_cpld_reg 14 4 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0001000000000000000000000 "OCP_B1_FNC_OUT signal on my CP"
if [ $other_cpld_ver -lt 88 ]
then
compare $other_reg 0000000000000000000000000 "PCI_B1_FNC_IN signal on other CP"
else
compare $other_reg 0100000000000000000000000 "PCI_B1_FNC_IN signal on other CP"
fi

echo "Testing My    OCP_B2_FNC_OUT"
/fabos/xtool/set_cpld_reg 14 8 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000100000000000000000000 "OCP_B2_FNC_OUT signal on my CP"
if [ $other_cpld_ver -lt 88 ]
then
compare $other_reg 0000000000000000000000000 "PCI_B2_FNC_IN signal on other CP"
else
compare $other_reg 0010000000000000000000000 "PCI_B2_FNC_IN signal on other CP"
fi
/fabos/xtool/set_cpld_reg 14 0 > /dev/null

echo "Testing Other OCP_B1_FNC_OUT"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 14 4 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
if [ $my_cpld_ver -lt 88 ]
then
compare $our_reg   0000000000000000000000000 "PCI_B1_FNC_IN signal on my CP"
else
compare $our_reg   0100000000000000000000000 "PCI_B1_FNC_IN signal on my CP"
fi
compare $other_reg 0001000000000000000000000 "OCP_B1_FNC_OUT signal on other CP"

echo "Testing Other OCP_B2_FNC_OUT"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 14 8 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
if [ $my_cpld_ver -lt 88 ]
then
compare $our_reg   0000000000000000000000000 "PCI_B2_FNC_IN signal on my CP"
else
compare $our_reg   0010000000000000000000000 "PCI_B2_FNC_IN signal on my CP"
fi
compare $other_reg 0000100000000000000000000 "OCP_B2_FNC_OUT signal on other CP"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 14 0 > /dev/null



echo "Testing My    PCI_B1_MSTR_OUT"
/fabos/xtool/set_cpld_reg 16 20 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000010001000000000 "PCI_B1_MSTR_OUT signal on my CP"
compare $other_reg 0000000000000100000000000 "PCI_B1_MSTR_IN signal on other CP"

echo "Testing My    PCI_B2_MSTR_OUT"
/fabos/xtool/set_cpld_reg 16 40 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000001000100000000 "PCI_B2_MSTR_OUT signal on my CP"
compare $other_reg 0000000000000010000000000 "PCI_B2_MSTR_IN signal on other CP"
/fabos/xtool/set_cpld_reg 16 0 > /dev/null

echo "Testing Other PCI_B1_MSTR_OUT"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 16 20 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000000100000000000 "PCI_B1_MSTR_IN signal on my CP"
compare $other_reg 0000000000010001000000000 "PCI_B1_MSTR_OUT signal on other CP"

echo "Testing Other PCI_B2_MSTR_OUT"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 16 40 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000000010000000000 "PCI_B2_MSTR_IN signal on my CP"
compare $other_reg 0000000000001000100000000 "PCI_B2_MSTR_OUT signal on other CP"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 16 0 > /dev/null



echo "Testing My    PCI_B1_RST"
/fabos/xtool/set_cpld_reg 16 2 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000001000000000000000 "PCI_B1_RST signal on my CP"
compare $other_reg 0000000000000000000000000 "PCI_B1_RST signal on other CP"

echo "Testing My    PCI_B2_RST"
/fabos/xtool/set_cpld_reg 16 4 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000100000000000000 "PCI_B2_RST signal on my CP"
compare $other_reg 0000000000000000000000000 "PCI_B2_RST signal on other CP"
/fabos/xtool/set_cpld_reg 16 0 > /dev/null

echo "Testing Other PCI_B1_RST"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 16 2 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000000000000000000 "PCI_B1_RST signal on my CP"
compare $other_reg 0000000001000000000000000 "PCI_B1_RST signal on other CP"

echo "Testing Other PCI_B2_RST"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 16 4 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000000000000000000 "PCI_B2_RST signal on my CP"
compare $other_reg 0000000000100000000000000 "PCI_B2_RST signal on other CP"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 16 0 > /dev/null



echo "Testing My    SELF_FNC_BUS"
/fabos/xtool/set_cpld_reg 14 10 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000010000000000000000000 "SELF_FNC_BUS signal on my CP"
compare $other_reg 0000000000000000000000100 "OCP_FNC_IN signal on other CP"

echo "Testing My    SELF_FNC_HK"
/fabos/xtool/set_cpld_reg 14 20 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000001000000000000000000 "SELF_FNC_HK signal on my CP"
compare $other_reg 0000000000000000000000100 "OCP_FNC_IN signal on other CP"
/fabos/xtool/set_cpld_reg 14 0 > /dev/null

echo "Testing Other SELF_FNC_BUS"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 14 10 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000000000000000100 "OCP_FNC_IN signal on my CP"
compare $other_reg 0000010000000000000000000 "SELF_FNC_BUS signal on other CP"

echo "Testing Other SELF_FNC_HK"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 14 20 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000000000000000100 "OCP_FNC_IN signal on my CP"
compare $other_reg 0000001000000000000000000 "SELF_FNC_HK signal on other CP"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 14 0 > /dev/null



echo "Testing My    HK_FNC_OUT"
/fabos/xtool/set_cpld_reg 14 40 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000100000000000000000 "HK_FNC_OUT signal on my CP"
compare $other_reg 0000000010000000000000000 "HK_FNC_IN signal on other CP"
/fabos/xtool/set_cpld_reg 14 0 > /dev/null

echo "Testing Other HK_FNC_OUT"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 14 40 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000010000000000000000 "HK_FNC_IN signal on my CP"
compare $other_reg 0000000100000000000000000 "HK_FNC_OUT signal on other CP"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 14 0 > /dev/null



echo "Testing My    CP_ERR_OUT"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 10 10 > /dev/null
/fabos/xtool/set_cpld_reg 18 4 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000000000000100000 "CP_ERR_OUT signal on my CP"
compare $other_reg 1000000000000000000000000 "OCP_ERR_IN signal on other CP"
/fabos/xtool/set_cpld_reg 18 0 > /dev/null
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 10 10 > /dev/null

echo "Testing Other CP_ERR_OUT"
/fabos/xtool/set_cpld_reg 10 10 > /dev/null
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 18 4 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   1000000000000000000000000 "OCP_ERR_IN signal on my CP"
compare $other_reg 0000000000000000000100000 "CP_ERR_OUT signal on other CP"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 18 0 > /dev/null
/fabos/xtool/set_cpld_reg 10 10 > /dev/null



echo "Testing My    SFT_RST_ENB"
/fabos/xtool/set_cpld_reg 18 2 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000000000001000000 "SFT_RST_ENB signal on my CP"
compare $other_reg 0000000000000000000000000 "other signals on other CP"
/fabos/xtool/set_cpld_reg 18 0 > /dev/null

echo "Testing Other SFT_RST_ENB"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 18 2 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000000000000000000 "other signals on my CP"
compare $other_reg 0000000000000000001000000 "SFT_RST_ENB signal on other CP"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 18 0 > /dev/null



echo "Testing My    RST_OCP_OUT"
/fabos/xtool/set_cpld_reg 18 1 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000000000010000000 "RST_OCP_OUT signal on my CP"
compare $other_reg 0000000000000000000000000 "other signals on other CP"
/fabos/xtool/set_cpld_reg 18 0 > /dev/null

echo "Testing Other RST_OCP_OUT"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 18 1 > /dev/null
our_reg=` /fabos/xtool/get_cpld_reg -binary`
other_reg=`rsh $OTHER_ETHER /fabos/xtool/get_cpld_reg -binary`
compare $our_reg   0000000000000000000000000 "other signals on my CP"
compare $other_reg 0000000000000000010000000 "RST_OCP_OUT signal on other CP"
rsh $OTHER_ETHER /fabos/xtool/set_cpld_reg 18 0 > /dev/null

echo "CPHATest PASSED"

