/* * Please read the LICENSE file that is included with the source * code. */ package se.nicklasgavelin.sphero.macro.command; import se.nicklasgavelin.sphero.command.RawMotorCommand; import se.nicklasgavelin.sphero.macro.MacroCommand; import se.nicklasgavelin.util.ByteArrayBuffer; import se.nicklasgavelin.util.Value; /** * Raw motor macro command * * @author Nicklas Gavelin, nicklas.gavelin@gmail.com, LuleƄ University of * Technology */ public class RawMotor extends MacroCommand { public static final int MIN_SPEED = 0, MAX_SPEED = 255, MIN_DELAY = 0, MAX_DELAY = 255; private RawMotorCommand.MOTOR_MODE leftMode, rightMode; private int leftSpeed, rightSpeed, delay; /** * Create a raw motor macro with given headings for each of the two motors and a given * speed. * The initial delay before execution is also customizable. * * @param _leftMode The left motor mode * @param _leftSpeed The left motor speed (MIN_SPEED - MAX_SPEEd) * @param _rightMode The right motor mode * @param _rightSpeed The right motor speed (MIN_SPEED - MAX_SPEED) * @param _delay The initial delay before executing the macro (MIN_DELAY - MAX_DELAY) */ public RawMotor( RawMotorCommand.MOTOR_MODE _leftMode, int _leftSpeed, RawMotorCommand.MOTOR_MODE _rightMode, int _rightSpeed, int _delay ) { super( MACRO_COMMAND.MAC_RAW_MOTOR ); this.setMotorModes( _leftMode, _rightMode ); this.setMotorSpeed( _leftSpeed, _rightSpeed ); this.setDelay( _delay ); } /** * Create a raw motor macro with given headings for each of the two motors and a given * speed. * * @param _leftMode The left motor mode * @param _leftSpeed The left motor speed (MIN_SPEED - MAX_SPEEd) * @param _rightMode The right motor mode * @param _rightSpeed The right motor speed (MIN_SPEED - MAX_SPEED) */ public RawMotor( RawMotorCommand.MOTOR_MODE _leftMode, int _leftSpeed, RawMotorCommand.MOTOR_MODE _rightMode, int _rightSpeed ) { super( MACRO_COMMAND.MAC_RAW_MOTOR ); this.setMotorModes( _leftMode, _rightMode ); this.setMotorSpeed( _leftSpeed, _rightSpeed ); this.setDelay( 0 ); } /** * Update the internal delay * * @param _delay The new internal initial delay before execution */ public void setDelay( int _delay ) { this.delay = Value.clamp( _delay, MIN_DELAY, MAX_DELAY ); } /** * Update the internal motor modes for the macro command * * @param _leftMode The new left motor mode * @param _rightMode The new right motor mode */ public void setMotorModes( RawMotorCommand.MOTOR_MODE _leftMode, RawMotorCommand.MOTOR_MODE _rightMode ) { this.leftMode = _leftMode; this.rightMode = _rightMode; } /** * Update the motor speeds * * @param _leftSpeed The new left motor speed (MIN_SPEED - MAX_SPEED) * @param _rightSpeed The new right motor speed (MIN_SPEED - MAX_SPEED) */ public void setMotorSpeed( int _leftSpeed, int _rightSpeed ) { this.leftSpeed = Value.clamp( _leftSpeed, MIN_SPEED, MAX_SPEED ); this.rightSpeed = Value.clamp( _rightSpeed, MIN_SPEED, MAX_SPEED ); } @Override public byte[] getByteRepresentation() { ByteArrayBuffer bab = new ByteArrayBuffer( getLength() ); bab.append( getCommandID() ); bab.append( this.leftMode.getValue() ); bab.append( this.leftSpeed ); bab.append( this.rightMode.getValue() ); bab.append( this.rightSpeed ); bab.append( this.delay ); return bab.toByteArray(); } }