WPILibC++  unspecified
Relay.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) 2008-2018 FIRST. All Rights Reserved. */
3 /* Open Source Software - may be modified and shared by FRC teams. The code */
4 /* must be accompanied by the FIRST BSD license file in the root directory of */
5 /* the project. */
6 /*----------------------------------------------------------------------------*/
7 
8 #pragma once
9 
10 #include <memory>
11 
12 #include <HAL/Types.h>
13 #include <wpi/raw_ostream.h>
14 
15 #include "ErrorBase.h"
16 #include "MotorSafety.h"
17 #include "SmartDashboard/SendableBase.h"
18 
19 namespace frc {
20 
21 class MotorSafetyHelper;
22 
35 class Relay : public MotorSafety, public ErrorBase, public SendableBase {
36  public:
37  enum Value { kOff, kOn, kForward, kReverse };
38  enum Direction { kBothDirections, kForwardOnly, kReverseOnly };
39 
49  explicit Relay(int channel, Direction direction = kBothDirections);
50 
56  ~Relay() override;
57 
73  void Set(Value value);
74 
85  Value Get() const;
86 
87  int GetChannel() const;
88 
94  void SetExpiration(double timeout) override;
95 
101  double GetExpiration() const override;
102 
109  bool IsAlive() const override;
110 
117  void StopMotor() override;
118 
126  void SetSafetyEnabled(bool enabled) override;
127 
133  bool IsSafetyEnabled() const override;
134 
135  void GetDescription(wpi::raw_ostream& desc) const override;
136 
137  void InitSendable(SendableBuilder& builder) override;
138 
139  private:
140  int m_channel;
141  Direction m_direction;
142 
143  HAL_RelayHandle m_forwardHandle = HAL_kInvalidHandle;
144  HAL_RelayHandle m_reverseHandle = HAL_kInvalidHandle;
145 
146  std::unique_ptr<MotorSafetyHelper> m_safetyHelper;
147 };
148 
149 } // namespace frc
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:45
Value Get() const
Get the Relay State.
Definition: Relay.cpp:144
Definition: Utility.cpp:119
void Set(Value value)
Set the relay state.
Definition: Relay.cpp:93
Class for Spike style relay outputs.
Definition: Relay.h:35
void SetExpiration(double timeout) override
Set the expiration time for the Relay object.
Definition: Relay.cpp:180
void InitSendable(SendableBuilder &builder) override
Initializes this Sendable object.
Definition: Relay.cpp:202
Definition: MotorSafety.h:16
void SetSafetyEnabled(bool enabled) override
Enable/disable motor safety for this device.
Definition: Relay.cpp:190
Relay(int channel, Direction direction=kBothDirections)
Relay constructor given a channel.
Definition: Relay.cpp:22
double GetExpiration() const override
Return the expiration time for the relay object.
Definition: Relay.cpp:184
void StopMotor() override
Stop the motor associated with this PWM object.
Definition: Relay.cpp:188
Base class for most objects.
Definition: ErrorBase.h:74
Definition: SendableBase.h:19
bool IsSafetyEnabled() const override
Check if motor safety is enabled for this object.
Definition: Relay.cpp:194
Definition: SendableBuilder.h:23
bool IsAlive() const override
Check if the relay object is currently alive or stopped due to a timeout.
Definition: Relay.cpp:186
~Relay() override
Free the resource associated with a relay.
Definition: Relay.cpp:84