summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir.cohen@xorcom.com>2012-11-22 16:55:38 +0000
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>2012-11-22 16:55:38 +0000
commit8fe4dce5743eb6487930887bfac0e311035e17fc (patch)
tree0a769fa54c652a689e57cd4697e3d7973ff3ee1e
parenta7417e4d5b68f3eb064b4511315e12653ce320a2 (diff)
xpp: improved waitfor_xpdssvn_2.6
* Fix an issue due to long firmware load time: - When one Astribank has an echo canceler (long firmware loading) and and another one does not. - The EC-less Astribank finishes initialization before the Astribank with EC is detected. - Thus waitfor_xpds terminates too early. * We now iteratively build two sets of serial numbers: - One from wha we see in all Xorcom (e4e4:11[3456]x) USB devices. - The other is those that were detected in the driver. - Only when the two sets are equal (and > 0) we know we are done. - This is resilient to many problems (e.g: disconnect/reconnect of same device during initialization). * The progress output was also improved: Now each detected AB show the total number so far. * The timeout was also increased to 100sec * Woraround for an Astribank with no serial (but just a single one on the system). Signed-off-by: Oron Peled <oron.peled@xorcom.com> Acked-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com> Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10465 git-svn-id: http://svn.asterisk.org/svn/dahdi/tools/branches/2.6@10737 a0bf4364-ded3-4de4-8d8a-66a801d63aff
-rwxr-xr-xxpp/waitfor_xpds78
1 files changed, 63 insertions, 15 deletions
diff --git a/xpp/waitfor_xpds b/xpp/waitfor_xpds
index 067a128..f1fbd5e 100755
--- a/xpp/waitfor_xpds
+++ b/xpp/waitfor_xpds
@@ -29,14 +29,53 @@ set -e
# For lab testing
mydir=`dirname $0`
PATH="${mydir}:${PATH}"
-XPP_WAIT_AB_TIMEOUT=80
+XPP_WAIT_AB_TIMEOUT=100
[ -r /etc/dahdi/init.conf ] && . /etc/dahdi/init.conf
ab_list() {
+ find /sys/devices -name idVendor 2>/dev/null | \
+ xargs grep -H 'e4e4' 2>/dev/null | \
+ sed -e 's/idVendor.*/idProduct/' | xargs grep -H '11[3456]' | \
+ sed 's,/[^/]*$,,' || :
+}
+
+ab_serial_nums() {
+ ab_list | \
+ sed 's,$,/serial,' | \
+ xargs grep -H '' 2>/dev/null | \
+ sed 's,.*/serial:,,' | \
+ sed 's/^$/NO-SERIAL/' | \
+ sort -u
+}
+
+detected_serial_nums() {
+ cat /sys/bus/astribanks/devices/*/transport/serial 2> /dev/null | \
+ sed 's/^$/NO-SERIAL/' | \
+ sort -u || :
+}
+
+calc_union() {
+ echo "$@" | tr -s ' ' '\n' | sort -u
+}
+
+detected_ab_list() {
# Only check /sys info (don't use /proc anymore).
- ab=`find /sys/bus/astribanks/devices/xbus-*/ -name waitfor_xpds 2> /dev/null || :`
- echo $ab
+ find /sys/bus/astribanks/devices/*/ -name waitfor_xpds 2> /dev/null || :
+}
+
+waitfor_ab_initialization() {
+ oldab=''
+ while
+ if ! ab=`detected_ab_list`; then
+ exit 1
+ fi
+ test "$oldab" != "$ab"
+ do
+ oldab="$ab"
+ cat $ab
+ #echo -n 1>&2 "_"
+ done
}
# Any hardware?
@@ -55,10 +94,25 @@ if ! astribank_is_starting; then
exit 0
fi
-# Wait for driver and first device
+serial_nums=`ab_serial_nums`
+
+# Loop until detected (hopefully) all astribanks and they are initialized
echo -n 1>&2 "Astribanks detection "
tries="$XPP_WAIT_AB_TIMEOUT"
-while [ ! -e "/sys/bus/astribanks/devices/xbus-00" ]
+last_detected=0
+while
+ new_serial_nums=`ab_serial_nums`
+ detected_serial_nums=`detected_serial_nums`
+ curr_union=`calc_union $curr_union $serial_nums $new_serial_nums`
+ num_detected=`detected_ab_list | wc -l`
+ if [ "$num_detected" != "$last_detected" ]; then
+ # Visual feedback (number of detected AB so far)
+ echo -n 1>&2 "[$num_detected]"
+ last_detected="$num_detected"
+ waitfor_ab_initialization > /dev/null
+ fi
+ # Break only when we have something and it's stable
+ test "$curr_union" != "$detected_serial_nums" -o "$detected_serial_nums" = ''
do
if [ "$tries" -le 0 ]; then
echo 1>&2 "TIMEOUT"
@@ -67,21 +121,15 @@ do
echo -n 1>&2 "."
sleep 1
: $((tries-=1))
+ serial_nums="$new_serial_nums"
done
+
+# Finished: Show a nice output
echo ""
+cat /sys/bus/astribanks/devices/*/waitfor_xpds 2> /dev/null || :
# Wait for device to stabilize and XPD's to finish initalizations
echo 1>&2 "Astribanks initializing spans"
-while
- if ! ab=`ab_list`; then
- exit 1
- fi
- test "$oldab" != "$ab"
-do
- oldab="$ab"
- cat $ab
-done
-
if [ "$XPP_HOTPLUG_DAHDI" = yes ]; then
if [ "$CALLED_FROM_ATRIBANK_HOOK" = '' ]; then
# Now we can wait until the hotplug run would remove the semaphore