[wpilib] Add Toggle() function to solenoid classes (#2635)

Toggling a solenoid on a button press is a common idiom, so this
provides a more readable way of accomplishing that.
This commit is contained in:
Tyler Veness
2020-08-15 08:16:32 -07:00
committed by GitHub
parent 370e9d089f
commit c2259d42a8
6 changed files with 76 additions and 11 deletions

View File

@@ -1,5 +1,5 @@
/*----------------------------------------------------------------------------*/
/* Copyright (c) 2008-2019 FIRST. All Rights Reserved. */
/* Copyright (c) 2008-2020 FIRST. 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 the root directory of */
/* the project. */
@@ -92,6 +92,7 @@ void DoubleSolenoid::Set(Value value) {
bool forward = false;
bool reverse = false;
switch (value) {
case kOff:
forward = false;
@@ -106,6 +107,7 @@ void DoubleSolenoid::Set(Value value) {
reverse = true;
break;
}
int fstatus = 0;
HAL_SetSolenoid(m_forwardHandle, forward, &fstatus);
int rstatus = 0;
@@ -117,6 +119,7 @@ void DoubleSolenoid::Set(Value value) {
DoubleSolenoid::Value DoubleSolenoid::Get() const {
if (StatusIsFatal()) return kOff;
int fstatus = 0;
int rstatus = 0;
bool valueForward = HAL_GetSolenoid(m_forwardHandle, &fstatus);
@@ -125,9 +128,23 @@ DoubleSolenoid::Value DoubleSolenoid::Get() const {
wpi_setHALError(fstatus);
wpi_setHALError(rstatus);
if (valueForward) return kForward;
if (valueReverse) return kReverse;
return kOff;
if (valueForward) {
return kForward;
} else if (valueReverse) {
return kReverse;
} else {
return kOff;
}
}
void DoubleSolenoid::Toggle() {
Value value = Get();
if (value == kForward) {
Set(kReverse);
} else if (value == kReverse) {
Set(kForward);
}
}
bool DoubleSolenoid::IsFwdSolenoidBlackListed() const {

View File

@@ -56,6 +56,7 @@ Solenoid::~Solenoid() { HAL_FreeSolenoidPort(m_solenoidHandle); }
void Solenoid::Set(bool on) {
if (StatusIsFatal()) return;
int32_t status = 0;
HAL_SetSolenoid(m_solenoidHandle, on, &status);
wpi_setHALError(status);
@@ -63,12 +64,16 @@ void Solenoid::Set(bool on) {
bool Solenoid::Get() const {
if (StatusIsFatal()) return false;
int32_t status = 0;
bool value = HAL_GetSolenoid(m_solenoidHandle, &status);
wpi_setHALError(status);
return value;
}
void Solenoid::Toggle() { Set(!Get()); }
bool Solenoid::IsBlackListed() const {
int value = GetPCMSolenoidBlackList(m_moduleNumber) & (1 << m_channel);
return (value != 0);