test: add modem info helper
This commit is contained in:
248
test/info.py
Executable file
248
test/info.py
Executable file
@@ -0,0 +1,248 @@
|
||||
#!/usr/bin/python
|
||||
# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details:
|
||||
#
|
||||
# Copyright (C) 2008 Novell, Inc.
|
||||
# Copyright (C) 2009 Red Hat, Inc.
|
||||
#
|
||||
|
||||
import sys, dbus
|
||||
|
||||
DBUS_INTERFACE_PROPERTIES='org.freedesktop.DBus.Properties'
|
||||
MM_DBUS_SERVICE='org.freedesktop.ModemManager'
|
||||
MM_DBUS_PATH='/org/freedesktop/ModemManager'
|
||||
MM_DBUS_INTERFACE='org.freedesktop.ModemManager'
|
||||
MM_DBUS_INTERFACE_MODEM='org.freedesktop.ModemManager.Modem'
|
||||
MM_DBUS_INTERFACE_MODEM_CDMA='org.freedesktop.ModemManager.Modem.Cdma'
|
||||
MM_DBUS_INTERFACE_MODEM_GSM_CARD='org.freedesktop.ModemManager.Modem.Gsm.Card'
|
||||
MM_DBUS_INTERFACE_MODEM_GSM_NETWORK='org.freedesktop.ModemManager.Modem.Gsm.Network'
|
||||
|
||||
def get_cdma_band_class(band_class):
|
||||
if band_class == 1:
|
||||
return "800MHz"
|
||||
elif band_class == 2:
|
||||
return "1900MHz"
|
||||
else:
|
||||
return "Unknown"
|
||||
|
||||
def get_reg_state(state):
|
||||
if state == 1:
|
||||
return "registered (roaming unknown)"
|
||||
elif state == 2:
|
||||
return "registered on home network"
|
||||
elif state == 3:
|
||||
return "registered on roaming network"
|
||||
else:
|
||||
return "unknown"
|
||||
|
||||
def cdma_inspect(proxy, props):
|
||||
cdma = dbus.Interface(proxy, dbus_interface=MM_DBUS_INTERFACE_MODEM_CDMA)
|
||||
|
||||
esn = cdma.GetEsn()
|
||||
print "ESN: %s" % esn
|
||||
|
||||
try:
|
||||
(cdma_1x_state, evdo_state) = cdma.GetRegistrationState()
|
||||
print "1x State: %s" % get_reg_state (cdma_1x_state)
|
||||
print "EVDO State: %s" % get_reg_state (evdo_state)
|
||||
except dbus.exceptions.DBusException, e:
|
||||
print "Error reading registration state: %s" % e
|
||||
|
||||
try:
|
||||
quality = cdma.GetSignalQuality()
|
||||
print "Signal quality: %d" % quality
|
||||
except dbus.exceptions.DBusException, e:
|
||||
print "Error reading signal quality: %s" % e
|
||||
|
||||
try:
|
||||
info = cdma.GetServingSystem()
|
||||
print "Class: %s" % get_cdma_band_class(info[0])
|
||||
print "Band: %s" % info[1]
|
||||
print "SID: %d" % info[2]
|
||||
except dbus.exceptions.DBusException, e:
|
||||
print "Error reading serving system: %s" % e
|
||||
|
||||
|
||||
def get_gsm_network_mode(modem):
|
||||
mode = modem.GetNetworkMode()
|
||||
if mode == 0x0:
|
||||
mode = "Unknown"
|
||||
elif mode == 0x1:
|
||||
mode = "Any"
|
||||
elif mode == 0x2:
|
||||
mode = "GPRS"
|
||||
elif mode == 0x4:
|
||||
mode = "EDGE"
|
||||
elif mode == 0x8:
|
||||
mode = "UMTS"
|
||||
elif mode == 0x10:
|
||||
mode = "HSDPA"
|
||||
elif mode == 0x20:
|
||||
mode = "2G Preferred"
|
||||
elif mode == 0x40:
|
||||
mode = "3G Preferred"
|
||||
elif mode == 0x80:
|
||||
mode = "2G Only"
|
||||
elif mode == 0x100:
|
||||
mode = "3G Only"
|
||||
elif mode == 0x200:
|
||||
mode = "HSUPA"
|
||||
elif mode == 0x400:
|
||||
mode = "HSPA"
|
||||
else:
|
||||
mode = "(Unknown)"
|
||||
|
||||
print "Mode: %s" % mode
|
||||
|
||||
def get_gsm_band(modem):
|
||||
band = modem.GetBand()
|
||||
if band == 0x0:
|
||||
band = "Unknown"
|
||||
elif band == 0x1:
|
||||
band = "Any"
|
||||
elif band == 0x2:
|
||||
band = "EGSM (900 MHz)"
|
||||
elif band == 0x4:
|
||||
band = "DCS (1800 MHz)"
|
||||
elif band == 0x8:
|
||||
band = "PCS (1900 MHz)"
|
||||
elif band == 0x10:
|
||||
band = "G850 (850 MHz)"
|
||||
elif band == 0x20:
|
||||
band = "U2100 (WCSMA 2100 MHZ, Class I)"
|
||||
elif band == 0x40:
|
||||
band = "U1700 (WCDMA 3GPP UMTS1800 MHz, Class III)"
|
||||
elif band == 0x80:
|
||||
band = "17IV (WCDMA 3GPP AWS 1700/2100 MHz, Class IV)"
|
||||
elif band == 0x100:
|
||||
band = "U800 (WCDMA 3GPP UMTS800 MHz, Class VI)"
|
||||
elif band == 0x200:
|
||||
band = "U850 (WCDMA 3GPP UMT850 MHz, Class V)"
|
||||
elif band == 0x400:
|
||||
band = "U900 (WCDMA 3GPP UMTS900 MHz, Class VIII)"
|
||||
elif band == 0x800:
|
||||
band = "U17IX (WCDMA 3GPP UMTS MHz, Class IX)"
|
||||
else:
|
||||
band = "(invalid)"
|
||||
|
||||
print "Band: %s" % band
|
||||
|
||||
|
||||
mm_allowed = { 0: "any",
|
||||
1: "2G preferred",
|
||||
2: "3G preferred",
|
||||
3: "2G only",
|
||||
4: "3G only"
|
||||
}
|
||||
|
||||
mm_act = { 0: "unknown",
|
||||
1: "GSM",
|
||||
2: "GSM Compact",
|
||||
3: "GPRS",
|
||||
4: "EDGE",
|
||||
5: "UMTS",
|
||||
6: "HSDPA",
|
||||
7: "HSUPA",
|
||||
8: "HSPA"
|
||||
}
|
||||
|
||||
mm_reg = { 0: "idle",
|
||||
1: "home",
|
||||
2: "searching",
|
||||
3: "denied",
|
||||
4: "unknown",
|
||||
5: "roaming"
|
||||
}
|
||||
|
||||
def gsm_inspect(proxy, props):
|
||||
# Gsm.Card interface
|
||||
card = dbus.Interface(proxy, dbus_interface=MM_DBUS_INTERFACE_MODEM_GSM_CARD)
|
||||
|
||||
imei = "<unavailable>"
|
||||
try:
|
||||
imei = card.GetImei()
|
||||
except dbus.exceptions.DBusException:
|
||||
pass
|
||||
print "IMEI: %s" % imei
|
||||
|
||||
imsi = "<unavailable>"
|
||||
try:
|
||||
imsi = card.GetImsi()
|
||||
except dbus.exceptions.DBusException:
|
||||
pass
|
||||
print "IMSI: %s" % imsi
|
||||
|
||||
opid = "<unavailable>"
|
||||
try:
|
||||
opid = card.GetOperatorId()
|
||||
except dbus.exceptions.DBusException:
|
||||
pass
|
||||
print "Operator ID: %s" % opid
|
||||
|
||||
# Gsm.Network interface
|
||||
net = dbus.Interface(proxy, dbus_interface=MM_DBUS_INTERFACE_MODEM_GSM_NETWORK)
|
||||
try:
|
||||
quality = net.GetSignalQuality()
|
||||
print "Signal quality: %d" % quality
|
||||
except dbus.exceptions.DBusException, e:
|
||||
print "Error reading signal quality: %s" % e
|
||||
|
||||
try:
|
||||
reg = net.GetRegistrationInfo()
|
||||
print "Reg status: %s (%s, '%s')" % (mm_reg[int(reg[0])], reg[1], reg[2])
|
||||
except dbus.exceptions.DBusException, e:
|
||||
print "Error reading registration: %s" % e
|
||||
|
||||
try:
|
||||
allowed = props.Get(MM_DBUS_INTERFACE_MODEM_GSM_NETWORK, "AllowedMode")
|
||||
print "Allowed mode: %s" % mm_allowed[allowed]
|
||||
except dbus.exceptions.DBusException, e:
|
||||
print "Error reading allowed mode: %s" % e
|
||||
|
||||
try:
|
||||
act = props.Get(MM_DBUS_INTERFACE_MODEM_GSM_NETWORK, "AccessTechnology")
|
||||
print "Access Tech: %s" % mm_act[act]
|
||||
except dbus.exceptions.DBusException, e:
|
||||
print "Error reading current access technology: %s" % e
|
||||
|
||||
|
||||
|
||||
bus = dbus.SystemBus()
|
||||
bus = dbus.SystemBus()
|
||||
proxy = bus.get_object(MM_DBUS_SERVICE, sys.argv[1])
|
||||
|
||||
# Properties
|
||||
props = dbus.Interface(proxy, dbus_interface='org.freedesktop.DBus.Properties')
|
||||
|
||||
mtype = props.Get(MM_DBUS_INTERFACE_MODEM, 'Type')
|
||||
if mtype == 1:
|
||||
print "Type: GSM"
|
||||
elif mtype == 2:
|
||||
print "Type: CDMA"
|
||||
|
||||
print "Driver: '%s'" % (props.Get(MM_DBUS_INTERFACE_MODEM, 'Driver'))
|
||||
print "Modem device: '%s'" % (props.Get(MM_DBUS_INTERFACE_MODEM, 'MasterDevice'))
|
||||
print "Data device: '%s'" % (props.Get(MM_DBUS_INTERFACE_MODEM, 'Device'))
|
||||
print ""
|
||||
|
||||
modem = dbus.Interface(proxy, dbus_interface=MM_DBUS_INTERFACE_MODEM)
|
||||
info = modem.GetInfo()
|
||||
print "Vendor: %s" % info[0]
|
||||
print "Model: %s" % info[1]
|
||||
print "Version: %s" % info[2]
|
||||
print ""
|
||||
|
||||
if mtype == 1:
|
||||
gsm_inspect(proxy, props)
|
||||
elif mtype == 2:
|
||||
cdma_inspect(proxy, props)
|
||||
|
Reference in New Issue
Block a user