123 lines
4.7 KiB
Python
123 lines
4.7 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
# You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
import traceback
|
|
|
|
import mozfile
|
|
|
|
from adb import ADBDevice, ADBError
|
|
|
|
|
|
class ADBB2G(ADBDevice):
|
|
"""ADBB2G implements :class:`ADBDevice` providing B2G-specific
|
|
functionality.
|
|
|
|
::
|
|
|
|
from mozdevice import ADBB2G
|
|
|
|
adbdevice = ADBB2G()
|
|
print adbdevice.list_files("/mnt/sdcard")
|
|
if adbdevice.process_exist("b2g"):
|
|
print "B2G is running"
|
|
"""
|
|
|
|
def get_battery_percentage(self, timeout=None):
|
|
"""Returns the battery charge as a percentage.
|
|
|
|
:param timeout: optional integer specifying the maximum time in
|
|
seconds for any spawned adb process to complete before
|
|
throwing an ADBTimeoutError.
|
|
This timeout is per adb call. The total time spent
|
|
may exceed this value. If it is not specified, the value
|
|
set in the ADBDevice constructor is used.
|
|
:returns: battery charge as a percentage.
|
|
:raises: * ADBTimeoutError
|
|
* ADBError
|
|
"""
|
|
with mozfile.NamedTemporaryFile() as tf:
|
|
self.pull('/sys/class/power_supply/battery/capacity', tf.name,
|
|
timeout=timeout)
|
|
try:
|
|
with open(tf.name) as tf2:
|
|
return tf2.read().splitlines()[0]
|
|
except Exception as e:
|
|
raise ADBError(traceback.format_exception_only(
|
|
type(e), e)[0].strip())
|
|
|
|
def get_memory_total(self, timeout=None):
|
|
"""Returns the total memory available with units.
|
|
|
|
:param timeout: optional integer specifying the maximum time in
|
|
seconds for any spawned adb process to complete before
|
|
throwing an ADBTimeoutError.
|
|
This timeout is per adb call. The total time spent
|
|
may exceed this value. If it is not specified, the value
|
|
set in the ADBDevice constructor is used.
|
|
:returns: memory total with units.
|
|
:raises: * ADBTimeoutError
|
|
* ADBError
|
|
"""
|
|
meminfo = {}
|
|
with mozfile.NamedTemporaryFile() as tf:
|
|
self.pull('/proc/meminfo', tf.name, timeout=timeout)
|
|
try:
|
|
with open(tf.name) as tf2:
|
|
for line in tf2.read().splitlines():
|
|
key, value = line.split(':')
|
|
meminfo[key] = value.strip()
|
|
except Exception as e:
|
|
raise ADBError(traceback.format_exception_only(
|
|
type(e), e)[0].strip())
|
|
return meminfo['MemTotal']
|
|
|
|
def get_info(self, directive=None, timeout=None):
|
|
"""
|
|
Returns a dictionary of information strings about the device.
|
|
|
|
:param directive: information you want to get. Options are:
|
|
- `battery` - battery charge as a percentage
|
|
- `disk` - total, free, available bytes on disk
|
|
- `id` - unique id of the device
|
|
- `memtotal` - total memory available on the device
|
|
- `os` - name of the os
|
|
- `process` - list of running processes (same as ps)
|
|
- `systime` - system time of the device
|
|
- `uptime` - uptime of the device
|
|
|
|
If `directive` is `None`, will return all available information
|
|
:param timeout: optional integer specifying the maximum time in
|
|
seconds for any spawned adb process to complete before
|
|
throwing an ADBTimeoutError.
|
|
This timeout is per adb call. The total time spent
|
|
may exceed this value. If it is not specified, the value
|
|
set in the ADB constructor is used.
|
|
:raises: * ADBTimeoutError
|
|
* ADBError
|
|
"""
|
|
info = super(ADBB2G, self).get_info(directive=directive,
|
|
timeout=timeout)
|
|
|
|
directives = ['memtotal']
|
|
if directive in directives:
|
|
directives = [directive]
|
|
|
|
if 'memtotal' in directives:
|
|
info['memtotal'] = self.get_memory_total(timeout=timeout)
|
|
return info
|
|
|
|
def is_device_ready(self, timeout=None):
|
|
"""Returns True if the device is ready.
|
|
|
|
:param timeout: optional integer specifying the maximum time in
|
|
seconds for any spawned adb process to complete before
|
|
throwing an ADBTimeoutError.
|
|
This timeout is per adb call. The total time spent
|
|
may exceed this value. If it is not specified, the value
|
|
set in the ADB constructor is used.
|
|
:raises: * ADBTimeoutError
|
|
* ADBError
|
|
"""
|
|
return self.shell_bool('ls /sbin', timeout=timeout)
|