Source code for j5.boards.sr.v4.motor_board

"""Classes for the SR v4 Motor Board."""
from typing import Optional, Set, Type, cast

from j5.backends import Backend
from j5.boards import Board
from j5.components.motor import (
    Component,
    Motor,
    MotorInterface,
    MotorSpecialState,
    MotorState,
)
from j5.types import ImmutableList


[docs]class MotorBoard(Board): """Student Robotics v4 Motor Board.""" name: str = "Student Robotics v4 Motor Board" def __init__( self, serial: str, backend: Backend, *, safe_state: MotorState = MotorSpecialState.BRAKE, ): self._serial = serial self._backend = backend self._safe_state = safe_state self._outputs = ImmutableList[Motor]( Motor(output, cast(MotorInterface, self._backend)) for output in range(0, 2) ) @property def serial_number(self) -> str: """ Get the serial number of the board. :returns: Serial number of the board. """ return self._serial @property def firmware_version(self) -> Optional[str]: """ Get the firmware version of the board. :returns: Firmware version of the board. """ return self._backend.firmware_version @property def motors(self) -> ImmutableList[Motor]: """ Get the motors on this board. :returns: List of motors attached to the board. """ return self._outputs
[docs] def make_safe(self) -> None: """Make this board safe.""" for output in self._outputs: # Put both motors in the safe state. output.power = self._safe_state
[docs] @staticmethod def supported_components() -> Set[Type[Component]]: """ List the types of components supported by this board. :returns: Set of components supported by the board. """ return {Motor}