[zaptel-commits] tzafrir: trunk r2270 - /trunk/zaptel.init
zaptel-commits at lists.digium.com
zaptel-commits at lists.digium.com
Fri Mar 2 14:36:22 MST 2007
Author: tzafrir
Date: Fri Mar 2 15:36:22 2007
New Revision: 2270
URL: http://svn.digium.com/view/zaptel?view=rev&rev=2270
Log:
Support loading an Astribank (xpp) device in the init script.
Modified:
trunk/zaptel.init
Modified: trunk/zaptel.init
URL: http://svn.digium.com/view/zaptel/trunk/zaptel.init?view=diff&rev=2270&r1=2269&r2=2270
==============================================================================
--- trunk/zaptel.init (original)
+++ trunk/zaptel.init Fri Mar 2 15:36:22 2007
@@ -59,6 +59,72 @@
# if [ $? != 0 ]; then return 1; fi
done
rmmod $module
+}
+
+# Wait for Astribank to initialize registers:
+wait_for_xpp() {
+ if [ -d /proc/xpp ]
+ then
+ # reading from waitfor_xpds only returns when the device
+ # has finished initilizing its regiters and is available.
+ cat /proc/xpp/XBUS-*/waitfor_xpds 2>/dev/null >/dev/null || true
+ fi
+}
+
+# Register to zaptel Astribank spans that were not autoomatically registered
+# (useful when you have more than one Astribank)
+zap_reg_xpp() {
+ if [ ! -d /proc/xpp ]; then return; fi
+
+ # Get a list of connected Astribank devices, sorted by the name of
+ # the USB connector. That order is rather arbitrary, but will not
+ # change without changes to the cabling.
+ xbusses=`sort -k 2 /proc/xpp/xbuses | awk -F: '/STATUS=connected/ {print $1}'`
+
+ # get a list of XPDs that were not yet registered as zaptel spans.
+ # this will be the case if you set the parameter zap_autoreg=0 to
+ # the module xpp
+ # Append /dev/null to provide a valid file name in case of an empty pattern.
+ xbusses_pattern=`echo $xbusses| sed -e 's|XBUS-[0-9]*|/proc/xpp/&/XPD-*/zt_registration|g'`' /dev/null'
+ xpds_to_register=`grep -l 0 $xbusses_pattern 2>/dev/null` || true
+ for file in $xpds_to_register; do
+ echo 1 >$file
+ done
+}
+
+# If the system has an Astribank, select the right one as the sync source.
+# TODO: replace the sryptic awk code with 'xpp_sync auto' once it is in.
+fix_asterisbank_sync() {
+ # do nothing if module not present
+ if [ ! -d /proc/xpp ]; then return; fi
+
+ #if ! grep -q '^HOST' /proc/xpp/sync 2>/dev/null; then return; fi
+
+ case "$XPP_SYNC" in
+ n*|N*) return;;
+ host|HOST) sync_value="HOST";;
+ [0-9]*)sync_value="$XPP_SYNC";;
+ *)
+ # find the number of the first bus, and sync from it:
+ fxo_pat=`awk -F: '/STATUS=connected/{print $1}' /proc/xpp/xbuses | sed -e 's|.*|/proc/xpp/&/*/fxo_info|'`
+ # find the first FXO unit, and set it as the sync master
+ bus=`ls -1 $fxo_pat 2> /dev/null | head -n1 | cut -d- -f2 | cut -d/ -f1`
+
+ if [ "$bus" = '' ]; then
+ # no device with FXO found. Just get the first one
+ bus=`awk -F: '/STATUS=connected/{print $1}' /proc/xpp/xbuses | head -n 1 | cut -d- -f2`
+ fi
+
+ # do nothing if there is no bus:
+ case "$bus" in [0-9]*):;; *) return;; esac
+ sync_value="SYNC=$bus"
+ ;;
+ esac
+ # the built-in echo of bash fails to print a proper error on failure
+ if ! /bin/echo "$sync_value" >/proc/xpp/sync
+ then
+ echo >&2 "Updating XPP sync source failed (tried \"$sync_value\", XPP_SYNC='$XPP_SYNC')"
+ fi
}
# Check that telephony is up.
@@ -118,7 +184,12 @@
echo -n " $x"
fi
done
- sleep 3
+ sleep 3 # TODO: remove it
+
+ wait_for_xpp
+ zap_reg_xpp
+ fix_asterisbank_sync # can actually be run after ztcfg
+
if [ ! -e /proc/zaptel/1 ]; then
echo "No functioning zap hardware found in /proc/zaptel, loading ztdummy"
modprobe ztdummy >& /dev/null
More information about the zaptel-commits
mailing list