Source code for labgrid.driver.openocddriver

# pylint: disable=no-member
import attr
import subprocess
import os.path

from ..factory import target_factory
from ..protocol import BootstrapProtocol
from ..resource.remote import NetworkAlteraUSBBlaster
from ..resource.udev import AlteraUSBBlaster
from ..step import step
from .common import Driver, check_file
from .exception import ExecutionError


@target_factory.reg_driver
@attr.s
[docs]class OpenOCDDriver(Driver, BootstrapProtocol): bindings = { "interface": {AlteraUSBBlaster, NetworkAlteraUSBBlaster}, } config = attr.ib(validator=attr.validators.instance_of(str)) search = attr.ib(default=None, validator=attr.validators.optional(attr.validators.instance_of(str))) image = attr.ib(default=None, validator=attr.validators.optional(attr.validators.instance_of(str))) 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('openocd') or 'openocd' self.config = self.target.env.config.resolve_path(self.config) if self.search: self.search = self.target.env.config.resolve_path(self.search) else: self.tool = 'openocd' @Driver.check_active @step(args=['filename'])
[docs] 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) filename = os.path.abspath(os.path.expanduser(filename)) check_file(self.config, command_prefix=self.interface.command_prefix) check_file(filename, command_prefix=self.interface.command_prefix) cmd = self.interface.command_prefix+[self.tool] if self.search: cmd += ["--search", self.search] cmd += [ "--file", self.config, "--command", "'init'", "--command", "'bootstrap {}'".format(filename), "--command", "'shutdown'", ] subprocess.check_call(cmd)