1# Copyright 2014 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4import logging
5
6from telemetry.core import cros_interface
7from telemetry.core import platform
8from telemetry.internal.platform import device
9
10
11class CrOSDevice(device.Device):
12  def __init__(self, host_name, ssh_port, ssh_identity, is_local):
13    super(CrOSDevice, self).__init__(
14        name='ChromeOs with host %s' % host_name or 'localhost',
15        guid='cros:%s' % host_name or 'localhost')
16    self._host_name = host_name
17    self._ssh_port = ssh_port
18    self._ssh_identity = ssh_identity
19    self._is_local = is_local
20
21  @classmethod
22  def GetAllConnectedDevices(cls, blacklist):
23    return []
24
25  @property
26  def host_name(self):
27    return self._host_name
28
29  @property
30  def ssh_port(self):
31    return self._ssh_port
32
33  @property
34  def ssh_identity(self):
35    return self._ssh_identity
36
37  @property
38  def is_local(self):
39    return self._is_local
40
41
42def IsRunningOnCrOS():
43  return platform.GetHostPlatform().GetOSName() == 'chromeos'
44
45
46def FindAllAvailableDevices(options):
47  """Returns a list of available device types."""
48  use_ssh = options.cros_remote and cros_interface.HasSSH()
49  if not use_ssh and not IsRunningOnCrOS():
50    logging.debug('No --remote specified, and not running on ChromeOs.')
51    return []
52
53  return [CrOSDevice(options.cros_remote, options.cros_remote_ssh_port,
54                     options.cros_ssh_identity, not use_ssh)]
55