| Index: tools/telemetry/telemetry/core/platform/profiler/monsoon.py
 | 
| diff --git a/tools/telemetry/telemetry/core/platform/profiler/monsoon.py b/tools/telemetry/telemetry/core/platform/profiler/monsoon.py
 | 
| index 7ea60a90edb5bb75d05049fab6a6306cb1b3a840..1076221fcc34a3b35002e0eab968208a532b8055 100644
 | 
| --- a/tools/telemetry/telemetry/core/platform/profiler/monsoon.py
 | 
| +++ b/tools/telemetry/telemetry/core/platform/profiler/monsoon.py
 | 
| @@ -19,6 +19,7 @@ from telemetry.core import util
 | 
|  
 | 
|  util.AddDirToPythonPath(util.GetTelemetryDir(), 'third_party', 'pyserial')
 | 
|  import serial  # pylint: disable=F0401
 | 
| +import serial.tools.list_ports
 | 
|  
 | 
|  
 | 
|  Power = collections.namedtuple('Power', ['amps', 'volts'])
 | 
| @@ -56,33 +57,33 @@ class Monsoon:
 | 
|        self.ser = serial.Serial(device, timeout=1)
 | 
|        return
 | 
|  
 | 
| -    while 1:  # Try all /dev/ttyACM* until we find one we can use.
 | 
| -      for dev in os.listdir('/dev'):
 | 
| -        if not dev.startswith('ttyACM'):
 | 
| +    while 1:
 | 
| +      for (port, desc, _) in serial.tools.list_ports.comports():
 | 
| +        if not desc.lower().startswith('mobile device power monitor'):
 | 
|            continue
 | 
| -        tmpname = '/tmp/monsoon.%s.%s' % (os.uname()[0], dev)
 | 
| +        tmpname = '/tmp/monsoon.%s.%s' % (os.uname()[0], os.path.basename(port))
 | 
|          self._tempfile = open(tmpname, 'w')
 | 
|          try:  # Use a lockfile to ensure exclusive access.
 | 
|            # Put the import in here to avoid doing it on unsupported platforms.
 | 
|            import fcntl
 | 
|            fcntl.lockf(self._tempfile, fcntl.LOCK_EX | fcntl.LOCK_NB)
 | 
|          except IOError:
 | 
| -          logging.error('device %s is in use', dev)
 | 
| +          logging.error('device %s is in use', port)
 | 
|            continue
 | 
|  
 | 
|          try:  # Try to open the device.
 | 
| -          self.ser = serial.Serial('/dev/%s' % dev, timeout=1)
 | 
| +          self.ser = serial.Serial(port, timeout=1)
 | 
|            self.StopDataCollection()  # Just in case.
 | 
|            self._FlushInput()  # Discard stale input.
 | 
|            status = self.GetStatus()
 | 
|          except IOError, e:
 | 
| -          logging.error('error opening device %s: %s', dev, e)
 | 
| +          logging.error('error opening device %s: %s', port, e)
 | 
|            continue
 | 
|  
 | 
|          if not status:
 | 
| -          logging.error('no response from device %s', dev)
 | 
| +          logging.error('no response from device %s', port)
 | 
|          elif serialno and status['serialNumber'] != serialno:
 | 
| -          logging.error('device %s is #%d', dev, status['serialNumber'])
 | 
| +          logging.error('device %s is #%d', port, status['serialNumber'])
 | 
|          else:
 | 
|            if status['hardwareRevision'] == 1:
 | 
|              self._voltage_multiplier = 62.5 / 10**6
 | 
| 
 |