diff --git a/hal/src/main/java/edu/wpi/first/hal/PowerDistributionFaults.java b/hal/src/main/java/edu/wpi/first/hal/PowerDistributionFaults.java index aa2cac5b6b..ffc27930f2 100644 --- a/hal/src/main/java/edu/wpi/first/hal/PowerDistributionFaults.java +++ b/hal/src/main/java/edu/wpi/first/hal/PowerDistributionFaults.java @@ -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. * diff --git a/hal/src/main/java/edu/wpi/first/hal/PowerDistributionStickyFaults.java b/hal/src/main/java/edu/wpi/first/hal/PowerDistributionStickyFaults.java index f60f8df910..060fbf5a53 100644 --- a/hal/src/main/java/edu/wpi/first/hal/PowerDistributionStickyFaults.java +++ b/hal/src/main/java/edu/wpi/first/hal/PowerDistributionStickyFaults.java @@ -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. * diff --git a/hal/src/main/java/edu/wpi/first/hal/REVPHFaults.java b/hal/src/main/java/edu/wpi/first/hal/REVPHFaults.java index 23f0882c84..931f8b78db 100644 --- a/hal/src/main/java/edu/wpi/first/hal/REVPHFaults.java +++ b/hal/src/main/java/edu/wpi/first/hal/REVPHFaults.java @@ -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. * diff --git a/wpilibc/src/main/native/cpp/PneumaticHub.cpp b/wpilibc/src/main/native/cpp/PneumaticHub.cpp index 9a0f468ec6..91014735a6 100644 --- a/wpilibc/src/main/native/cpp/PneumaticHub.cpp +++ b/wpilibc/src/main/native/cpp/PneumaticHub.cpp @@ -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); diff --git a/wpilibc/src/main/native/cpp/PowerDistribution.cpp b/wpilibc/src/main/native/cpp/PowerDistribution.cpp index ba4cb383c3..d6451780bb 100644 --- a/wpilibc/src/main/native/cpp/PowerDistribution.cpp +++ b/wpilibc/src/main/native/cpp/PowerDistribution.cpp @@ -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; diff --git a/wpilibc/src/main/native/include/frc/PneumaticHub.h b/wpilibc/src/main/native/include/frc/PneumaticHub.h index 415b042cae..790a9d0a86 100644 --- a/wpilibc/src/main/native/include/frc/PneumaticHub.h +++ b/wpilibc/src/main/native/include/frc/PneumaticHub.h @@ -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; }; /** diff --git a/wpilibc/src/main/native/include/frc/PowerDistribution.h b/wpilibc/src/main/native/include/frc/PowerDistribution.h index 763e6bfdc4..8f49f71b84 100644 --- a/wpilibc/src/main/native/include/frc/PowerDistribution.h +++ b/wpilibc/src/main/native/include/frc/PowerDistribution.h @@ -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;