diff --git a/hal/src/main/java/edu/wpi/first/hal/ControlWord.java b/hal/src/main/java/edu/wpi/first/hal/ControlWord.java index a56834369a..7dff0f4635 100644 --- a/hal/src/main/java/edu/wpi/first/hal/ControlWord.java +++ b/hal/src/main/java/edu/wpi/first/hal/ControlWord.java @@ -28,6 +28,20 @@ public class ControlWord { m_dsAttached = dsAttached; } + /** + * Updates from an existing word. + * + * @param word word to update from + */ + public void update(ControlWord word) { + m_enabled = word.m_enabled; + m_autonomous = word.m_autonomous; + m_test = word.m_test; + m_emergencyStop = word.m_emergencyStop; + m_fmsAttached = word.m_fmsAttached; + m_dsAttached = word.m_dsAttached; + } + public boolean getEnabled() { return m_enabled; } diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/DSControlWord.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/DSControlWord.java index 016abc7ca3..37e046df0f 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/DSControlWord.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/DSControlWord.java @@ -5,7 +5,6 @@ package edu.wpi.first.wpilibj; import edu.wpi.first.hal.ControlWord; -import edu.wpi.first.hal.HAL; /** A wrapper around Driver Station control word. */ public class DSControlWord { @@ -22,7 +21,7 @@ public class DSControlWord { /** Update internal Driver Station control word. */ public void update() { - HAL.getControlWord(m_controlWord); + DriverStation.updateControlWordFromCache(m_controlWord); } /** diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/DriverStation.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/DriverStation.java index c450c5e949..7400f00968 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/DriverStation.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/DriverStation.java @@ -1324,6 +1324,18 @@ public class DriverStation { } } + /** + * Forces a control word cache update, and update the passed in control word. + * + * @param word Word to update. + */ + public static void updateControlWordFromCache(ControlWord word) { + synchronized (m_controlWordMutex) { + updateControlWord(true); + word.update(m_controlWordCache); + } + } + /** * Updates the data in the control word cache. Updates if the force parameter is set, or if 50ms * have passed since the last update.