[wpilib] Add method to get breaker fault at a specific channel in PowerDistribution[Sticky]Faults (#5521)

Co-authored-by: Ryan Blue <ryanzblue@gmail.com>
This commit is contained in:
Asa Anderson
2023-12-23 12:14:13 -08:00
committed by GitHub
parent ef1cb3f41e
commit 1dba26c937
7 changed files with 353 additions and 0 deletions

View File

@@ -60,6 +60,69 @@ public class PowerDistributionFaults {
public final boolean HardwareFault;
/**
* Gets whether there is a breaker fault at the specified channel.
*
* @param channel Channel to check for faults.
* @return True if there is a breaker fault at the channel, otherwise false.
* @throws IndexOutOfBoundsException if the provided channel is outside of the range supported by
* the hardware.
*/
public final boolean getBreakerFault(int channel) {
switch (channel) {
case 0:
return Channel0BreakerFault;
case 1:
return Channel1BreakerFault;
case 2:
return Channel2BreakerFault;
case 3:
return Channel3BreakerFault;
case 4:
return Channel4BreakerFault;
case 5:
return Channel5BreakerFault;
case 6:
return Channel6BreakerFault;
case 7:
return Channel7BreakerFault;
case 8:
return Channel8BreakerFault;
case 9:
return Channel9BreakerFault;
case 10:
return Channel10BreakerFault;
case 11:
return Channel11BreakerFault;
case 12:
return Channel12BreakerFault;
case 13:
return Channel13BreakerFault;
case 14:
return Channel14BreakerFault;
case 15:
return Channel15BreakerFault;
case 16:
return Channel16BreakerFault;
case 17:
return Channel17BreakerFault;
case 18:
return Channel18BreakerFault;
case 19:
return Channel19BreakerFault;
case 20:
return Channel20BreakerFault;
case 21:
return Channel21BreakerFault;
case 22:
return Channel22BreakerFault;
case 23:
return Channel23BreakerFault;
default:
throw new IndexOutOfBoundsException("Power distribution fault channel out of bounds!");
}
}
/**
* Constructs from a bitfield.
*

View File

@@ -62,6 +62,69 @@ public class PowerDistributionStickyFaults {
public final boolean HasReset;
/**
* Gets whether there is a sticky breaker fault at the specified channel.
*
* @param channel Channel to check for sticky faults.
* @return True if there is a sticky breaker fault at the channel, otherwise false.
* @throws IndexOutOfBoundsException if the provided channel is outside of the range supported by
* the hardware.
*/
public final boolean getBreakerFault(int channel) {
switch (channel) {
case 0:
return Channel0BreakerFault;
case 1:
return Channel1BreakerFault;
case 2:
return Channel2BreakerFault;
case 3:
return Channel3BreakerFault;
case 4:
return Channel4BreakerFault;
case 5:
return Channel5BreakerFault;
case 6:
return Channel6BreakerFault;
case 7:
return Channel7BreakerFault;
case 8:
return Channel8BreakerFault;
case 9:
return Channel9BreakerFault;
case 10:
return Channel10BreakerFault;
case 11:
return Channel11BreakerFault;
case 12:
return Channel12BreakerFault;
case 13:
return Channel13BreakerFault;
case 14:
return Channel14BreakerFault;
case 15:
return Channel15BreakerFault;
case 16:
return Channel16BreakerFault;
case 17:
return Channel17BreakerFault;
case 18:
return Channel18BreakerFault;
case 19:
return Channel19BreakerFault;
case 20:
return Channel20BreakerFault;
case 21:
return Channel21BreakerFault;
case 22:
return Channel22BreakerFault;
case 23:
return Channel23BreakerFault;
default:
throw new IndexOutOfBoundsException("Power distribution fault channel out of bounds!");
}
}
/**
* Constructs from a bitfield.
*

View File

@@ -50,6 +50,53 @@ public class REVPHFaults {
public final boolean HardwareFault;
/**
* Gets whether there is a fault at the specified channel.
*
* @param channel Channel to check for faults.
* @return True if a a fault exists at the channel, otherwise false.
* @throws IndexOutOfBoundsException if the provided channel is outside of the range supported by
* the hardware.
*/
public final boolean getChannelFault(int channel) {
switch (channel) {
case 0:
return Channel0Fault;
case 1:
return Channel1Fault;
case 2:
return Channel2Fault;
case 3:
return Channel3Fault;
case 4:
return Channel4Fault;
case 5:
return Channel5Fault;
case 6:
return Channel6Fault;
case 7:
return Channel7Fault;
case 8:
return Channel8Fault;
case 9:
return Channel9Fault;
case 10:
return Channel10Fault;
case 11:
return Channel11Fault;
case 12:
return Channel12Fault;
case 13:
return Channel13Fault;
case 14:
return Channel14Fault;
case 15:
return Channel15Fault;
default:
throw new IndexOutOfBoundsException("Pneumatics fault channel out of bounds!");
}
}
/**
* Called from HAL to construct.
*

View File

@@ -339,6 +339,46 @@ PneumaticHub::StickyFaults PneumaticHub::GetStickyFaults() const {
return stickyFaults;
}
bool PneumaticHub::Faults::GetChannelFault(int channel) const {
switch (channel) {
case 0:
return Channel0Fault != 0;
case 1:
return Channel1Fault != 0;
case 2:
return Channel2Fault != 0;
case 3:
return Channel3Fault != 0;
case 4:
return Channel4Fault != 0;
case 5:
return Channel5Fault != 0;
case 6:
return Channel6Fault != 0;
case 7:
return Channel7Fault != 0;
case 8:
return Channel8Fault != 0;
case 9:
return Channel9Fault != 0;
case 10:
return Channel10Fault != 0;
case 11:
return Channel11Fault != 0;
case 12:
return Channel12Fault != 0;
case 13:
return Channel13Fault != 0;
case 14:
return Channel14Fault != 0;
case 15:
return Channel15Fault != 0;
default:
throw FRC_MakeError(err::ChannelIndexOutOfRange,
"Pneumatics fault channel out of bounds!");
}
}
void PneumaticHub::ClearStickyFaults() {
int32_t status = 0;
HAL_ClearREVPHStickyFaults(m_handle, &status);

View File

@@ -172,6 +172,118 @@ PowerDistribution::Faults PowerDistribution::GetFaults() const {
return faults;
}
bool PowerDistribution::Faults::GetBreakerFault(int channel) const {
switch (channel) {
case 0:
return Channel0BreakerFault != 0;
case 1:
return Channel1BreakerFault != 0;
case 2:
return Channel2BreakerFault != 0;
case 3:
return Channel3BreakerFault != 0;
case 4:
return Channel4BreakerFault != 0;
case 5:
return Channel5BreakerFault != 0;
case 6:
return Channel6BreakerFault != 0;
case 7:
return Channel7BreakerFault != 0;
case 8:
return Channel8BreakerFault != 0;
case 9:
return Channel9BreakerFault != 0;
case 10:
return Channel10BreakerFault != 0;
case 11:
return Channel11BreakerFault != 0;
case 12:
return Channel12BreakerFault != 0;
case 13:
return Channel13BreakerFault != 0;
case 14:
return Channel14BreakerFault != 0;
case 15:
return Channel15BreakerFault != 0;
case 16:
return Channel16BreakerFault != 0;
case 17:
return Channel17BreakerFault != 0;
case 18:
return Channel18BreakerFault != 0;
case 19:
return Channel19BreakerFault != 0;
case 20:
return Channel20BreakerFault != 0;
case 21:
return Channel21BreakerFault != 0;
case 22:
return Channel22BreakerFault != 0;
case 23:
return Channel23BreakerFault != 0;
default:
throw FRC_MakeError(err::ChannelIndexOutOfRange,
"Power distribution fault channel out of bounds!");
}
}
bool PowerDistribution::StickyFaults::GetBreakerFault(int channel) const {
switch (channel) {
case 0:
return Channel0BreakerFault != 0;
case 1:
return Channel1BreakerFault != 0;
case 2:
return Channel2BreakerFault != 0;
case 3:
return Channel3BreakerFault != 0;
case 4:
return Channel4BreakerFault != 0;
case 5:
return Channel5BreakerFault != 0;
case 6:
return Channel6BreakerFault != 0;
case 7:
return Channel7BreakerFault != 0;
case 8:
return Channel8BreakerFault != 0;
case 9:
return Channel9BreakerFault != 0;
case 10:
return Channel10BreakerFault != 0;
case 11:
return Channel11BreakerFault != 0;
case 12:
return Channel12BreakerFault != 0;
case 13:
return Channel13BreakerFault != 0;
case 14:
return Channel14BreakerFault != 0;
case 15:
return Channel15BreakerFault != 0;
case 16:
return Channel16BreakerFault != 0;
case 17:
return Channel17BreakerFault != 0;
case 18:
return Channel18BreakerFault != 0;
case 19:
return Channel19BreakerFault != 0;
case 20:
return Channel20BreakerFault != 0;
case 21:
return Channel21BreakerFault != 0;
case 22:
return Channel22BreakerFault != 0;
case 23:
return Channel23BreakerFault != 0;
default:
throw FRC_MakeError(err::ChannelIndexOutOfRange,
"Power distribution fault channel out of bounds!");
}
}
PowerDistribution::StickyFaults PowerDistribution::GetStickyFaults() const {
int32_t status = 0;
HAL_PowerDistributionStickyFaults halStickyFaults;

View File

@@ -158,6 +158,15 @@ class PneumaticHub : public PneumaticsBase {
uint32_t Brownout : 1;
uint32_t CanWarning : 1;
uint32_t HardwareFault : 1;
/**
* Gets whether there is a fault at the specified channel.
* @param channel Channel to check for faults.
* @return True if a a fault exists at the channel, otherwise false.
* @throws A ChannelIndexOutOfRange error if the provided channel is outside
* of the range supported by the hardware.
*/
bool GetChannelFault(int channel) const;
};
/**

View File

@@ -159,6 +159,15 @@ class PowerDistribution : public wpi::Sendable,
uint32_t Brownout : 1;
uint32_t CanWarning : 1;
uint32_t HardwareFault : 1;
/**
* Gets whether there is a breaker fault at a specified channel.
* @param channel Channel to check for faults.
* @return If there is a breaker fault.
* @throws A ChannelIndexOutOfRange error if the given int is outside of the
* range supported by the hardware.
*/
bool GetBreakerFault(int channel) const;
};
Faults GetFaults() const;
@@ -192,6 +201,16 @@ class PowerDistribution : public wpi::Sendable,
uint32_t CanWarning : 1;
uint32_t CanBusOff : 1;
uint32_t HasReset : 1;
/**
* Gets whether there is a sticky breaker fault at the specified channel.
* @param channel Index to check for sticky faults.
* @return True if there is a sticky breaker fault at the channel, otherwise
* false.
* @throws A ChannelIndexOutOfRange error if the provided channel is outside
* of the range supported by the hardware.
*/
bool GetBreakerFault(int channel) const;
};
StickyFaults GetStickyFaults() const;