from cmvr.config import joint_limits_config_pb2 as _joint_limits_config_pb2
from google.protobuf.internal import containers as _containers
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from collections.abc import Iterable as _Iterable, Mapping as _Mapping
from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union

DESCRIPTOR: _descriptor.FileDescriptor

class MotorBusType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
    __slots__ = ()
    MOTOR_BUS_UNKNOWN: _ClassVar[MotorBusType]
    MOTOR_BUS_CAN: _ClassVar[MotorBusType]
    MOTOR_BUS_ETHERCAT: _ClassVar[MotorBusType]
    MOTOR_BUS_MUJOCO: _ClassVar[MotorBusType]
MOTOR_BUS_UNKNOWN: MotorBusType
MOTOR_BUS_CAN: MotorBusType
MOTOR_BUS_ETHERCAT: MotorBusType
MOTOR_BUS_MUJOCO: MotorBusType

class Ti5MotorConfig(_message.Message):
    __slots__ = ("id", "joint_name", "limit_q_lb", "limit_q_ub", "limit_qd")
    ID_FIELD_NUMBER: _ClassVar[int]
    JOINT_NAME_FIELD_NUMBER: _ClassVar[int]
    LIMIT_Q_LB_FIELD_NUMBER: _ClassVar[int]
    LIMIT_Q_UB_FIELD_NUMBER: _ClassVar[int]
    LIMIT_QD_FIELD_NUMBER: _ClassVar[int]
    id: int
    joint_name: str
    limit_q_lb: float
    limit_q_ub: float
    limit_qd: float
    def __init__(self, id: _Optional[int] = ..., joint_name: _Optional[str] = ..., limit_q_lb: _Optional[float] = ..., limit_q_ub: _Optional[float] = ..., limit_qd: _Optional[float] = ...) -> None: ...

class SocketCanConfig(_message.Message):
    __slots__ = ("dev_id", "channel_id")
    DEV_ID_FIELD_NUMBER: _ClassVar[int]
    CHANNEL_ID_FIELD_NUMBER: _ClassVar[int]
    dev_id: str
    channel_id: int
    def __init__(self, dev_id: _Optional[str] = ..., channel_id: _Optional[int] = ...) -> None: ...

class EtherCATConfig(_message.Message):
    __slots__ = ("master_id", "cycle_us")
    MASTER_ID_FIELD_NUMBER: _ClassVar[int]
    CYCLE_US_FIELD_NUMBER: _ClassVar[int]
    master_id: str
    cycle_us: int
    def __init__(self, master_id: _Optional[str] = ..., cycle_us: _Optional[int] = ...) -> None: ...

class MotorGroupConfig(_message.Message):
    __slots__ = ("id", "bus_type", "tool_frame", "can", "ethercat", "motors", "joint_limits", "joint_limits_urdf_path")
    ID_FIELD_NUMBER: _ClassVar[int]
    BUS_TYPE_FIELD_NUMBER: _ClassVar[int]
    TOOL_FRAME_FIELD_NUMBER: _ClassVar[int]
    CAN_FIELD_NUMBER: _ClassVar[int]
    ETHERCAT_FIELD_NUMBER: _ClassVar[int]
    MOTORS_FIELD_NUMBER: _ClassVar[int]
    JOINT_LIMITS_FIELD_NUMBER: _ClassVar[int]
    JOINT_LIMITS_URDF_PATH_FIELD_NUMBER: _ClassVar[int]
    id: str
    bus_type: MotorBusType
    tool_frame: str
    can: SocketCanConfig
    ethercat: EtherCATConfig
    motors: _containers.RepeatedCompositeFieldContainer[Ti5MotorConfig]
    joint_limits: _joint_limits_config_pb2.JointLimitsConfig
    joint_limits_urdf_path: str
    def __init__(self, id: _Optional[str] = ..., bus_type: _Optional[_Union[MotorBusType, str]] = ..., tool_frame: _Optional[str] = ..., can: _Optional[_Union[SocketCanConfig, _Mapping]] = ..., ethercat: _Optional[_Union[EtherCATConfig, _Mapping]] = ..., motors: _Optional[_Iterable[_Union[Ti5MotorConfig, _Mapping]]] = ..., joint_limits: _Optional[_Union[_joint_limits_config_pb2.JointLimitsConfig, _Mapping]] = ..., joint_limits_urdf_path: _Optional[str] = ...) -> None: ...

class MotorConfig(_message.Message):
    __slots__ = ("id", "motor_groups")
    ID_FIELD_NUMBER: _ClassVar[int]
    MOTOR_GROUPS_FIELD_NUMBER: _ClassVar[int]
    id: str
    motor_groups: _containers.RepeatedCompositeFieldContainer[MotorGroupConfig]
    def __init__(self, id: _Optional[str] = ..., motor_groups: _Optional[_Iterable[_Union[MotorGroupConfig, _Mapping]]] = ...) -> None: ...

class MotorRootConfig(_message.Message):
    __slots__ = ("motor",)
    MOTOR_FIELD_NUMBER: _ClassVar[int]
    motor: MotorConfig
    def __init__(self, motor: _Optional[_Union[MotorConfig, _Mapping]] = ...) -> None: ...
