#!/bin/sh

MODE0="IN"
MODE1="OUT"
MODE4="ALT0"
MODE5="ALT1"
MODE6="ALT2"
MODE7="ALT3"
MODE3="ALT4"
MODE2="ALT5"

PIN1="3.3v"
PIN2="5v"
PIN3="BCM 2"
PIN4="5v"
PIN5="BCM 3"
PIN6="0v"
PIN7="BCM 4"
PIN8="BCM 14"
PIN9="0v"
PIN10="BCM 15"
PIN11="BCM 17"
PIN12="BCM 18"
PIN13="BCM 27"
PIN14="0v"
PIN15="BCM 22"
PIN16="BCM 23"
PIN17="3.3v"
PIN18="BCM 24"
PIN19="BCM 10"
PIN20="0v"
PIN21="BCM 9"
PIN22="BCM 25"
PIN23="BCM 11"
PIN24="BCM 8"
PIN25="0v"
PIN26="BCM 7"
PIN27="BCM 0"
PIN28="BCM 1"
PIN29="BCM 5"
PIN30="0v"
PIN31="BCM 6"
PIN32="BCM 12"
PIN33="BCM 13"
PIN34="0v"
PIN35="BCM 19"
PIN36="BCM 16"
PIN37="BCM 26"
PIN38="BCM 20"
PIN39="0v"
PIN40="BCM 21"

i=1

echo "+-----+---------+------+---+-----++-----+---+------+---------+-----+"
echo "| BCM |  NAME   | MODE | V |  Physical  | V | MODE |  NAME   | BCM |"
echo "+-----+---------+------+---+-----++-----+---+------+---------+-----+"

while [ $i -le 40 ]; do
	A=$i
	B=$((i+1))

	C_PINA=$(eval echo \$PIN${A})
	C_PINB=$(eval echo \$PIN${B})

	if [ "$(echo $C_PINA | grep "BCM" )" != "" ]; then

		BCM_NO=$(echo $C_PINA | cut -d" " -f2)

		STATE=$(pigs r $BCM_NO)
		MODE=$(pigs mg $BCM_NO)

		printf "| %2d  | GPIO %2d | %4s | %01d |  %2d |" $BCM_NO $BCM_NO $(eval echo \$MODE${MODE}) $STATE $A

	else
		printf "|     | %7s |      |   |  %2d |" $(eval echo \$PIN${A}) $A
	fi


	if [ "$(echo $C_PINB | grep "BCM" )" != "" ]; then

		BCM_NO=$(echo $C_PINB | cut -d" " -f2)

		STATE=$(pigs r $BCM_NO)
		MODE=$(pigs mg $BCM_NO)

		printf "|  %2d | %01d | %4s | GPIO %2d |  %2d |\n" $B $STATE $(eval echo \$MODE${MODE}) $BCM_NO $BCM_NO

	else
		printf "|  %-2d |   |      | %7s |     |\n" $B $(eval echo \$PIN${B})
	fi

	i=$((i+2))



done
echo "+-----+---------+------+---+-----++-----+---+------+---------+-----+"
echo "| BCM |  NAME   | MODE | V |  Physical  | V | MODE |  NAME   | BCM |"
echo "+-----+---------+------+---+-----++-----+---+------+---------+-----+"
