Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 | 2 |
| 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 3 # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| 4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
| 5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
| 6 | 6 |
| 7 import dbus | 7 import dbus |
| 8 import os | 8 import os |
| 9 | 9 |
| 10 MMPROVIDERS = [ 'org.chromium', 'org.freedesktop' ] | |
| 11 | |
| 10 class ModemManager(object): | 12 class ModemManager(object): |
| 11 MMPROVIDER = os.getenv('MMPROVIDER') | |
| 12 if not MMPROVIDER: | |
| 13 MMPROVIDER = 'org.chromium' | |
| 14 SERVICE = '%s.ModemManager' % (MMPROVIDER) | |
| 15 PATH = '/%s/ModemManager' % (MMPROVIDER.replace('.', '/')) | |
| 16 INTERFACE = 'org.freedesktop.ModemManager' | 13 INTERFACE = 'org.freedesktop.ModemManager' |
| 17 MODEM_INTERFACE = 'org.freedesktop.ModemManager.Modem' | 14 MODEM_INTERFACE = 'org.freedesktop.ModemManager.Modem' |
| 18 SIMPLE_MODEM_INTERFACE = 'org.freedesktop.ModemManager.Modem.Simple' | 15 SIMPLE_MODEM_INTERFACE = 'org.freedesktop.ModemManager.Modem.Simple' |
| 19 CDMA_MODEM_INTERFACE = 'org.freedesktop.ModemManager.Modem.Cdma' | 16 CDMA_MODEM_INTERFACE = 'org.freedesktop.ModemManager.Modem.Cdma' |
| 20 GSM_MODEM_INTERFACE = 'org.freedesktop.ModemManager.Modem.Gsm' | 17 GSM_MODEM_INTERFACE = 'org.freedesktop.ModemManager.Modem.Gsm' |
| 21 GOBI_MODEM_INTERFACE = 'org.chromium.ModemManager.Modem.Gobi' | 18 GOBI_MODEM_INTERFACE = 'org.chromium.ModemManager.Modem.Gobi' |
| 22 GSM_CARD_INTERFACE = 'org.freedesktop.ModemManager.Modem.Gsm.Card' | 19 GSM_CARD_INTERFACE = 'org.freedesktop.ModemManager.Modem.Gsm.Card' |
| 23 GSM_NETWORK_INTERFACE = 'org.freedesktop.ModemManager.Modem.Gsm.Network' | 20 GSM_NETWORK_INTERFACE = 'org.freedesktop.ModemManager.Modem.Gsm.Network' |
| 24 PROPERTIES_INTERFACE = 'org.freedesktop.DBus.Properties' | 21 PROPERTIES_INTERFACE = 'org.freedesktop.DBus.Properties' |
| 25 | 22 |
| 26 GSM_MODEM = 1 | 23 GSM_MODEM = 1 |
| 27 CDMA_MODEM = 2 | 24 CDMA_MODEM = 2 |
| 28 | 25 |
| 29 def __init__(self): | 26 def __init__(self, provider=None): |
| 30 self.bus = dbus.SystemBus() | 27 self.bus = dbus.SystemBus() |
| 31 self.manager = dbus.Interface(self.bus.get_object(ModemManager.SERVICE, | 28 self.provider = provider or os.getenv('MMPROVIDER') or 'org.chromium' |
| 32 ModemManager.PATH), | 29 self.service = '%s.ModemManager' % self.provider |
| 30 self.path = '/%s/ModemManager' % (self.provider.replace('.', '/')) | |
| 31 self.manager = dbus.Interface(self.bus.get_object(self.service, self.path), | |
| 33 ModemManager.INTERFACE) | 32 ModemManager.INTERFACE) |
| 34 | 33 |
| 35 def Modem(self, path): | 34 def Modem(self, path): |
| 36 obj = self.bus.get_object(ModemManager.SERVICE, path) | 35 obj = self.bus.get_object(self.service, path) |
| 37 return dbus.Interface(obj, ModemManager.MODEM_INTERFACE) | 36 return dbus.Interface(obj, ModemManager.MODEM_INTERFACE) |
| 38 | 37 |
| 39 def SimpleModem(self, path): | 38 def SimpleModem(self, path): |
| 40 obj = self.bus.get_object(ModemManager.SERVICE, path) | 39 obj = self.bus.get_object(self.service, path) |
| 41 return dbus.Interface(obj, ModemManager.SIMPLE_MODEM_INTERFACE) | 40 return dbus.Interface(obj, ModemManager.SIMPLE_MODEM_INTERFACE) |
| 42 | 41 |
| 43 def CdmaModem(self, path): | 42 def CdmaModem(self, path): |
| 44 obj = self.bus.get_object(ModemManager.SERVICE, path) | 43 obj = self.bus.get_object(self.service, path) |
| 45 return dbus.Interface(obj, ModemManager.CDMA_MODEM_INTERFACE) | 44 return dbus.Interface(obj, ModemManager.CDMA_MODEM_INTERFACE) |
| 46 | 45 |
| 47 def GobiModem(self, path): | 46 def GobiModem(self, path): |
| 48 obj = self.bus.get_object(ModemManager.SERVICE, path) | 47 obj = self.bus.get_object(self.service, path) |
| 49 return dbus.Interface(obj, ModemManager.GOBI_MODEM_INTERFACE) | 48 return dbus.Interface(obj, ModemManager.GOBI_MODEM_INTERFACE) |
| 50 | 49 |
| 51 def GsmModem(self, path): | 50 def GsmModem(self, path): |
| 52 obj = self.bus.get_object(ModemManager.SERVICE, path) | 51 obj = self.bus.get_object(self.service, path) |
| 53 return dbus.Interface(obj, ModemManager.GSM_MODEM_INTERFACE) | 52 return dbus.Interface(obj, ModemManager.GSM_MODEM_INTERFACE) |
| 54 | 53 |
| 55 def GsmCard(self, path): | 54 def GsmCard(self, path): |
| 56 obj = self.bus.get_object(ModemManager.SERVICE, path) | 55 obj = self.bus.get_object(self.service, path) |
| 57 return dbus.Interface(obj, ModemManager.GSM_CARD_INTERFACE) | 56 return dbus.Interface(obj, ModemManager.GSM_CARD_INTERFACE) |
| 58 | 57 |
| 59 def GsmNetwork(self, path): | 58 def GsmNetwork(self, path): |
| 60 obj = self.bus.get_object(ModemManager.SERVICE, path) | 59 obj = self.bus.get_object(self.service, path) |
| 61 return dbus.Interface(obj, ModemManager.GSM_NETWORK_INTERFACE) | 60 return dbus.Interface(obj, ModemManager.GSM_NETWORK_INTERFACE) |
| 62 | 61 |
| 63 def GetAll(self, iface, path): | 62 def GetAll(self, iface, path): |
| 64 obj = self.bus.get_object(ModemManager.SERVICE, path) | 63 obj = self.bus.get_object(self.service, path) |
| 65 obj_iface = dbus.Interface(obj, ModemManager.PROPERTIES_INTERFACE) | 64 obj_iface = dbus.Interface(obj, ModemManager.PROPERTIES_INTERFACE) |
| 66 return obj_iface.GetAll(iface) | 65 return obj_iface.GetAll(iface) |
| 67 | 66 |
| 68 def GetModemInterfaces(self): | 67 def GetModemInterfaces(self): |
| 69 return [ | 68 return [ |
| 70 ModemManager.MODEM_INTERFACE, | 69 ModemManager.MODEM_INTERFACE, |
| 71 ModemManager.SIMPLE_MODEM_INTERFACE, | 70 ModemManager.SIMPLE_MODEM_INTERFACE, |
| 72 ModemManager.CDMA_MODEM_INTERFACE, | 71 ModemManager.CDMA_MODEM_INTERFACE, |
| 73 ModemManager.GSM_MODEM_INTERFACE, | 72 ModemManager.GSM_MODEM_INTERFACE, |
| 74 ModemManager.GOBI_MODEM_INTERFACE] | 73 ModemManager.GOBI_MODEM_INTERFACE] |
| 75 | 74 |
| 76 def Properties(self, path): | 75 def Properties(self, path): |
| 77 props = dict() | 76 props = dict() |
| 78 for iface in self.GetModemInterfaces(): | 77 for iface in self.GetModemInterfaces(): |
| 79 try: | 78 try: |
| 80 d = self.GetAll(iface, path) | 79 d = self.GetAll(iface, path) |
| 81 except: | 80 except: |
| 82 continue | 81 continue |
| 83 if d: | 82 if d: |
| 84 for k, v in d.iteritems(): | 83 for k, v in d.iteritems(): |
| 85 props[k] = v | 84 props[k] = v |
| 86 | 85 |
| 87 return props | 86 return props |
| 88 | 87 |
| 89 def PickOneModem(manager, modem_pattern): | 88 |
| 90 devices = manager.manager.EnumerateDevices() | 89 def EnumerateDevices(manager=None): |
| 91 matches = [path for path in devices if modem_pattern in path] | 90 """ Enumerate all modems in the system |
| 91 | |
| 92 Args: | |
| 93 manager - the specific manager to use, if None check all known managers | |
| 94 | |
| 95 Returns: | |
| 96 a list of (ModemManager object, modem dbus path) | |
| 97 """ | |
| 98 if manager: | |
| 99 managers = [manager] | |
| 100 else: | |
| 101 managers = [ModemManager(x) for x in MMPROVIDERS] | |
| 102 | |
| 103 result = [] | |
| 104 for m in managers: | |
| 105 for path in m.manager.EnumerateDevices(): | |
| 106 result.append((m, path)) | |
| 107 | |
| 108 return result | |
| 109 | |
| 110 | |
| 111 def PickOneModem(modem_pattern, manager=None): | |
| 112 """ Pick a modem | |
| 113 | |
| 114 If a machine has a single modem, managed by one one of the | |
| 115 MMPROVIDERS, return the dbus path and a ModemManager object for | |
| 116 that modem. | |
| 117 | |
| 118 Args: | |
| 119 modem_pattern - pattern that should match the modem path | |
| 120 manager - the specific manager to use, if None check all known managers | |
| 121 | |
| 122 Returns: | |
| 123 ModemManager object, modem dbus path | |
| 124 | |
| 125 Raises: | |
| 126 ValueError - if there are no matching modems, or there are more | |
| 127 than one | |
| 128 """ | |
| 129 devices = EnumerateDevices(manager) | |
| 130 | |
| 131 matches = [(m, path) for m, path in devices if modem_pattern in path] | |
| 92 if not len(matches): | 132 if not len(matches): |
|
rochberg
2011/03/30 00:23:54
not matches
Jason Glasgow
2011/03/30 14:44:47
Done.
| |
| 93 raise ValueError("No modems had substring: " + modem_pattern) | 133 raise ValueError("No modems had substring: " + modem_pattern) |
| 94 if len(matches) > 1: | 134 if len(matches) > 1: |
| 95 raise ValueError("Expected only one modem, got: " + ', '.join(matches)) | 135 raise ValueError("Expected only one modem, got: " + |
| 136 ", ".join([path for m, path in matches])) | |
|
rochberg
2011/03/30 00:23:54
for _, path
Jason Glasgow
2011/03/30 14:44:47
Done.
| |
| 96 return matches[0] | 137 return matches[0] |
| OLD | NEW |