#! /bin/bash

cd /etc/sysconfig/isdn
. scripts/functions
ACTION=$1
shift
PRODUCT=$1
shift
DEVICE=$1
shift
CONTR_FILES=""
for c in cfg-contr* ; do 
  case $c in 
    *~*|*.*) 
      # drop backup files, rpm{save,new,orig}
      ;;
    cfg-contr\*)
      # no files
      ;;
    *)
      CONTR_FILES="$CONTR_FILES $c"
      ;;
  esac
done
echo "CONTR_FILES = $CONTR_FILES"
VENDOR=${PRODUCT%%/*}
VENDID=${PRODUCT%/*}
PCLASS=${PRODUCT##*/}
DEVID=${VENDID##*/}
TMP=${DEVICE##/proc/bus/usb/}
USBBUS=${TMP%%/*}
USBDEV=${TMP##*/}
DRV=""
FIRMWARE="-"
SCRIPT=""

case "$VENDID" in
    "57c/c00") # FRITZCARD!USB
	SCRIPT=avmusb
	DRV="fcusb"
	;;
    "57c/1000") # FRITZCARD!USB v2.0
	SCRIPT=avmusb
	DRV="fcusb2"
	FIRMWARE="fus2base.frm"
	;;
    "57c/1900") # FRITZCARD!USB v2.1
	SCRIPT=avmusb
	DRV="fcusb2"
	FIRMWARE="fus3base.frm"
	;;
    "57c/2000") # FRITZX!USB 
	SCRIPT=avmusb
	DRV="fxusb"
	;;
    "57c/2200") # BlueFRITZ!USB
	SCRIPT=bfusb
	DRV="bfusb"
	;;
    "57c/2300") # FRITZDSL!USB
	SCRIPT=avmusb
	DRV="fcdslusb"
	FIRMWARE="fdsubase.frm"
	;;
    "57c/2800") # FRITZX!USB OEM
	SCRIPT=avmusb
	DRV="fxusb_CZ"
	;;
    "57c/3500") # FRITZDSL!USB SL
	SCRIPT=avmusb
	DRV="fcdslslusb"
	FIRMWARE="fdlubase.frm"
	;;
    "483/4810") # ST5481 USB Adapter
	SCRIPT=st5481
	DRV="hisax_st5481"
	;;
    9bf/*) # Auerswald
	SCRIPT=auerswald
	DRV="auerswald"
	;;
    *) # unknown card
	echo "unknown USB product: $VENDID"
	exit 1
esac

FOUND=no

test -n "$CONTR_FILES" && for CF in $CONTR_FILES; do
    DRIVER=""
    CONTR=${CF#cfg-}
    . $CF
    if [ "$DRV" = "$DRIVER" ]; then
	FOUND=yes
	break
    elif [ "generic_usb" = "$DRIVER" ]; then
	FOUND=generic
	break
    else
	continue
    fi
done

case "$ACTION" in
    start)
	if [ "$FOUND" = "no" ]; then
	    echo "no setup for driver $DRV found using defaults"
	    CONTR=""
	fi
	if [ -x scripts/load-${SCRIPT} ]; then
	    . scripts/load-${SCRIPT}
	else
	    echo "script load-${SCRIPT} not available"
	    exit 1
	fi
	;;
    stop)
	IDX=0
	test -r /var/run/usb_isdn_${USBBUS}_${USBDEV}.idx && \
		IDX=`cat /var/run/usb_isdn_${USBBUS}_${USBDEV}.idx`
	rm -f /var/run/usb_isdn_${USBBUS}_${USBDEV}.idx
	CONTR=${CONTR:-contr$IDX}
	echo "unloading isdn $CONTR"
	kill_isdnlog $CONTR
	DIDX=$(($IDX * 2))
	fuser -k /dev/isdnctrl${DIDX}
	sleep 1
	fuser -k /dev/isdninfo
	sleep 1
	if [ -x scripts/stop-${SCRIPT} ]; then
	    . scripts/stop-${SCRIPT}
	else
	    echo "script stop-${SCRIPT} not available"
	    exit 1
	fi
	;;
esac
