From ed0df5432f3974382fa091acb4358201fcc2fcbd Mon Sep 17 00:00:00 2001 From: Thomas Clark Date: Tue, 29 Jul 2014 15:19:55 -0400 Subject: [PATCH] Fixed CANJaguar::GetOutputVoltage for negative voltages Previously, negative output voltages were unpacked incorrectly. Now, they're requested as percentages, unpacked, and then scaled in software based on the bus voltage. The output voltage and bus voltage shouldn't ever be out of sync, since they're in the same message. Change-Id: I745fffd0faa6cbaab967240271e6cfa8653212e2 --- wpilibc/wpilibC++/lib/CANJaguar.cpp | 4 ++-- .../src/main/java/edu/wpi/first/wpilibj/CANJaguar.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/wpilibc/wpilibC++/lib/CANJaguar.cpp b/wpilibc/wpilibC++/lib/CANJaguar.cpp index 65c32b49ff..53f45a2853 100644 --- a/wpilibc/wpilibC++/lib/CANJaguar.cpp +++ b/wpilibc/wpilibC++/lib/CANJaguar.cpp @@ -539,7 +539,7 @@ void CANJaguar::setupPeriodicStatus() { // temperature. static const uint8_t kMessage0Data[] = { LM_PSTAT_VOLTBUS_B0, LM_PSTAT_VOLTBUS_B1, - LM_PSTAT_VOUT_B0, LM_PSTAT_VOUT_B1, + LM_PSTAT_VOLTOUT_B0, LM_PSTAT_VOLTOUT_B1, LM_PSTAT_CURRENT_B0, LM_PSTAT_CURRENT_B1, LM_PSTAT_TEMP_B0, LM_PSTAT_TEMP_B1 }; @@ -579,7 +579,7 @@ void CANJaguar::updatePeriodicStatus() { // has arrived and unpack the values into the cached member variables if(getMessage(LM_API_PSTAT_DATA_S0, CAN_MSGID_FULL_M, data, &dataSize)) { m_busVoltage = unpackFXP8_8(data); - m_outputVoltage = unpackFXP8_8(data + 2); + m_outputVoltage = unpackPercentage(data + 2) * m_busVoltage; m_outputCurrent = unpackFXP8_8(data + 4); m_temperature = unpackFXP8_8(data + 6); 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 fd4aaa3bbf..0019d6759f 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 @@ -1885,7 +1885,7 @@ public class CANJaguar implements MotorSafety, PIDOutput, SpeedController, LiveW // temperature. final byte[] kMessage0Data = new byte[] { CANJNI.LM_PSTAT_VOLTBUS_B0, CANJNI.LM_PSTAT_VOLTBUS_B1, - CANJNI.LM_PSTAT_VOUT_B0, CANJNI.LM_PSTAT_VOUT_B1, + CANJNI.LM_PSTAT_VOLTOUT_B0, CANJNI.LM_PSTAT_VOLTOUT_B1, CANJNI.LM_PSTAT_CURRENT_B0, CANJNI.LM_PSTAT_CURRENT_B1, CANJNI.LM_PSTAT_TEMP_B0, CANJNI.LM_PSTAT_TEMP_B1 }; @@ -1932,7 +1932,7 @@ public class CANJaguar implements MotorSafety, PIDOutput, SpeedController, LiveW getMessage(CANJNI.LM_API_PSTAT_DATA_S0, CANJNI.CAN_MSGID_FULL_M, data); m_busVoltage = unpackFXP8_8(new byte[] { data[0], data[1] }); - m_outputVoltage = unpackFXP8_8(new byte[] { data[2], data[3] }); + m_outputVoltage = unpackPercentage(new byte[] { data[2], data[3] }) * m_busVoltage; m_outputCurrent = unpackFXP8_8(new byte[] { data[4], data[5] }); m_temperature = unpackFXP8_8(new byte[] { data[6], data[7] });