dahdi-linux/drivers/dahdi/xpp/xpp_debug
Tzafrir Cohen cdeaafb910 xpp: fix bashism in xpp_debug
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10152 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-08-24 08:11:38 +00:00

110 lines
1.8 KiB
Bash
Executable File

#! /bin/sh
#
# xpp_debug: Turn on/off debugging flags via /sys/module/*/parameters/debug
#
modules="xpp xpp_usb xpd_fxs xpd_fxo xpd_bri xpd_pri xpd_echo"
dbg_names="DEFAULT PCM LEDS SYNC SIGNAL PROC REGS DEVICES COMMANDS"
usage() {
echo 1>&2 "Usage: $0 [module_name] [[-]flags...]"
echo 1>&2 " module_name => $modules"
echo 1>&2 " flags => NONE $dbg_names ANY"
echo 1>&2 ""
echo 1>&2 " Example: $0 xpp ANY -PCM -LEDS"
echo 1>&2 ""
}
sysfs_name() {
f=''
if [ -f "/sys/module/$1/parameters/debug" ]; then
f="/sys/module/$1/parameters/debug"
elif [ -f "/sys/module/$1/debug" ]; then
f="/sys/module/$1/debug"
fi
echo "$f"
}
sysfs_value() {
f=`sysfs_name "$1"`
if [ "$f" != "" ]; then
cat "$f"
fi
}
show_debug() {
usage
for i in $modules
do
f=`sysfs_name "$i"`
if [ -f "$f" ]; then
val=`cat $f`
j=0
list=''
for n in $dbg_names
do
if [ $(( val & (1 << j) )) -ne 0 ]; then
list="$list $n"
fi
j=$((j+1))
done
if [ "$list" = "" ]; then
list=' NONE'
fi
echo "$i $list"
fi
done
}
calc_debug() {
val="$1"
shift
for wanted in $*
do
j=0
found=0
for n in $dbg_names
do
if [ "$wanted" = "$n" ]; then
: $(( val |= (1 << j) ))
found=1
elif [ "$wanted" = -"$n" ]; then
: $(( val &= ~(1 << j) ))
found=1
elif [ "$wanted" = "ANY" ]; then
: $(( val = ~0 ))
found=1
elif [ "$wanted" = -"ANY" -o "$wanted" = "NONE" ]; then
val=0
found=1
fi
j=$((j+1))
done
if [ "$found" -eq 0 ]; then
echo >&2 "$0: Unknown debug flag '$wanted'"
exit 1
fi
done
echo $val
}
if [ "$#" = 0 ]; then
show_debug
exit 0
fi
module="$1"
shift
if ! echo "$modules" | grep -w "$module" > /dev/null; then
echo >&2 "$0: Unknown module $module"
exit 1
fi
oldval=`sysfs_value "$module"`
val=`calc_debug "$oldval" $*`
file=`sysfs_name $module`
echo "$val" > "$file"
show_debug