Index: test/mm.py |
diff --git a/test/mm.py b/test/mm.py |
index 2fc4f3f75becc877924d11963c40d0caf3177e8e..dfdb0a092bed0451a8add1c3ef027d13ba819641 100755 |
--- a/test/mm.py |
+++ b/test/mm.py |
@@ -1,18 +1,15 @@ |
#!/usr/bin/python |
-# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
+# Copyright (c) 2011 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. |
import dbus |
import os |
+MMPROVIDERS = [ 'org.chromium', 'org.freedesktop' ] |
+ |
class ModemManager(object): |
- MMPROVIDER = os.getenv('MMPROVIDER') |
- if not MMPROVIDER: |
- MMPROVIDER = 'org.chromium' |
- SERVICE = '%s.ModemManager' % (MMPROVIDER) |
- PATH = '/%s/ModemManager' % (MMPROVIDER.replace('.', '/')) |
INTERFACE = 'org.freedesktop.ModemManager' |
MODEM_INTERFACE = 'org.freedesktop.ModemManager.Modem' |
SIMPLE_MODEM_INTERFACE = 'org.freedesktop.ModemManager.Modem.Simple' |
@@ -26,42 +23,44 @@ class ModemManager(object): |
GSM_MODEM = 1 |
CDMA_MODEM = 2 |
- def __init__(self): |
+ def __init__(self, provider=None): |
self.bus = dbus.SystemBus() |
- self.manager = dbus.Interface(self.bus.get_object(ModemManager.SERVICE, |
- ModemManager.PATH), |
+ self.provider = provider or os.getenv('MMPROVIDER') or 'org.chromium' |
+ self.service = '%s.ModemManager' % self.provider |
+ self.path = '/%s/ModemManager' % (self.provider.replace('.', '/')) |
+ self.manager = dbus.Interface(self.bus.get_object(self.service, self.path), |
ModemManager.INTERFACE) |
def Modem(self, path): |
- obj = self.bus.get_object(ModemManager.SERVICE, path) |
+ obj = self.bus.get_object(self.service, path) |
return dbus.Interface(obj, ModemManager.MODEM_INTERFACE) |
def SimpleModem(self, path): |
- obj = self.bus.get_object(ModemManager.SERVICE, path) |
+ obj = self.bus.get_object(self.service, path) |
return dbus.Interface(obj, ModemManager.SIMPLE_MODEM_INTERFACE) |
def CdmaModem(self, path): |
- obj = self.bus.get_object(ModemManager.SERVICE, path) |
+ obj = self.bus.get_object(self.service, path) |
return dbus.Interface(obj, ModemManager.CDMA_MODEM_INTERFACE) |
def GobiModem(self, path): |
- obj = self.bus.get_object(ModemManager.SERVICE, path) |
+ obj = self.bus.get_object(self.service, path) |
return dbus.Interface(obj, ModemManager.GOBI_MODEM_INTERFACE) |
def GsmModem(self, path): |
- obj = self.bus.get_object(ModemManager.SERVICE, path) |
+ obj = self.bus.get_object(self.service, path) |
return dbus.Interface(obj, ModemManager.GSM_MODEM_INTERFACE) |
def GsmCard(self, path): |
- obj = self.bus.get_object(ModemManager.SERVICE, path) |
+ obj = self.bus.get_object(self.service, path) |
return dbus.Interface(obj, ModemManager.GSM_CARD_INTERFACE) |
def GsmNetwork(self, path): |
- obj = self.bus.get_object(ModemManager.SERVICE, path) |
+ obj = self.bus.get_object(self.service, path) |
return dbus.Interface(obj, ModemManager.GSM_NETWORK_INTERFACE) |
def GetAll(self, iface, path): |
- obj = self.bus.get_object(ModemManager.SERVICE, path) |
+ obj = self.bus.get_object(self.service, path) |
obj_iface = dbus.Interface(obj, ModemManager.PROPERTIES_INTERFACE) |
return obj_iface.GetAll(iface) |
@@ -86,11 +85,53 @@ class ModemManager(object): |
return props |
-def PickOneModem(manager, modem_pattern): |
- devices = manager.manager.EnumerateDevices() |
- matches = [path for path in devices if modem_pattern in path] |
- if not len(matches): |
+ |
+def EnumerateDevices(manager=None): |
+ """ Enumerate all modems in the system |
+ |
+ Args: |
+ manager - the specific manager to use, if None check all known managers |
+ |
+ Returns: |
+ a list of (ModemManager object, modem dbus path) |
+ """ |
+ if manager: |
+ managers = [manager] |
+ else: |
+ managers = [ModemManager(x) for x in MMPROVIDERS] |
+ |
+ result = [] |
+ for m in managers: |
+ for path in m.manager.EnumerateDevices(): |
+ result.append((m, path)) |
+ |
+ return result |
+ |
+ |
+def PickOneModem(modem_pattern, manager=None): |
+ """ Pick a modem |
+ |
+ If a machine has a single modem, managed by one one of the |
+ MMPROVIDERS, return the dbus path and a ModemManager object for |
+ that modem. |
+ |
+ Args: |
+ modem_pattern - pattern that should match the modem path |
+ manager - the specific manager to use, if None check all known managers |
+ |
+ Returns: |
+ ModemManager object, modem dbus path |
+ |
+ Raises: |
+ ValueError - if there are no matching modems, or there are more |
+ than one |
+ """ |
+ devices = EnumerateDevices(manager) |
+ |
+ matches = [(m, path) for m, path in devices if modem_pattern in path] |
+ if not matches: |
raise ValueError("No modems had substring: " + modem_pattern) |
if len(matches) > 1: |
- raise ValueError("Expected only one modem, got: " + ', '.join(matches)) |
+ raise ValueError("Expected only one modem, got: " + |
+ ", ".join([path for _, path in matches])) |
return matches[0] |