#!/bin/sh
#
# $NetBSD: 03-ucomnames $
#
# Try to maintain symlinks to ucom devices
#

event="$1"
shift
devices=$@

ucomdir=/dev/ucom

add_unit()
{
	local tty name
	local s
	
	tty="/dev/ttyU$1"
	name="ucom$1"

	drvctl -p "$name" /device-unit /device-parent /port \
	| while read s; do
		i=$((i + 1))
		case $i in
		1)
			unit=$s
			;;
		2)
			device=$s
			;;
		3)
			port=$s
			if s=$(drvctl -p "$device" /serialnumber); then
				mkdir -p -m 755 "$ucomdir"
				ln -fs "$tty" "$ucomdir/ttyU.$s.$port" >&2
			fi
			break
			;;
		esac
	done
}

remove_unit()
{
	local tty
	local p

	tty="/dev/ttyU$1"

	for p in "$ucomdir"/*; do
		case $(readlink "$p") in
		"$tty")
			echo rm "$p"
			;;
		esac
	done
}

for device in $devices; do
	case $device in
	ucom[0-9]*)
		unit=${device#ucom}
		case $event in
		device-attach)
			remove_unit "$unit"
			add_unit "$unit"
			;;
		device-detach)
			remove_unit "$unit"
			;;
		esac
		;;
	esac
done
