Add set-carrier command to modem script, with error checking.

Pull in the modemmanagers() function along the way.
(adapted from the flimflam mm.sh)

BUG=chromium-os:15089
TEST="modem set-carrier 'Generic UMTS'"

Change-Id: Ib7bbe8d84aeb7801621c11a8854c32f246753f2a
Reviewed-on: http://gerrit.chromium.org/gerrit/3888
Tested-by: Nathan J. Williams <njw@chromium.org>
Reviewed-by: Jason Glasgow <jglasgow@chromium.org>
Reviewed-by: Eric Shienbrood <ers@chromium.org>
diff --git a/mm.sh b/mm.sh
index ccfc5d6..1b917c5 100644
--- a/mm.sh
+++ b/mm.sh
@@ -8,6 +8,7 @@
 
 MM=${MM:-/org/chromium/ModemManager}
 IDBUS=org.freedesktop.DBus
+DBUS=/org/freedesktop/DBus
 IDBUS_PROPERTIES=$IDBUS.Properties
 IMM=org.freedesktop.ModemManager
 IMODEM=$IMM.Modem
@@ -36,6 +37,12 @@
 	dbus $MM $IMM.EnumerateDevices | awk '{print $2}'
 }
 
+modemmanagers () {
+	dbus-send --system --print-reply --fixed \
+	--dest=$IDBUS $DBUS $IDBUS.ListNames \
+	| awk '/ModemManager/ { print $2 }'
+}
+
 modemprops () {
 	local modem=$1
 	for i in $IMODEMS; do
diff --git a/modem b/modem
index a323467..ca284d8 100755
--- a/modem
+++ b/modem
@@ -160,6 +160,28 @@
 	rm -f $tmpfile
 }
 
+set_carrier () {
+	local modem
+	local mm
+	mm=$(modemmanagers | grep chromium)
+	[ -z "$mm" ] && echo "no compatible modem found" && exit 1
+	$(arg_or_default modem $(modems | head -1))
+	[ -z "$modem" ] && echo "no modem found" && exit 1
+	$(needarg carrier)
+
+	echo Setting carrier to "$carrier".  This could take up to two minutes.
+	echo Using modem "$modem"
+
+	dbus-send                                           \
+	    --reply-timeout=120000                          \
+	    --system                                        \
+	    --print-reply                                   \
+	    --dest=$DEST                                    \
+	    "$modem"                                        \
+	    org.chromium.ModemManager.Modem.Gobi.SetCarrier \
+	    "string:$carrier"
+}
+
 usage () {
 	echo "Usage: $0 <command> [args...]"
 	echo "  activate [-modem <modem>] [<carrier>]        Activate modem"
@@ -168,6 +190,7 @@
 	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"
+	echo "  set-carrier [-modem <modem>] <carrier-name>  Set modem carrier firmware"
 	exit 0
 }
 
@@ -191,6 +214,9 @@
 	update-prl)
 		update_prl "$@"
 		;;
+	set-carrier)
+		set_carrier "$@"
+		;;
 	*)
 		usage
 		;;