diff --git a/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/CANJaguar.java b/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/CANJaguar.java index c8e0c38045..c4e4ed6e84 100644 --- a/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/CANJaguar.java +++ b/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/CANJaguar.java @@ -795,6 +795,18 @@ public class CANJaguar implements MotorSafety, PIDOutput, SpeedController, LiveW requestMessage(CANJNI.LM_API_CFG_FAULT_TIME); } } + + if(!m_receivedStatusMessage0 || + !m_receivedStatusMessage1 || + !m_receivedStatusMessage2) { + // If the periodic status messages haven't been verified as received, + // request periodic status messages again and attempt to unpack any + // available ones. + setupPeriodicStatus(); + getTemperature(); + getPosition(); + getFaults(); + } } /** @@ -2103,7 +2115,7 @@ public class CANJaguar implements MotorSafety, PIDOutput, SpeedController, LiveW public String getDescription() { return "CANJaguar ID "+m_deviceNumber; } - + public int getDeviceID() { return (int)m_deviceNumber; } diff --git a/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/CANDefaultTest.java b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/CANDefaultTest.java index db9d2c467e..3c9a7064c8 100644 --- a/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/CANDefaultTest.java +++ b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/CANDefaultTest.java @@ -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 {