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 org.wpilib.hardware.hal; 006 007/** Faults for a REV PH. These faults are only active while the condition is active. */ 008public class REVPHFaults { 009 /** Fault on channel 0. */ 010 public final boolean channel0Fault; 011 012 /** Fault on channel 1. */ 013 public final boolean channel1Fault; 014 015 /** Fault on channel 2. */ 016 public final boolean channel2Fault; 017 018 /** Fault on channel 3. */ 019 public final boolean channel3Fault; 020 021 /** Fault on channel 4. */ 022 public final boolean channel4Fault; 023 024 /** Fault on channel 5. */ 025 public final boolean channel5Fault; 026 027 /** Fault on channel 6. */ 028 public final boolean channel6Fault; 029 030 /** Fault on channel 7. */ 031 public final boolean channel7Fault; 032 033 /** Fault on channel 8. */ 034 public final boolean channel8Fault; 035 036 /** Fault on channel 9. */ 037 public final boolean channel9Fault; 038 039 /** Fault on channel 10. */ 040 public final boolean channel10Fault; 041 042 /** Fault on channel 11. */ 043 public final boolean channel11Fault; 044 045 /** Fault on channel 12. */ 046 public final boolean channel12Fault; 047 048 /** Fault on channel 13. */ 049 public final boolean channel13Fault; 050 051 /** Fault on channel 14. */ 052 public final boolean channel14Fault; 053 054 /** Fault on channel 15. */ 055 public final boolean channel15Fault; 056 057 /** An overcurrent event occurred on the compressor output. */ 058 public final boolean compressorOverCurrent; 059 060 /** The compressor output has an open circuit. */ 061 public final boolean compressorOpen; 062 063 /** An overcurrent event occurred on a solenoid output. */ 064 public final boolean solenoidOverCurrent; 065 066 /** The input voltage is below the minimum voltage. */ 067 public final boolean brownout; 068 069 /** A warning was raised by the device's CAN controller. */ 070 public final boolean canWarning; 071 072 /** The hardware on the device has malfunctioned. */ 073 public final boolean hardwareFault; 074 075 /** 076 * Gets whether there is a fault at the specified channel. 077 * 078 * @param channel Channel to check for faults. 079 * @return True if a a fault exists at the channel, otherwise false. 080 * @throws IndexOutOfBoundsException if the provided channel is outside of the range supported by 081 * the hardware. 082 */ 083 public final boolean getchannelFault(int channel) { 084 return switch (channel) { 085 case 0 -> channel0Fault; 086 case 1 -> channel1Fault; 087 case 2 -> channel2Fault; 088 case 3 -> channel3Fault; 089 case 4 -> channel4Fault; 090 case 5 -> channel5Fault; 091 case 6 -> channel6Fault; 092 case 7 -> channel7Fault; 093 case 8 -> channel8Fault; 094 case 9 -> channel9Fault; 095 case 10 -> channel10Fault; 096 case 11 -> channel11Fault; 097 case 12 -> channel12Fault; 098 case 13 -> channel13Fault; 099 case 14 -> channel14Fault; 100 case 15 -> channel15Fault; 101 default -> throw new IndexOutOfBoundsException("Pneumatics fault channel out of bounds!"); 102 }; 103 } 104 105 /** 106 * Called from HAL to construct. 107 * 108 * @param faults the fault bitfields 109 */ 110 public REVPHFaults(int faults) { 111 channel0Fault = (faults & (1 << 0)) != 0; 112 channel1Fault = (faults & (1 << 1)) != 0; 113 channel2Fault = (faults & (1 << 2)) != 0; 114 channel3Fault = (faults & (1 << 3)) != 0; 115 channel4Fault = (faults & (1 << 4)) != 0; 116 channel5Fault = (faults & (1 << 5)) != 0; 117 channel6Fault = (faults & (1 << 6)) != 0; 118 channel7Fault = (faults & (1 << 7)) != 0; 119 channel8Fault = (faults & (1 << 8)) != 0; 120 channel9Fault = (faults & (1 << 9)) != 0; 121 channel10Fault = (faults & (1 << 10)) != 0; 122 channel11Fault = (faults & (1 << 11)) != 0; 123 channel12Fault = (faults & (1 << 12)) != 0; 124 channel13Fault = (faults & (1 << 13)) != 0; 125 channel14Fault = (faults & (1 << 14)) != 0; 126 channel15Fault = (faults & (1 << 15)) != 0; 127 compressorOverCurrent = (faults & (1 << 16)) != 0; 128 compressorOpen = (faults & (1 << 17)) != 0; 129 solenoidOverCurrent = (faults & (1 << 18)) != 0; 130 brownout = (faults & (1 << 19)) != 0; 131 canWarning = (faults & (1 << 20)) != 0; 132 hardwareFault = (faults & (1 << 21)) != 0; 133 } 134}