/*----------------------------------------------------------------------------*/ | |
/* 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 |