| Index: build/android/devil/android/sdk/fastboot.py
|
| diff --git a/build/android/devil/android/sdk/fastboot.py b/build/android/devil/android/sdk/fastboot.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cfc566a67c292f8ee2e9f4d0d2df5bdf774acea8
|
| --- /dev/null
|
| +++ b/build/android/devil/android/sdk/fastboot.py
|
| @@ -0,0 +1,98 @@
|
| +# Copyright 2015 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +"""This module wraps Android's fastboot tool.
|
| +
|
| +This is a thin wrapper around the fastboot interface. Any additional complexity
|
| +should be delegated to a higher level (ex. FastbootUtils).
|
| +"""
|
| +# pylint: disable=unused-argument
|
| +
|
| +import os
|
| +
|
| +from devil.android import decorators
|
| +from devil.android import device_errors
|
| +from devil.utils import cmd_helper
|
| +from pylib import constants
|
| +
|
| +_FASTBOOT_CMD = os.path.join(
|
| + constants.ANDROID_SDK_ROOT, 'platform-tools', 'fastboot')
|
| +_DEFAULT_TIMEOUT = 30
|
| +_DEFAULT_RETRIES = 3
|
| +_FLASH_TIMEOUT = _DEFAULT_TIMEOUT * 10
|
| +
|
| +class Fastboot(object):
|
| +
|
| + def __init__(self, device_serial, default_timeout=_DEFAULT_TIMEOUT,
|
| + default_retries=_DEFAULT_RETRIES):
|
| + """Initializes the FastbootWrapper.
|
| +
|
| + Args:
|
| + device_serial: The device serial number as a string.
|
| + """
|
| + if not device_serial:
|
| + raise ValueError('A device serial must be specified')
|
| + self._device_serial = str(device_serial)
|
| + self._default_timeout = default_timeout
|
| + self._default_retries = default_retries
|
| +
|
| + @decorators.WithTimeoutAndRetriesFromInstance()
|
| + def _RunFastbootCommand(self, cmd, timeout=None, retries=None):
|
| + """Run a command line command using the fastboot android tool.
|
| +
|
| + Args:
|
| + cmd: Command to run. Must be list of args, the first one being the command
|
| +
|
| + Returns:
|
| + output of command.
|
| +
|
| + Raises:
|
| + TypeError: If cmd is not of type list.
|
| + """
|
| + if type(cmd) == list:
|
| + cmd = [_FASTBOOT_CMD, '-s', self._device_serial] + cmd
|
| + else:
|
| + raise TypeError(
|
| + 'Command for _RunFastbootCommand must be a list.')
|
| + status, output = cmd_helper.GetCmdStatusAndOutput(cmd)
|
| + if int(status) != 0:
|
| + raise device_errors.FastbootCommandFailedError(
|
| + cmd, output, status, self._device_serial)
|
| + return output
|
| +
|
| + @decorators.WithTimeoutAndRetriesDefaults(_FLASH_TIMEOUT, 0)
|
| + def Flash(self, partition, image, timeout=None, retries=None):
|
| + """Flash partition with img.
|
| +
|
| + Args:
|
| + partition: Partition to be flashed.
|
| + image: location of image to flash with.
|
| + """
|
| + self._RunFastbootCommand(['flash', partition, image])
|
| +
|
| + @decorators.WithTimeoutAndRetriesFromInstance()
|
| + def Devices(self, timeout=None, retries=None):
|
| + """Outputs list of devices in fastboot mode."""
|
| + output = self._RunFastbootCommand(['devices'])
|
| + return [line.split()[0] for line in output.splitlines()]
|
| +
|
| + @decorators.WithTimeoutAndRetriesFromInstance()
|
| + def RebootBootloader(self, timeout=None, retries=None):
|
| + """Reboot from fastboot, into fastboot."""
|
| + self._RunFastbootCommand(['reboot-bootloader'])
|
| +
|
| + @decorators.WithTimeoutAndRetriesDefaults(_FLASH_TIMEOUT, 0)
|
| + def Reboot(self, timeout=None, retries=None):
|
| + """Reboot from fastboot to normal usage"""
|
| + self._RunFastbootCommand(['reboot'])
|
| +
|
| + @decorators.WithTimeoutAndRetriesFromInstance()
|
| + def SetOemOffModeCharge(self, value, timeout=None, retries=None):
|
| + """Sets off mode charging
|
| +
|
| + Args:
|
| + value: boolean value to set off-mode-charging on or off.
|
| + """
|
| + self._RunFastbootCommand(
|
| + ['oem', 'off-mode-charge', str(int(value))])
|
|
|