#!/bin/sh

led=2
sw=15

raspivid_args=$@
eval set -- "$(getopt -uql output: -- $@)"

while [ "$1" != "--output" ]; do
	shift
done
if [ "$1" != "--output" ]; then
	echo "error: --output argument is required" >&2
fi
if [ "${2%%://*}" != "tcp" ]; then
	echo "error: --output has to start with tcp://" >&2
fi
port=${2##*:}
echo "Parsed TCP port $port" >&2

cleanup_exit() {
	echo 0 > /sys/class/gpio/gpio$led/value

	trap - SIGTERM
	kill -- -$$
}

wait_sw() {
	target="$1"

	while [ $(cat /sys/class/gpio/gpio$sw/value) -ne "$target" ]; do
		sleep 0.5;
	done
}

drive_led() {
	port="$1"

	while true; do
		! [ -n "$(ss -atH state established dport\ =\ :$port)" ]
		echo $? > /sys/class/gpio/gpio$led/value
		sleep 1
	done
}

# Export GPIOs
if ! [ -d /sys/class/gpio/gpio$sw ]; then
	echo $sw > /sys/class/gpio/export
fi
if ! [ -d /sys/class/gpio/gpio$led ]; then
	echo $led > /sys/class/gpio/export
fi

# Configure GPIOs
echo in > /sys/class/gpio/gpio$sw/direction
echo 1 > /sys/class/gpio/gpio$led/active_low
echo out > /sys/class/gpio/gpio$led/direction
echo 0 > /sys/class/gpio/gpio$led/value

trap cleanup_exit EXIT INT TERM

wait_sw 1

drive_led $port &
wait_sw 0 && cleanup_exit &
raspivid $raspivid_args

echo 0 > /sys/class/gpio/gpio$led/value
