summaryrefslogtreecommitdiff
path: root/misc/zaptel/rc.zaptel
diff options
context:
space:
mode:
Diffstat (limited to 'misc/zaptel/rc.zaptel')
-rw-r--r--misc/zaptel/rc.zaptel209
1 files changed, 209 insertions, 0 deletions
diff --git a/misc/zaptel/rc.zaptel b/misc/zaptel/rc.zaptel
new file mode 100644
index 0000000000..1ab703e7ab
--- /dev/null
+++ b/misc/zaptel/rc.zaptel
@@ -0,0 +1,209 @@
+#!/bin/sh
+#
+# This shell script takes care of loading and unloading
+# Zapata Telephony interfaces
+#
+# This script is a heavily modified version of zaptel.init found
+# in the zaptel source archive and thus is covered under the GNU
+# General Public License version 2.
+#
+# Some parts Copyright 2007, Alan Hicks, Lizella, GA
+#
+
+# What modules should we try to load on 'start'? By default, we'll
+# attempt to load the driver for the popular Digium WildCat cards. If
+# this fails or no modules are specified, the ztdummy module will be
+# automatically loaded to provide a timing mechanism in the kernel.
+# If you need some other modules loaded, seperate them with spaces.
+# MODULES="foo bar"
+MODULES="wctdm"
+
+ZTCFG_CMD=/sbin/ztcfg
+FXOTUNE=/sbin/fxotune
+LOCKFILE=/var/lock/subsys/zaptel
+
+# The default syncer Astribank. Usually set automatically to a sane
+# value by xpp_sync(1) if you have an Astribank. You can set this to an
+# explicit Astribank (e.g: 01).
+XPP_SYNC=auto
+
+# The maximal timeout (seconds) to wait for udevd to finish generating
+# device nodes after the modules have loaded and before running ztcfg.
+ZAP_DEV_TIMEOUT=20
+
+#####################################################################
+## ##
+## NOTHING BELOW HERE SHOULD NEED TO BE CHANGED ##
+## ##
+#####################################################################
+
+# recursively unload a module and its dependencies, if possible.
+# For some reason, modprobe can't seem to remove these modules
+# on its own, so we kludge this here.
+# inputs: module to unload.
+# returns: the result from
+unload_module() {
+ module="$1"
+ line=$(lsmod 2>/dev/null | grep "^$1 ")
+ if [ "$line" = '' ]; then return; fi # module was not loaded
+
+ set -- $line
+ # $1: the original module, $2: size, $3: refcount, $4: deps list
+ mods=$(echo $4 | tr , ' ')
+ # xpp_usb keeps the xpds below busy if an xpp hardware is
+ # connected. Hence must be removed before them:
+ case "$module" in xpd_*) mods="xpp_usb $mods";; esac
+ for mod in $mods; do
+ # run in a subshell, so it won't step over our vars:
+ (unload_module $mod)
+ # TODO: the following is probably the error handling we want:
+ # if [ $? != 0 ]; then return 1; fi
+ done
+ rmmod $module
+}
+
+# I have not tested this function in the least, so I cannot say if it
+# works properly with Slackware or not. If you can, please test this
+# and report back any problems or successes you may have so we can fix
+# this in the SlackBuild script. With that said, I don't see any reason
+# why this function would not work.
+# -- Alan Hicks
+hpec_start() {
+ # HPEC license found
+ if ! echo /var/lib/digium/licenses/HPEC-*.lic | grep -v '\*' | grep -q .; then
+ return
+ fi
+
+ # zaphpec_enable not installed in /usr/sbin
+ if [ ! -f /usr/sbin/zaphpec_enable ]; then
+ echo -n "Running zaphpec_enable: Failed"
+ echo -n "."
+ echo " The zaphpec_enable binary is not installed in /usr/sbin."
+ return
+ fi
+
+ # zaphpec_enable not set executable
+ if [ ! -x /usr/sbin/zaphpec_enable ]; then
+ echo -n "Running zaphpec_enable: Failed"
+ echo -n "."
+ echo " /usr/sbin/zaphpec_enable is not set as executable."
+ return
+ fi
+
+ # zaphpec_enable properly installed
+ action "Running zaphpec_enable: " /usr/sbin/zaphpec_enable
+ if [ $? = 0 ]; then
+ echo -n "done"
+ echo "."
+ else
+ echo -n "Failed"
+ echo -n "."
+ echo " This can be caused if you had already run zaphpec_enable, or if your HPEC license is no longer valid."
+ fi
+}
+
+
+# Check that telephony is up.
+#[ "${TELEPHONY}" = "yes" ] || exit 0
+
+if [ ! -f /etc/zaptel.conf ]; then
+ echo "Could not find /etc/zaptel.conf! Abandon ship!"
+ exit 1
+fi
+
+if [ "${DEBUG}" = "yes" ]; then
+ ARGS="debug=1"
+fi
+
+RETVAL=0
+
+# See how we were called.
+case "$1" in
+ start)
+ # Load drivers
+ rmmod wcusb 2> /dev/null
+ rmmod wcfxsusb 2> /dev/null
+ rmmod audio 2> /dev/null
+
+ echo "Loading zaptel framework: "
+ modprobe zaptel ${ARGS}
+
+ echo -n "Waiting for zap to come online..."
+ TMOUT=$ZAP_DEV_TIMEOUT # max secs to wait
+ while [ ! -d /dev/zap ] ; do
+ echo -n "$TMOUT "
+ sleep 1
+ TMOUT=$(expr $TMOUT - 1)
+ if [ $TMOUT -eq 0 ] ; then
+ echo " " # line break
+ echo "Error: missing /dev/zap!"
+ exit 1
+ fi
+ done
+ echo "OK"
+ echo -n "Loading zaptel hardware modules:"
+ for x in $MODULES; do
+ if modprobe ${x} ${ARGS} 2> /dev/null; then
+ echo "Loaded module: ${x}."
+ fi
+ done
+ sleep 3 # TODO: remove it
+
+ if [ ! -e /proc/zaptel/1 ]; then
+ echo "No functioning zap hardware found in /proc/zaptel, loading ztdummy"
+ modprobe ztdummy 2> /dev/null
+ fi
+
+ echo "Running ztcfg: "
+ $ZTCFG_CMD 2> /dev/null
+ RETVAL=$?
+
+ if [ $RETVAL -eq 0 ]; then
+ touch $LOCKFILE
+ else
+ echo "Something went wrong. Try running ztcfg -vvv."
+ fi
+
+ # This is allowed to fail (or not even run). These files may not
+ # be present, and aren't required for Asterisk.
+ if [ -x "$FXOTUNE" ] && [ -r /etc/fxotune.conf ]; then
+ $FXOTUNE -s || :
+ fi
+
+ hpec_start
+ ;;
+ stop)
+ # Unload drivers
+ echo -n "Unloading zaptel hardware drivers:"
+ unload_module zaptel
+ RETVAL=$?
+ echo "."
+
+ [ $RETVAL -eq 0 ] && rm -f $LOCKFILE
+ ;;
+ unload)
+ # We don't have zaptel helper, so let's not replicate too much code:
+ # allow others to use the unload command.
+ unload_module zaptel
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ ;;
+ reload)
+ echo "Reloading ztcfg: "
+ if $ZTCFG_CMD 2> /dev/null; then
+ echo -n "done"
+ RETVAL=0
+ else
+ echo "ztcfg failed. Are your modules loaded?"
+ RETVAL=1
+ fi
+ ;;
+ *)
+ echo "Usage: zaptel {start|stop|restart|reload}"
+ exit 1
+esac
+
+exit $RETVAL
+