# Capture and display input events and coordinates
#
# Usage: ./capture.sh
#

# do a throw-away adb in case the server is out-of-date
adb devices -l 2>&1 >/dev/null
devInfo=$(adb devices -l | grep -v ^List | head -1)

set -- $devInfo
echo devInfo=$devInfo

DEVICE=$(echo $4 | sed 's/product://')

function convert {
	in=$1
	max=$2
	scale=$3
	if [ $max -eq 0 ]; then
		echo $in
	else
		((out=in*scale/max))
		echo $out
	fi
}


case $DEVICE in
(shamu|hammerhead)
	# no scaling necessary
	xmax=0
	ymax=0;;
(volantis)
	xmax=3060
	xscale=1500
	ymax=2304
	yscale=1950;;
(*)
	echo "Error: No display information available for $DEVICE"
	exit 1;;
esac

echo Capturing input for $DEVICE...
stdbuf -o0 adb shell getevent -t |
	stdbuf -o0 grep "event.: 0003" |
	stdbuf -o0 grep "0003 003[0156a9]" |
	stdbuf -o0 tr ':[]' ' ' | while read line
do
	set -- $line
	code=$4
	value=$((16#$5))
	case $code in
	(0035) x=$(convert $value $xmax $xscale);;
	(0036) y=$(convert $value $ymax $yscale);;
	(0030) tag="majorTouch";;
	(0031) tag="minorTouch";;
	(003a) tag="pressure";;
	(0039) tag="trackingId";;
	(--) echo unknown code=$code;;
	esac
	printf "%-10s %-4d  %-4d\n" $tag $x $y
done
