blob: 291bd3b4421b3cbddcb04b3aa6f11ff2c4572124 [file] [log] [blame]
#!/bin/bash
# Copyright (c) 2012 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/connectivity-common.sh
. /usr/lib/modem-common.sh
# 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=$(default_modem)
if [ -n "${modem}" -a "${modem}" != "${oldmodem}" ]; then
status="Done"
break
fi
sleep 1
timeout=$((timeout - 1))
echo -n "."
done
echo "${status}"
}
activate() {
$(arg_or_default modem $(default_modem))
[ -z "${modem}" ] && error_exit "No modem found."
# Work around braindead crosh quoting semantics (i.e., there are none,
# arguments are tokenized on spaces). Sigh.
local carrier=$(echo "$@")
mmcli -m "${modem}" --cdma-activate="${carrier}"
}
connect() {
$(arg_or_default modem $(default_modem))
[ -z "${modem}" ] && error_exit "No modem found."
# Work around braindead quoting again...
local args=$(echo "$@")
[ -n "${args}" ] && args="number=${args}"
mmcli -m "${modem}" --simple-connect="${args}"
}
factory_reset() {
$(arg_or_default modem $(default_modem))
[ -z "${modem}" ] && error_exit "No modem found."
$(arg_or_prompt spc 000000)
# TODO(benchan): Evaluate if a warning should be given when factory
# resetting under certain modem configurations.
mmcli -m "${modem}" --factory-reset="${spc}"
}
reset() {
$(arg_or_default modem $(default_modem))
[ -z "${modem}" ] && error_exit "No modem found."
mmcli -m "${modem}" --reset
wait_for_modem_reset "${modem}" 40
}
status() {
all_modem_status 2>/dev/null
}
status_feedback() {
all_modem_status 2>/dev/null | mask_modem_properties
}
ussd() {
local modem
local operation="$1"
local data="$2"
$(arg_or_default modem $(default_modem))
[ -z "${modem}" ] && error_exit "No modem found."
if [ -z "${operation}" ]; then
echo "Valid USSD operations are: status, initiate, respond, cancel"
return
fi
case "${operation}" in
status)
mmcli -m "${modem}" --3gpp-ussd-status
;;
initiate)
[ -z "${data}" ] && error_exit "Missing USSD data."
mmcli -m "${modem}" --3gpp-ussd-initiate="${data}"
;;
respond)
[ -z "${data}" ] && error_exit "Missing USSD data."
mmcli -m "${modem}" --3gpp-ussd-respond="${data}"
;;
cancel)
mmcli -m "${modem}" --3gpp-ussd-cancel
;;
*)
error_exit "'${operation}' is not valid USSD operation."
;;
esac
}
set_logging() {
local level="$1"
local manager
if [ -z "${level}" ]; then
echo "Valid logging levels are: debug, info, warn, error"
return
fi
case "${level}" in
debug|info|warn|error)
set_modem_manager_logging "${level}"
;;
*)
error_exit "'${level}' is not a valid logging level."
;;
esac
}
usage() {
echo "Usage: $(basename $0) <command> [args...]"
echo " activate [-modem <modem>] [<carrier>] Activate modem"
echo " connect [-modem <modem>] [phone number] Connect modem"
echo " esim set_test_mode <true/false> Set hermes to test mode"
echo " esim refresh_profiles [-euicc <euicc>] Get list of profiles " \
"from eSIM"
echo " esim request_pending_profiles [-euicc <euicc>] [smds] " \
"Get list of pending profiles from SMDS"
echo " esim status Display eSIM status"
echo " esim install [-euicc <euicc>] <activation> [<confirmation>]" \
"Install eSIM profile"
echo " esim install [-euicc <euicc>] <iccid> [<confirmation>]" \
"Install an eSIM profile fetched by request_pending_profiles"
echo " esim uninstall [-euicc <euicc>] <iccid> Uninstall eSIM profile"
echo " esim enable [-euicc <euicc>] <iccid> Enable eSIM profile"
echo " esim disable [-euicc <euicc>] <iccid> Disable eSIM profile"
echo " factory-reset [-modem <modem>] [<spc>] Factory-reset the modem"
echo " force-flash <device_id> Force-flash the modem"
echo " reset [-modem <modem>] Reset the modem"
echo " set-logging (debug|info|warn|error) Set logging level"
echo " status Display modem status"
echo " ussd [-modem <modem>] status " \
"Show status of ongoing USSD session"
echo " ussd [-modem <modem>] initiate <command> Initiate a USSD session"
echo " ussd [-modem <modem>] respond <response> " \
"Respond to a USSD request"
echo " ussd [-modem <modem>] cancel " \
"Cancel ongoing USSD session"
exit 0
}
$(needarg cmd)
case "${cmd}" in
activate)
activate "$@"
;;
connect)
connect "$@"
;;
esim)
esim "$@"
;;
factory-reset)
factory_reset "$@"
;;
force-flash)
force_flash "$@"
;;
reset)
reset "$@"
;;
set-logging)
set_logging "$@"
;;
status)
status "$@"
;;
status-feedback)
status_feedback "$@"
;;
ussd)
ussd "$@"
;;
*)
usage
;;
esac