blob: 31eb62397981e442fe8106e274dd84926d217ce5 [file] [log] [blame]
#!/bin/dash
. "$(dirname "$0")/mm.sh"
# This is somewhat subtle, and quite disgusting. Here's the story: dbus-send
# --fixed emits arrays and tuples like:
# /0 something
# /1 anotherthing
# We happen to know that 0 is actually, say, signal strength, and 1 is carrier
# name, but we get the info back as a tuple. Fortunately, unpacktuple() to the
# rescue! This function generates and then runs a sed expression which
# transforms the indexes into proper keys automatically. For the above
# expression, we might use:
# unpacktuple SignalStrength Carrier
# And if we then did:
# dbus-blahblah GetSomething | unpacktuple SignalStrength Carrier
# We would end up with nicely-formatted output:
# SignalStrength: something
# Carrier: anotherthing
unpacktuple () {
local cmd='sed'
local argidx=0
while test $# != 0; do
# Grab a variable name
local varname=$1
shift
# Generate an expression that turns the current index into that
# variable name, and append it.
cmd="$cmd -e s/^\\/${argidx}/$varname:/"
argidx=$((argidx+1))
done
# Indent the result. XXX: variable depth? Do we care?
$cmd -e 's/^/ /'
}
stripindexes () {
sed -e 's/^\/[[:digit:]]\+\///' -e 's/[^[:space:]]*/\0:/' -e 's/^/ /'
}
pcdma () {
local mm=$1
local modem=$2
echo "CDMA:"
echo -n " ESN: "
dbus $mm $modem $IMODEM_CDMA.GetEsn
# GetRegistrationState is... 'gratuitously different' in that it
# returns a tuple at the top level instead of an array. As such,
# the unpack here is nasty.
echo " Registration:"
echo -n " CDMA-1x: "
dbus $mm $modem $IMODEM_CDMA.GetRegistrationState | head -n 1
echo -n " EVDO: "
dbus $mm $modem $IMODEM_CDMA.GetRegistrationState | tail -n 1
echo " ServingSystem:"
dbus $mm $modem $IMODEM_CDMA.GetServingSystem \
| unpacktuple BandClass Band ID
echo -n " SignalQuality: "
dbus $mm $modem $IMODEM_CDMA.GetSignalQuality
}
pgsm () {
local mm=$1
local modem=$2
echo "GSM:"
echo -n " IMSI: "
dbus $mm $modem $IMODEM_GSM_CARD.GetImsi
echo " Registration:"
dbus $mm $modem $IMODEM_GSM_NETWORK.GetRegistrationInfo \
| unpacktuple Status OperatorCode OperatorName
echo -n " SignalQuality: "
dbus $mm $modem $IMODEM_GSM_NETWORK.GetSignalQuality
}
hidemdn () {
[ -z $devmode ] && sed -e '/mdn/s/ 001[0-9]*$/ partial/'
}
hidemin () {
[ -z $devmode ] && sed -e '/min/s/ 001[0-9]*$/ partial/'
}
pmodem () {
local mm=$1
local modem=$2
echo ""
echo "Modem $modem (manager $mm):"
echo " GetStatus:"
dbus $mm $modem $IMODEM_SIMPLE.GetStatus | stripindexes | hidemdn | hidemin
echo " GetInfo:"
dbus $mm $modem $IMODEM.GetInfo | unpacktuple Manufacturer Modem Version
echo " Props:"
modemprops $mm $modem | stripindexes
local mtype=$(modemprop $mm $modem Type)
if [ -z $mtype ]; then
echo "Modem type unknown; no further information available."
return
fi
if [ $mtype -eq $MTYPE_CDMA ]; then
pcdma $mm $modem | sed -e 's/^/ /'
fi
if [ $mtype -eq $MTYPE_GSM ]; then
pgsm $mm $modem | sed -e 's/^/ /'
fi
}
usage () {
echo "Usage: $0 [-d]"
exit 0
}
if [ $# -gt 0 ]; then
case "$1" in
-d)
devmode=1
;;
*)
usage
;;
esac
fi
for mm in $(modemmanagers); do
for m in $(modems $mm); do
pmodem $mm $m
done
done