#! /bin/sh

me=`basename $0`
dir=`dirname $0`
LOGGER="logger -i -t '$me'"
TWS_DIR="/var/tmp"
TWS_NOAUTOJUMPFILE="$TWS_DIR/twinstar_no_autojump"

#env > "/tmp/$me.debug"

# Filter non-astribank devices
case "$DEVPATH" in
*/astribanks:xbus-*)
	;;
*)
	exit 0
	;;
esac

hardware_id=`cat "/sys$DEVPATH/hardware_id" 2>/dev/null || :`
location=`cat "/sys$DEVPATH/location" 2>/dev/null || :`
dev_name=${DEVPATH##*/}
xbus_name=${dev_name#*:}

astribank_hotplug() {
	event="$1"
	$LOGGER "$ACTION: $hardware_id $location ($DEVPATH)"
	dbus-send --system \
		--type='signal' \
		--dest='com.xorcom.TwinstarCorosync' \
		'/com/xorcom/TwinstarCorosync' \
		'com.xorcom.TwinstarCorosync.AstribankHotplug' \
	"$event" \
	"string:/sys$DEVPATH" \
	"string:$hardware_id" \
	"string:$location"
}

set_watchdog() {
	usb_xbus_path=`echo /sys/bus/usb/devices/*/$xbus_name | grep -v '\*'`
	if [ "$usb_xbus_path" = '' ]; then
		return
	fi
	usb_path=${usb_xbus_path%/*}
	busnum=`cat "$usb_path/busnum"`
	devnum=`cat "$usb_path/devnum"`
	dev_id=`printf "%03d/%03d" $busnum $devnum`
	# make sure FPGA knows that the Astribank is alive:
	# PCM actively syncs, and thus will not reject enabling the watchdog:
	sleep 1.5
	astribank_tool -D "$dev_id" -w 1
}

case "$ACTION" in
add)
	if [ -e "$TWS_NOAUTOJUMPFILE" ]; then
		echo "Astribank added($DEVPATH): ignored ($TWS_NOAUTOJUMPFILE)" | $LOGGER
	else
		# Notify twinstar-corosync
		astribank_hotplug boolean:true
		set_watchdog
	fi
	;;
remove)
	astribank_hotplug boolean:false
	# If we want to disconnect everybody
	#twinstar jump
	;;
*)
	echo >&2 "$0: bad action '$ACTION'"
	exit 1
	;;
esac
