Ejemplo n.º 1
0
    def test_rpm_with_rotations_returns_none_if_not_on_mode_2(self):
        """rpm_with_rotations() returns None if not on Mode 1."""
        controller = EncoderMotorController(port="M1")
        mode_mock = controller.control_mode = Mock()

        for mode in (MotorControlModes.MODE_0, MotorControlModes.MODE_1):
            mode_mock.return_value = mode
            self.assertEquals(controller.rpm_with_rotations(), None)
Ejemplo n.º 2
0
    def test_control_mode_2_read_write(self):
        """Registers read/written  when using control mode 2 methods."""
        rpm_value = 500
        rotations_value = 10
        # from rpm and rotations values, calculate byte values to use in mocks
        rpm_and_rotations_in_bytes = split_into_bytes(
            rotations_value, 2, signed=True,
            little_endian=True) + split_into_bytes(
                rpm_value, 2, signed=True, little_endian=True)
        rpm_and_rotations_read = join_bytes(rpm_and_rotations_in_bytes)

        for motor_port_registers in MotorControlRegisters:
            motor_port_name = motor_port_registers.name
            motor_registers = motor_port_registers.value

            mode_1_register = motor_registers[
                MotorRegisterTypes.MODE_2_RPM_WITH_ROTATIONS]

            # create instance
            controller = EncoderMotorController(port=motor_port_name)
            controller.set_control_mode = Mock()
            controller.control_mode = Mock()
            controller.control_mode.return_value = MotorControlModes.MODE_2

            # setup r/w mocks
            write_n_bytes_mock = controller._mcu_device.write_n_bytes = Mock()
            read_n_unsigned_bytes_mock = (
                controller._mcu_device.read_n_unsigned_bytes) = Mock()
            read_n_unsigned_bytes_mock.return_value = rpm_and_rotations_read

            # test
            controller.set_rpm_with_rotations(rpm_value, rotations_value)
            write_n_bytes_mock.assert_called_with(mode_1_register,
                                                  rpm_and_rotations_in_bytes)

            self.assertEquals(controller.rpm_with_rotations(),
                              (rpm_value, rotations_value))
            read_n_unsigned_bytes_mock.assert_called_with(mode_1_register,
                                                          4,
                                                          little_endian=True)