001// Copyright (c) FIRST and other WPILib contributors.
002// Open Source Software; you can modify and/or share it under the terms of
003// the WPILib BSD license file in the root directory of this project.
004
005package edu.wpi.first.hal;
006
007/** Faults for a REV PH. These faults are only active while the condition is active. */
008@SuppressWarnings("MemberName")
009public class REVPHFaults {
010  /** Fault on channel 0. */
011  public final boolean Channel0Fault;
012
013  /** Fault on channel 1. */
014  public final boolean Channel1Fault;
015
016  /** Fault on channel 2. */
017  public final boolean Channel2Fault;
018
019  /** Fault on channel 3. */
020  public final boolean Channel3Fault;
021
022  /** Fault on channel 4. */
023  public final boolean Channel4Fault;
024
025  /** Fault on channel 5. */
026  public final boolean Channel5Fault;
027
028  /** Fault on channel 6. */
029  public final boolean Channel6Fault;
030
031  /** Fault on channel 7. */
032  public final boolean Channel7Fault;
033
034  /** Fault on channel 8. */
035  public final boolean Channel8Fault;
036
037  /** Fault on channel 9. */
038  public final boolean Channel9Fault;
039
040  /** Fault on channel 10. */
041  public final boolean Channel10Fault;
042
043  /** Fault on channel 11. */
044  public final boolean Channel11Fault;
045
046  /** Fault on channel 12. */
047  public final boolean Channel12Fault;
048
049  /** Fault on channel 13. */
050  public final boolean Channel13Fault;
051
052  /** Fault on channel 14. */
053  public final boolean Channel14Fault;
054
055  /** Fault on channel 15. */
056  public final boolean Channel15Fault;
057
058  /** An overcurrent event occurred on the compressor output. */
059  public final boolean CompressorOverCurrent;
060
061  /** The compressor output has an open circuit. */
062  public final boolean CompressorOpen;
063
064  /** An overcurrent event occurred on a solenoid output. */
065  public final boolean SolenoidOverCurrent;
066
067  /** The input voltage is below the minimum voltage. */
068  public final boolean Brownout;
069
070  /** A warning was raised by the device's CAN controller. */
071  public final boolean CanWarning;
072
073  /** The hardware on the device has malfunctioned. */
074  public final boolean HardwareFault;
075
076  /**
077   * Gets whether there is a fault at the specified channel.
078   *
079   * @param channel Channel to check for faults.
080   * @return True if a a fault exists at the channel, otherwise false.
081   * @throws IndexOutOfBoundsException if the provided channel is outside of the range supported by
082   *     the hardware.
083   */
084  public final boolean getChannelFault(int channel) {
085    return switch (channel) {
086      case 0 -> Channel0Fault;
087      case 1 -> Channel1Fault;
088      case 2 -> Channel2Fault;
089      case 3 -> Channel3Fault;
090      case 4 -> Channel4Fault;
091      case 5 -> Channel5Fault;
092      case 6 -> Channel6Fault;
093      case 7 -> Channel7Fault;
094      case 8 -> Channel8Fault;
095      case 9 -> Channel9Fault;
096      case 10 -> Channel10Fault;
097      case 11 -> Channel11Fault;
098      case 12 -> Channel12Fault;
099      case 13 -> Channel13Fault;
100      case 14 -> Channel14Fault;
101      case 15 -> Channel15Fault;
102      default -> throw new IndexOutOfBoundsException("Pneumatics fault channel out of bounds!");
103    };
104  }
105
106  /**
107   * Called from HAL to construct.
108   *
109   * @param faults the fault bitfields
110   */
111  public REVPHFaults(int faults) {
112    Channel0Fault = (faults & (1 << 0)) != 0;
113    Channel1Fault = (faults & (1 << 1)) != 0;
114    Channel2Fault = (faults & (1 << 2)) != 0;
115    Channel3Fault = (faults & (1 << 3)) != 0;
116    Channel4Fault = (faults & (1 << 4)) != 0;
117    Channel5Fault = (faults & (1 << 5)) != 0;
118    Channel6Fault = (faults & (1 << 6)) != 0;
119    Channel7Fault = (faults & (1 << 7)) != 0;
120    Channel8Fault = (faults & (1 << 8)) != 0;
121    Channel9Fault = (faults & (1 << 9)) != 0;
122    Channel10Fault = (faults & (1 << 10)) != 0;
123    Channel11Fault = (faults & (1 << 11)) != 0;
124    Channel12Fault = (faults & (1 << 12)) != 0;
125    Channel13Fault = (faults & (1 << 13)) != 0;
126    Channel14Fault = (faults & (1 << 14)) != 0;
127    Channel15Fault = (faults & (1 << 15)) != 0;
128    CompressorOverCurrent = (faults & (1 << 16)) != 0;
129    CompressorOpen = (faults & (1 << 17)) != 0;
130    SolenoidOverCurrent = (faults & (1 << 18)) != 0;
131    Brownout = (faults & (1 << 19)) != 0;
132    CanWarning = (faults & (1 << 20)) != 0;
133    HardwareFault = (faults & (1 << 21)) != 0;
134  }
135}