Fix CANJaguar brownout recovery in Java

In Java, CANJaguar didn't set up periodic status messages again after
a brownout

Change-Id: Iaedd844a7627dd44eb5d769a106b220648f35023
This commit is contained in:
Thomas Clark
2014-10-22 10:54:58 -04:00
parent 53255a764f
commit be30d3ab1d
2 changed files with 36 additions and 25 deletions

View File

@@ -32,9 +32,9 @@ import edu.wpi.first.wpilibj.Timer;
*/
public class CANDefaultTest extends AbstractCANTest{
private static final Logger logger = Logger.getLogger(CANDefaultTest.class.getName());
private static final double kSpikeTime = .5;
@Override
protected Logger getClassLogger() {
return logger;
@@ -50,63 +50,63 @@ public class CANDefaultTest extends AbstractCANTest{
/* The motor might still have momentum from the previous test. */
Timer.delay(kStartupTime);
}
@Test
public void testDefaultGet(){
assertEquals("CAN Jaguar did not initilize stopped", 0.0, getME().getMotor().get(), .01f);
}
@Test
public void testDefaultBusVoltage(){
assertEquals("CAN Jaguar did not start at 14 volts", 14.0f, getME().getMotor().getBusVoltage(), 2.0f);
}
@Test
public void testDefaultOutputVoltage(){
assertEquals("CAN Jaguar did not start with an output voltage of 0", 0.0f, getME().getMotor().getOutputVoltage(), 0.3f);
}
@Test
public void testDefaultOutputCurrent(){
assertEquals("CAN Jaguar did not start with an output current of 0", 0.0f, getME().getMotor().getOutputCurrent(), 0.3f);
}
@Test
public void testDefaultTemperature(){
double room_temp = 18.0f;
assertThat("CAN Jaguar did not start with an initial temperature greater than " + room_temp, getME().getMotor().getTemperature(), is(greaterThan(room_temp)));
}
@Test
public void testDefaultForwardLimit(){
getME().getMotor().configLimitMode(CANJaguar.LimitMode.SwitchInputsOnly);
assertTrue("CAN Jaguar did not start with the Forward Limit Switch Off", getME().getMotor().getForwardLimitOK());
}
@Test
public void testDefaultReverseLimit(){
getME().getMotor().configLimitMode(CANJaguar.LimitMode.SwitchInputsOnly);
assertTrue("CAN Jaguar did not start with the Reverse Limit Switch Off", getME().getMotor().getReverseLimitOK());
}
@Test
public void testDefaultNoFaults(){
assertEquals("CAN Jaguar initialized with Faults", 0, getME().getMotor().getFaults());
}
@Test
public void testFakeLimitSwitchForwards() {
//Given
getME().getMotor().configLimitMode(CANJaguar.LimitMode.SwitchInputsOnly);
getME().getMotor().enableControl();
assertTrue("[TEST SETUP] CANJaguar did not start with the Forward Limit Switch low", getME().getMotor().getForwardLimitOK());
//When
getME().getForwardLimit().set(true);
//Then
PollingWait wait = new PollingWait().timeoutAfter((long)kLimitSettlingTime, TimeUnit.SECONDS).pollEvery(1, TimeUnit.MILLISECONDS);
wait.until(new RunnableAssert("Setting the CANJAguar forward limit switch high") {
@@ -118,7 +118,7 @@ public class CANDefaultTest extends AbstractCANTest{
});
}
@Test
public void testFakeLimitSwitchReverse() {
//Given
@@ -127,7 +127,7 @@ public class CANDefaultTest extends AbstractCANTest{
assertTrue("[TEST SETUP] CANJaguar did not start with the Reverse Limit Switch low", getME().getMotor().getReverseLimitOK());
//When
getME().getReverseLimit().set(true);
//Then
PollingWait wait = new PollingWait().timeoutAfter((long)kLimitSettlingTime, TimeUnit.SECONDS).pollEvery(1, TimeUnit.MILLISECONDS);
wait.until(new RunnableAssert("Setting the CANJAguar reverse limit switch high") {
@@ -139,30 +139,29 @@ public class CANDefaultTest extends AbstractCANTest{
});
}
@Ignore("Brown out not working needs further testing")
@Test
public void testPositionModeVerifiesOnBrownOut() {
final double setpoint = 10.0;
//Given
getME().getMotor().setPositionMode(CANJaguar.kQuadEncoder, 360, 10.0, 0.1, 0.0);
getME().getMotor().enableControl();
setCANJaguar(kMotorTime, 0.0);
getME().powerOn();
//When
/* Turn the spike off and on again */
getME().powerOff();
Timer.delay(kSpikeTime);
getME().powerOn();
Timer.delay(kSpikeTime);
PollingWait wait = new PollingWait().timeoutAfter(15, TimeUnit.SECONDS).pollEvery(1, TimeUnit.MILLISECONDS);
/* The jaguar should automatically get set to quad encoder position mode,
so it should be able to reach a setpoint in a couple seconds. */
wait.until(new RunnableAssert("Waiting for CANJaguar to reach set-point") {
@Override
public void run() throws Exception {