#! /bin/bash

cd /etc/sysconfig/isdn
. scripts/functions
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
VENDOR=${PRODUCT%%/*}
VENDID=${PRODUCT%/*}
PCLASS=${PRODUCT##*/}
DEVID=${VENDID##*/}
TMP=${DEVICE##/proc/bus/usb/}
USBBUS=${TMP%%/*}
USBDEV=${TMP##*/}
DRV=""
FIRMWARE="-"
SCRIPT=""
DSL_CONTR=""

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"
	DSL_CONTR="dslisdn"
	;;
    "57c/2800") # FRITZX!USB OEM
	SCRIPT=avmusb
	DRV="fxusb_CZ"
	;;
    "57c/3000") # FRITZDSL!USB analog
	SCRIPT=avmusb
	DRV="fcdslusba"
	DSL_CONTR="dslonly"
	ISDNLOG_START="no"
	FIRMWARE="fdsabase.frm"
	;;
    "57c/3500") # FRITZDSL!USB SL
	SCRIPT=avmusb
	DRV="fcdslslusb"
	FIRMWARE="fdlubase.frm"
	DSL_CONTR="dslonly"
	ISDNLOG_START="no"
	;;
    "57c/3600") # FRITZDSL!USB v2.0
	SCRIPT=avmusb
	DRV="fcdslusb2"
	FIRMWARE="fds2base.frm"
	DSL_CONTR="dslisdn"
	;;
    "57c/2805"|"57c/4401") # Eumex 2220PC
	SCRIPT=avmusb
	DRV="e2220pc"
	;;
    "57c/2806"|"57c/4601") # Eumex 5520PC
	SCRIPT=avmusb
	DRV="e5520pc"
	;;
    "483/4810") # ST5481 USB Adapter
	SCRIPT=hisaxusb
	DRV="hisax_st5481"
	;;
    "959/2bd0"|"675/1688"|"7b0/6"|"7b0/7"|"742/2008"|"742/2009"|"742/200a"|"8e3/301"|"7fa/846"|"7fa/847"|"71d/1005")
	SCRIPT=hisaxusb
	DRV="hfc_usb"
	;;
    9bf/*) # Auerswald
	SCRIPT=auerswald
	DRV="auerswald"
	;;
    *) # unknown card
	echo "unknown USB product: $VENDID"
	exit 1
esac

if [ "$FIRMWARE" != "-" -a ! -r /lib/firmware/isdn/${FIRMWARE} ]; then
	echo "firmware not installed, abort"
	exit 1
fi

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
    add)
	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
	;;
    remove)
	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
