#!/bin/sh sdio() { ios="$ios $2" eval sdio_$1=$2 } spi() { ios="$ios $2" eval peer=\$sdio_$1 eval peer_$2=$peer eval peer_$peer=$2 } sdio clk e5 sdio mosi e6 sdio miso e7 sdio ss e10 sdio int e8 spi clk e13 spi mosi e12 spi miso e11 spi ss g2 spi int f3 # GTA02v5 has pull-ups on all lines. Comment out for more modern boards. gta02v5="e5 e13" for io in e6 e7 e10 e8 e12 e11 g2 f3 $gta02v5; do eval pu_$io=true done try() { from=$1 to=$2 cmd= res= for io in $ios; do if eval "[ -z \"\$pu_$io\" ]"; then # pull-down if [ $io = $from ]; then cmd="$cmd $io=1" res="$res >1" elif [ $io = $to ]; then cmd="$cmd $io=zr" res="$res 1R" else cmd="$cmd $io=zr" res="$res 0R" fi else # pull-up if [ $io = $from ]; then cmd="$cmd $io=0" res="$res >0" elif [ $io = $to ]; then cmd="$cmd $io=z" res="$res 0" else cmd="$cmd $io=z" res="$res 1" fi fi done gpio $cmd got=`gpio $ios | tr '\n' ' ' | tr -s ' '` if [ " $got" = "$res " ]; then echo "SET $cmd" echo "GET $got" echo else echo "SET $cmd" echo "GET $got" echo "WANT$res" exit 1 fi } for a in $ios; do eval b=\$peer_$a try $a $b done # all passive try x y