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/** 008 * Faults for a PowerDistribution device. These faults are only active while the condition is 009 * active. 010 */ 011public class PowerDistributionFaults { 012 /** Breaker fault on channel 0. */ 013 public final boolean channel0BreakerFault; 014 015 /** Breaker fault on channel 1. */ 016 public final boolean channel1BreakerFault; 017 018 /** Breaker fault on channel 2. */ 019 public final boolean channel2BreakerFault; 020 021 /** Breaker fault on channel 3. */ 022 public final boolean channel3BreakerFault; 023 024 /** Breaker fault on channel 4. */ 025 public final boolean channel4BreakerFault; 026 027 /** Breaker fault on channel 5. */ 028 public final boolean channel5BreakerFault; 029 030 /** Breaker fault on channel 6. */ 031 public final boolean channel6BreakerFault; 032 033 /** Breaker fault on channel 7. */ 034 public final boolean channel7BreakerFault; 035 036 /** Breaker fault on channel 8. */ 037 public final boolean channel8BreakerFault; 038 039 /** Breaker fault on channel 9. */ 040 public final boolean channel9BreakerFault; 041 042 /** Breaker fault on channel 10. */ 043 public final boolean channel10BreakerFault; 044 045 /** Breaker fault on channel 11. */ 046 public final boolean channel11BreakerFault; 047 048 /** Breaker fault on channel 12. */ 049 public final boolean channel12BreakerFault; 050 051 /** Breaker fault on channel 13. */ 052 public final boolean channel13BreakerFault; 053 054 /** Breaker fault on channel 14. */ 055 public final boolean channel14BreakerFault; 056 057 /** Breaker fault on channel 15. */ 058 public final boolean channel15BreakerFault; 059 060 /** Breaker fault on channel 16. */ 061 public final boolean channel16BreakerFault; 062 063 /** Breaker fault on channel 17. */ 064 public final boolean channel17BreakerFault; 065 066 /** Breaker fault on channel 18. */ 067 public final boolean channel18BreakerFault; 068 069 /** Breaker fault on channel 19. */ 070 public final boolean channel19BreakerFault; 071 072 /** Breaker fault on channel 20. */ 073 public final boolean channel20BreakerFault; 074 075 /** Breaker fault on channel 21. */ 076 public final boolean channel21BreakerFault; 077 078 /** Breaker fault on channel 22. */ 079 public final boolean channel22BreakerFault; 080 081 /** Breaker fault on channel 23. */ 082 public final boolean channel23BreakerFault; 083 084 /** The input voltage is below the minimum voltage. */ 085 public final boolean brownout; 086 087 /** A warning was raised by the device's CAN controller. */ 088 public final boolean canWarning; 089 090 /** The hardware on the device has malfunctioned. */ 091 public final boolean hardwareFault; 092 093 /** 094 * Gets whether there is a breaker fault at the specified channel. 095 * 096 * @param channel Channel to check for faults. 097 * @return True if there is a breaker fault at the channel, otherwise false. 098 * @throws IndexOutOfBoundsException if the provided channel is outside of the range supported by 099 * the hardware. 100 */ 101 public final boolean getBreakerFault(int channel) { 102 return switch (channel) { 103 case 0 -> channel0BreakerFault; 104 case 1 -> channel1BreakerFault; 105 case 2 -> channel2BreakerFault; 106 case 3 -> channel3BreakerFault; 107 case 4 -> channel4BreakerFault; 108 case 5 -> channel5BreakerFault; 109 case 6 -> channel6BreakerFault; 110 case 7 -> channel7BreakerFault; 111 case 8 -> channel8BreakerFault; 112 case 9 -> channel9BreakerFault; 113 case 10 -> channel10BreakerFault; 114 case 11 -> channel11BreakerFault; 115 case 12 -> channel12BreakerFault; 116 case 13 -> channel13BreakerFault; 117 case 14 -> channel14BreakerFault; 118 case 15 -> channel15BreakerFault; 119 case 16 -> channel16BreakerFault; 120 case 17 -> channel17BreakerFault; 121 case 18 -> channel18BreakerFault; 122 case 19 -> channel19BreakerFault; 123 case 20 -> channel20BreakerFault; 124 case 21 -> channel21BreakerFault; 125 case 22 -> channel22BreakerFault; 126 case 23 -> channel23BreakerFault; 127 default -> 128 throw new IndexOutOfBoundsException("Power distribution fault channel out of bounds!"); 129 }; 130 } 131 132 /** 133 * Constructs from a bitfield. 134 * 135 * @param faults faults 136 */ 137 public PowerDistributionFaults(int faults) { 138 channel0BreakerFault = (faults & 0x1) != 0; 139 channel1BreakerFault = (faults & 0x2) != 0; 140 channel2BreakerFault = (faults & 0x4) != 0; 141 channel3BreakerFault = (faults & 0x8) != 0; 142 channel4BreakerFault = (faults & 0x10) != 0; 143 channel5BreakerFault = (faults & 0x20) != 0; 144 channel6BreakerFault = (faults & 0x40) != 0; 145 channel7BreakerFault = (faults & 0x80) != 0; 146 channel8BreakerFault = (faults & 0x100) != 0; 147 channel9BreakerFault = (faults & 0x200) != 0; 148 channel10BreakerFault = (faults & 0x400) != 0; 149 channel11BreakerFault = (faults & 0x800) != 0; 150 channel12BreakerFault = (faults & 0x1000) != 0; 151 channel13BreakerFault = (faults & 0x2000) != 0; 152 channel14BreakerFault = (faults & 0x4000) != 0; 153 channel15BreakerFault = (faults & 0x8000) != 0; 154 channel16BreakerFault = (faults & 0x10000) != 0; 155 channel17BreakerFault = (faults & 0x20000) != 0; 156 channel18BreakerFault = (faults & 0x40000) != 0; 157 channel19BreakerFault = (faults & 0x80000) != 0; 158 channel20BreakerFault = (faults & 0x100000) != 0; 159 channel21BreakerFault = (faults & 0x200000) != 0; 160 channel22BreakerFault = (faults & 0x400000) != 0; 161 channel23BreakerFault = (faults & 0x800000) != 0; 162 brownout = (faults & 0x1000000) != 0; 163 canWarning = (faults & 0x2000000) != 0; 164 hardwareFault = (faults & 0x4000000) != 0; 165 } 166}