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/Relay.h b/azaleasource/WPILibCProgramming/trunk/WPILib/Relay.h
new file mode 100644
index 0000000..aa6708a
--- /dev/null
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/Relay.h
@@ -0,0 +1,56 @@
+/*----------------------------------------------------------------------------*/
+/* 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 RELAY_H_
+#define RELAY_H_
+
+#include "SensorBase.h"
+#include "tables/ITableListener.h"
+#include "LiveWindow/LiveWindowSendable.h"
+#include "tables/ITable.h"
+
+class DigitalModule;
+
+/**
+ * Class for Spike style relay outputs.
+ * Relays are intended to be connected to spikes or similar relays. The relay channels controls
+ * a pair of pins that are either both off, one on, the other on, or both on. This translates into
+ * two spike outputs at 0v, one at 12v and one at 0v, one at 0v and the other at 12v, or two
+ * spike outputs at 12V. This allows off, full forward, or full reverse control of motors without
+ * variable speed. It also allows the two channels (forward and reverse) to be used independently
+ * for something that does not care about voltage polatiry (like a solenoid).
+ */
+class Relay : public SensorBase, public ITableListener, public LiveWindowSendable {
+public:
+ typedef enum {kOff, kOn, kForward, kReverse} Value;
+ typedef enum {kBothDirections, kForwardOnly, kReverseOnly} Direction;
+
+ Relay(UINT32 channel, Direction direction = kBothDirections);
+ Relay(UINT8 moduleNumber, UINT32 channel, Direction direction = kBothDirections);
+ virtual ~Relay();
+
+ void Set(Value value);
+ 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();
+
+ ITable *m_table;
+
+private:
+ void InitRelay(UINT8 moduleNumber);
+
+ UINT32 m_channel;
+ Direction m_direction;
+ DigitalModule *m_module;
+};
+
+#endif