import compLib.CompLib_pb2 as CompLib_pb2
from compLib.CompLibClient import CompLibClient


class Encoder(object):
    """Class used to read the encoders
    """

    @staticmethod
    def read_all_positions():
        """Read all encoder positions.

        :return: Tuple of all current encoder positions
        """
        request = CompLib_pb2.EncoderReadPositionsRequest()
        request.header.message_type = request.DESCRIPTOR.full_name

        response = CompLib_pb2.EncoderReadPositionsResponse()
        response.ParseFromString(CompLibClient.send(request.SerializeToString(), request.ByteSize()))

        return tuple(i for i in response.positions)

    @staticmethod
    def read_all_velocities():
        """Read the velocity of all motors connected.

        :return: Tuple of all current motor velocities
        """
        request = CompLib_pb2.EncoderReadVelocitiesRequest()
        request.header.message_type = request.DESCRIPTOR.full_name

        response = CompLib_pb2.EncoderReadVelocitiesResponse()
        response.ParseFromString(CompLibClient.send(request.SerializeToString(), request.ByteSize()))

        return tuple(i for i in response.velocities)
