Source code for labgrid.driver.fastbootdriver

# pylint: disable=no-member
import subprocess
import attr

from ..factory import target_factory
from ..resource.remote import NetworkAndroidFastboot
from ..resource.udev import AndroidFastboot
from ..step import step
from .common import Driver
from ..util.managedfile import ManagedFile


[docs]@target_factory.reg_driver @attr.s(cmp=False) class AndroidFastbootDriver(Driver): bindings = { "fastboot": {AndroidFastboot, NetworkAndroidFastboot}, } image = attr.ib(default=None)
[docs] def __attrs_post_init__(self): super().__attrs_post_init__() # FIXME make sure we always have an environment or config if self.target.env: self.tool = self.target.env.config.get_tool('fastboot') or 'fastboot' else: self.tool = 'fastboot'
def _get_fastboot_prefix(self): return self.fastboot.command_prefix+[ self.tool, "-i", hex(self.fastboot.vendor_id), "-s", "usb:{}".format(self.fastboot.path), ]
[docs] def on_activate(self): pass
[docs] def on_deactivate(self): pass
[docs] @Driver.check_active @step(title='call', args=['args']) def __call__(self, *args): subprocess.check_call(self._get_fastboot_prefix() + list(args))
[docs] @Driver.check_active @step(args=['filename']) def boot(self, filename): mf = ManagedFile(filename, self.fastboot) mf.sync_to_resource() self("boot", mf.get_remote_path())
[docs] @Driver.check_active @step(args=['partition', 'filename']) def flash(self, partition, filename): mf = ManagedFile(filename, self.fastboot) mf.sync_to_resource() self("flash", partition, mf.get_remote_path())
[docs] @Driver.check_active @step(args=['cmd']) def run(self, cmd): self("oem", "exec", "--", cmd)
[docs] @Driver.check_active @step(title='continue') def continue_boot(self): self("continue")