This is the latest WPILib src, VisionSample2013, cRIO image, ... pulled down from firstforge.wpi.edu.
There might be risks in using the top of tree rather than an official release, but the commit messages do mention fixes for some deadlocks and race conditions.
git-svn-id: https://robotics.mvla.net/svn/frc971/2013/trunk/src@4066 f308d9b7-e957-4cde-b6ac-9a88185e7312
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/DoubleSolenoid.h b/azaleasource/WPILibCProgramming/trunk/WPILib/DoubleSolenoid.h
new file mode 100644
index 0000000..e8b3f8c
--- /dev/null
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/DoubleSolenoid.h
@@ -0,0 +1,51 @@
+/*----------------------------------------------------------------------------*/
+/* Copyright (c) FIRST 2008. All Rights Reserved. */
+/* Open Source Software - may be modified and shared by FRC teams. The code */
+/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
+/*----------------------------------------------------------------------------*/
+
+#ifndef DOUBLE_SOLENOID_H_
+#define DOUBLE_SOLENOID_H_
+
+#include "SolenoidBase.h"
+#include "LiveWindow/LiveWindowSendable.h"
+#include "tables/ITableListener.h"
+
+
+/**
+ * DoubleSolenoid class for running 2 channels of high voltage Digital Output
+ * (9472 module).
+ *
+ * The DoubleSolenoid class is typically used for pneumatics solenoids that
+ * have two positions controlled by two separate channels.
+ */
+class DoubleSolenoid : public SolenoidBase, public LiveWindowSendable, public ITableListener {
+public:
+ typedef enum {kOff, kForward, kReverse} Value;
+
+ explicit DoubleSolenoid(UINT32 forwardChannel, UINT32 reverseChannel);
+ DoubleSolenoid(UINT8 moduleNumber, UINT32 forwardChannel, UINT32 reverseChannel);
+ virtual ~DoubleSolenoid();
+ virtual void Set(Value value);
+ virtual Value Get();
+
+ void ValueChanged(ITable* source, const std::string& key, EntryValue value, bool isNew);
+ void UpdateTable();
+ void StartLiveWindowMode();
+ void StopLiveWindowMode();
+ std::string GetSmartDashboardType();
+ void InitTable(ITable *subTable);
+ ITable * GetTable();
+
+private:
+ virtual void InitSolenoid();
+
+ UINT32 m_forwardChannel; ///< The forward channel on the module to control.
+ UINT32 m_reverseChannel; ///< The reverse channel on the module to control.
+ UINT8 m_forwardMask; ///< The mask for the forward channel.
+ UINT8 m_reverseMask; ///< The mask for the reverse channel.
+
+ ITable *m_table;
+};
+
+#endif