#!/bin/bash
#
# USB module for FRITZ!Card DSL SL USB
# 

MODULE=fcdslslusb
FIRMWARE=/usr/lib/isdn/fdlubase.frm

# Some helpers...
#
log () {
	
	logger -t `basename $0` $*
}

loaded () {
	# $1 .... module name
	#
	local	ret=1
	
	if lsmod | grep "^$1 " >/dev/null 2>&1; then
		ret=0
	fi
	return $ret
}

status () {
	# $1 .... module name
	# $2 .... status (detected/running)
	#
	local	ret=1

	# assert loaded()
	if cat /proc/capi/controller|grep "$1.*$2" >/dev/null 2>&1
	then
		ret=0
	fi
	return $ret
}

load () {
	# $1 .... module name
	# $2 .... firmware file
	#
	local	ctrl

	ctrl=`cat /proc/capi/controller|grep $1 2>/dev/null|cut -d" " -f1`
	if ! test -f $2; then
		log "Firmware ($2) not found!"
		return
	fi
	if [ "$ctrl" == "" ]; then
		log "Controller not found!"
		return
	fi
	log "Loading controller $ctrl"
	avmcapictrl load $2 $ctrl
}

unload () {
	# $1 .... module name
	#

	if ! loaded $1; then
		log "Driver module not found!"
		return
	fi
	rmmod $1
}

# What kind of event has arrived?
#
log "Received $ACTION event!"

# Do something with that event...
#
case "$ACTION" in
	
add)
	if ! lsmod | grep "^capi " >/dev/null 2>&1; then
		log "Loading CAPI modules..."
		capiinit
	fi
	if ! loaded $MODULE; then
		if ! insmod $MODULE; then
			log "Loading driver failed!"
		else
			load $MODULE $FIRMWARE
		fi
		
	else
		if status $MODULE detected; then
			load $MODULE $FIRMWARE
		fi
	fi
	;;
	
remove)
	unload $MODULE
	;;

*)	
	log "Unsupported event: $ACTION"
	;;

esac

# That's all...
#
exit 0

