package devices.ev3;
public class Motor {
public enum Direction {
FORWARD, BACKWARD
}
public static final byte opOUTPUT_POWER = (byte) 0xA4;
public static final byte opOUTPUT_START = (byte) 0xA6;
public static final byte opOUTPUT_STOP = (byte) 0xA3;
private static native void setMotor(byte cmd, byte p1, byte p2);
private MotorPort port;
private byte power;
public Motor(MotorPort port) {
this.port = port;
}
public void setPower(byte power) {
if (power > 100) {
power = 100;
}
if (power < 0) {
power = 0;
}
this.power = power;
setMotor(opOUTPUT_POWER, port.getPort(), power);
}
public void start() {
setMotor(opOUTPUT_START, port.getPort(), (byte) 0);
}
public void stop() {
setMotor(opOUTPUT_STOP, port.getPort(), (byte) 0);
}
public void setDirection(Direction direction) {
byte adjustment = 1;
switch (direction) {
case FORWARD:
if (power < 0) {
adjustment = -1;
}
break;
case BACKWARD:
if (power > 0) {
adjustment = -1;
}
break;
}
if (adjustment == -1) {
power = (byte) (adjustment * power);
setMotor(opOUTPUT_POWER, port.getPort(), power);
}
}
}