Source code for labgrid.driver.usbloader

import subprocess
import attr

from ..factory import target_factory
from ..protocol import BootstrapProtocol
from ..step import step
from .common import Driver
from ..util.managedfile import ManagedFile
from ..util.timeout import Timeout
from ..util.helper import processwrapper


[docs] @target_factory.reg_driver @attr.s(eq=False) class MXSUSBDriver(Driver, BootstrapProtocol): bindings = { "loader": {"MXSUSBLoader", "NetworkMXSUSBLoader"}, } 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('mxs-usb-loader') else: self.tool = 'mxs-usb-loader'
[docs] def on_activate(self): pass
[docs] def on_deactivate(self): pass
[docs] @Driver.check_active @step(args=['filename']) def load(self, filename=None): if filename is None and self.image is not None: filename = self.target.env.config.get_image_path(self.image) mf = ManagedFile(filename, self.loader) mf.sync_to_resource() processwrapper.check_output( self.loader.command_prefix + [self.tool, "0", mf.get_remote_path()], print_on_silent_log=True )
[docs] @target_factory.reg_driver @attr.s(eq=False) class IMXUSBDriver(Driver, BootstrapProtocol): bindings = { "loader": {"IMXUSBLoader", "NetworkIMXUSBLoader", "MXSUSBLoader", "NetworkMXSUSBLoader"}, } 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('imx-usb-loader') else: self.tool = 'imx-usb-loader'
[docs] def on_activate(self): pass
[docs] def on_deactivate(self): pass
[docs] @Driver.check_active @step(args=['filename']) def load(self, filename=None): if filename is None and self.image is not None: filename = self.target.env.config.get_image_path(self.image) mf = ManagedFile(filename, self.loader) mf.sync_to_resource() processwrapper.check_output( self.loader.command_prefix + [self.tool, "-p", str(self.loader.path), "-c", mf.get_remote_path()], print_on_silent_log=True )
[docs] @target_factory.reg_driver @attr.s(eq=False) class RKUSBDriver(Driver, BootstrapProtocol): bindings = { "loader": {"RKUSBLoader", "NetworkRKUSBLoader"}, } image = attr.ib(default=None) usb_loader = 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('rk-usb-loader') else: self.tool = 'rk-usb-loader'
[docs] def on_activate(self): pass
[docs] def on_deactivate(self): pass
[docs] @Driver.check_active @step(args=['filename']) def load(self, filename=None): if self.target.env: usb_loader = self.target.env.config.get_image_path(self.usb_loader) mf = ManagedFile(usb_loader, self.loader) mf.sync_to_resource() timeout = Timeout(3.0) while True: try: processwrapper.check_output( self.loader.command_prefix + [self.tool, 'db', mf.get_remote_path()], print_on_silent_log=True ) break except subprocess.CalledProcessError: if timeout.expired: raise if filename is None and self.image is not None: filename = self.target.env.config.get_image_path(self.image) mf = ManagedFile(filename, self.loader) mf.sync_to_resource() timeout = Timeout(3.0) while True: try: processwrapper.check_output( self.loader.command_prefix + [self.tool, 'wl', '0x40', mf.get_remote_path()], print_on_silent_log=True ) break except subprocess.CalledProcessError: if timeout.expired: raise
[docs] @target_factory.reg_driver @attr.s(eq=False) class UUUDriver(Driver, BootstrapProtocol): bindings = { "loader": {"IMXUSBLoader", "NetworkIMXUSBLoader", "MXSUSBLoader", "NetworkMXSUSBLoader"}, } image = attr.ib(default=None) script = attr.ib(default='', validator=attr.validators.instance_of(str))
[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('uuu-loader') else: self.tool = 'uuu-loader'
[docs] def on_activate(self): pass
[docs] def on_deactivate(self): pass
[docs] @Driver.check_active @step(args=['filename']) def load(self, filename=None): if filename is None and self.image is not None: filename = self.target.env.config.get_image_path(self.image) mf = ManagedFile(filename, self.loader) mf.sync_to_resource() cmd = ['-b', self.script] if self.script else [] processwrapper.check_output( self.loader.command_prefix + [self.tool] + cmd + [mf.get_remote_path()], print_on_silent_log=True )
[docs] @target_factory.reg_driver @attr.s(eq=False) class BDIMXUSBDriver(Driver, BootstrapProtocol): """ This is a Driver for the Boundary Devices imx_usb_loader available from https://github.com/boundarydevices/imx_usb_loader It supports loading the second stage bootloader to a SDP gadget implemented by the first stage bootloader in SRAM. Accordingly, the image to upload must be specified explicitly. """ bindings = { "loader": {"IMXUSBLoader", "NetworkIMXUSBLoader"}, }
[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('imx_usb') else: self.tool = 'imx_usb'
[docs] def on_activate(self): pass
[docs] def on_deactivate(self): pass
[docs] @Driver.check_active @step(args=['filename']) def load(self, filename): mf = ManagedFile(filename, self.loader) mf.sync_to_resource() processwrapper.check_output( self.loader.command_prefix + [ self.tool, f"--bus={self.loader.busnum}", f"--device={self.loader.devnum}", mf.get_remote_path(), ], print_on_silent_log=True )