[zaptel-commits] tzafrir: trunk r2686 - /trunk/zaptel.init

SVN commits to the Zaptel project zaptel-commits at lists.digium.com
Wed Jul 4 11:43:22 CDT 2007


Author: tzafrir
Date: Wed Jul  4 11:43:22 2007
New Revision: 2686

URL: http://svn.digium.com/view/zaptel?view=rev&rev=2686
Log:
* Fix unloading of xpp modules.
* Initialize the Astribank (xpp) using the zaptel-perl utilities.
  (in trunk they are installed by default)
(From branches/1.2 changesset:2670 and changeset:2673)

Modified:
    trunk/zaptel.init

Modified: trunk/zaptel.init
URL: http://svn.digium.com/view/zaptel/trunk/zaptel.init?view=diff&rev=2686&r1=2685&r2=2686
==============================================================================
--- trunk/zaptel.init (original)
+++ trunk/zaptel.init Wed Jul  4 11:43:22 2007
@@ -12,6 +12,8 @@
 
 ZTCFG=/sbin/ztcfg
 ZTCFG_CMD="$ZTCFG" # e.g: for a custom zaptel.conf location
+
+XPP_SYNC=auto
 
 #
 # Determine which kind of configuration we're using
@@ -52,6 +54,9 @@
 	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) 
@@ -61,69 +66,23 @@
 	rmmod $module
 }
 
-# Wait for Astribank to initialize registers:
-wait_for_xpp() {
-	if [ ! -d /proc/xpp ]; then return; fi
-
-	# 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
-}
-
-# 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
+# Initialize the Xorcom Astribank (xpp/) using perl utiliites:
+# intended to replace all the the three functions below if user has 
+# installed the zaptel-perl utilities.
+xpp_startup() {
+	# do nothing if there are no astribank devices:
+	if ! grep -q connected /proc/xpp/xbuses 2>/dev/null; then return 0; fi
+
+	echo "Waiting for Astribank devices to initialize:"
+	cat /proc/xpp/XBUS-[0-9]*/waitfor_xpds 2>/dev/null || true
+	
+	# overriding locales for the above two, as perl can be noisy
+	# when locales are missing.
+	# No register all the devices if they didn't auto-register:
+	LC_ALL=C zt_registration on
+
+	# this one could actually be run after ztcfg:
+	LC_ALL=C xpp_sync "$XPP_SYNC"
 }
 
 hpec_start() {
@@ -236,9 +195,7 @@
 	done
 	sleep 3 # TODO: remove it
 	
-	wait_for_xpp
-	zap_reg_xpp
-	fix_asterisbank_sync # can actually be run after ztcfg
+	xpp_startup
 	
 	if head -c 0 /dev/zap/pseudo; then 
 		echo "No Zaptel timing source sound. loading ztdummy"




More information about the zaptel-commits mailing list