#!/bin/bash
# 16 Feb 2005 Makaski Shinomiya <shino@pos.to>
# this script shall be called from murasaki
#
MYNAME=$(basename $0)
# 
#LOGFILE=/tmp/$MYNAME.log
LOGFILE=/dev/console

SYSLOGFILE=/var/log/messages

debug() {
    [ -w "$LOGFILE" ] && echo "$*" >> $LOGFILE
    /usr/bin/logger -t $MYNAME -- "$*"
}

debug  "$0 $1"

[ "$1" = "start" ] || exit

[ "$(/sbin/pidof $MYNAME)" = "" ] || exit ;# to aboid multiple call

for i in run lock
do
  if [ -f /var/$i/console.lock ]; then
    USER=$(cat /var/$i/console.lock)
    break
  fi
done

LINE=$(grep MATCH.usbcam $SYSLOGFILE | tail -n 1)
VENDOR=$(echo $LINE|sed -e 's/^.*vendor:\([0-9a-fx]*\).*$/\1/' | tr -d x)
PROD=$(echo $LINE|sed -e 's/^.*product:\([0-9a-fx]*\).*$/\1/' | tr -d x)
debug "Vendor=$VENDOR ProductID=$PROD"
LINE=$(grep -B 2 "^P:.*Vendor=${VENDOR}.ProdID=${PROD}" /proc/bus/usb/devices | grep '^T:' | tail -n 1)
debug "$LINE"
BUSNO=$(echo "$LINE" | sed -e 's/^.*Bus=[^0-9]*//' -e 's/[^0-9].*//')
case $BUSNO in
	[0-9][0-9]) BUSNO="0$BUSNO" ;;
	[0-9])      BUSNO="00$BUSNO" ;;
esac
DEVNO=$(echo "$LINE" | sed -e 's/^.*Dev#=[^0-9]*//' -e 's/[^0-9].*//')
case $DEVNO in
	[0-9][0-9]) DEVNO="0$DEVNO" ;;
	[0-9])      DEVNO="00$DEVNO" ;;
esac

debug "Bus number=$BUSNO; Device number=$DEVNO; Console user=$USER"
[ "$BUSNO" = "" ] && exit 1
[ "$DEVNO" = "" ] && exit 1
[ "$USER"  = "" ] && exit 1

[ "USER" = "" ] && exit
debug "$(chown $USER /proc/bus/usb/$BUSNO/$DEVNO 2>&1)" && \
debug "changed /proc/bus/usb/$BUSNO/$DEVNO owned by $USER"
sleep 1                       ;# to aboid multiple call
exit
