blob: ee1fc9920b23fcc900b077e3d01cc87896444dc2 [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() {
21 local modem=$1
22 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() {
46 local modem=$1
47 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() {
67 local modem=$1
68 local modem_type=$(dbus_property "${MM}" "${modem}" "${MM_IMODEM}" Type)
69
70 echo
71 echo "Modem ${modem}:"
72 echo " GetStatus:"
73 dbus_call "${MM}" "${modem}" ${MM_IMODEM_SIMPLE}.GetStatus \
74 | format_dbus_dict | indent 2
75 echo " GetInfo:"
76 dbus_call "${MM}" "${modem}" ${MM_IMODEM}.GetInfo \
77 | 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
95mm_modems() {
96 dbus_call "${MM}" "${MM_OBJECT}" "${MM_IMANAGER}.EnumerateDevices" \
97 | awk '{ print $2 }'
98}
99
100
101#
102# For modems managed by org.freedesktop.ModemManager1
103#
104MM1=org.freedesktop.ModemManager1
105MM1_OBJECT=/org/freedesktop/ModemManager1
106MM1_IMANAGER=org.freedesktop.ModemManager1
107MM1_IMODEM=${MM1_IMANAGER}.Modem
108MM1_IMODEM_SIMPLE=${MM1_IMODEM}.Simple
109MM1_IMODEM_3GPP=${MM1_IMODEM}.Modem3gpp
110MM1_IMODEM_CDMA=${MM1_IMODEM}.ModemCdma
111MM1_ISIM=${MM1_IMANAGER}.Sim
112
113mm1_modem_sim() {
114 dbus_property "${MM1}" "${modem}" "${MM1_IMODEM}" Sim
115}
116
117mm1_modem_properties() {
118 local modem=$1
119 local sim=$(mm1_modem_sim "${modem}")
120
121 echo
122 echo "Modem ${modem}:"
123 echo " GetStatus:"
124 dbus_call "${MM1}" "${modem}" "${MM1_IMODEM_SIMPLE}.GetStatus" \
125 | format_dbus_dict | indent 2
126 echo " Properties:"
127 dbus_properties "${MM1}" "${modem}" "${MM1_IMODEM}" \
128 | format_dbus_dict | indent 2
129 echo " 3GPP:"
130 dbus_properties "${MM1}" "${modem}" "${MM1_IMODEM_3GPP}" \
131 | format_dbus_dict | indent 2
132 echo " CDMA:"
133 dbus_properties "${MM1}" "${modem}" "${MM1_IMODEM_CDMA}" \
134 | format_dbus_dict | indent 2
135
136 if [ "${#sim}" -gt 1 ]; then
137 echo " SIM ${sim}:"
138 dbus_properties "${MM1}" "${sim}" "${MM1_ISIM}" \
139 | format_dbus_dict | indent 2
140 fi
141}
142
143mm1_modems() {
144 mmcli -L | awk '/\/org\/freedesktop\/ModemManager1\/Modem\// { print $1 }'
145}
146
147
148#
149# Common stuff
150#
151MASKED_PROPERTIES="DeviceIdentifier|EquipmentIdentifier|OwnNumbers|ESN|MEID|IMEI|IMSI|SimIdentifier|MDN|MIN|payment_url_postdata"
152
153mask_modem_properties() {
154 sed -E "s/\<(${MASKED_PROPERTIES}): (.+)/\1: *** MASKED ***/i"
155}
156
157all_modem_status() {
158 for modem in $(mm_modems); do
159 mm_modem_properties "${modem}"
160 done
161 for modem in $(mm1_modems); do
162 mm1_modem_properties "${modem}"
163 done
164}