#!/bin/bash

UDEV_RULES="/etc/udev/rules.d/12-USBserial.rules.local"
SERIAL_CF_DIR="/etc/conf.d/serial.local"
INITSCRIPT_DIR="/etc/init.local"
INITSCRIPT_AUTOSTART="${INITSCRIPT_DIR}/autostart"

if [ $# -ne 2 ]
then
	echo "Incorrect number of arguments. Usage:"
	echo ""
	echo "	$0 <sysfs-serialno> <port-name>"
	echo ""
	echo "Pass e.g. /dev/ttyUSB0 for <sysfs-serialno> to autodetect, else USB"
	echo "serial number as exposed in sysfs. <port-name> is the friendly name"
	echo "such as 'Port B'."
	exit 1
fi

SERIALNO="$1"
DESC="$2"

if [ "${SERIALNO:0:5}" = "/dev/" ]
then
	SERIALNO="$(udevadm info -a -n "${SERIALNO}" | grep 'ATTRS{serial}' | head -n 1 | sed -e 's/^.*"\(.*\)".*$/\1/')"
	if [ -z "${SERIALNO}" ]
	then
		echo "Unable to detect serial number."
		exit 1
	fi
	echo "Serial number detected as ${SERIALNO}"
fi

set -e

DEVICE="USBserial/${SERIALNO}"
TAG="USBserial-${SERIALNO}"
SERIAL_CF="${SERIAL_CF_DIR}/${TAG}.cf"
INITSCRIPT="${INITSCRIPT_DIR}/${TAG}"

echo "Adding udev rule"
cat >> "${UDEV_RULES}" <<EOF
SUBSYSTEMS=="usb", ATTRS{serial}=="${SERIALNO}", SYMLINK+="${DEVICE}"
EOF

echo "Creating serial port configuration file"
cat > "${SERIAL_CF}" <<EOF
name = ${DESC}
device = /dev/${DEVICE}
baud = 38400
function = None
EOF

echo "Creating serial port init script"
cat > "${INITSCRIPT}" <<EOF
#!/sbin/svc

MYLISTING="${DESC}"
CONTROL_GROUP="conf"

start() {
        daemonize_orig /sbin/serialmux "${TAG}"
}

stop() {
        kill_pid
}
EOF
chmod 0755 "${INITSCRIPT}"

echo "Activating serial port at bootup"
echo "${TAG}" >> "${INITSCRIPT_AUTOSTART}"

echo "Done."
