/// <summary> /// Attempts to retrieve the Battery Fault Indicator. This method /// calls down to the Chassis Manager with SendReceive /// </summary> private BatteryFaultIndicatorPacket GetBatteryFaultIndicator(byte psuId) { // Initialize return packet BatteryFaultIndicatorPacket returnPacket = new BatteryFaultIndicatorPacket(); returnPacket.CompletionCode = CompletionCode.UnspecifiedError; try { BatteryFaultIndicatorResponse myResponse = new BatteryFaultIndicatorResponse(); myResponse = (BatteryFaultIndicatorResponse)this.SendReceive(this.PsuDeviceType, this.PsuId, new PsuRequest((byte)PmBusCommand.FAULT_INDICATOR, (byte)PmBusResponseLength.FAULT_INDICATOR), typeof(BatteryFaultIndicatorResponse)); if (myResponse.CompletionCode != 0) { returnPacket.CompletionCode = (CompletionCode)myResponse.CompletionCode; Tracer.WriteWarning("GetBatteryFaultIndicator Failure: Completion Code: {0}", returnPacket.CompletionCode); } else { returnPacket.CompletionCode = CompletionCode.Success; // Extract status bits from return word. Only top byte contains valid status byte status = myResponse.BatteryFaultIndicator[0]; returnPacket.BatteryFault = (byte)((status >> 7) & 0x1); returnPacket.UnderVoltage = (byte)((status >> 6) & 0x1); returnPacket.OverCurrentCharge = (byte)((status >> 5) & 0x1); returnPacket.OverTemp = (byte)((status >> 4) & 0x1); returnPacket.CellBalanceNotGood = (byte)((status >> 3) & 0x1); returnPacket.OverVoltage = (byte)((status >> 2) & 0x1); returnPacket.OverCurrentDischarge = (byte)((status >> 1) & 0x1); } } catch (System.Exception ex) { returnPacket.CompletionCode = CompletionCode.UnspecifiedError; Tracer.WriteError("GetBatteryFaultIndicator Exception: " + ex); } return returnPacket; }
/// <summary> /// Attempts to clear the Battery Fault Indicator. This method /// calls down to the Chassis Manager with SendReceive /// </summary> private CompletionCode ClearBatteryFaultIndicator(byte psuId) { CompletionCode returnPacket = new CompletionCode(); returnPacket = CompletionCode.UnspecifiedError; // Command payload to clear fault indicators byte[] cmdPayload = clearBatteryFaultPayload; try { BatteryFaultIndicatorResponse myResponse = new BatteryFaultIndicatorResponse(); myResponse = (BatteryFaultIndicatorResponse)this.SendReceive(this.PsuDeviceType, this.PsuId, new PsuWordPayloadRequest((byte)PmBusCommand.FAULT_INDICATOR, cmdPayload, (byte)0), typeof(BatteryFaultIndicatorResponse)); if (myResponse.CompletionCode != 0) { returnPacket = (CompletionCode)myResponse.CompletionCode; Tracer.WriteWarning("ClearBatteryFaultIndicator Failure: Completion Code: {0}", returnPacket); } else { returnPacket = CompletionCode.Success; } } catch (System.Exception ex) { returnPacket = CompletionCode.UnspecifiedError; Tracer.WriteError("ClearBatteryFaultIndicator Exception: " + ex); } return returnPacket; }