Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Side by Side Diff: build/android/pylib/android_commands.py

Issue 218613011: Adding battery control API for android. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Follow reviews Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | tools/telemetry/telemetry/core/backends/adb_commands.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Provides an interface to communicate with the device via the adb command. 5 """Provides an interface to communicate with the device via the adb command.
6 6
7 Assumes adb binary is currently on system path. 7 Assumes adb binary is currently on system path.
8 """ 8 """
9 # pylint: disable-all 9 # pylint: disable-all
10 10
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 KEYCODE_DPAD_UP = 19 66 KEYCODE_DPAD_UP = 19
67 KEYCODE_DPAD_DOWN = 20 67 KEYCODE_DPAD_DOWN = 20
68 KEYCODE_DPAD_RIGHT = 22 68 KEYCODE_DPAD_RIGHT = 22
69 KEYCODE_ENTER = 66 69 KEYCODE_ENTER = 66
70 KEYCODE_MENU = 82 70 KEYCODE_MENU = 82
71 71
72 MD5SUM_DEVICE_FOLDER = constants.TEST_EXECUTABLE_DIR + '/md5sum/' 72 MD5SUM_DEVICE_FOLDER = constants.TEST_EXECUTABLE_DIR + '/md5sum/'
73 MD5SUM_DEVICE_PATH = MD5SUM_DEVICE_FOLDER + 'md5sum_bin' 73 MD5SUM_DEVICE_PATH = MD5SUM_DEVICE_FOLDER + 'md5sum_bin'
74 MD5SUM_LD_LIBRARY_PATH = 'LD_LIBRARY_PATH=%s' % MD5SUM_DEVICE_FOLDER 74 MD5SUM_LD_LIBRARY_PATH = 'LD_LIBRARY_PATH=%s' % MD5SUM_DEVICE_FOLDER
75 75
76 CONTROL_USB_CHARGING_COMMANDS = [
77 {
78 # Nexus 4
79 'witness_file': '/sys/module/pm8921_charger/parameters/disabled',
80 'enable_command': 'echo 0 > /sys/module/pm8921_charger/parameters/disabled',
81 'disable_command':
82 'echo 1 > /sys/module/pm8921_charger/parameters/disabled',
83 },
84 ]
76 85
77 def GetAVDs(): 86 def GetAVDs():
78 """Returns a list of AVDs.""" 87 """Returns a list of AVDs."""
79 re_avd = re.compile('^[ ]+Name: ([a-zA-Z0-9_:.-]+)', re.MULTILINE) 88 re_avd = re.compile('^[ ]+Name: ([a-zA-Z0-9_:.-]+)', re.MULTILINE)
80 avds = re_avd.findall(cmd_helper.GetCmdOutput(['android', 'list', 'avd'])) 89 avds = re_avd.findall(cmd_helper.GetCmdOutput(['android', 'list', 'avd']))
81 return avds 90 return avds
82 91
83 def ResetBadDevices(): 92 def ResetBadDevices():
84 """Removes the blacklist that keeps track of bad devices for a current 93 """Removes the blacklist that keeps track of bad devices for a current
85 build. 94 build.
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 self.logcat_process = None 287 self.logcat_process = None
279 self._logcat_tmpoutfile = None 288 self._logcat_tmpoutfile = None
280 self._pushed_files = [] 289 self._pushed_files = []
281 self._device_utc_offset = None 290 self._device_utc_offset = None
282 self._potential_push_size = 0 291 self._potential_push_size = 0
283 self._actual_push_size = 0 292 self._actual_push_size = 0
284 self._external_storage = '' 293 self._external_storage = ''
285 self._util_wrapper = '' 294 self._util_wrapper = ''
286 self._system_properties = system_properties.SystemProperties(self.Adb()) 295 self._system_properties = system_properties.SystemProperties(self.Adb())
287 self._push_if_needed_cache = {} 296 self._push_if_needed_cache = {}
297 self._control_usb_charging_command = {
298 'command': None,
299 'cached': False,
300 }
288 301
289 @property 302 @property
290 def system_properties(self): 303 def system_properties(self):
291 return self._system_properties 304 return self._system_properties
292 305
293 def _LogShell(self, cmd): 306 def _LogShell(self, cmd):
294 """Logs the adb shell command.""" 307 """Logs the adb shell command."""
295 if self._device: 308 if self._device:
296 device_repr = self._device[-4:] 309 device_repr = self._device[-4:]
297 else: 310 else:
(...skipping 1520 matching lines...) Expand 10 before | Expand all | Expand 10 after
1818 out = self.RunShellCommand('sh %s %s %s' % (temp_script_file, source, dest), 1831 out = self.RunShellCommand('sh %s %s %s' % (temp_script_file, source, dest),
1819 timeout_time=120) 1832 timeout_time=120)
1820 if self._device: 1833 if self._device:
1821 device_repr = self._device[-4:] 1834 device_repr = self._device[-4:]
1822 else: 1835 else:
1823 device_repr = '????' 1836 device_repr = '????'
1824 for line in out: 1837 for line in out:
1825 logging.info('[%s]> %s', device_repr, line) 1838 logging.info('[%s]> %s', device_repr, line)
1826 self.RunShellCommand('rm %s' % temp_script_file) 1839 self.RunShellCommand('rm %s' % temp_script_file)
1827 1840
1841 def _GetControlUsbChargingCommand(self):
1842 if self._control_usb_charging_command['cached']:
1843 return self._control_usb_charging_command['command']
1844 self._control_usb_charging_command['cached'] = True
1845 for command in CONTROL_USB_CHARGING_COMMANDS:
1846 # Assert command is valid.
1847 assert 'disable_command' in command
1848 assert 'enable_command' in command
1849 assert 'witness_file' in command
1850 witness_file = command['witness_file']
1851 if self.FileExistsOnDevice(witness_file):
1852 self._control_usb_charging_command['command'] = command
1853 return command
1854 return None
1855
1856 def CanControlUsbCharging(self):
1857 return self._GetControlUsbChargingCommand() is not None
1858
1859 def DisableUsbCharging(self):
1860 command = self._GetControlUsbChargingCommand()
1861 if not command:
1862 raise Exception('Unable to act on usb charging.')
1863 disable_command = command['disable_command']
1864 self.RunShellCommand(disable_command)
1865
1866 def EnableUsbCharging(self):
1867 command = self._GetControlUsbChargingCommand()
1868 if not command:
1869 raise Exception('Unable to act on usb charging.')
1870 disable_command = command['enable_command']
1871 self.RunShellCommand(disable_command)
1872
1828 1873
1829 class NewLineNormalizer(object): 1874 class NewLineNormalizer(object):
1830 """A file-like object to normalize EOLs to '\n'. 1875 """A file-like object to normalize EOLs to '\n'.
1831 1876
1832 Pexpect runs adb within a pseudo-tty device (see 1877 Pexpect runs adb within a pseudo-tty device (see
1833 http://www.noah.org/wiki/pexpect), so any '\n' printed by adb is written 1878 http://www.noah.org/wiki/pexpect), so any '\n' printed by adb is written
1834 as '\r\n' to the logfile. Since adb already uses '\r\n' to terminate 1879 as '\r\n' to the logfile. Since adb already uses '\r\n' to terminate
1835 lines, the log ends up having '\r\r\n' at the end of each line. This 1880 lines, the log ends up having '\r\r\n' at the end of each line. This
1836 filter replaces the above with a single '\n' in the data stream. 1881 filter replaces the above with a single '\n' in the data stream.
1837 """ 1882 """
1838 def __init__(self, output): 1883 def __init__(self, output):
1839 self._output = output 1884 self._output = output
1840 1885
1841 def write(self, data): 1886 def write(self, data):
1842 data = data.replace('\r\r\n', '\n') 1887 data = data.replace('\r\r\n', '\n')
1843 self._output.write(data) 1888 self._output.write(data)
1844 1889
1845 def flush(self): 1890 def flush(self):
1846 self._output.flush() 1891 self._output.flush()
OLDNEW
« no previous file with comments | « no previous file | tools/telemetry/telemetry/core/backends/adb_commands.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698