Chromium Code Reviews| Index: test/mm.py |
| diff --git a/test/mm.py b/test/mm.py |
| index 2fc4f3f75becc877924d11963c40d0caf3177e8e..e3620f0afe28597692a02e1c889c85edad38cc38 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] |
| + |
| +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 len(matches): |
|
rochberg
2011/03/30 00:23:54
not matches
Jason Glasgow
2011/03/30 14:44:47
Done.
|
| 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 m, path in matches])) |
|
rochberg
2011/03/30 00:23:54
for _, path
Jason Glasgow
2011/03/30 14:44:47
Done.
|
| return matches[0] |