WPILibC++ 2024.1.1-beta-4
PneumaticHub.h
Go to the documentation of this file.
1// Copyright (c) FIRST and other WPILib contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the WPILib BSD license file in the root directory of this project.
4
5#pragma once
6
7#include <memory>
8
9#include <hal/Types.h>
10#include <units/pressure.h>
11#include <wpi/DenseMap.h>
12#include <wpi/mutex.h>
13
14#include "PneumaticsBase.h"
15
16namespace frc {
17/** Module class for controlling a REV Robotics Pneumatic Hub. */
19 public:
20 /** Constructs a PneumaticHub with the default ID (1). */
22
23 /**
24 * Constructs a PneumaticHub.
25 *
26 * @param module module number to construct
27 */
28 explicit PneumaticHub(int module);
29
30 ~PneumaticHub() override = default;
31
32 bool GetCompressor() const override;
33
34 /**
35 * Disables the compressor. The compressor will not turn on until
36 * EnableCompressorDigital(), EnableCompressorAnalog(), or
37 * EnableCompressorHybrid() are called.
38 */
39 void DisableCompressor() override;
40
41 void EnableCompressorDigital() override;
42
43 /**
44 * Enables the compressor in analog mode. This mode uses an analog pressure
45 * sensor connected to analog channel 0 to cycle the compressor. The
46 * compressor will turn on when the pressure drops below {@code minPressure}
47 * and will turn off when the pressure reaches {@code maxPressure}.
48 *
49 * @param minPressure The minimum pressure. The compressor will turn on when
50 * the pressure drops below this value. Range 0 - 120 PSI.
51 * @param maxPressure The maximum pressure. The compressor will turn off when
52 * the pressure reaches this value. Range 0 - 120 PSI. Must be larger then
53 * minPressure.
54 */
56 units::pounds_per_square_inch_t minPressure,
57 units::pounds_per_square_inch_t maxPressure) override;
58
59 /**
60 * Enables the compressor in hybrid mode. This mode uses both a digital
61 * pressure switch and an analog pressure sensor connected to analog channel 0
62 * to cycle the compressor.
63 *
64 * The compressor will turn on when \a both:
65 *
66 * - The digital pressure switch indicates the system is not full AND
67 * - The analog pressure sensor indicates that the pressure in the system is
68 * below the specified minimum pressure.
69 *
70 * The compressor will turn off when \a either:
71 *
72 * - The digital pressure switch is disconnected or indicates that the system
73 * is full OR
74 * - The pressure detected by the analog sensor is greater than the specified
75 * maximum pressure.
76 *
77 * @param minPressure The minimum pressure. The compressor will turn on when
78 * the pressure drops below this value and the pressure switch indicates that
79 * the system is not full. Range 0 - 120 PSI.
80 * @param maxPressure The maximum pressure. The compressor will turn off when
81 * the pressure reaches this value or the pressure switch is disconnected or
82 * indicates that the system is full. Range 0 - 120 PSI. Must be larger then
83 * minPressure.
84 */
86 units::pounds_per_square_inch_t minPressure,
87 units::pounds_per_square_inch_t maxPressure) override;
88
90
91 bool GetPressureSwitch() const override;
92
93 units::ampere_t GetCompressorCurrent() const override;
94
95 void SetSolenoids(int mask, int values) override;
96
97 int GetSolenoids() const override;
98
99 int GetModuleNumber() const override;
100
101 int GetSolenoidDisabledList() const override;
102
103 void FireOneShot(int index) override;
104
105 void SetOneShotDuration(int index, units::second_t duration) override;
106
107 bool CheckSolenoidChannel(int channel) const override;
108
109 int CheckAndReserveSolenoids(int mask) override;
110
111 void UnreserveSolenoids(int mask) override;
112
113 bool ReserveCompressor() override;
114
115 void UnreserveCompressor() override;
116
117 Solenoid MakeSolenoid(int channel) override;
119 int reverseChannel) override;
121
122 struct Version {
125 uint32_t FirmwareFix;
128 uint32_t UniqueId;
129 };
130
131 /**
132 * Returns the hardware and firmware versions of this device.
133 *
134 * @return The hardware and firmware versions.
135 */
137
138 struct Faults {
139 uint32_t Channel0Fault : 1;
140 uint32_t Channel1Fault : 1;
141 uint32_t Channel2Fault : 1;
142 uint32_t Channel3Fault : 1;
143 uint32_t Channel4Fault : 1;
144 uint32_t Channel5Fault : 1;
145 uint32_t Channel6Fault : 1;
146 uint32_t Channel7Fault : 1;
147 uint32_t Channel8Fault : 1;
148 uint32_t Channel9Fault : 1;
149 uint32_t Channel10Fault : 1;
150 uint32_t Channel11Fault : 1;
151 uint32_t Channel12Fault : 1;
152 uint32_t Channel13Fault : 1;
153 uint32_t Channel14Fault : 1;
154 uint32_t Channel15Fault : 1;
156 uint32_t CompressorOpen : 1;
158 uint32_t Brownout : 1;
159 uint32_t CanWarning : 1;
160 uint32_t HardwareFault : 1;
161 };
162
163 /**
164 * Returns the faults currently active on this device.
165 *
166 * @return The faults.
167 */
169
172 uint32_t CompressorOpen : 1;
174 uint32_t Brownout : 1;
175 uint32_t CanWarning : 1;
176 uint32_t CanBusOff : 1;
177 uint32_t HasReset : 1;
178 };
179
180 /**
181 * Returns the sticky faults currently active on this device.
182 *
183 * @return The sticky faults.
184 */
186
187 /** Clears the sticky faults. */
189
190 /**
191 * Returns the current input voltage for this device.
192 *
193 * @return The input voltage.
194 */
195 units::volt_t GetInputVoltage() const;
196
197 /**
198 * Returns the current voltage of the regulated 5v supply.
199 *
200 * @return The current voltage of the 5v supply.
201 */
202 units::volt_t Get5VRegulatedVoltage() const;
203
204 /**
205 * Returns the total current drawn by all solenoids.
206 *
207 * @return Total current drawn by all solenoids.
208 */
209 units::ampere_t GetSolenoidsTotalCurrent() const;
210
211 /**
212 * Returns the current voltage of the solenoid power supply.
213 *
214 * @return The current voltage of the solenoid power supply.
215 */
216 units::volt_t GetSolenoidsVoltage() const;
217
218 /**
219 * Returns the raw voltage of the specified analog input channel.
220 *
221 * @param channel The analog input channel to read voltage from.
222 * @return The voltage of the specified analog input channel.
223 */
224 units::volt_t GetAnalogVoltage(int channel) const override;
225
226 /**
227 * Returns the pressure read by an analog pressure sensor on the specified
228 * analog input channel.
229 *
230 * @param channel The analog input channel to read pressure from.
231 * @return The pressure read by an analog pressure sensor on the specified
232 * analog input channel.
233 */
234 units::pounds_per_square_inch_t GetPressure(int channel) const override;
235
236 private:
237 class DataStore;
238 friend class DataStore;
239 friend class PneumaticsBase;
240 PneumaticHub(HAL_REVPHHandle handle, int module);
241
242 static std::shared_ptr<PneumaticsBase> GetForModule(int module);
243
244 std::shared_ptr<DataStore> m_dataStore;
245 HAL_REVPHHandle m_handle;
246 int m_module;
247
248 static wpi::mutex m_handleLock;
249 static std::unique_ptr<wpi::DenseMap<int, std::weak_ptr<DataStore>>>
250 m_handleMap;
251 static std::weak_ptr<DataStore>& GetDataStore(int module);
252};
253} // namespace frc
This file defines the DenseMap class.
Class for operating a compressor connected to a pneumatics module.
Definition: Compressor.h:35
DoubleSolenoid class for running 2 channels of high voltage Digital Output on a pneumatics module.
Definition: DoubleSolenoid.h:26
Module class for controlling a REV Robotics Pneumatic Hub.
Definition: PneumaticHub.h:18
friend class DataStore
Definition: PneumaticHub.h:238
units::pounds_per_square_inch_t GetPressure(int channel) const override
Returns the pressure read by an analog pressure sensor on the specified analog input channel.
void DisableCompressor() override
Disables the compressor.
void UnreserveCompressor() override
Unreserve the compressor.
int GetSolenoidDisabledList() const override
Get a bitmask of disabled solenoids.
units::volt_t GetAnalogVoltage(int channel) const override
Returns the raw voltage of the specified analog input channel.
void EnableCompressorHybrid(units::pounds_per_square_inch_t minPressure, units::pounds_per_square_inch_t maxPressure) override
Enables the compressor in hybrid mode.
units::ampere_t GetSolenoidsTotalCurrent() const
Returns the total current drawn by all solenoids.
units::volt_t Get5VRegulatedVoltage() const
Returns the current voltage of the regulated 5v supply.
void SetOneShotDuration(int index, units::second_t duration) override
Set the duration for a single solenoid shot.
bool ReserveCompressor() override
Reserve the compressor.
bool GetPressureSwitch() const override
Returns the state of the pressure switch.
int GetModuleNumber() const override
Get module number for this module.
units::volt_t GetSolenoidsVoltage() const
Returns the current voltage of the solenoid power supply.
void EnableCompressorAnalog(units::pounds_per_square_inch_t minPressure, units::pounds_per_square_inch_t maxPressure) override
Enables the compressor in analog mode.
bool CheckSolenoidChannel(int channel) const override
Check if a solenoid channel is valid.
Solenoid MakeSolenoid(int channel) override
Create a solenoid object for the specified channel.
bool GetCompressor() const override
Returns whether the compressor is active or not.
void ClearStickyFaults()
Clears the sticky faults.
CompressorConfigType GetCompressorConfigType() const override
Returns the active compressor configuration.
~PneumaticHub() override=default
Version GetVersion() const
Returns the hardware and firmware versions of this device.
units::ampere_t GetCompressorCurrent() const override
Returns the current drawn by the compressor.
Compressor MakeCompressor() override
Create a compressor object.
Faults GetFaults() const
Returns the faults currently active on this device.
void SetSolenoids(int mask, int values) override
Sets solenoids on a pneumatics module.
DoubleSolenoid MakeDoubleSolenoid(int forwardChannel, int reverseChannel) override
Create a double solenoid object for the specified channels.
StickyFaults GetStickyFaults() const
Returns the sticky faults currently active on this device.
PneumaticHub(int module)
Constructs a PneumaticHub.
void FireOneShot(int index) override
Fire a single solenoid shot.
void UnreserveSolenoids(int mask) override
Unreserve the masked solenoids.
void EnableCompressorDigital() override
Enables the compressor in digital mode using the digital pressure switch.
PneumaticHub()
Constructs a PneumaticHub with the default ID (1).
units::volt_t GetInputVoltage() const
Returns the current input voltage for this device.
int CheckAndReserveSolenoids(int mask) override
Check to see if the masked solenoids can be reserved, and if not reserve them.
int GetSolenoids() const override
Gets a bitmask of solenoid values.
Definition: PneumaticsBase.h:21
Solenoid class for running high voltage Digital Output on a pneumatics module.
Definition: Solenoid.h:26
HAL_Handle HAL_REVPHHandle
Definition: Types.h:71
Definition: AprilTagPoseEstimator.h:15
CompressorConfigType
Definition: CompressorConfigType.h:8
Definition: PneumaticHub.h:138
uint32_t CanWarning
Definition: PneumaticHub.h:159
uint32_t Channel1Fault
Definition: PneumaticHub.h:140
uint32_t HardwareFault
Definition: PneumaticHub.h:160
uint32_t Channel9Fault
Definition: PneumaticHub.h:148
uint32_t Channel2Fault
Definition: PneumaticHub.h:141
uint32_t Channel13Fault
Definition: PneumaticHub.h:152
uint32_t CompressorOpen
Definition: PneumaticHub.h:156
uint32_t Channel10Fault
Definition: PneumaticHub.h:149
uint32_t Channel0Fault
Definition: PneumaticHub.h:139
uint32_t Brownout
Definition: PneumaticHub.h:158
uint32_t CompressorOverCurrent
Definition: PneumaticHub.h:155
uint32_t Channel14Fault
Definition: PneumaticHub.h:153
uint32_t Channel8Fault
Definition: PneumaticHub.h:147
uint32_t Channel12Fault
Definition: PneumaticHub.h:151
uint32_t SolenoidOverCurrent
Definition: PneumaticHub.h:157
uint32_t Channel3Fault
Definition: PneumaticHub.h:142
uint32_t Channel7Fault
Definition: PneumaticHub.h:146
uint32_t Channel15Fault
Definition: PneumaticHub.h:154
uint32_t Channel6Fault
Definition: PneumaticHub.h:145
uint32_t Channel11Fault
Definition: PneumaticHub.h:150
uint32_t Channel4Fault
Definition: PneumaticHub.h:143
uint32_t Channel5Fault
Definition: PneumaticHub.h:144
Definition: PneumaticHub.h:170
uint32_t CanBusOff
Definition: PneumaticHub.h:176
uint32_t CompressorOpen
Definition: PneumaticHub.h:172
uint32_t SolenoidOverCurrent
Definition: PneumaticHub.h:173
uint32_t Brownout
Definition: PneumaticHub.h:174
uint32_t CanWarning
Definition: PneumaticHub.h:175
uint32_t HasReset
Definition: PneumaticHub.h:177
uint32_t CompressorOverCurrent
Definition: PneumaticHub.h:171
Definition: PneumaticHub.h:122
uint32_t HardwareMinor
Definition: PneumaticHub.h:126
uint32_t FirmwareFix
Definition: PneumaticHub.h:125
uint32_t FirmwareMinor
Definition: PneumaticHub.h:124
uint32_t HardwareMajor
Definition: PneumaticHub.h:127
uint32_t UniqueId
Definition: PneumaticHub.h:128
uint32_t FirmwareMajor
Definition: PneumaticHub.h:123
::std::mutex mutex
Definition: mutex.h:17