Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(261)

Unified Diff: modem

Issue 6728027: Move modem command to the modem-utilities repository (Closed) Base URL: ssh://gitrw.chromium.org:9222/modem-utilities.git@master
Patch Set: Remove crud. Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mm.sh ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: modem
diff --git a/modem b/modem
new file mode 100755
index 0000000000000000000000000000000000000000..83e9281c5f9c3c7f0e55bd4adbef06d8695bc278
--- /dev/null
+++ b/modem
@@ -0,0 +1,249 @@
+#!/bin/sh
+# Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This is a wrapper around a lot of different DBus calls, written in sh; this is
+# meant to replace parts of flimflam-test, and also to be callable from crosh.
+
+. /usr/lib/mm.sh
+
+# Generates a small snippet of code to take a single argument out of our
+# parameter list, and complain (and exit) if it's not present. Used in other
+# places like: $(needarg foo), which binds foo to $1.
+needarg () {
+ # We need to echo eval here because the part of bash that understands
+ # variable assignments has already run by the time we substitute in the
+ # text of $(needarg foo) - i.e., bash will try to execute 'foo="$1"' as
+ # a *command*, which it isn't. The eval forces bash to reparse the code
+ # before executing it.
+ echo eval "$1=\"\$1\";
+ [ -z \"\$$1\" ] && echo 'Missing arg: $1' && usage;
+ shift"
+}
+
+# Generates a small snippet of code to take a matching flag argument
+# and value out of our parameter list if present. If not, assign the
+# default value to $1.
+# Used in other places like: $(arg_or_default foo bar)
+# which binds foo to "bar", unless $1 is "-foo" in which case foo is
+# bound to $2.
+arg_or_default () {
+ echo eval "[ x\"\$1\" = x\"-$1\" ] && $1=\"\$2\" && shift 2;
+ [ -z \"\$$1\" ] && $1=\"$2\""
+}
+
+# Generates a small snippet of code to take a single argument out of our
+# parameter list. If it's not present, prompt the user and accept a
+# blank input as if the users chose the default specified as $2.
+arg_or_prompt () {
+ echo eval "$1=\"\$1\";
+ [ -n \"\$$1\" ] && shift ;
+ [ -z \"\$$1\" ] && read -p \"$1 [$2]: \" $1 ;
+ [ -z \"\$$1\" ] && $1=\"$2\";"
+}
+
+# Require a key in a csv list of key value pairs
+# $1 - comma separated list of keys and values
+# $2 - required key
+# If the key is not found in the argument list, then prompt the user
+# for a value for key, and return $key,$value appended to $1
+require () {
+ local value
+ local args=$1
+ local key=$2
+ if [ -z "$args" -o -n "${args##*$2*}" ] ; then
+ read -p "$key: " value
+ if [ -n "$args" ] ; then
+ args="$args,"
+ fi
+ args="$args$key,$value"
+ fi
+ echo "$args"
+}
+
+# Wait for a modem to reset itself and come back with a new dbus name
+# args:
+# $1 - dbus name of the modem before reset
+# $2 - timeout in seconds
+wait_for_modem_reset () {
+ local modem
+ local oldmodem=$1
+ local timeout=$2
+ local status="Timed out"
+ echo -n "Waiting..."
+ while test $timeout -gt 0 ; do
+ modem=$(modems | head -1)
+ if [ -n "$modem" -a "$modem" != "$oldmodem" ] ; then
+ status="Done"
+ break
+ fi
+ sleep 1
+ timeout=$((timeout - 1))
+ echo -n "."
+ done
+ echo $status
+}
+
+# Wait for a modem to reset itself and come back with a new dbus name,
+# or for the activation state to change from "1"
+# MM_MODEM_ACTIVATION_STATE_ACTIVATING to something else
+#
+# args:
+# $1 - dbus name of the modem before activation
+# $2 - activation state of modem before activation call
+# $3 - timeout in seconds
+wait_for_activation_change () {
+ local modem
+ local oldmodem=$1
+ local oldstate=$2
+ local timeout=$3
+ local status="Timed out"
+ local activation_state
+ echo -n "Waiting..."
+ while test $timeout -gt 0 ; do
+ modem=$(modems | head -1)
+ if [ -n "$modem" -a "$modem" != "$oldmodem" ] ; then
+ status="Done"
+ break
+ fi
+ activation_state=$(modem_activation_state $modem)
+ if [ $activation_state != 1 ]; then
+ status="Done"
+ break
+ fi
+ sleep 1
+ timeout=$((timeout - 1))
+ echo -n "."
+ done
+ activation_state=$(modem_activation_state $modem)
+ if [ -z "$activation_state" -o $activation_state -le $oldstate ] ; then
+ status="Failed"
+ fi
+ echo $status
+}
+
+activate_manual () {
+ $(arg_or_default modem $(modems | head -1))
+ [ -z "$modem" ] && echo "no modem found" && exit 1
+ args=$(echo "$@" | sed -e 's/ /,/g')
+ args=$(require "$args" min)
+ args=$(require "$args" mdn)
+ args=$(require "$args" spc)
+ args=$(require "$args" system_id)
+ local oldstate=$(modem_activation_state $modem)
+ dbus "$modem" $IMODEM_CDMA.ActivateManualDebug \
+ "dict:string:string:$args"
+ wait_for_activation_change $modem $oldstate 40
+}
+
+activate () {
+ $(arg_or_default modem $(modems | head -1))
+ [ -z "$modem" ] && echo "no modem found" && exit 1
+ # Work around braindead crosh quoting semantics (i.e., there are none,
+ # arguments are tokenized on spaces). Sigh.
+ carrier=$(echo "$@")
+ # TODO(jglasgow): verify that we can pass an empty string
+ local oldstate=$(modem_activation_state $modem)
+ local status=$(dbus "$modem" $IMODEM_CDMA.Activate "string:$carrier")
+ if [ $status != 0 ] ; then
+ echo "Error $status while activating"
+ else
+ wait_for_activation_change $modem $oldstate 40
+ fi
+}
+
+connect () {
+ $(arg_or_default modem $(modems | head -1))
+ [ -z "$modem" ] && echo "no modem found" && exit 1
+ # Work around braindead quoting again...
+ args=$(echo "$@")
+ [ -z "$args" ] && args='ignored'
+ dbus "$modem" $IMODEM.Connect "string:$args"
+}
+
+factory_reset () {
+ $(arg_or_default modem $(modems | head -1))
+ [ -z "$modem" ] && echo "no modem found" && exit 1
+ $(arg_or_prompt spc 000000)
+ dbus "$modem" $IMODEM.FactoryReset "string:$spc"
+ wait_for_modem_reset $modem 40
+}
+
+status () {
+ /usr/share/userfeedback/scripts/mm-status
+}
+
+update_prl () {
+ local modem
+ local mdn
+ local min
+ $(arg_or_default modem $(modems | head -1))
+ [ -z "$modem" ] && echo "no modem found" && exit 1
+ $(needarg prlfile)
+ mdn=$(dbus $modem $IMODEM_SIMPLE.GetStatus | awk '/\/mdn/ {print $2}')
+ min=$(dbus $modem $IMODEM_SIMPLE.GetStatus | awk '/\/min/ {print $2}')
+ if [ -z "$mdn" -o -z "$min" ]; then
+ echo "Cannot update PRL: MDN/MIN are unknown"
+ exit 1
+ fi
+ if [ ! -r "$prlfile" ]; then
+ echo "Cannot read PRL file \"$prlfile\""
+ exit 1
+ fi
+ # Because cromo runs as a different user than this script,
+ # it may not have access to the specified file, even when
+ # the script does. A specific example is the Downloads folder,
+ # which only the "chronos" user has access to. To work
+ # around this problem, we copy the PRL file to /tmp.
+ if ! echo "$prlfile" | grep -q '^/tmp/'; then
+ prlbase=${prlfile##*/}
+ cp $prlfile /tmp/$prlbase
+ if [ $? -ne 0 ]; then
+ echo "Cannot copy PRL file \"$prlfile\" to temp directory"
+ exit 1
+ fi
+ prlfile=/tmp/$prlbase
+ fi
+ local oldstate=$(modem_activation_state $modem)
+ args="mdn,$mdn,min,$min,prlfile,$prlfile"
+ dbus "$modem" $IMODEM_CDMA.ActivateManualDebug \
+ "dict:string:string:$args"
+ wait_for_modem_reset $modem 40
+}
+
+usage () {
+ echo "Usage: $0 <command> [args...]"
+ echo " activate [-modem <modem>] [<carrier>] Activate modem"
+ echo " activate-manual [-modem <modem>] [args...] Activate modem manually"
+ echo " connect [-modem <modem>] [phone number] Connect modem"
+ echo " factory-reset [-modem <modem>] [<spc>] Factory-reset the modem"
+ echo " status Display modem status"
+ echo " update-prl [-modem <modem>] <prl-file-name> Install a PRL file"
+ exit 0
+}
+
+$(needarg cmd)
+case "$cmd" in
+ activate)
+ activate "$@"
+ ;;
+ activate-manual)
+ activate_manual "$@"
+ ;;
+ connect)
+ connect "$@"
+ ;;
+ factory-reset)
+ factory_reset "$@"
+ ;;
+ status)
+ status "$@"
+ ;;
+ update-prl)
+ update_prl "$@"
+ ;;
+ *)
+ usage
+ ;;
+esac
« no previous file with comments | « mm.sh ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698