001package com.ctre.phoenix.led; 002 003/** 004 * Faults the CANdle can have 005 */ 006public class CANdleFaults { 007 /** 008 * Device detects hardware failure 009 */ 010 public boolean HardwareFault; 011 /** 012 * API error detected. Make sure API and firmware versions are compatible. 013 */ 014 public boolean APIError; 015 /** 016 * Boot while receiving an enable frame 017 */ 018 public boolean BootDuringEnable; 019 /** 020 * VBat is under 5V 021 */ 022 public boolean VBatTooLow; 023 /** 024 * VBat is over 30V 025 */ 026 public boolean VBatTooHigh; 027 /** 028 * 5V Line is under 4 V 029 */ 030 public boolean V5TooLow; 031 /** 032 * 5V Line is over 6V 033 */ 034 public boolean V5TooHigh; 035 /** 036 * Exceeded output current of 6 amps 037 */ 038 public boolean SoftwareFuse; 039 /** 040 * Device is over temperature 041 */ 042 public boolean ThermalFault; 043 /** 044 * Output pin is shorted to something 045 */ 046 public boolean ShortCircuit; 047 /** 048 * @return true if any faults are tripped 049 */ 050 public boolean hasAnyFault() { 051 return HardwareFault | 052 APIError | 053 BootDuringEnable | 054 VBatTooLow | 055 VBatTooHigh | 056 V5TooLow | 057 V5TooHigh | 058 SoftwareFuse | 059 ThermalFault | 060 ShortCircuit; 061 } 062 /** 063 * @return Current fault list as a bit field 064 */ 065 public long toBitfield() { 066 long commonFaults = 0; 067 commonFaults |= ShortCircuit ? 1 : 0; commonFaults <<= 1; 068 commonFaults |= ThermalFault ? 1 : 0; commonFaults <<= 1; 069 commonFaults |= SoftwareFuse ? 1 : 0; commonFaults <<= 1; 070 commonFaults |= V5TooLow ? 1 : 0; commonFaults <<= 1; 071 commonFaults |= V5TooHigh ? 1 : 0; commonFaults <<= 1; 072 commonFaults |= VBatTooLow ? 1 : 0; commonFaults <<= 1; 073 commonFaults |= VBatTooHigh ? 1 : 0; commonFaults <<= 1; 074 commonFaults |= BootDuringEnable ? 1 : 0; commonFaults <<= 1; 075 commonFaults |= APIError ? 1 : 0; commonFaults <<= 1; 076 commonFaults |= HardwareFault ? 1 : 0; 077 078 return commonFaults; 079 } 080 public void update(long bits) { 081 long mask = 1; 082 HardwareFault = (bits & mask) != 0; mask <<= 1; 083 APIError = (bits & mask) != 0; mask <<= 1; 084 BootDuringEnable = (bits & mask) != 0; mask <<= 1; 085 VBatTooHigh = (bits & mask) != 0; mask <<= 1; 086 VBatTooLow = (bits & mask) != 0; mask <<= 1; 087 V5TooHigh = (bits & mask) != 0; mask <<= 1; 088 V5TooLow = (bits & mask) != 0; mask <<= 1; 089 SoftwareFuse = (bits & mask) != 0; mask <<= 1; 090 ThermalFault = (bits & mask) != 0; mask <<= 1; 091 ShortCircuit = (bits & mask) != 0; mask <<= 1; 092 } 093 /** 094 * Updates current fault list with specified bit field of faults 095 * 096 * @param bits bit field of faults to update with 097 */ 098 public CANdleFaults(int bits) { 099 update(bits); 100 } 101 public CANdleFaults() { 102 update(0); 103 } 104 105}