blob: c852205688b5a2a9d47cef6b6f56865253048a4e [file] [log] [blame]
Ben Chan866aecc2012-07-26 22:03:051# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5# Common utilities for gathering information about modems.
6
7#
8# For modems managed by org.chromium.ModemManager
9#
10MM=org.chromium.ModemManager
11MM_OBJECT=/org/chromium/ModemManager
12MM_IMANAGER=org.freedesktop.ModemManager
13MM_IMODEM=${MM_IMANAGER}.Modem
14MM_IMODEM_SIMPLE=${MM_IMODEM}.Simple
15MM_IMODEM_GSM=${MM_IMODEM}.Gsm
16MM_IMODEM_GSM_CARD=${MM_IMODEM_GSM}.Card
17MM_IMODEM_GSM_NETWORK=${MM_IMODEM_GSM}.Network
18MM_IMODEM_CDMA=${MM_IMODEM}.Cdma
19
20mm_modem_gsm_properties() {
Ben Chand0248472012-07-28 00:13:4621 local modem="$1"
Ben Chan866aecc2012-07-26 22:03:0522 local imei=$(dbus_call "${MM}" "${modem}" "${MM_IMODEM_GSM_CARD}.GetImei")
23 local imsi=$(dbus_call "${MM}" "${modem}" "${MM_IMODEM_GSM_CARD}.GetImsi")
24 local band=$(dbus_call "${MM}" "${modem}" "${MM_IMODEM_GSM_NETWORK}.GetBand")
25 local signal_quality=$(dbus_call "${MM}" "${modem}" \
26 "${MM_IMODEM_GSM_NETWORK}.GetSignalQuality")
27
28 echo "GSM:"
29 echo " Card:"
30 echo " IMEI: ${imei}"
31 echo " IMSI: ${imsi}"
32 dbus_properties "${MM}" "${modem}" "${MM_IMODEM_GSM_CARD}" \
33 | format_dbus_dict | indent 2
34
35 echo " Network:"
36 echo " Band: ${band}"
37 echo " Registration:"
38 dbus_call "${MM}" "${modem}" "${MM_IMODEM_GSM_NETWORK}.GetRegistrationInfo" \
39 | unpack_tuple Status OperatorCode OperatorName | indent 3
40 echo " SignalQuality: ${signal_quality}"
41 dbus_properties "${MM}" "${modem}" "${MM_IMODEM_GSM_NETWORK}" \
42 | format_dbus_dict | indent 2
43}
44
45mm_modem_cdma_properties() {
Ben Chand0248472012-07-28 00:13:4646 local modem="$1"
Ben Chan866aecc2012-07-26 22:03:0547 local esn=$(dbus_call "${MM}" "${modem}" "${MM_IMODEM_CDMA}.GetEsn")
48 local signal_quality=$(dbus_call "${MM}" "${modem}" \
49 "${MM_IMODEM_CDMA}.GetSignalQuality")
50 local cdma1x_reg_state=$(dbus_call "${MM}" "${modem}" \
51 "${MM_IMODEM_CDMA}.GetRegistrationState" | head -1)
52 local evdo_reg_state=$(dbus_call "${MM}" "${modem}" \
53 "${MM_IMODEM_CDMA}.GetRegistrationState" | tail -1)
54
55 echo "CDMA:"
56 echo " ESN: ${esn}"
57 echo " Registration:"
58 echo " CDMA-1x: ${cdma1x_reg_state}"
59 echo " EVDO: ${evdo_reg_state}"
60 echo " ServingSystem:"
61 dbus_call "${MM}" "${modem}" "${MM_IMODEM_CDMA}.GetServingSystem" \
62 | unpack_tuple BandClass Band ID | indent 2
63 echo " SignalQuality: ${signal_quality}"
64}
65
66mm_modem_properties() {
Ben Chand0248472012-07-28 00:13:4667 local modem="$1"
Ben Chan866aecc2012-07-26 22:03:0568 local modem_type=$(dbus_property "${MM}" "${modem}" "${MM_IMODEM}" Type)
69
70 echo
71 echo "Modem ${modem}:"
72 echo " GetStatus:"
Ben Chand0248472012-07-28 00:13:4673 dbus_call "${MM}" "${modem}" "${MM_IMODEM_SIMPLE}.GetStatus" \
Ben Chan866aecc2012-07-26 22:03:0574 | format_dbus_dict | indent 2
75 echo " GetInfo:"
Ben Chand0248472012-07-28 00:13:4676 dbus_call "${MM}" "${modem}" "${MM_IMODEM}.GetInfo" \
Ben Chan866aecc2012-07-26 22:03:0577 | unpack_tuple Manufacturer Modem Version | indent 2
78 echo " Properties:"
79 dbus_properties "${MM}" "${modem}" "${MM_IMODEM}" \
80 | format_dbus_dict | indent 2
81
82 case "${modem_type}" in
83 1) # GSM
84 mm_modem_gsm_properties "${modem}" | indent
85 ;;
86 2) # CDMA
87 mm_modem_cdma_properties "${modem}" | indent
88 ;;
89 *)
90 error 'Modem type unknown; no further information available.'
91 ;;
92 esac
93}
94
Ben Chand0248472012-07-28 00:13:4695mm_modem_status() {
96 local modem="$1"
97 local property="$2"
98
99 dbus_call "${MM}" "${modem}" "${MM_IMODEM_SIMPLE}.GetStatus" \
100 2>/dev/null | awk "/\/${property}/ { print \$2 }"
Ben Chan866aecc2012-07-26 22:03:05101}
102
Ben Chand0248472012-07-28 00:13:46103mm_modem_activation_state() {
104 local modem="$1"
105
106 mm_modem_status "${modem}" activation_state
107}
108
109mm_modems() {
110 dbus_call "${MM}" "${MM_OBJECT}" "${MM_IMANAGER}.EnumerateDevices" \
111 2>/dev/null | awk '{ print $2 }'
112}
113
114is_mm_modem() {
115 local modem="$1"
116 test $(expr match "${modem}" "${MM_OBJECT}/") -gt 0
117}
Ben Chan866aecc2012-07-26 22:03:05118
119#
120# For modems managed by org.freedesktop.ModemManager1
121#
122MM1=org.freedesktop.ModemManager1
123MM1_OBJECT=/org/freedesktop/ModemManager1
124MM1_IMANAGER=org.freedesktop.ModemManager1
125MM1_IMODEM=${MM1_IMANAGER}.Modem
126MM1_IMODEM_SIMPLE=${MM1_IMODEM}.Simple
127MM1_IMODEM_3GPP=${MM1_IMODEM}.Modem3gpp
128MM1_IMODEM_CDMA=${MM1_IMODEM}.ModemCdma
129MM1_ISIM=${MM1_IMANAGER}.Sim
130
131mm1_modem_sim() {
132 dbus_property "${MM1}" "${modem}" "${MM1_IMODEM}" Sim
133}
134
135mm1_modem_properties() {
Ben Chand0248472012-07-28 00:13:46136 local modem="$1"
Ben Chan866aecc2012-07-26 22:03:05137 local sim=$(mm1_modem_sim "${modem}")
138
139 echo
140 echo "Modem ${modem}:"
141 echo " GetStatus:"
142 dbus_call "${MM1}" "${modem}" "${MM1_IMODEM_SIMPLE}.GetStatus" \
143 | format_dbus_dict | indent 2
144 echo " Properties:"
145 dbus_properties "${MM1}" "${modem}" "${MM1_IMODEM}" \
146 | format_dbus_dict | indent 2
147 echo " 3GPP:"
148 dbus_properties "${MM1}" "${modem}" "${MM1_IMODEM_3GPP}" \
149 | format_dbus_dict | indent 2
150 echo " CDMA:"
151 dbus_properties "${MM1}" "${modem}" "${MM1_IMODEM_CDMA}" \
152 | format_dbus_dict | indent 2
153
154 if [ "${#sim}" -gt 1 ]; then
155 echo " SIM ${sim}:"
156 dbus_properties "${MM1}" "${sim}" "${MM1_ISIM}" \
157 | format_dbus_dict | indent 2
158 fi
159}
160
161mm1_modems() {
Ben Chand0248472012-07-28 00:13:46162 mmcli -L 2>/dev/null \
163 | awk '/\/org\/freedesktop\/ModemManager1\/Modem\// { print $1 }'
Ben Chan866aecc2012-07-26 22:03:05164}
165
Ben Chand0248472012-07-28 00:13:46166is_mm1_modem() {
167 local modem="$1"
168 test $(expr match "${modem}" "${MM1_OBJECT}/") -gt 0
169}
Ben Chan866aecc2012-07-26 22:03:05170
171#
172# Common stuff
173#
174MASKED_PROPERTIES="DeviceIdentifier|EquipmentIdentifier|OwnNumbers|ESN|MEID|IMEI|IMSI|SimIdentifier|MDN|MIN|payment_url_postdata"
175
176mask_modem_properties() {
177 sed -E "s/\<(${MASKED_PROPERTIES}): (.+)/\1: *** MASKED ***/i"
178}
179
180all_modem_status() {
181 for modem in $(mm_modems); do
182 mm_modem_properties "${modem}"
183 done
184 for modem in $(mm1_modems); do
185 mm1_modem_properties "${modem}"
186 done
187}
Ben Chand0248472012-07-28 00:13:46188
189default_modem() {
190 local modem=$(mm_modems | head -1)
191 [ -z "${modem}" ] && modem=$(mm1_modems | head -1)
192 echo "${modem}"
193}
Ben Chand050a362012-09-12 04:52:05194
195# Returns all modem managers that are currently running.
196modem_managers() {
197 dbus_call org.freedesktop.DBus /org/freedesktop/DBus \
198 org.freedesktop.DBus.ListNames | awk '/ModemManager/ { print $2 }'
199}
200
201# Sets the log level of the specified modem manager.
202set_modem_manager_logging() {
203 local manager="$1"
204 local level="$2"
205
206 case "$manager" in
207 org.chromium.ModemManager)
208 dbus_call "${manager}" "${MM_OBJECT}" "${MM_IMANAGER}.SetLogging" \
209 "string:${level}"
210 ;;
211 org.freedesktop.ModemManager1)
212 if [ "${level}" = "error" ]; then
213 level=err
214 fi
215 dbus_call "${manager}" "${MM1_OBJECT}" "${MM1_IMANAGER}.SetLogging" \
216 "string:${level}"
217 ;;
218 *)
219 return 1
220 ;;
221 esac
222}