#!/bin/sh

ARG0=`basename $0`

PATH=/usr/bin:/bin:/usr/sbin:/sbin

HAVECONSOLE=false

usage()
{
	echo "Usage:"
	echo "To enable passthru: $ARG0 [port_spec]"
	echo "To disable passthru: $ARG0 disable (or mpt x)"
	echo ""
	echo "[port_spec]"
	echo "dun (or '0')       : DUN (port0) only"
	echo "diag (or 'd')      : Diag port only"
	echo "dun,diag (or '0d') : DUN (port0) and Diag port"
	echo "diag,gps           : Diag port and GPS port"
	echo "userial            : Serial passthru with USB cable"
	echo "serial             : Serial passthru with Serial cable"
}

msg()
{
	echo "$1" 1>&2
}

setstate()
{
	luna-send -n 1 "luna://com.palm.usbpassthrough/setstate" "$1"
}

# main

while :
do
	case "$1" in
		-c)
			HAVECONSOLE=true
			shift
			;;
		-k)
			shift
			if [ "$1" = "" ]; then
				usage
				exit 1
			fi
			KPATH="$1"
			shift
			;;
		-*)
			usage
			exit 1
			;;
		*)
			break
			;;
	esac
done

case "$1" in
	dun|0)
		NUM=0
		ARGS="{
		\"/dev/ttygs0\":{
			\"joinPort\":\"/dev/modem$NUM\",
			\"isAcm\":true,
			\"allowKibitzer\":false
		},
		\"haveConsole\":$HAVECONSOLE,
		\"kibitzerPath\":\"$KPATH\"
		}"
		ARGS=`echo $ARGS|sed 's/	//g'`
		setstate "$ARGS"
		if [ $? = 0 ]; then
			msg "Pass-through enabled for DUN"
			exit 0
		else
			msg "Failed to enable pass-through"
			exit 1
		fi
		;;
	diag|d)
		ARGS="{
		\"/dev/ttygs1\":{
			\"joinPort\":\"/dev/modemdiag\",
			\"isAcm\":false,
			\"allowKibitzer\":true
		},
		\"haveConsole\":$HAVECONSOLE,
		\"kibitzerPath\":\"$KPATH\"
		}"
		ARGS=`echo $ARGS|sed 's/	//g'`
		setstate "$ARGS"
		if [ $? = 0 ]; then
			msg "Pass-through enabled for Diag"
			exit 0
		else
			msg "Failed to enable pass-through"
			exit 1
		fi
		;;
	dun,diag|0d)
		NUM=0
		ARGS="{
		\"/dev/ttygs0\":{
			\"joinPort\":\"/dev/modem$NUM\",
			\"isAcm\":true,
			\"allowKibitzer\":false
		},
		\"/dev/ttygs1\":{
			\"joinPort\":\"/dev/modemdiag\",
			\"isAcm\":false,
			\"allowKibitzer\":true
		},
		\"haveConsole\":$HAVECONSOLE,
		\"kibitzerPath\":\"$KPATH\"
		}"
		ARGS=`echo $ARGS|sed 's/	//g'`
		setstate "$ARGS"
		if [ $? = 0 ]; then
			msg "Pass-through enabled for Dun and Diag"
			exit 0
		else
			msg "Failed to enable pass-through"
			exit 1
		fi
		;;
	diag,gps)
		ARGS="{
		\"/dev/ttygs1\":{
			\"joinPort\":\"/dev/modemdiag\",
			\"isAcm\":false,
			\"allowKibitzer\":true
		},
		\"/dev/ttygs2\":{
			\"joinPort\":\"/dev/gps\",
			\"isAcm\":false,
			\"allowKibitzer\":false
		},
		\"haveConsole\":$HAVECONSOLE,
		\"kibitzerPath\":\"$KPATH\"
		}"
		ARGS=`echo $ARGS|sed 's/	//g'`
		setstate "$ARGS"
		if [ $? = 0 ]; then
			msg "Pass-through enabled for Diag and GPS"
			exit 0
		else
			msg "Failed to enable pass-through"
			exit 1
		fi
		;;
	serial)
		ARGS="{
		\"/dev/ttyS2\":{
			\"joinPort\":\"/dev/modemuart\",
			\"isAcm\":false,
			\"allowKibitzer\":true
		},
		\"haveConsole\":$HAVECONSOLE,
		\"kibitzerPath\":\"$KPATH\"
		}"
		ARGS=`echo $ARGS|sed 's/	//g'`
		setstate "$ARGS"
		if [ $? = 0 ]; then
			msg "Pass-through enabled for Serial-to-Serial"
			exit 0
		else
			msg "Failed to enable pass-through"
			exit 1
		fi
		;;
	userial)
		ARGS="{
		\"/dev/ttygs1\":{
			\"joinPort\":\"/dev/modemuart\",
			\"isAcm\":false,
			\"allowKibitzer\":true
		},
		\"haveConsole\":$HAVECONSOLE,
		\"kibitzerPath\":\"$KPATH\"
		}"
		ARGS=`echo $ARGS|sed 's/	//g'`
		setstate "$ARGS"
		if [ $? = 0 ]; then
			msg "Pass-through enabled for Serial-to-USB"
			exit 0
		else
			msg "Failed to enable pass-through"
			exit 1
		fi
		;;
	x|stop|disable)
		setstate "{}"
		msg "Pass-through disabled"
		exit 0
		;;
	*)
		usage
		exit 1
		;;
esac
