import attr
from ..factory import target_factory
from .common import Resource
[docs]
@target_factory.reg_resource
@attr.s(eq=False)
class LAASerialPort(Resource):
"""This resource describes a serial port on a DUT connected via LAA.
Args:
laa_identity (str): LAA identity for connection
serial_name (str): name of the serial port on the LAA"""
laa_identity = attr.ib(validator=attr.validators.instance_of(str))
serial_name = attr.ib(validator=attr.validators.instance_of(str))
[docs]
@target_factory.reg_resource
@attr.s(eq=False)
class LAAPowerPort(Resource):
"""This resource describes a power port on a DUT connected via LAA.
Args:
laa_identity (str): LAA identity for connection
power_on (list): sequence of (vbus, state) tuples for power on
power_off (list): sequence of (vbus, state) tuples for power off
power_cycle (list): optional sequence for power cycle"""
laa_identity = attr.ib(validator=attr.validators.instance_of(str))
power_on = attr.ib(validator=attr.validators.instance_of(list))
power_off = attr.ib(validator=attr.validators.instance_of(list))
power_cycle = attr.ib(
default=None,
validator=attr.validators.optional(attr.validators.instance_of(list)),
)
[docs]
def __attrs_post_init__(self):
super().__attrs_post_init__()
for name in ("power_on", "power_off"):
self._check_power_sequence(name, getattr(self, name))
if self.power_cycle is not None:
self._check_power_sequence("power_cycle", self.power_cycle)
@staticmethod
def _check_power_sequence(name, seq):
for i, entry in enumerate(seq):
if not isinstance(entry, (list, tuple)) or len(entry) != 2:
raise ValueError(
f"{name}[{i}] must be [vbus, state], got {entry!r}"
)
if not isinstance(entry[0], str) or not isinstance(entry[1], str):
raise ValueError(
f"{name}[{i}] must be [str, str], got {entry!r}"
)
[docs]
@target_factory.reg_resource
@attr.s(eq=False)
class LAAUSBGadgetMassStorage(Resource):
"""This resource describes a USB gadget mass storage device on a LAA.
Args:
laa_identity (str): LAA identity for connection
image (str): mass storage image filename"""
laa_identity = attr.ib(validator=attr.validators.instance_of(str))
image = attr.ib(validator=attr.validators.instance_of(str))
[docs]
@target_factory.reg_resource
@attr.s(eq=False)
class LAAUSBPort(Resource):
"""This resource describes USB ports on a DUT connected via LAA.
Args:
laa_identity (str): LAA identity for connection
usb_ports (list): list of USB port numbers to control"""
laa_identity = attr.ib(validator=attr.validators.instance_of(str))
usb_ports = attr.ib(validator=attr.validators.instance_of(list))
[docs]
@target_factory.reg_resource
@attr.s(eq=False)
class LAALed(Resource):
"""This resource describes a LED on a DUT connected via LAA.
Args:
laa_identity (str): LAA identity for connection"""
laa_identity = attr.ib(validator=attr.validators.instance_of(str))
[docs]
@target_factory.reg_resource
@attr.s(eq=False)
class LAATempSensor(Resource):
"""This resource describes a temperature sensor on a DUT connected via LAA.
Args:
laa_identity (str): LAA identity for connection"""
laa_identity = attr.ib(validator=attr.validators.instance_of(str))
[docs]
@target_factory.reg_resource
@attr.s(eq=False)
class LAAWattMeter(Resource):
"""This resource describes a power meter on a DUT connected via LAA.
Args:
laa_identity (str): LAA identity for connection"""
laa_identity = attr.ib(validator=attr.validators.instance_of(str))
[docs]
@target_factory.reg_resource
@attr.s(eq=False)
class LAAProvider(Resource):
"""This resource describes file storage on an LAA for TFTP provisioning.
Args:
laa_identity (str): LAA identity for connection"""
laa_identity = attr.ib(validator=attr.validators.instance_of(str))