From 81840b2c49181bf6befc4adb571c9ba1530689e6 Mon Sep 17 00:00:00 2001 From: Brad Miller Date: Tue, 25 Nov 2014 17:34:38 -0500 Subject: [PATCH] Add a getControlWord() call to the run thread in DS so that the program is kept alive Change-Id: I8b86506f6125422e19e8b5ab23e3667bf808bdc4 --- wpilibc/wpilibC++Devices/src/DriverStation.cpp | 11 ++++++++++- .../java/edu/wpi/first/wpilibj/DriverStation.java | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/wpilibc/wpilibC++Devices/src/DriverStation.cpp b/wpilibc/wpilibC++Devices/src/DriverStation.cpp index 94f5ed864c..dddbe56ae8 100644 --- a/wpilibc/wpilibC++Devices/src/DriverStation.cpp +++ b/wpilibc/wpilibC++Devices/src/DriverStation.cpp @@ -82,12 +82,16 @@ void DriverStation::InitTask(DriverStation *ds) void DriverStation::Run() { + HALControlWord controlWord; int period = 0; while (true) { - takeMultiWait(m_packetDataAvailableMultiWait, m_packetDataAvailableMutex, 0); + // need to get the controlWord to keep the motors enabled + HALGetControlWord(&controlWord); + takeMultiWait(m_packetDataAvailableMultiWait, m_packetDataAvailableMutex, 0); giveMultiWait(m_waitForDataSem); giveSemaphore(m_newControlData); + if (++period >= 4) { MotorSafetyHelper::CheckMotors(); @@ -221,6 +225,7 @@ bool DriverStation::GetStickButton(uint32_t stick, uint8_t button) bool DriverStation::IsEnabled() { HALControlWord controlWord; + memset(&controlWord, 0, sizeof(controlWord)); HALGetControlWord(&controlWord); return controlWord.enabled && controlWord.dsAttached; } @@ -228,6 +233,7 @@ bool DriverStation::IsEnabled() bool DriverStation::IsDisabled() { HALControlWord controlWord; + memset(&controlWord, 0, sizeof(controlWord)); HALGetControlWord(&controlWord); return !(controlWord.enabled && controlWord.dsAttached); } @@ -235,6 +241,7 @@ bool DriverStation::IsDisabled() bool DriverStation::IsAutonomous() { HALControlWord controlWord; + memset(&controlWord, 0, sizeof(controlWord)); HALGetControlWord(&controlWord); return controlWord.autonomous; } @@ -242,6 +249,7 @@ bool DriverStation::IsAutonomous() bool DriverStation::IsOperatorControl() { HALControlWord controlWord; + memset(&controlWord, 0, sizeof(controlWord)); HALGetControlWord(&controlWord); return !(controlWord.autonomous || controlWord.test); } @@ -256,6 +264,7 @@ bool DriverStation::IsTest() bool DriverStation::IsDSAttached() { HALControlWord controlWord; + memset(&controlWord, 0, sizeof(controlWord)); HALGetControlWord(&controlWord); return controlWord.dsAttached; } diff --git a/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/DriverStation.java b/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/DriverStation.java index 17a536f49f..ae949eb598 100644 --- a/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/DriverStation.java +++ b/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/DriverStation.java @@ -103,6 +103,8 @@ public class DriverStation implements RobotState.Interface { synchronized (m_dataSem) { m_dataSem.notifyAll(); } + // need to get the controlWord to keep the motors enabled + HALControlWord controlWord = FRCNetworkCommunicationsLibrary.HALGetControlWord(); m_newControlData = true; if (++safetyCounter >= 5) { MotorSafetyHelper.checkMotors();